PDA

Просмотр полной версии : CODESYS V3.5. Вопросы и ответы



Страницы : 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 [24] 25 26 27 28 29

Евгений Кислов
12.05.2023, 12:13
Еще вопрос: есть ли функция, возвращающая текущее количество активных тревог?

Посмотрите пример:
https://forge.codesys.com/svn/prj,codesys-example,alarm-manager,code/AlarmManager.project

В PLC_PRG см. вызовы AlarmManager.g_AlarmHandler.GetActiveAlarms и получение интерфейса клиентов перед ними.

kondor3000
12.05.2023, 13:16
Большое спасибо, а как потом c WORD в REAL преобразовать?

https://owen.ru/forum/showthread.php?t=37645&page=8#78

SemAndr
13.05.2023, 08:50
Добрый день. Подскажите, пожалуйста, как можно изменить число подключаемых клиентов по ModBus TCP при использовании библиотеки OwenCommunication?

Евгений Кислов
13.05.2023, 12:44
Добрый день. Подскажите, пожалуйста, как можно изменить число подключаемых клиентов по ModBus TCP при использовании библиотеки OwenCommunication?

Добрый день.
С помощью глобального параметра библиотеки, который называется g_c_usiMaxCountClients (вкладка Settings в дереве библиотеки в Менеджере библиотек).

fatlortroll
15.05.2023, 17:23
Добрый день.
Подскажите пожалуйста, в CoDeSys 3.5 SP14 P3+ наблюдались ли проблемы с функцией TEST_AND_SET ?
В проекте активно используется синхронизация многопоточного доступа, и возникают ситуации, похожие на некорректное срабатывание TEST_AND_SET .

fatlortroll
15.05.2023, 17:26
Использую эту функцию таким образом:


SleepTime := TIME();
REPEAT
IsWLocked := SEL(IsWLocked = TRUE, TEST_AND_SET(WDataDefender) = 0, TRUE);
IsRLocked := SEL(IsRLocked = TRUE, TEST_AND_SET(RDataDefender) = 0, TRUE);
UNTIL
((TIME() - SleepTime) > DataLockWaitTime) OR_ELSE
((IsWLocked AND IsRLocked) = TRUE)
END_REPEAT
IF (IsWLocked AND IsRLocked) = TRUE THEN
// Тут работа с "защищёнными" данными
END_IF
IF IsRLocked = TRUE THEN RDataDefender := 0; END_IF
IF IsWLocked = TRUE THEN WDataDefender := 0; END_IF


Или это у меня ошибка?

Евгений Кислов
15.05.2023, 17:32
Добрый день.


В проекте активно используется синхронизация многопоточного доступа

Сочувствую.


и возникают ситуации, похожие на некорректное срабатывание TEST_AND_SET .

Какое именно поведение TEST_AND_SET вы считает корректным, а какое - нет?

fatlortroll
15.05.2023, 17:38
> Сочувствую.

Так всё плохо с синхронизацией многопоточности в CoDeSys? :-)

> Какое именно поведение TEST_AND_SET вы считает корректным, а какое - нет?

Корректное -- соответствующее документации, некорректное -- не соответствующее.
Тут беда ещё в том, что отладке всё это многопоточное поддаётся чуть лучше, чем никак, потому твёрдой уверенности в том, что TEST_AND_SET чудит, у меня нет. Но "защищённые" данные портятся так, если бы TEST_AND_SET не выполняла атомарность.

Евгений Кислов
15.05.2023, 17:45
Так всё плохо с синхронизацией многопоточности в CoDeSys?

Всё вполне нормально, если она используется там, где действительно нужна, а не в фундаменте системы автоматизации очередной абстрактной фабрики.


Но "защищённые" данные портятся так, если бы TEST_AND_SET не выполняла атомарность.

В принципе, даже "защищенные" данные можно легко испортить в любом фрагменте кода с массивами, указателями и т.д.


Тут беда ещё в том, что отладке всё это многопоточное поддаётся чуть лучше, чем никак

Отладка кода вдвое сложнее, чем его написание. Так что если вы пишете код настолько умно, насколько можете, то вы по определению недостаточно сообразительны, чтобы его отлаживать. (с) Брайан Керниган

Еще рекомендую обратить внимание на три слова на обложке (https://ir.ozone.ru/s3/multimedia-w/wc700/6117285332.jpg) одной известной книги.

fatlortroll
15.05.2023, 17:51
> там, где действительно нужна

Обмен данными с устройствами Modbus.

> даже "защищенные" данные можно легко испортить в любом фрагменте кода с массивами

Есть и на это подозрение, я ошибусь с бОльшей вероятностью, чем разработчики компилятора.

Дмитрий Хороменков
16.05.2023, 13:48
678476784867849 Добрый день. Пожалуйста помогите. Дайте идею. Смысл такой выбираю цвет, выбираю на другой панели светильник при его активации заливается новый цвет, а старый сбрасывается. Светильников 10шт. Цветов 16, но может быть и больше. Начал писать через IF. Все получается , но представьте сколько потрачу времени. Дайте совет. Пожалуйста.

kondor3000
16.05.2023, 13:56
678476784867849 Добрый день. Пожалуйста помогите. Дайте идею. Смысл такой выбираю цвет, выбираю на другой панели светильник при его активации заливается новый цвет, а старый сбрасывается. Светильников 10шт. Цветов 16, но может быть и больше. Начал писать через IF. Все получается , но представьте сколько потрачу времени. Дайте совет. Пожалуйста.

Пишите блок для одного светильника ( общий) в виде фунц. блока (ФБ). Потом вызываете этот блок 10 или больше раз.
Например как таймер TON, можно вызвать хоть 100 раз, TON1, TON2, TON3 и т. д.

Дмитрий Хороменков
16.05.2023, 14:28
С блоком я понимаю, но у меня еще есть 16 цветов и на каждый цвет я сейчас использую SR. На данный момент я вижу, чтобы создать блок надо отработать 16 SRок. Здесь наверно уже никак не спастись, придется все 16 расписывать?

kondor3000
16.05.2023, 14:35
С блоком я понимаю, но у меня еще есть 16 цветов и на каждый цвет я сейчас использую SR. На данный момент я вижу, чтобы создать блок надо отработать 16 SRок. Здесь наверно уже никак не спастись, придется все 16 расписывать?

Ну 16 это не 160, и почему 16 SR, вы же про IF писали ? SR тут вообще не нужны.

fergus23
16.05.2023, 14:36
Здравствуйте, подскажите, возможно ли сделать кнопку "Задать время с ПК", которая устанавливала бы текущую время и дату с компьютера в ПЛК ? Если возможно, то как ?

Дмитрий Хороменков
16.05.2023, 15:02
Ну 16 это не 160, и почему 16 SR, вы же про IF писали ? SR тут вообще не нужны.

При выборе цвета SR его цепляет и держит, кнопка записи отпускается. А сброс происходит при нажатии другой кнопки и там тоже самое. Вот теперь подскажите пожалуйста как правильно написать массив в RESET . Пишу RESET:=MassivNameColor[2].bUstavColor, а нужно типа RESET:=MassivNameColor[2..16].bUstavColor, а единица работает. Дает ошибку могу писать только Резеты через запятую все 15штук. Но чувствую, что можно правильно написать, только я не знаю.

kondor3000
16.05.2023, 15:23
При выборе цвета SR его цепляет и держит, кнопка записи отпускается. А сброс происходит при нажатии другой кнопки и там тоже самое. Вот теперь подскажите пожалуйста как правильно написать массив в RESET . Пишу RESET:=MassivNameColor[2].bUstavColor, а нужно типа RESET:=MassivNameColor[2..16].bUstavColor, а единица работает. Дает ошибку могу писать только Резеты через запятую все 15штук. Но чувствую, что можно правильно написать, только я не знаю.

Напишите RESET:=MassivNameColor[x].bUstavColor, а x меняйте от 2 до 16.
Только опять не понятно почему от 2, а не от 1 ?

Дмитрий Хороменков
16.05.2023, 15:57
Смысл такой есть массив состоящий из 16 кнопок, сразу несколько я нажать не могу по условию, то есть работает только одна , если я меняю кнопку(а это кнопка входит в оставшиеся 15) то там первая отключается и работать начинает другая. И так далее. Каждая кнопка это структура у которой есть название и цвет. Которые уже привязываются к соответствующей лампочке. Менять я не могу , мне нужно, чтобы они были все сразу. Так как я могу нажать любую из пятнадцати оставшихся и соответственно РЕЗЕТ должен отключить не выбирая. Допустим я поставлю х, как х будет присваиваться нужное мне значения. Что то я сам себя уже запутал. Кстати необязательно писать на ИФах я просто так начал, может есть какие еще версии. Я учусь и эксперементирую Простите.

kondor3000
16.05.2023, 16:47
Смысл такой есть массив состоящий из 16 кнопок, сразу несколько я нажать не могу по условию, то есть работает только одна , если я меняю кнопку(а это кнопка входит в оставшиеся 15) то там первая отключается и работать начинает другая. И так далее. Каждая кнопка это структура у которой есть название и цвет. Которые уже привязываются к соответствующей лампочке. Менять я не могу , мне нужно, чтобы они были все сразу. Так как я могу нажать любую из пятнадцати оставшихся и соответственно РЕЗЕТ должен отключить не выбирая. Допустим я поставлю х, как х будет присваиваться нужное мне значения. Что то я сам себя уже запутал. Кстати необязательно писать на ИФах я просто так начал, может есть какие еще версии. Я учусь и эксперементирую Простите.

Вы сами себя в угол загнали с кнопками и цветами, всё делается 2 масками по 16 бит.
А массивы надо применять в других программах, где они помогают решать проблемы с большим кол-вом переменных или большим объёмом читаемых регистров.

Cs-Cs
16.05.2023, 20:01
Дмитрий Хороменков Шо-то по идее работы это всё напоминает световые пульты (для сценического света). Вот как такой, который у меня есть (https://cs-cs.net/avolites-tiger-touch-ii-kratkiy-obzor-kk1024-migration).
Там делается такое управление: на экране (или физическими кнопками) выбираются приборы (аналог - светильники), а потом в другой части пульта для выбранных приборов меняются их атрибуты (цвет, яркость, положение луча и так далее).
В ПЛК я бы накрутил по аналогии: массив кнопок с лампами, чтобы их выбирать (свойство кнопки - Toggle, чтобы одним нажатием кнопка нажималась, означая выбранную лампу, а другим отжималась, означая не выбранную лампу), и массив цветов. Натыкали кнопками нужные лампы, нажали на цвет. При выборе цвета все кнопки отжимаются.
Был бы массив переменных кнопок (BOOL) и его обработка при выборе цвета в цикле FOR (если кнопка нажата и равна TRUE - применяем цвет).

WhyNot
19.05.2023, 08:47
привет всем)) Немного тупой вопрос. Не совсем понимаю как исполняются FB в среде. Написано асинхронно, условно говоря параллельно основной программе? и после завершения FB и основной программы уже записываются выхода?

Евгений Кислов
19.05.2023, 08:54
привет всем)) Немного тупой вопрос. Не совсем понимаю как исполняются FB в среде. Написано асинхронно, условно говоря параллельно основной программе? и после завершения FB и основной программы уже записываются выхода?

Добрый день.

ФБ могут быть как синхронными, так и асинхронными.
Синхронные ФБ полностью выполняют свою операцию в том же цикле задачи, в котором они вызываются. Пример - REAL_TO_WORD2 из библиотеки OwenCommunication.
Асинхронные ФБ выполняют свою операцию в течение нескольких циклов задачи (это позволяет избежать "задержек цикла"). Пример - любый коммуникационный блок из OwenComminication (например, MB_SerialRequest: от фронта на входе xExecute до фронта на выходе xDone пройдет несколько циклов задачи)

Запись "выходов" (если речь о %Q в конфигурации контроллера) происходит в конце каждого цикла задачи конфигурации.

Belletein
22.05.2023, 08:26
Добрый день. Можете подсказать, почему система Codesys v3.5 SP16 patch 3 не видит библиотеку Oscat Basic, хотя она установлена в системе?679256792667927

Евгений Кислов
22.05.2023, 08:28
Добрый день. Можете подсказать, почему система Codesys v3.5 SP16 patch 3 не видит библиотеку Oscat Basic, хотя она установлена в системе?679256792667927

Добрый день.
В этой библиотеке нет ФБ с названием OSCAT.
И пространство имен - OSCAT_BASIC, а не BASIC.
Т.е. нужно примерно так:

FB_BllOperTime: OSCAT_BASIC.ONTIME;

yurya
23.05.2023, 08:47
Добрый день.
Проект на CODESYS 3.5.17.3. Девайс - Control Win V3.
При запуске проекта на ПК запускается процесс Codesys” ControlStatic TV, снять который можно только через диспетчер задач.
Что нужно сделать, чтобы этот процесс не запускался?

Евгений Кислов
23.05.2023, 08:48
Добрый день.
Проект на CODESYS 3.5.17.3. Девайс - Control Win V3.
При запуске проекта на ПК запускается процесс Codesys” ControlStatic TV, снять который можно только через диспетчер задач.
Что нужно сделать, чтобы этот процесс не запускался?

Добрый день.
Если я правильно понял, о чем речь - то это процесс таргет-визуализации.
Если в проекте нет таргет-визуализации - то он не будет запускаться.

yurya
23.05.2023, 09:26
Добрый день.
Если я правильно понял, о чем речь - то это процесс таргет-визуализации.
Если в проекте нет таргет-визуализации - то он не будет запускаться.
Эффект появился после установки на ПК CODESYS 3.5.17.3.
При запуске старых проектов на 3.5.11.54 этот процесс тоже запускается, раньше не было.

ВалераМ
23.05.2023, 11:37
Всем доброго дня! Подскажите, как правильно организовать связь. Схема такая: ПЛК 210 берет с ПЛК110 по Ethernet порт 502 данные, и с модулей по RS485 и всё отдает в скаду. Но почему то порт 502 на ПЛК 110 для скады закрывается в это время. Разве нельзя 2мя TCP соединениями обращаться к одному слейву? или надо 2 TCP slave с разными портами делать на ПЛК110?

Евгений Кислов
23.05.2023, 11:46
Всем доброго дня! Подскажите, как правильно организовать связь. Схема такая: ПЛК 210 берет с ПЛК110 по Ethernet порт 502 данные, и с модулей по RS485 и всё отдает в скаду. Но почему то порт 502 на ПЛК 110 для скады закрывается в это время. Разве нельзя 2мя TCP соединениями обращаться к одному слейву? или надо 2 TCP slave с разными портами делать на ПЛК110?

Добрый день.
Да, в ПЛК110 на каждый TCP-порт поддерживается только одно соединение.

Дмитрий Хороменков
23.05.2023, 19:02
Добрый день. Подскажите пожалуйста, как решить следующую задачу. Во время работы программы появляются переменные типа DWORD. Нужно чтобы она присваивалась к другой переменной, а к той уже прибавлялось установленное значение. Проблема в том , что присваиваться то присваивается, и прибавляет, но прибавляет только один раз. Цикла не происходит. То есть она опять слетает на появляющуюся переменную.

Дмитрий Хороменков
23.05.2023, 19:13
67956 osnColor[7].dColor это новая переменная которая получается в процессе работы ниже. osnPanel[1].sLamp[1].dwColor2:=osnPanel[1].sLamp[1].dwColor2-osnPanel[1].sLamp[1].dwHz; это тот как нормально работает и прибавляет и отнимает. osnPanel[1].sLamp[1].dwColor2 -это изначально имела постоянное значение, а osnColor[7].dColor а эта теперь меняет значение и получается в процессе программы.

ShivA
24.05.2023, 09:42
Добрый день. Вот такое сообщение неожиданно вылезло при попытке установить соединение с СПК107 в проекте: "Для устройства задано обязательное Управление пользователями. Это означает, что для подключения к устройству, должно быть включено управление пользователями. В данный момент управление пользователями не активировано на устройстве. Активировать его сейчас?..... итп итд бла бла бла... Кто знает что произошло? где отключить эту фитчу? Спасибо заранее.67958

Евгений Кислов
24.05.2023, 10:56
Добрый день. Вот такое сообщение неожиданно вылезло при попытке установить соединение с СПК107 в проекте: "Для устройства задано обязательное Управление пользователями. Это означает, что для подключения к устройству, должно быть включено управление пользователями. В данный момент управление пользователями не активировано на устройстве. Активировать его сейчас?..... итп итд бла бла бла... Кто знает что произошло? где отключить эту фитчу? Спасибо заранее.67958

Добрый день.
Скорее всего - у вас повредился конфигурационный файл в памяти контроллера.
Самый простой способ решить проблему - перепрошить контроллер на ту же версию прошивки, что в нем сейчас, со сбросом настроек.

ShivA
24.05.2023, 11:23
Добрый день.
Скорее всего - у вас повредился конфигурационный файл в памяти контроллера.
Самый простой способ решить проблему - перепрошить контроллер на ту же версию прошивки, что в нем сейчас, со сбросом настроек.

повредился сразу в двух контроллерах, один из которых был в холодном резерве?
ответил на сообщение codesys утвердительно... указав в качестве пользователя root и пароль на СПК.... устройство подключилось.... и каждый раз теперь при подключении появляется диалоговое окно с полем аутентификации.... так же, если в контроллере открыть визуализацию, то сперва запрашивает имя и пароль... какой-то бред... в браузере визуализация не открывается ни под каким предлогом.... думал SSL не нравится, подгрузил новый, ноль эффекта...

Евгений Кислов
24.05.2023, 11:44
повредился сразу в двух контроллерах, один из которых был в холодном резерве?

Если на них одновременно пропало питание - то в теории такое возможно.
Рекомендацию я озвучил.

ShivA
24.05.2023, 18:56
Если на них одновременно пропало питание - то в теории такое возможно.
Рекомендацию я озвучил.

Да.... вероятность такого события оказалась не нулевой.... Ваши рекомендации решили проблему, спасибо. Теперь "ломаю голову" как избежать этой проблемы в будущем...

Chaser33
26.05.2023, 14:06
Доброго времени суток, подскажите, есть ли возможность вести протоколирование состояния входов ? В OwenArchiver нет возможности (либо не нашел) вести архивирование переменных типа Bool.

Евгений Кислов
26.05.2023, 14:09
Доброго времени суток, подскажите, есть ли возможность вести протоколирование состояния входов ? В OwenArchiver нет возможности (либо не нашел) вести архивирование переменных типа Bool.

Добрый день.
OwenArchiver действительно не поддерживает BOOL, но вы можете использовать каналы типа BYTE и преобразовывать ваши булевские переменные с помощью оператора BOOL_TO_BYTE.

sssssaaaaabbbbb
26.05.2023, 14:27
Здравствуйте, возможно ли название проекта(файла) записывать в строку(нужно для того. чтоб зотображать какой проект залит в устройство)?

Евгений Кислов
26.05.2023, 14:28
Здравствуйте, возможно ли название проекта(файла) записывать в строку(нужно для того. чтоб зотображать какой проект залит в устройство)?

Добрый день.
Да, см. п. 4.8:
https://ftp.owen.ru/CoDeSys3/11_Documentation/03_3.5.11.5/CDSv3.5_Targets_v3.0.pdf

Chaser33
26.05.2023, 14:42
Извините за возможно глупый вопрос, но как посмотреть архивированные данные, которые были сохранены в Директорию Codesys ?

alex6725
29.05.2023, 05:09
Здравствуйте, хотелось бы узнать почему некорректно выводится сообщение об ошибке. Формирование сообщения происходит с помощью функции OSU.UNICODE_TO_CP1251

Евгений Кислов
29.05.2023, 06:14
Здравствуйте, хотелось бы узнать почему некорректно выводится сообщение об ошибке. Формирование сообщения происходит с помощью функции OSU.UNICODE_TO_CP1251

Добрый день.
Если в визуализации нужно отображать текст на кириллице (точнее, текст, символов которого нет ASCII) - то нужно использовать именно тип WSTRING, а не STRING.

Евгений Кислов
29.05.2023, 06:15
Извините за возможно глупый вопрос, но как посмотреть архивированные данные, которые были сохранены в Директорию Codesys ?

Какой контроллер вы используете и с какой версией прошивки?

Chaser33
29.05.2023, 08:29
Контролер: OWEN PLC210-02.
Прошивка: plc210 2.4.0601.0905

Евгений Кислов
29.05.2023, 08:35
Контролер: OWEN PLC210-02.
Прошивка: plc210 2.4.0601.0905

Тогда вы можете подключиться к ПЛК с помощью утилиты WinSCP и посмотреть файлы архива в директории /home/root/CODESYS_WRK/PlcLogic/<имя_архива>

Юра54
01.06.2023, 08:46
Здравствуйте!
68092
Регулярно появляется такая ошибка при опросе по Modbus. Бывает на rs485, бывает на rs232.
Чаще (но не всегда) появляется при опросе устройства, которое в данный момент не подключено.
СПК 110[М01], Codesys 3.5 SP17 patch3, прошивка 2.4.0923.1000, таргет-файл 3.5.17.31
Подскажите, где искать засаду?

Евгений Кислов
01.06.2023, 08:54
Добрый день.


Здравствуйте!
68092
Регулярно появляется такая ошибка при опросе по Modbus. Бывает на rs485, бывает на rs232.
Чаще (но не всегда) появляется при опросе устройства, которое в данный момент не подключено.
Подскажите, где искать засаду?

В вашем коде, в частности - в работе с указателями и адресной арифметике.
См. ссылку на статью про отладку в подписи.

Евгений Кислов
01.06.2023, 09:42
Евгений, спасибо!
Вопрос №2 - где в эпоху санкций можно скачать Плагин MemoryTools?

Какая версия плагина вам нужна?

Юра54
01.06.2023, 09:45
Какая версия плагина вам нужна?

Для Codesys 3.5 SP17 patch3

Евгений Кислов
01.06.2023, 09:47
Для Codesys 3.5 SP17 patch3

По-моему, в этой версии он в дистрибутив входит и устанавливать отдельно не нужно.

Юра54
01.06.2023, 09:49
Точно!:eek:

Ахлут
01.06.2023, 09:49
Добрый день!
При запуске эмулятора СПК 107 через CODESYS sp17 patch 3 происходит запрос пользователя
68093
Стандартные пользовательские пароли не подошли.
Что делать?

Евгений Кислов
01.06.2023, 09:58
Добрый день!
При запуске эмулятора СПК 107 через CODESYS sp17 patch 3 происходит запрос пользователя
68093
Стандартные пользовательские пароли не подошли.
Что делать?

Добрый день.
https://owen.ru/forum/showthread.php?t=28167&p=401060&viewfull=1#post401060

Ахлут
01.06.2023, 13:41
Нижайший поклон! Проблема решена!

gulalexei
02.06.2023, 11:29
Предыдущую ошибку устранил. Но в процессе установки появлялась другая:
65031

"It is possible that packages from this path could not be installed:
(Возможно, что пакеты с этого пути не могли быть установлены...)

Это критично или не обращать внимания?

Добрый день, столкнулся с такой же проблемой. Попробуйте перед установкой обеспечить мин. 8-10 гигов свободного места

Промучался целый день, версия с сайта Овен(x86) никак не хотела вставать, постоянно выдавало ошибку, что не устанавливаются пакеты. Лог файл "замечательно" просто обрывался, без какой-либо ошибки, за которую можно было бы зацепиться.
Скачал версию x64 - тоже самое, но хотя бы сначала выскакивало окошко о том, что файлу конфигурации не хватило места - короче,Codesys во время установки забивал диск в 0 .
Освободил 10 гигов - и во время установки наблюдал, как место таяло на глазах , но зато все наконец установилось без ошибок. После установки освободилось около 4 гигов временных файлов.

Есть подозрение, что версия x86 так же забивала диск в 0, но тупо не выдавало ошибку о нехватке места. Проверять уже не хочется)

UAN
05.06.2023, 12:16
Приветствую. У меня вопрос 2 в 1:

Мне нужно при создании экземпляра FB выполнить некие действия (передать ссылку на созданный экземпляр другому FB - что-то типа Dependency Injection). Нашел FB_Init и {attribute ‘call_after_init‘}, но в обоих случаях добавленный код при создании FB (объявлен в var визуализации и создается, как я понимаю, вместе с ней) не выполняется. Почему?
С указанной выше проблемой столкнулся при попытке решить следующую задачу: есть физическая кнопка и нужно, чтобы в определенных визуализациях была реакция на ее нажатие (в каждой визуализации своя реакция). Может, уже есть готовое решение, которым можно воспользоваться?

Евгений Кислов
05.06.2023, 12:34
Приветствую. У меня вопрос 2 в 1:

Мне нужно при создании экземпляра FB выполнить некие действия (передать ссылку на созданный экземпляр другому FB - что-то типа Dependency Injection). Нашел FB_Init и {attribute ‘call_after_init‘}, но в обоих случаях добавленный код при создании FB (объявлен в var визуализации и создается, как я понимаю, вместе с ней) не выполняется. Почему?
С указанной выше проблемой столкнулся при попытке решить следующую задачу: есть физическая кнопка и нужно, чтобы в определенных визуализациях была реакция на ее нажатие (в каждой визуализации своя реакция). Может, уже есть готовое решение, которым можно воспользоваться?


Добрый день.
1. Выложите, пожалуйста, простейший пример, в котором я смогу это повторить.
2. Физическая кнопка подключена на дискретный вход контроллера?
C визуализацией одновременно будет работать один клиент или несколько?

UAN
05.06.2023, 12:58
Добрый день.
1. Выложите, пожалуйста, простейший пример, в котором я смогу это повторить.
2. Физическая кнопка подключена на дискретный вход контроллера?
C визуализацией одновременно будет работать один клиент или несколько?


Проект68163 делал специально для проверки. PLC_PRG.BtnPressed - переменная, эмулирующая кнопку.
У меня СПК110+МК210, но это не имеет значения, т.к. тестирование я проводил в приложенном проекте и там писал переменную непосредственно из Codesys.


Клиент один - сама панель.

Евгений Кислов
05.06.2023, 14:17
Проект68163 делал специально для проверки. PLC_PRG.BtnPressed - переменная, эмулирующая кнопку.
У меня СПК110+МК210, но это не имеет значения, т.к. тестирование я проводил в приложенном проекте и там писал переменную непосредственно из Codesys.


Клиент один - сама панель.

1. Похоже, это известное поведение. Не могу прокомментировать, баг это или так и было задумано.
https://forge.codesys.com/forge/talk/Visualization/thread/1c6e3e195b/

2. В вашем случае можно использовать VisuElems.CURRENTVISU (собственно, в вашем проекте она есть в комментарии.

IF BtnPressed AND VisuElems.CURRENTVISU = 'Home' THEN ...

Или речь о том, что в разных диалогах реакция на ее нажатие должна быть разной?

UAN
05.06.2023, 14:45
1. Похоже, это известное поведение. Не могу прокомментировать, баг это или так и было задумано.
https://forge.codesys.com/forge/talk/Visualization/thread/1c6e3e195b/

2. В вашем случае можно использовать VisuElems.CURRENTVISU (собственно, в вашем проекте она есть в комментарии.

IF BtnPressed AND VisuElems.CURRENTVISU = 'Home' THEN ...

Или речь о том, что в разных диалогах реакция на ее нажатие должнf быть разной?


Не совсем понятно, это только при инициализации FB в визуализации или вообще... Попробую создать контроллер непосредственно в PLC_PRG или сделать внешнюю функцию-конструктор, как в примере.
А вот этот вопрос, до которого я еще не успел дойти. Мне нужно, чтобы при закрытом диалоге на нажатие реагировала визуализация, а при открытом - диалог. Если подскажите, как узнать в PLC_PRG, открыт диалог или нет - буду очень признателен.

Евгений Кислов
05.06.2023, 17:39
А вот этот вопрос, до которого я еще не успел дойти. Мне нужно, чтобы при закрытом диалоге на нажатие реагировала визуализация, а при открытом - диалог. Если подскажите, как узнать в PLC_PRG, открыт диалог или нет - буду очень признателен.


Самый простой способ - по кнопке открытия диалога делать установку булевской переменной, а по кнопке закрытия - сброс.

Вариант для любителей изысканного приведен здесь:
https://forge.codesys.com/forge/talk/Engineering/thread/cbda8c68f8/#4d59

UAN
06.06.2023, 13:06
Приветствую. У меня вопрос 2 в 1:

Мне нужно при создании экземпляра FB выполнить некие действия (передать ссылку на созданный экземпляр другому FB - что-то типа Dependency Injection). Нашел FB_Init и {attribute ‘call_after_init‘}, но в обоих случаях добавленный код при создании FB (объявлен в var визуализации и создается, как я понимаю, вместе с ней) не выполняется. Почему?
С указанной выше проблемой столкнулся при попытке решить следующую задачу: есть физическая кнопка и нужно, чтобы в определенных визуализациях была реакция на ее нажатие (в каждой визуализации своя реакция). Может, уже есть готовое решение, которым можно воспользоваться?


В процессе изысканий удалось выяснить следующее: FB_Init на самом деле работает. И присвоение переменных, судя по журналу тоже проходит успешно:
68178
Но почему-то в результате по окончании загрузки переменная обнуляется:
68179

Айрат КИПиА
07.06.2023, 16:39
Добрый день! подскажите функциональный блок для работы с энкодером, среда кодесис3.5 ПЛК 210

Евгений Кислов
07.06.2023, 16:57
Добрый день! подскажите функциональный блок для работы с энкодером, среда кодесис3.5 ПЛК 210

Добрый день.
Как именно вам нужно работать с энкодером?

Айрат КИПиА
08.06.2023, 09:31
Я использую инкрементальный АВ энкодер, нужна возможность задавать длину , и при достижение указанной длинны выдавалась логическая 1(запускается движение пилы вперед ) когда пила вернется назад требуется обнулить энкодер, и по новой повторять цикл.

Евгений Кислов
08.06.2023, 09:53
Я использую инкрементальный АВ энкодер, нужна возможность задавать длину , и при достижение указанной длинны выдавалась логическая 1(запускается движение пилы вперед ) когда пила вернется назад требуется обнулить энкодер, и по новой повторять цикл.

Наши ПЛК не поддерживают прерывания, так что будет погрешность в определении длины и задержка между ее определением и передачей команды.
Готового блока, соответственно, нет.
Пример обнуления счетчика энкодера есть здесь:
https://owen.ru/forum/showthread.php?t=28167&p=374785&viewfull=1#post374785

DenisV
09.06.2023, 12:55
Добрый день.
Нормального способа нет, но вроде в свежих версиях сделали обходной путь.
Если есть возможность предоставить доступ по TeamViewer - то могу попробовать помочь.

Добрый день, Евгений, а появился обходной путь в Codesys SP17?

Asan7
09.06.2023, 22:13
Добрый день.

1)Подскажите пожалуйста, есть ли FB(v3.5) для работы с трехпозиционным регулированием по ПИД закону без автонастройки.

2) Видел FB "APID_POS_VALV", но там настройки ПИД определяются только автоматически или есть возможность задавать их вручную?

terlim
10.06.2023, 10:53
Добрый день. Подскажите, есть ли смысл для снижения нагрузки на процессор конвертировать данные из REAL в INT и дальше всю математику производить уже с INT. Или это экономия на спичках?

Cs-Cs
10.06.2023, 11:04
Добрый день. Подскажите, есть ли смысл для снижения нагрузки на процессор конвертировать данные из REAL в INT и дальше всю математику производить уже с INT. Или это экономия на спичках? Нет, не надо. Процессор грузят всякие визуализации, мощные цикличные задачи и особенно работа со строками. А с числами - нет.

Евгений Кислов
10.06.2023, 20:01
Добрый день, Евгений, а появился обходной путь в Codesys SP17?

Добрый день.
Да, см. видео:
https://youtu.be/rMww0ZzFo0U

Евгений Кислов
10.06.2023, 20:03
Добрый день.

1)Подскажите пожалуйста, есть ли FB(v3.5) для работы с трехпозиционным регулированием по ПИД закону без автонастройки.

2) Видел FB "APID_POS_VALV", но там настройки ПИД определяются только автоматически или есть возможность задавать их вручную?

Добрый день.
Можно задать настройки вручную с помощью ФБ SET_APID_POS_VALV.

Asan7
10.06.2023, 21:53
Спасибо.
Появился вопрос по адресации модулей Мх110.
В документации указано, что:
"Конфигурирование модулей происходит по протоколу ОВЕН. В связи с особенностями протокола во время конфигурирования каждый модуль занимает количество адресов, равное количеству его
каналов. То есть в случае попытке настраивать модули, уже находящиеся в сети и имеющие последовательные адреса (1, 2, 3), могут возникнуть ошибки. Если предполагается, что в будущем
может потребоваться перенастройка модулей, то следует изначально задавать адреса модулей с промежутками, равными числу каналов в модулях."

1. Данное требование действует только при конфигурировании модулей? Штатная работа же происходит по ModbusRTU?
2. Допустимо ли на ту же шину добавлять сторонние ModBus устройства и стоит ли учитывать кол-во каналов последнего Mx110 при адресации устройств? Или лучше использовать другой канал RS-485?

Евгений Кислов
10.06.2023, 21:55
1. Да.
2. Допустимо. Если предполагается, что может потребоваться переконфигугирование модулей без отключения их от шины - то стоит учитывать.

Zerling
14.06.2023, 04:47
68296

При подключении к спк, внезапно выдает такое, где это выключается?..
тот же проект под плк не - не ругается

Евгений Кислов
14.06.2023, 06:14
68296

При подключении к спк, внезапно выдает такое, где это выключается?..
тот же проект под плк не - не ругается

Добрый день.
Вам нужно перепрошить контроллер на ту же версию прошивки, что в нем сейчас, со сбросом настроек.

fergus23
14.06.2023, 07:06
Здравствуйте, для архивации данных взяли пример проекта " Example_SqlFeatures_3516v1.projectarchive ", оставили только sqlite3. В данном проекте запрос отправляется при нажатии кнопки "отправить запрос", а как переделать программу, чтобы запрос сам автоматически отправлялся каждую секунду ? (код запроса для отправки данных с переменных есть, осталось этот запрос каждую секунду отправлять на сервер для записи данных).
ссылка на пример https://ftp.owen.ru/CoDeSys3/21_Examples/01_3.5.11.5/11_Other/Example_SqlFeatures_3516v1.projectarchive

Евгений Кислов
14.06.2023, 07:21
Здравствуйте, для архивации данных взяли пример проекта " Example_SqlFeatures_3516v1.projectarchive ", оставили только sqlite3. В данном проекте запрос отправляется при нажатии кнопки "отправить запрос", а как переделать программу, чтобы запрос сам автоматически отправлялся каждую секунду ? (код запроса для отправки данных с переменных есть, осталось этот запрос каждую секунду отправлять на сервер для записи данных).

Добрый день.
Используйте генератор импульсов - например, BLINK из библиотеки Util.

fergus23
14.06.2023, 07:54
Как добавить операторы конверсии ? INT_TO_TIME - его нет в списке выбора. Есть только To_word и тд.

Евгений Кислов
14.06.2023, 08:09
Как добавить операторы конверсии ? INT_TO_TIME - его нет в списке выбора. Есть только To_word и тд.

Используйте просто TO_TIME. Его аргументом может быть переменная любого типа.

fergus23
14.06.2023, 09:05
Благодарю!

А22
14.06.2023, 10:55
Добрый день. Подскажите плз. синтаксис ФБ OSCAT_BASIC.ONTIME в ST.

Евгений Кислов
14.06.2023, 11:34
Добрый день. Подскажите плз. синтаксис ФБ OSCAT_BASIC.ONTIME в ST.

Добрый день.



PROGRAM PLC_PRG
VAR
fbOntime: BASIC.ONTIME;

xInWork: BOOL;
xReset: BOOL;
udiSeconds: UDINT;
udiCycles: UDINT;
END_VAR


fbOntime
(
IN := xInWork,
RST := xReset,
SECONDS := udiSeconds,
CYCLES := udiCycles
);


68303

DenisV
14.06.2023, 12:56
Добрый день.
Да, см. видео:
https://youtu.be/rMww0ZzFo0U

В видео речь идёт об SP18, всё о чём там говорится также актуально для SP17?

Евгений Кислов
14.06.2023, 12:59
В видео речь идёт об SP18, всё о чём там говорится также актуально для SP17?

К сожалению, нет - на наших контроллерах (у которых версия рантайма 3.5.17.30) этот функционал работать не будет.
Так что я некорректно ответил на ваш прошлый вопрос, извините.

DenisV
14.06.2023, 13:04
К сожалению, нет - на наших контроллерах (у которых версия рантайма 3.5.17.30) этот функционал работать не будет.
Так что я некорректно ответил на ваш прошлый вопрос, извините.

А вы как-то мне по удаленному подключению показывали способ для SP14. Там по-моему комментировалась строка в конфиге, точно не помню этот способ будет в SP17 работать?

А22
14.06.2023, 13:09
Спасибо большое!

Евгений Кислов
14.06.2023, 13:23
А вы как-то мне по удаленному подключению показывали способ для SP14. Там по-моему комментировалась строка в конфиге, точно не помню этот способ будет в SP17 работать?

Если работал в SP14 - то в теории должен и в SP17.
Но я не проверял этот момент.

DenisV
14.06.2023, 14:19
Если работал в SP14 - то в теории должен и в SP17.
Но я не проверял этот момент.

А как в ПЛК с прошивкой SP17 получить доступ к сохранению изменений в файле CODESYSControl.cfg?

Евгений Кислов
14.06.2023, 14:23
А как в ПЛК с прошивкой SP17 получить доступ к сохранению изменений в файле CODESYSControl.cfg?

Никак - используйте CODESYSControl_User.cfg. Он доступен для редактирования.

DenisV
14.06.2023, 15:00
Никак - используйте CODESYSControl_User.cfg. Он доступен для редактирования.
Да, но есть нюанс, если правильно помню, то в том способе необходимо было закомментировать строки компонента [CmpWebServerHandlerV3], которого нет в CODESYSControl_User.cfg, если я скопирую и закомментирую их там в этом же не будет никакого смысла...
68308

Евгений Кислов
14.06.2023, 18:30
Да, но есть нюанс, если правильно помню, то в том способе необходимо было закомментировать строки компонента [CmpWebServerHandlerV3], которого нет в CODESYSControl_User.cfg, если я скопирую и закомментирую их там в этом же не будет никакого смысла...
68308

Можете попробовать добавить в CODESYSControl_User.cfg эту же секцию (ту, что вы выделили красным), но со значением 0.
Потом потребуется перезагрузить контроллер, чтобы изменения вступили в силу.
Но я не уверен, что это поможет в вашей ситуации.

Я добавлю в наш трекер пожелание, чтобы эту секцию перенесли в CODESYSControl_User.cfg, чтобы пользователь мог ее редактировать.

fergus23
15.06.2023, 06:39
Здравствуйте, можно ли как то проще написать запрос для записи данных в бд ?

SQLite_PRG.wsSqlStatement:=TO_WSTRING('insert into test1 values (');
SQLite_PRG.wsSqlStatement:=TO_WSTRING(CONCAT( WSTRING_TO_STRING(SQLite_PRG.wsSqlStatement),REAL_ TO_STRING(PLC_PRG.Temp)));
SQLite_PRG.wsSqlStatement:=TO_WSTRING (CONCAT( WSTRING_TO_STRING(SQLite_PRG.wsSqlStatement),WSTRI NG_TO_STRING(",")));
SQLite_PRG.wsSqlStatement:=TO_WSTRING(CONCAT (WSTRING_TO_STRING(SQLite_PRG.wsSqlStatement),REAL _TO_STRING(PLC_PRG.Pressure)));
SQLite_PRG.wsSqlStatement:=TO_WSTRING(CONCAT (WSTRING_TO_STRING(SQLite_PRG.wsSqlStatement),WSTR ING_TO_STRING(")")));

Cs-Cs
15.06.2023, 08:19
Ну, уйти от этой фигни "TO_WSTRING(CONCAT( WSTRING_TO_STRING(" и сразу работать с WSTRING.
Для этого можно перейти на библиотеку STU (НЕ ОВЕН, а штатная - StingUtils). Она работает с буферами строк, а не со строками, и это даёт ещё и большую скорость работы.

fatlortroll
15.06.2023, 11:02
Использовать не CONCAT, а WCONCAT (находится в библиотеке Standard64). Тогда уберутся лишние преобразования между типами.

DenisV
15.06.2023, 14:23
Можете попробовать добавить в CODESYSControl_User.cfg эту же секцию (ту, что вы выделили красным), но со значением 0.
Потом потребуется перезагрузить контроллер, чтобы изменения вступили в силу.
Но я не уверен, что это поможет в вашей ситуации.

Я добавлю в наш трекер пожелание, чтобы эту секцию перенесли в CODESYSControl_User.cfg, чтобы пользователь мог ее редактировать.

Не сработал у меня предложенный вами способ. Получается на данный момент для ПЛК Овен на прошивке SP17 нет способа при котором не запрашивается пароль и логин устройства при подключении к визуализации?

Евгений Кислов
15.06.2023, 14:24
Не сработал у меня предложенный вами способ. Получается на данный момент для ПЛК Овен на прошивке SP17 нет способа при котором не запрашивается пароль и логин устройства при подключении к визуализации?

Похоже, что так.

fergus23
15.06.2023, 14:30
Благодарю, wConcat сделал код поменьше. Еще вопрос возник, как создать с помощью sqlite3 базу на SD карте ? какой путь должен быть

Евгений Кислов
15.06.2023, 17:04
Благодарю, wConcat сделал код поменьше. Еще вопрос возник, как создать с помощью sqlite3 базу на SD карте ? какой путь должен быть

/mnt/ufs/media/mmcblk0p1/<ваш путь>

sssssaaaaabbbbb
15.06.2023, 17:26
Всем здравствуйте, работа с указателями. Если возможность считывать данные через указатели без переприсваивания их другим переменным. В картинке вопрос. 68339

fergus23
16.06.2023, 07:03
При попытке зайти в папку (через Putty) mmcblk0p1 - не может найти указанную директорию. Имя папки раз 20 вводил вручную и пробовал копировать из WinSCP.

Евгений Кислов
16.06.2023, 07:18
При попытке зайти в папку (через Putty) mmcblk0p1 - не может найти указанную директорию. Имя папки раз 20 вводил вручную и пробовал копировать из WinSCP.

Сначала нужно SD-карту подключить.

Но важнее - /mnt/ufs/media и /media - это разные директории.

fergus23
16.06.2023, 07:25
Карта вставлена, ПЛК запущен и работает, я по очереди в каждую папку заходил, сперва в mnt, потом ufs и т.д. пока не уперся в " mmcblk0p1 ". Т.е зайти сразу в директорию не получается, тоже найти не может. А так заходит до этой папки.
Разобрался, забыл что закомментировал TargetVars.stDrives.xEnable:=true;

chm
16.06.2023, 09:37
Здравствуйте.
Есть два вопроса по поводу вставления библиотеки в проект - самописной или штатной.
Ну, т.е. ситуация - "вы думали, что я там есть, а мне там нет".

1 - с самописной вставляются зависимые от неё штатные библиотеки через раз (хотя в менеджере библиотек в дереве указывается, что библиотека подключена и функции/константы там есть, в проекте их имена указываются неопределёнными)
Ну ещё бывает вариант, когда при тех же выполняемых действиях всё нормально работает.

2-ещё бывает, что даже штатная библиотека указывается как подключенная, но её компоненты недоступны. Ну, соответствоенно, бывает, что доступны. Ну, вот memcpy не получилось сейчас использовать. (MemoryUtils в подключенных указано!)

когда явно пишу название через точку, ну, библиотека.функция, то уже пишет, что библиотеки такой не знает.

Есть ли какая-то правильная последовательность, при нарушении которой всё будет ненормально, даже когда показывается, что всё нормально и какая она?

Всем большое спасибо.

sssssaaaaabbbbb
16.06.2023, 09:47
CDS в отличии от TIA весьма не привередлив можно и такую запись использовать 68341
Спасибо Вам. Вот как получилось и все заработало.
68347

Евгений Кислов
16.06.2023, 09:51
Здравствуйте.
Есть два вопроса по поводу вставления библиотеки в проект - самописной или штатной.
Ну, т.е. ситуация - "вы думали, что я там есть, а мне там нет".

1 - с самописной вставляются зависимые от неё штатные библиотеки через раз (хотя в менеджере библиотек в дереве указывается, что библиотека подключена и функции/константы там есть, в проекте их имена указываются неопределёнными)
Ну ещё бывает вариант, когда при тех же выполняемых действиях всё нормально работает.

2-ещё бывает, что даже штатная библиотека указывается как подключенная, но её компоненты недоступны. Ну, соответствоенно, бывает, что доступны. Ну, вот memcpy не получилось сейчас использовать. (MemoryUtils в подключенных указано!)

когда явно пишу название через точку, ну, библиотека.функция, то уже пишет, что библиотеки такой не знает.

Есть ли какая-то правильная последовательность, при нарушении которой всё будет ненормально, даже когда показывается, что всё нормально и какая она?

Всем большое спасибо.

Добрый день.
Не помню, чтобы наблюдал что-то такое.
Вы можете обе проблемы продемонстрировать по AeroAdmin?
Данные для подключения и ваш контактный телефон пришлите, пожалуйста, на почту или в телеграм (в подписи).

chm
16.06.2023, 10:03
AeroAdmin?

Спасибо, что даже на такое готовы, но это мне надо три дня с сисадминами договариваться.
Сейчас попробую новую виртуалку с новым кодесисом завести, на случай если что-то побилось и подробный протокол действий своих напишу, если всё будет по-прежнему.

так, если написать memUtils.MemCpy, (НЕ MemoryUtils.MemCpy) то оно заработает. Хотя, по человечески должна бы просто MemCpy Не должна, там не название ставится, а неймспейс, они могут не совпадать.

вопрос уверенного приращивания требуемых библиотек к своей, чтобы таскать одним куском, пока не решён.

fergus23
16.06.2023, 12:01
Есть ли пример написания программы для формирования эксель (csv) файла с данными из БД SQL с помощью codesys ? ПЛК 200

Евгений Кислов
16.06.2023, 12:05
Есть ли пример написания программы для формирования эксель (csv) файла с данными из БД SQL с помощью codesys ? ПЛК 200

Есть отдельные примеры по чтению данных из SQL и по записи в .csv:
https://ftp.owen.ru/CoDeSys3/21_Examples/01_3.5.11.5/11_Other/Example_SqlFeatures_3517v1.projectarchive
https://ftp.owen.ru/CoDeSys3/21_Examples/01_3.5.11.5/05_Archives/Example_CaaFile_3517v1.projectarchive

capzap
16.06.2023, 12:54
так, если написать memUtils.MemCpy, (НЕ MemoryUtils.MemCpy) то оно заработает. Хотя, по человечески должна бы просто MemCpy

в любой документации Вы найдете подобное примечание про префикс,как например 68349 префикс в колонке дополнительное имя а не название библиотеки

fergus23
16.06.2023, 13:19
Благодарю!

capzap
16.06.2023, 13:55
Есть ли пример написания программы для формирования эксель (csv) файла с данными из БД SQL с помощью codesys ? ПЛК 200
как то так можно

sqlite3 -header -csv chinook.db "select * from tracks;" > tracks.csv

fergus23
19.06.2023, 09:31
Добрый день, подскажите с чем может быть связано. Делал по примеру из этого видео https://www.youtube.com/watch?v=d-gLwtmJnlk
Когда проект запущен и открываю диалоговое окно, то csv файл не виден. Хотя в данной папке он физически есть.

fergus23
19.06.2023, 09:34
" как то так можно
sqlite3 -header -csv chinook.db "select * from tracks;" > tracks.csv "
это можно в коде программы в строку sql запроса вписать ?

capzap
19.06.2023, 09:39
" как то так можно
sqlite3 -header -csv chinook.db "select * from tracks;" > tracks.csv "
это можно в коде программы в строку sql запроса вписать ?

https://ftp.owen.ru/CoDeSys3/11_Documentation/03_3.5.11.5/CDSv3.5_CmpSysExec_v3.0.pdf ни кто не отменял

fergus23
19.06.2023, 09:54
" https://ftp.owen.ru/CoDeSys3/11_Docu...sExec_v3.0.pdf ни кто не отменял "
ага. Но вот не понятно, как выгружать данные, чтобы названия столбцов были не в одной ячейке через запятую, а у каждой ячейки свое наименование столбца с соответствующими данными ?

Евгений Кислов
19.06.2023, 09:59
Добрый день, подскажите с чем может быть связано. Делал по примеру из этого видео https://www.youtube.com/watch?v=d-gLwtmJnlk
Когда проект запущен и открываю диалоговое окно, то csv файл не виден. Хотя в данной папке он физически есть.

Добрый день.
Попробуйте указать путь полностью (/root/CODESYS_WRK).

capzap
19.06.2023, 10:00
" https://ftp.owen.ru/CoDeSys3/11_Docu...sExec_v3.0.pdf ни кто не отменял "
ага. Но вот не понятно, как выгружать данные, чтобы названия столбцов были не в одной ячейке через запятую, а у каждой ячейки свое наименование столбца с соответствующими данными ?

в картинках покажите свой вопрос, Вы точно csv хотели?

melky
19.06.2023, 10:22
fergus23 в таких случаях переименовываете csv в txt и загружаете его в Excel, он предложит, какой разделитель использовать и загрузит по столбцам.
з.ы. может еще способы есть, но я обычно по простому поступаю, так как не требуется это делать постоянно.

samum
19.06.2023, 10:59
здравствуйте. Подскажите, пожалуйста, почему при установке CODESYS_3.5_SP17_Patch3 не устанавливается Codesys OPC Server v3 ?
1. Ставлю чистую винду 10 про (1607)
2. запускаю CODESYS 3.5.17.30.exe и ставлю полную установку
3. в Programm Files папки opc server нет ...
На фтп нашёл только предыдущую версию CODESYS OPC DA Server 3.5.16.20 ....

Евгений Кислов
19.06.2023, 11:16
здравствуйте. Подскажите, пожалуйста, почему при установке CODESYS_3.5_SP17_Patch3 не устанавливается Codesys OPC Server v3 ?
1. Ставлю чистую винду 10 про (1607)
2. запускаю CODESYS 3.5.17.30.exe и ставлю полную установку
3. в Programm Files папки opc server нет ...
На фтп нашёл только предыдущую версию CODESYS OPC DA Server 3.5.16.20 ....

Добрый день.
Потому что разработчики CODESYS убрали его из дистрибутива среды.
Предыдущая версия без проблем работает с более новыми версиями среды и рантайма.

fergus23
19.06.2023, 12:05
" Попробуйте указать путь полностью (/root/CODESYS_WRK). "
Попробовал, всё равно через веб визуализацию не видно файла report.csv. (физически он по указанному пути есть)
(скриншот со старым путем просто для наглядности что файла не видно)

fergus23
19.06.2023, 12:09
" в таких случаях переименовываете csv в txt и загружаете его в Excel, он предложит, какой разделитель использовать и загрузит по столбцам.
з.ы. может еще способы есть, но я обычно по простому поступаю, так как не требуется это делать постоянно. "
Спасибо, вариант конечно, но хотелось бы без лишних телодвижений для оператора

Евгений Кислов
19.06.2023, 12:19
" Попробуйте указать путь полностью (/root/CODESYS_WRK). "
Попробовал, всё равно через веб визуализацию не видно файла report.csv. (физически он по указанному пути есть)
(скриншот со старым путем просто для наглядности что файла не видно)

Обеспечьте доступ по AeroAdmin.
Ваш контактный телефон пришлите мне на почту или в telegram (в подписи).

capzap
19.06.2023, 12:33
Спасибо, вариант конечно, но хотелось бы без лишних телодвижений для оператора
мелкого можете вообще не слушать, для него проще когда сделать что то не как все
скрин который показываете, на нем филенаме report.csv по логике если вместе с расширением это будет report.csv.csv, может в этом причина

fergus23
19.06.2023, 12:47
Проблема в фильтре типа файлов(был пробел после csv). Теперь отображается

samum
19.06.2023, 13:00
Предыдущая версия без проблем работает с более новыми версиями среды и рантайма
поставил. теперь пишет ошибку лицензии
WinCoDeSysOPC.exe Start Error
One of the following licenses is required:
CodeMeter 101597:8772
Failure reason: CmContainer Entry not found, Error 200

Евгений Кислов
19.06.2023, 13:06
поставил. теперь пишет ошибку лицензии
WinCoDeSysOPC.exe Start Error
One of the following licenses is required:
CodeMeter 101597:8772
Failure reason: CmContainer Entry not found, Error 200

В какую именно директорию вы его установили?
Нужно было в <директория установки CODESYS>/CODESYS OPC Server 3
После этого нужно переустановить пакет наших таргетов - они перезапишут часть файлов в директории OPC, после чего ошибка исчезнет.

samum
19.06.2023, 17:25
В какую именно директорию вы его установили?
по-умолчанию конечно, т.е. C:\Program Files (x86)\Codesys 3.5.16.20
при попытке установить в папку 3.5.17.30 ругается что папка не пуста ... Может сперва ОРС-сервер поставить?

IVM
19.06.2023, 18:00
Добрый день

Где расположены таргет-файлы для CODESYS V3 ?

Евгений Кислов
19.06.2023, 18:13
по-умолчанию конечно, т.е. C:\Program Files (x86)\Codesys 3.5.16.20
при попытке установить в папку 3.5.17.30 ругается что папка не пуста ... Может сперва ОРС-сервер поставить?

Обеспечьте завтра доступ по AeroAdmin - мы вам поможем.
Моя почта и telegram в подписи.

Евгений Кислов
19.06.2023, 18:14
Добрый день

Где расположены таргет-файлы для CODESYS V3 ?

Добрый день.
Речь о том, куда они попадают после установки?
Тогда:
C:\ProgramData\CODESYS\Devices

IVM
19.06.2023, 19:21
Добрый день.
Речь о том, куда они попадают после установки?
Тогда:
C:\ProgramData\CODESYS\Devices

Папки ProgramData на диске С нет.

Евгений Кислов
19.06.2023, 19:26
Папки ProgramData на диске С нет.

По умолчанию она является скрытой.
https://remontka.pro/programdata-folder-windows/

IVM
19.06.2023, 20:02
По умолчанию она является скрытой.
https://remontka.pro/programdata-folder-windows/

На ПК на разных логических дисках установлены несколько версий CODESYS 3. Target-файлы для этих версий будут то же установлены на разных логических дисках ?

Евгений Кислов
19.06.2023, 20:07
На ПК на разных логических дисках установлены несколько версий CODESYS 3. Target-файлы для этих версий будут то же установлены на разных логических дисках ?

Нет, все они устанавливаются в ProgramData.

IVM
19.06.2023, 20:10
Нет, все они устанавливаются в ProgramData.

ProgramData одна не весь ПК ?

Евгений Кислов
19.06.2023, 20:26
ProgramData одна не весь ПК ?

Именно так.

IVM
19.06.2023, 20:56
При открытии проекта появляется сообщение. Обновлять или нет - вот в чем вопрос. ;)

Евгений Кислов
19.06.2023, 21:25
При открытии проекта появляется сообщение. Обновлять или нет - вот в чем вопрос. ;)

На ваше усмотрение. Кардинально это ничего не изменит.

fergus23
20.06.2023, 08:41
" в картинках покажите свой вопрос, Вы точно csv хотели? "
имел ввиду такое

capzap
20.06.2023, 08:57
" в картинках покажите свой вопрос, Вы точно csv хотели? "
имел ввиду такое

если с запятой не открывается в экселе (что удивительно), наберите такую команду
sqlite3 -header -separator ";" chinook.db "select * from tracks;" > tracks.csv

fergus23
20.06.2023, 09:09
" если с запятой не открывается в экселе (что удивительно), наберите такую команду "
Получилось то, что нужно, благодарю!

Asan7
20.06.2023, 10:07
Добрый день.
Так как блок "APID_POS_VALV" не поддерживает эмуляцию хотелось бы уточнить: возможно ли использовать его представленным образом? Стоит задача ручной настройки параметров ПИД и ручного управления выходами.
68384

Евгений Кислов
20.06.2023, 10:18
Добрый день.
Так как блок "APID_POS_VALV" не поддерживает эмуляцию хотелось бы уточнить: возможно ли использовать его представленным образом? Стоит задача ручной настройки параметров ПИД и ручного управления выходами.
68384

Добрый день.
SET_APID_POS_VALV лучше по событию вызывать (например, при старте контроллера или по команде оператора).
Для этого добавьте у него вход EN (ПКМ на блок - EN/ENO) и подавайте на него единичный импульс в том момент, когда надо записать настройки регулятора.

Asan7
20.06.2023, 10:42
Параметр "Set_YA2_PID" привязан к кнопке на панели (по нажатию). А для стартовой записи параметров подойдет ли такой выражение? Start_Set_YA2 - объявлена обычной переменной с стартовым значением TRUE.
1) В остальном будет ли работать такая конфигурация?
2) При наличии ошибки на выходе блока - как реагируют выходы блока и нужно ли сбрасывать эту ошибку или она сбрасывается сама при возвращение в норму?
3) Может ли происходить переполнение интегрирующей составляющей?
68386

1exan
20.06.2023, 10:44
Добрый день.
Так как блок "APID_POS_VALV" не поддерживает эмуляцию хотелось бы уточнить: возможно ли использовать его представленным образом? Стоит задача ручной настройки параметров ПИД и ручного управления выходами.
68384

Добавьте блокировку команд одновременного включения выходов

Евгений Кислов
20.06.2023, 10:48
А для стартовой записи параметров подойдет ли такой выражение?

Да.

1) Зависит от вашей конкретной задачи и ее требований. В любом случае регуляторы нужно тестировать на реальной ситеме.
2) Должны быть в нулях. Должна сбрасываться сама.
3) Сходу не могу подсказать. Я не помню, чтобы кто-то из клиентов его наблюдал.

Asan7
20.06.2023, 10:53
Спасибо. Будем тестировать.

Asan7
20.06.2023, 10:54
Добавьте блокировку команд одновременного включения выходов
Спасибо.
Это само собой. Там еще блокировка через контакты управляющих реле предусмотрены.

fergus23
20.06.2023, 12:37
Подскажите, почему ST код на кнопке не работает ?
CmpSysExec.sysExecute('sqlite3 -header -separator ";" /mnt/ufs/media/mmcblk0p1/WRK/bd.db "select * from table;" > /mnt/ufs/media/mmcblk0p1/Reports/tessst2.csv &');

Евгений Кислов
20.06.2023, 12:43
Подскажите, почему ST код на кнопке не работает ?
CmpSysExec.sysExecute('sqlite3 -header -separator ";" /mnt/ufs/media/mmcblk0p1/WRK/bd.db "select * from table;" > /mnt/ufs/media/mmcblk0p1/Reports/tessst2.csv &');

Потому что вход sysExecute имеет тип STRING - т. е. длина выполняемой им команды не может превышать 80 символов.
В вашем случае - превышает.

samum
20.06.2023, 12:45
Обеспечьте завтра доступ по AeroAdmin - мы вам поможем.
к сожалению, доступ к сети интернет с машины запрещён. В наличии есть ещё дистрибутивы версий 3.5.14.30 и 3.5.16.30, может опишите в кратце что нужно сделать (можно и в личку) ?

Евгений Кислов
20.06.2023, 12:46
к сожалению, доступ к сети интернет с машины запрещён. В наличии есть ещё дистрибутивы версий 3.5.14.30 и 3.5.16.30, может опишите в кратце что нужно сделать (можно и в личку) ?

Напишите мне на почту или в Telegram (в подписи).

fergus23
20.06.2023, 12:48
"Потому что вход sysExecute имеет тип STRING - т. е. длина выполняемой им команды не может превышать 80 символов.
В вашем случае - превышает. " Понятно, тогда с "cd" код будет выглядеть так ?

CmpSysExec.sysExecute('cd /mnt/ufs/media/mmcblk0p1/WRK/');
CmpSysExec.sysExecute('sqlite3 -header -separator ";" test1.db "select * from test1;" > tessst2.csv');

Евгений Кислов
20.06.2023, 12:55
"Потому что вход sysExecute имеет тип STRING - т. е. длина выполняемой им команды не может превышать 80 символов.
В вашем случае - превышает. " Понятно, тогда с "cd" код будет выглядеть так ?

CmpSysExec.sysExecute('cd /mnt/ufs/media/mmcblk0p1/WRK/');
CmpSysExec.sysExecute('sqlite3 -header -separator ";" test1.db "select * from test1;" > tessst2.csv');

Так не сработает.
Используйте sysExecute3 (с полной командой), по нажатию на кнопку отправляйте в программу команду на его вызов.

capzap
20.06.2023, 13:20
"Потому что вход sysExecute имеет тип STRING - т. е. длина выполняемой им команды не может превышать 80 символов.
В вашем случае - превышает. " Понятно, тогда с "cd" код будет выглядеть так ?

CmpSysExec.sysExecute('cd /mnt/ufs/media/mmcblk0p1/WRK/');
CmpSysExec.sysExecute('sqlite3 -header -separator ";" test1.db "select * from test1;" > tessst2.csv');

можно проще, в линуксе выполнить команды

nano run.sh
записать туда текст


#!/bin/sh
echo 'SELECT * FROM tracks;' | sqlite3 -header -separator ";" chinook.db > tracks.csv

а в КДС использовать CmpSysExec.sysExecute('sh run.sh');

fergus23
20.06.2023, 13:37
" можно проще, в линуксе выполнить команды
nano run.sh
записать туда текст
#!/bin/sh
echo 'SELECT * FROM tracks;' | sqlite3 -header -separator ";" chinook.db > tracks.csv
а в КДС использовать CmpSysExec.sysExecute('sh run.sh'); "
круто, но не подходит, т.к текс команды будет меняться динамически. В имя файла нужно будет добавлять дату создания отчета, в параметрах запроса делать выборку по указанным в переменных проекта дате и времени начала и окончания отчета

capzap
20.06.2023, 13:44
не подходит, т.к текс команды будет меняться динамически. В имя файла нужно будет добавлять дату создания отчета, в параметрах запроса делать выборку по указанным в переменных проекта дате и времени начала и окончания отчета

попробуйте две команды в консоли в темповой папке например

echo "Hello World" > "/tmp/hello-$(date +"%d-%m-%Y").txt"
и
echo "SELECT date('now');" | sqlite3.Думаю сразу станет ясно что перечисленное не проблема

fergus23
20.06.2023, 13:59
" Используйте sysExecute3 (с полной командой), по нажатию на кнопку отправляйте в программу команду на его вызов. " - моя команда не отправляет же никакого ответа, поэтому убрал проверку на пустые строки и массив для ответа тоже. Оставил такой код:

fb_Rtrig(CLK:=xSendCommand);
IF fb_Rtrig.Q THEN
I:=0;
END_IF
fb_SE3(xExecute:=xSendCommand, sCommand:='sqlite3 -header -separator ";" /mnt/ufs/media/mmcblk0p1/WRK/test1.db "select * from test1;"
> /mnt/ufs/media/mmcblk0p1/Reports/tessst1.csv');
IF fb_SE3.xDone THEN
xSendCommand:=false;
END_IF

На переключатель повесил команду xSendCommand, включаю переключатель в веб визуализации, он через пару секунд отключается и в папке появляется пустой csv файл. Если эту же команду отправлять через Putty, то файл формируется с данными.

fergus23
20.06.2023, 14:01
" .Думаю сразу станет ясно что перечисленное не проблема " - я не понимаю как выбранную дату и время в календаре в веб визуализации отправлять туда в строку запроса Select

capzap
20.06.2023, 14:15
" .Думаю сразу станет ясно что перечисленное не проблема " - я не понимаю как выбранную дату и время в календаре в веб визуализации отправлять туда в строку запроса Select

https://habr.com/ru/companies/ruvds/articles/326328/

fergus23
20.06.2023, 14:18
" https://habr.com/ru/companies/ruvds/articles/326328/ " благодарю ) попробую разобраться.
Но вопрос выше про функциональный блок SysExecute3 в силе остается.. почему файл пустой получается

Евгений Кислов
20.06.2023, 14:21
" https://habr.com/ru/companies/ruvds/articles/326328/ " благодарю ) попробую разобраться.
Но вопрос выше про функциональный блок SysExecute3 в силе остается.. почему файл пустой получается

Выложите простейший проект, в котором повторяется ваша проблема (без лишнего кода и визуализаций), и файл test1.db - посмотрим, что у вас происходит.

fergus23
20.06.2023, 14:47
" Выложите простейший проект, в котором повторяется ваша проблема (без лишнего кода и визуализаций), и файл test1.db - посмотрим, что у вас происходит. "
https://dropmefiles.com/cLZlE

sssssaaaaabbbbb
20.06.2023, 16:39
Здравствуте, подскажите пожалуйста как диагностировать соединение ВП110 и ПЛК210 ? и как делать пинг до устройства?

sssssaaaaabbbbb
20.06.2023, 18:27
Здравствуте, подскажите пожалуйста как диагностировать соединение ВП110 и ПЛК210 ? и как делать пинг до устройства? Сделал, все четко работает 68397 68398

fergus23
21.06.2023, 06:05
Не увидел про базу, вот файл

Евгений Кислов
21.06.2023, 07:37
Не увидел про базу, вот файл

У меня при выполнении вашей команды в putty появляется приглашение к вводу. Файл .csv не создается.
Как именно вы добиваетесь ее работы в терминале? Выложите видео.

fergus23
21.06.2023, 07:43
"У меня при выполнении вашей команды в putty появляется приглашение к вводу. Файл .csv не создается.
Как именно вы добиваетесь ее работы в терминале? Выложите видео."
Записал

Евгений Кислов
21.06.2023, 07:55
"У меня при выполнении вашей команды в putty появляется приглашение к вводу. Файл .csv не создается.
Как именно вы добиваетесь ее работы в терминале? Выложите видео."
Записал

У вас в CODESYS в команде лишний пробел. Запишите ее в одну строку:

68409

fergus23
21.06.2023, 08:00
"У вас в CODESYS в команде лишний пробел. Запишите ее в одну строку: "
Спасибо! Сделал в одну строку и пробел убрал - теперь файл с данными выводится (но после загрузки измененного проекта в ПЛК, он начал тормозить и в вебвизуализации, и в WinSCP тоже медленно работает всё )
Перезагрузил ПЛК по питанию, тормозить перестал

sssssaaaaabbbbb
21.06.2023, 08:52
Здравствуте, подскажите пожалуйста как диагностировать соединение ВП110 и ПЛК210 ? Кроме как пинг? Может время можно считывать?

Евгений Кислов
21.06.2023, 09:21
Здравствуте, подскажите пожалуйста как диагностировать соединение ВП110 и ПЛК210 ? Кроме как пинг? Может время можно считывать?

Добрый день.
Опишите, пожалуйста, задачу, которую вы пытаетесь решить диагностикой соединения. Почему не подошел пинг?

sssssaaaaabbbbb
21.06.2023, 11:13
Добрый день.
Опишите, пожалуйста, задачу, которую вы пытаетесь решить диагностикой соединения. Почему не подошел пинг? Пинг подошел только для соединения с панелью, но как ПЛК210 понимать, что панель зависла(допустим).

Евгений Кислов
21.06.2023, 11:29
Пинг подошел только для соединения с панелью, но как ПЛК210 понимать, что панель зависла(допустим).

У вас ВП110 действительно зависает или вы создаете решение на тот случай, если это случится?
Вообще, можно косвенно определить это по наличию на web-cервере визуализации клиента с IP-адресом панели - но способ не совсем простой.
См. здесь п. 1.2:
https://ftp.owen.ru/CoDeSys3/98_Books/CodesysVisuIecCode.pdf

sssssaaaaabbbbb
21.06.2023, 12:35
У вас ВП110 действительно зависает или вы создаете решение на тот случай, если это случится?
Вообще, можно косвенно определить это по наличию на web-cервере визуализации клиента с IP-адресом панели - но способ не совсем простой.
См. здесь п. 1.2:
https://ftp.owen.ru/CoDeSys3/98_Books/CodesysVisuIecCode.pdf
Нет , не зависает, я решение ищу.

fergus23
21.06.2023, 12:45
Подскажите пожалуйста, как переменной DateStart с типом "Date" сделать формат "21.06.2023" ? Сейчас вид "D#2023-6-3"

Евгений Кислов
21.06.2023, 12:47
Подскажите пожалуйста, как переменной DateStart с типом "Date" сделать формат "21.06.2023" ? Сейчас вид "D#2023-6-3"

Для типа DATE нет понятия "формат".
D#2023-6-3 - это вариант отображения значений типа DATE в среде CODESYS при подключении к ПЛК.
Но у вас вопрос в другом, верно? Конкретизируйте его, пожалуйста.

fergus23
21.06.2023, 12:51
"D#2023-6-3 - это вариант отображения значений типа DATE в среде CODESYS при подключении к ПЛК.
Но у вас вопрос в другом, верно? Конкретизируйте его, пожалуйста."
Да, вопрос в этом: На визуализации есть выпадающий календарь, в котором оператор выбирает дату. Дата хранится в переменной "DateStart - Date". Дату из этой переменной нужно вставлять в sql запрос. В базе данных столбец даты имеет вид "21.06.2023". Соответственно для сортировки и выбора нужных строк, нужно чтобы у переменной DateStart был такой же "формат"

Евгений Кислов
21.06.2023, 12:56
"D#2023-6-3 - это вариант отображения значений типа DATE в среде CODESYS при подключении к ПЛК.
Но у вас вопрос в другом, верно? Конкретизируйте его, пожалуйста."
Да, вопрос в этом: На визуализации есть выпадающий календарь, в котором оператор выбирает дату. Дата хранится в переменной "DateStart - Date". Дату из этой переменной нужно вставлять в sql запрос. В базе данных столбец даты имеет вид "21.06.2023". Соответственно для сортировки и выбора нужных строк, нужно чтобы у переменной DateStart был такой же "формат"

При формировании SQL-запроса вы конвертируете переменную типа DATE в строку.
Используйте для этого функцию DATE_TO_STRING_FORMAT из библиотеки OwenStringUtils - она решит вашу задачу.

Также отмечу, что на форуме можно цитировать посты при ответе:

68411

fergus23
21.06.2023, 13:06
Спасибо ) я сколько не пытался кнопкой цитировать, страница зависает и ничего не происходит (бесконечная загрузка чего то )

Евгений Кислов
21.06.2023, 13:10
Спасибо ) я сколько не пытался кнопкой цитировать, страница зависает и ничего не происходит (бесконечная загрузка чего то )

Если у вас Chrome - попробуйте Ctrl+Shift+J, далее выбрать Application, нажать кнопку Clear this site data и заново залогиниться на форуме.
Ну или тег [QUОTE] ... [/QUОTE] можно вручную вбивать (только не копируйте его из моего сообщения - я вписал русские "О", чтобы движок его не отформатировал сейчас).

fergus23
21.06.2023, 13:36
Если у вас Chrome - попробуйте Ctrl+Shift+J, далее выбрать Application, нажать кнопку Clear this site data и заново залогиниться на форуме.


заработало)

lobster
21.06.2023, 15:22
Здравствуйте подскажите, могу ли я в выделенном поле прописать несколько переменных, если да то через какой знак68413

Евгений Кислов
21.06.2023, 16:45
Здравствуйте подскажите, могу ли я в выделенном поле прописать несколько переменных, если да то через какой знак68413

Добрый день.
В выделенном поле нет.
Можно в событиях выше (например, OnMouseClick) выбрать действие Выполнить ST-код и реализовать это в нём.

fergus23
22.06.2023, 08:40
При формировании SQL-запроса вы конвертируете переменную типа DATE в строку.
Используйте для этого функцию DATE_TO_STRING_FORMAT из библиотеки OwenStringUtils - она решит вашу задачу.

Также отмечу, что на форуме можно цитировать посты при ответе:

68411

не пойму как ее писать, переменная1:=DATE_TO_STRING_FORMAT(имя переменной2) - видимо не правильно т.к ошибки идут
Ее нужно в CFC писать как в руководстве в примере ?

Евгений Кислов
22.06.2023, 10:16
не пойму как ее писать, переменная1:=DATE_TO_STRING_FORMAT(имя переменной2) - видимо не правильно т.к ошибки идут
Ее нужно в CFC писать как в руководстве в примере ?

Не обязательно - все POU можно использовать на любом языке.
У функции два аргумента - первый из них значение типа DATE, второй - строка форматирования (см. нижний вход в примере). Нужно использовать оба.

fergus23
22.06.2023, 11:35
Не обязательно - все POU можно использовать на любом языке.
У функции два аргумента - первый из них значение типа DATE, второй - строка форматирования (см. нижний вход в примере). Нужно использовать оба.

Понятно, спасибо. В итоге правильная запись вот такая (не было еще OSU. у меня) test:=OSU.DATE_TO_STRING_FORMAT(StartDate,sFormat) ;

fergus23
22.06.2023, 13:00
Еще вопрос. После старта ПЛК, в календаре стоит текущая дата (см скриншот). А переменная, привязанная к календарю, хранит в себе запись "01.01.1970". Как сделать так, чтобы после включения ПЛК, переменная принимала текущую дату ?

Евгений Кислов
22.06.2023, 13:03
Еще вопрос. После старта ПЛК, в календаре стоит текущая дата (см скриншот). А переменная, привязанная к календарю, хранит в себе запись "01.01.1970". Как сделать так, чтобы после включения ПЛК, переменная принимала текущую дату ?

Скопировать ее туда при старте приложения. Используйте канал Date And Time в узле OwenRTC и оператор TO_DATE.

fergus23
22.06.2023, 13:18
Скопировать ее туда при старте приложения. Используйте канал Date And Time в узле OwenRTC и оператор TO_DATE.
StartDate,EndDate:DATE:=to_date(TargetVars.stRtc.d tDateAndTime); дата так же осталась 01.01.1970

Евгений Кислов
22.06.2023, 13:23
StartDate,EndDate:DATE:=to_date(TargetVars.stRtc.d tDateAndTime); дата так же осталась 01.01.1970

Потому что присваивание надо выполнять в области кода, а не в области объявления.
См. здесь:
https://www.owen.ru/forum/showthread.php?t=28167&p=304642&viewfull=1#post304642

fergus23
22.06.2023, 13:26
Потому что присваивание надо выполнять в области кода, а не в области объявления.
См. здесь:
https://www.owen.ru/forum/showthread.php?t=28167&p=304642&viewfull=1#post304642

Благодарю!

lobster
22.06.2023, 14:14
Добрый день.
В выделенном поле нет.
Можно в событиях выше (например, OnMouseClick) выбрать действие Выполнить ST-код и реализовать это в нём.

Подскажите как на языке ST должна выглядеть запись чтоб по нажатию кнопки допустим задействовать переменную А и Б одновременно. Заранее спасибо

Евгений Кислов
22.06.2023, 14:20
Подскажите как на языке ST должна выглядеть запись чтоб по нажатию кнопки допустим задействовать переменную А и Б одновременно. Заранее спасибо

Я еще раз обдумал вашу задачу - и, предполагаю, проще будет сделать вот так (в коде программы):

68430

lobster
22.06.2023, 15:05
Я еще раз обдумал вашу задачу - и, предполагаю, проще будет сделать вот так (в коде программы):

68430

Огромное спасибо!

Asan7
22.06.2023, 23:30
Добрый день.
Возвращаясь к вопросу работы блока "APID_POS_VALV" с ручной настройкой ПИД параметров. При испытании на объекте, ФБ стоит в закрытом положении и регулирования не происходит.
Запись в ФБ происходит с панели по нажатию.

68432
68433

Возможно, что для записи в ФБ необходимо все-таки активировать автонастройку?

Евгений Кислов
23.06.2023, 06:59
Возможно, что для записи в ФБ необходимо все-таки активировать автонастройку?

Нет, такое требование не подразумевалось.

Если запустить пример с нашего сайта - то в нем регулирование происходит?

Asan7
23.06.2023, 22:07
К сожалению, на объекте попробовать ваш пример будет несколько проблематично и не в ближайшее время.
Возможно пойти по обратному пути и прислать программу вам?

Евгений Кислов
25.06.2023, 11:45
К сожалению, на объекте попробовать ваш пример будет несколько проблематично и не в ближайшее время.
Возможно пойти по обратному пути и прислать программу вам?

Да, отправьте ее на support@owen.ru. В письме приложите ссылку на изначальный пост с описанием вашей проблемы.

Kipiamail
26.06.2023, 20:45
ФБ DIG_Fltr как он работает что будет если на вход PB ничего не подавать

Евгений Кислов
27.06.2023, 06:41
как он работает

Как полосовой фильтр.
https://en.wikipedia.org/wiki/Band-pass_filter


что будет если на вход PB ничего не подавать

Из документации (https://ftp.owen.ru/CoDeSys3/11_Documentation/03_3.5.11.5/CDSv3.5_CmpOwenPidRegs_v2.1.pdf):


PB - полоса фильтра, задается в единицах регулируемой величины. Эта полоса защищает измерительный тракт от импульсных помех –
если текущее показание сильно отличается от предыдущего измеренного (более чем на значение полосы), то оно игнорируется и учитывается только следующее измерение.

Т. е. если оставить PB = 0, то при фильтрации будет учитываться каждое измеренное значение (в т. ч. "выбросы").

Captain Power
28.06.2023, 13:41
Подскажите, как очистить историю тревог из кода программы. (CodeSys 3.5)
Пример который есть в справке не работает. Компилятор ругается на AlarmConfigurationCount,GetAlarmConfiguration и ClearHistory

================================================== ===================
// очистка истории тревог из кода программы
VAR
itfAlarmConfiguration : AlarmManager.IAlarmConfiguration;
itfAlarmConfiguration7 : AlarmManager.IAlarmConfiguration7;
END_VAR
FOR i := 0 TO AlarmGlobals.g_AlarmHandler.AlarmConfigurationCoun t - 1 DO

itfAlarmConfiguration := AlarmGlobals.g_AlarmHandler.GetAlarmConfiguration( i);

IF __QUERYINTERFACE(itfAlarmConfiguration, itfAlarmConfiguration7) THEN

// сохраняем в журнале текущие тревоги
itfAlarmConfiguration7.ClearHistory(xKeepActiveAla rms := TRUE);
END_IF

END_FOR
================================================== ===================

Евгений Кислов
28.06.2023, 14:12
Подскажите, как очистить историю тревог из кода программы. (CodeSys 3.5)
Пример который есть в справке не работает. Компилятор ругается на AlarmConfigurationCount,GetAlarmConfiguration и ClearHistory

================================================== ===================
// очистка истории тревог из кода программы
VAR
itfAlarmConfiguration : AlarmManager.IAlarmConfiguration;
itfAlarmConfiguration7 : AlarmManager.IAlarmConfiguration7;
END_VAR
FOR i := 0 TO AlarmGlobals.g_AlarmHandler.AlarmConfigurationCoun t - 1 DO

itfAlarmConfiguration := AlarmGlobals.g_AlarmHandler.GetAlarmConfiguration( i);

IF __QUERYINTERFACE(itfAlarmConfiguration, itfAlarmConfiguration7) THEN

// сохраняем в журнале текущие тревоги
itfAlarmConfiguration7.ClearHistory(xKeepActiveAla rms := TRUE);
END_IF

END_FOR
================================================== ===================

Добрый день.
Какую версию CODESYS вы используете?

Captain Power
28.06.2023, 15:14
Startup profile: .................................................. ............. CODESYS V3.5 SP16 Patch 3
OS version: .................................................. .................. Microsoft Windows NT 10.0.19044.0
.NET version: .................................................. ................ 4.0.30319.42000

Евгений Кислов
28.06.2023, 16:09
Startup profile: .................................................. ............. CODESYS V3.5 SP16 Patch 3
OS version: .................................................. .................. Microsoft Windows NT 10.0.19044.0
.NET version: .................................................. ................ 4.0.30319.42000

В этой версии нет штатного способа очистки тревог из кода программы.
Приведенный вами фрагмент кода скомпилируется только в версии CODESYS V3.5 VSP17 и выше.

Captain Power
28.06.2023, 18:43
В этой версии нет штатного способа очистки тревог из кода программы.
Приведенный вами фрагмент кода скомпилируется только в версии CODESYS V3.5 VSP17 и выше.
У меня "СПК1хх [М01]", я так понимаю Codesys v3.5 sp17 с ней работать не будет?

Евгений Кислов
28.06.2023, 18:53
У меня "СПК1хх [М01]", я так понимаю Codesys v3.5 sp17 с ней работать не будет?

Будет, если перепрошить его.
Внимательно ознакомьтесь с информацией по обеим ссылкам:
https://owen.ru/forum/showthread.php?t=33954&p=389836&viewfull=1#post389836
https://owen.ru/forum/showthread.php?t=36852

Kipiamail
29.06.2023, 04:54
Раньше видел но сейчас не могу найти. Как скачать тревоги с СПК Codesys 3.5 SP17 и чем их можно просмотреть на компьютере.

Евгений Кислов
29.06.2023, 06:14
Раньше видел но сейчас не могу найти. Как скачать тревоги с СПК Codesys 3.5 SP17 и чем их можно просмотреть на компьютере.

Штатный способ (требующий подключение к контроллеру из CODESY) описан здесь:
https://youtu.be/LlLMSElG59I?t=352

Если такой вариант не подходит - то, например, можно использовать компонент OwenArchiver (который будет работать параллельно конфигурации тревог):
https://youtu.be/rpwvyahHevw

fergus23
29.06.2023, 08:38
Здравствуйте. Столкнулся с проблемой. На нажатие кнопки привязано изменение состояния переменной plc_prg.xSendCommand:=TRUE; на отправку запроса
в коде plc_prg прописано:
fb_Rtrig(CLK:=xSendCommand);
fb_SE3(xExecute:=xSendCommand, sCommand:=zapros);
IF fb_SE3.xDone THEN
xSendCommand:=FALSE;
xStatSave:=TRUE; // откл анимацию

В переменной string "zapros" прописывается команда на запуск bash скрипта (скрипт рабочий, команда на запуск работает при отправке из Putty и создается файл с данными из базы sql). При отправке команды с помощью функционального блока на плк - на флешке не создается файл с выгрузкой из базы sql.

код команды из "zapros"

zapros:='bash dir.sh';
zapros:=CONCAT((zapros),' ');
zapros:=CONCAT((zapros),TO_STRING("'"));
zapros:=CONCAT((zapros),StartDateStr);
zapros:=CONCAT((zapros),TO_STRING("'"));
zapros:=CONCAT((zapros),' ');
zapros:=CONCAT((zapros),TO_STRING("'"));
zapros:=CONCAT((zapros),EndDateStr);
zapros:=CONCAT((zapros),TO_STRING("'"));
zapros:=CONCAT((zapros),TO_STRING(' '));
zapros:=CONCAT((zapros),TO_STRING("'"));
zapros:=CONCAT((zapros),TO_STRING(StartTime));
zapros:=CONCAT((zapros),TO_STRING("'"));
zapros:=CONCAT((zapros),' ');
zapros:=CONCAT((zapros),TO_STRING("'"));
zapros:=CONCAT((zapros),TO_STRING(EndTime));
zapros:=CONCAT((zapros),TO_STRING("'"));
zapros:=CONCAT((zapros),TO_STRING(' '));
zapros:=CONCAT((zapros),TO_STRING(60));

конечный вид при отладке: 'bash dir.sh '28.06.2023' '29.06.2023' '08:45:50' '10:45:50' 60'

одинарные кавычки в середине запроса не нужно менять на двойные ?
скрипт dir.sh лежит в папке root. Создавал файл через WinSCP

fergus23
29.06.2023, 11:12
осталось сравнить конечный вид с тем что корректно работает в консоли, приложите скрин
Скриншоты прикрепляю. В консоли что с " что с ' кавычками без разницы, команда работает. А из ПЛК никак вообще не хочет работать.

Kipiamail
30.06.2023, 04:39
Codesys 3.5 SP 17 панель СПК 110(М01). На рабочем объекте словил неприятный глюк. Скопировал тревогу из одной группы в другую сделал логин с онлайн изменением никаких ошибок не было, но вот когда программа загрузилась адреналин у меня скакнул контроллер ушел в стоп с исключением, ладно копия была быстро загрузил и никто не заметил.

fergus23
30.06.2023, 06:15
осталось сравнить конечный вид с тем что корректно работает в консоли, приложите скрин

Прописал вручную параметры в скрипте, а в ПЛК оставил только команду bash dir.sh - всё равно ничего не работает. Может что то где то надо настроить/прописать, чтобы ПЛК мог выполнять bash скрипты ?

fergus23
30.06.2023, 06:47
вариантов много, экспериментируйте. Полный путь укажите, сделайте файл исполняемым, я ранее предлагал sh dir.sh а не bash

sh dir.sh тоже не работает из визуализации плк. Прописал chmod +x dir.sh - всё равно не работает. Как путь прописывается перед запуском скрипта ? /root/ sh dir.sh ?

fergus23
30.06.2023, 07:29
Помогло bash /root/dir.sh

fergus23
30.06.2023, 09:49
Подскажите, в примере по работе с файлами две кнопки "выбрать" и "скачать". А как сделать всё на одну кнопку ? По нажатию одной кнопки чтобы создавался файл (создается сейчас нормально) и сразу выходило окно, для указания места для скачивания его ?

Kipiamail
30.06.2023, 15:13
Подскажите пожалуйста как перенести проект на другой компьютер чтобы можно было подключится онлайн без загрузки проекта на СПК

Cs-Cs
01.07.2023, 09:46
Подскажите пожалуйста как перенести проект на другой компьютер чтобы можно было подключится онлайн без загрузки проекта на СПК
Надо перенести ВСЕ файлы, которые создаёт CodeSys для этого проекта в его папке. Там будут файлы с расширениями вида .compileinfo, .coreinfo и другие. Вот их и надо переносить.
По идее можно выдумать такой алгоритм:
1. На CodeSys создать Архив проекта со всеми-всеми галочками
2. На втором компьютере открыть его с CodeSys и распаковать. Таким образом перенесутся все используемые настройки, библиотеки и таргеты.
3. Затем скопировать ВСЮ папку с проектом и его файлами на второй компьютер.

Вот эти файлы надо все переносить:
68551

Kipiamail
01.07.2023, 11:02
Подскажите пожалуйста как перенести проект на другой компьютер чтобы можно было подключится онлайн без загрузки проекта на СПК
Разобрался!

Alex_SLS
02.07.2023, 15:22
Добрый день.
Подскажите FDBшку счетчика времени хода клапана, чтобы при открытии счетчик накапливался по времени, а при закрытии уменьшался, при максимальном значении (например 600 секунд) он выдавал выходной сигнал.
Нашел такой только для импульсов, называется CTUD, но мне нужен счетчик именно времени.

RV9WFJ
02.07.2023, 15:46
Берете системное время ПЛК, по RTrig на флаг движения запоминается время. В конце движения по FTrig ещё раз читаете время и вычитание из него первое. Разницу складываете в переменную с накопленным временем со знаком соответствующим направлению движения. Как-то так.

Евгений Кислов
02.07.2023, 18:32
Подскажите, в примере по работе с файлами две кнопки "выбрать" и "скачать". А как сделать всё на одну кнопку ? По нажатию одной кнопки чтобы создавался файл (создается сейчас нормально) и сразу выходило окно, для указания места для скачивания его ?

Вам нужно настроить в одной кнопке действия обоих кнопок примера.

fergus23
03.07.2023, 06:35
Вам нужно настроить в одной кнопке действия обоих кнопок примера.

Здравствуйте, это я сделал, но загвоздка в выборе последнего созданного (после нажатия на кнопку) файла - т.е перед скачиванием нужно же сделать выбор файла. У меня в имени файла пишется текущая дата, время, и период отчета.
Получается на кнопку "создать и скачать" у меня вот такой код:
Программа ST:

plc_prg.xSendCommand:=TRUE;

PLC_PRG.saveTime:=(OSU.DT_TO_STRING_FORMAT(TargetV ars.stRtc.dtDateAndTime,PLC_PRG.tFormat));
PLC_PRG.saveDir:='/mnt/ufs/media/mmcblk0p1/Reports/';
PLC_PRG.saveDir:=concat((PLC_PRG.saveDir),TO_STRIN G(PLC_PRG.saveTime));
PLC_PRG.saveDir:=concat((PLC_PRG.saveDir),TO_STRIN G('_'));
PLC_PRG.saveDir:=concat((PLC_PRG.saveDir),(PLC_PRG .disf)); // период отчета

PLC_PRG.fbFileListProvider.Initialize
(
stDirectory := '/mnt/ufs/media/mmcblk0p1/Reports/',
stFilter := 'csv(*.csv)|*.csv',
stFileIn := PLC_PRG.saveDir,
wstTitle :="Выбор отчета",
wsButtonOKTitle := "ОК",
bBrowseDirectory:=FALSE,
bTouch:=FALSE
);
Выполнить передачу:
Переменная с путем и именем файла PLC_PRG.saveDir (на момент нажатия кнопки т.к в имени дата и время с секундами). Имя файла в "stFileIn" совпадает с фактическим именем созданного файла
Файл генерируется, но окно сохранения на компьютер не появляется

Евгений Кислов
03.07.2023, 07:04
Здравствуйте, это я сделал, но загвоздка в выборе последнего созданного (после нажатия на кнопку) файла - т.е перед скачиванием нужно же сделать выбор файла. У меня в имени файла пишется текущая дата, время, и период отчета.
Получается на кнопку "создать и скачать" у меня вот такой код:
Программа ST:

plc_prg.xSendCommand:=TRUE;

PLC_PRG.saveTime:=(OSU.DT_TO_STRING_FORMAT(TargetV ars.stRtc.dtDateAndTime,PLC_PRG.tFormat));
PLC_PRG.saveDir:='/mnt/ufs/media/mmcblk0p1/Reports/';
PLC_PRG.saveDir:=concat((PLC_PRG.saveDir),TO_STRIN G(PLC_PRG.saveTime));
PLC_PRG.saveDir:=concat((PLC_PRG.saveDir),TO_STRIN G('_'));
PLC_PRG.saveDir:=concat((PLC_PRG.saveDir),(PLC_PRG .disf)); // период отчета

PLC_PRG.fbFileListProvider.Initialize
(
stDirectory := '/mnt/ufs/media/mmcblk0p1/Reports/',
stFilter := 'csv(*.csv)|*.csv',
stFileIn := PLC_PRG.saveDir,
wstTitle :="Выбор отчета",
wsButtonOKTitle := "ОК",
bBrowseDirectory:=FALSE,
bTouch:=FALSE
);
Выполнить передачу:
Переменная с путем и именем файла PLC_PRG.saveDir (на момент нажатия кнопки т.к в имени дата и время с секундами). Имя файла в "stFileIn" совпадает с фактическим именем созданного файла
Файл генерируется, но окно сохранения на компьютер не появляется

В вашем случае, на мой взгляд, fbFileListProvider вообще не нужен.
Вместо него используйте действие Передача файла.
https://youtu.be/IemOlv7FcQI

Файл будет сохранен в директорию загрузок браузера (по умолчанию обычно C:\User\имя_пользователя\Downloads)

fergus23
03.07.2023, 09:27
В вашем случае, на мой взгляд, fbFileListProvider вообще не нужен.
Вместо него используйте действие Передача файла.
https://youtu.be/IemOlv7FcQI

Файл будет сохранен в директорию загрузок браузера (по умолчанию обычно C:\User\имя_пользователя\Downloads)

Оставил код собирающий имя файла:

plc_prg.xSendCommand:=TRUE;
PLC_PRG.saveTime:=(OSU.DT_TO_STRING_FORMAT(TargetV ars.stRtc.dtDateAndTime,PLC_PRG.tFormat));
PLC_PRG.saveDir:=TO_STRING(PLC_PRG.saveTime);
PLC_PRG.saveDir:=concat((PLC_PRG.saveDir),TO_STRIN G('_'));
PLC_PRG.saveDir:=concat((PLC_PRG.saveDir),(PLC_PRG .disf));
PLC_PRG.saveDir:=concat((PLC_PRG.saveDir),TO_STRIN G('.csv'));

имя созданного файла: 03.07.2023_11-30-05_1_sec.csv
имя файла для скачивания (PLC_PRG.saveDir) : 03.07.2023_11-30-05_1_sec.csv
и "передача файла" из визуализации на ПК ( PLC_PRG.saveDir ).
Нажимаю кнопку - файл создается, но не скачивается на ПК.

Евгений Кислов
03.07.2023, 09:38
Оставил код собирающий имя файла:

plc_prg.xSendCommand:=TRUE;
PLC_PRG.saveTime:=(OSU.DT_TO_STRING_FORMAT(TargetV ars.stRtc.dtDateAndTime,PLC_PRG.tFormat));
PLC_PRG.saveDir:=TO_STRING(PLC_PRG.saveTime);
PLC_PRG.saveDir:=concat((PLC_PRG.saveDir),TO_STRIN G('_'));
PLC_PRG.saveDir:=concat((PLC_PRG.saveDir),(PLC_PRG .disf));
PLC_PRG.saveDir:=concat((PLC_PRG.saveDir),TO_STRIN G('.csv'));

имя созданного файла: 03.07.2023_11-30-05_1_sec.csv
имя файла для скачивания (PLC_PRG.saveDir) : 03.07.2023_11-30-05_1_sec.csv
и "передача файла" из визуализации на ПК ( PLC_PRG.saveDir ).
Нажимаю кнопку - файл создается, но не скачивается на ПК.

Выложите простейший проект, в котором я смогу это воспроизвести (со всеми нужными доп. файлами).

fergus23
03.07.2023, 09:53
Выложите простейший проект, в котором я смогу это воспроизвести (со всеми нужными доп. файлами).

Разобрался. Разкоментил добавление пути перед именем файла, всё заработало )

lobster
03.07.2023, 15:53
Здравствуйте, постоянно слетает версия библиотеки ( скрин прилагаю), это нормальное явление? Как правильно подобрать версии библиотек для проекта?68594

Евгений Кислов
03.07.2023, 16:28
Здравствуйте, постоянно слетает версия библиотеки ( скрин прилагаю), это нормальное явление? Как правильно подобрать версии библиотек для проекта?68594

Добрый день.
Видимо, у вас в дереве проекта выбраны компоненты Modbus версии 3.5.14.
Нужно их удалить и добавить заново так, чтобы их версии не превышали 3.5.5.5.

KIB52
03.07.2023, 17:02
Добрый день. Подскажите, пожалуйста, какие настройки изменить в CoDeSys 3.5, чтобы при программировании на языке LD каждой строке можно было добавить комментарий.

Евгений Кислов
03.07.2023, 17:52
Добрый день. Подскажите, пожалуйста, какие настройки изменить в CoDeSys 3.5, чтобы при программировании на языке LD каждой строке можно было добавить комментарий.

Добрый день.
Инструменты - Опции - Редактор FBD, LD и IL - Общее - Показывать комментарий цепи

Zerling
04.07.2023, 06:15
Здравствуйте.
К ПЛК подключен по модбас дисплей(в дисплее время между фреймами - выставил 100мс). 115200кбод

Сначала я загружаю значения из памяти ПЛК, а потом через дисплей меняю. 15(адреса последовательно идут) переменных - и чтение и запись... но переменные обновляются раз в 3 или 6 секунд, за это время куча циклов проходит и прога ведет себя не как надо.

Разъясните невежде - что такое фрейм? это каждый "канал"?
быстрее же обмен будет у устройства в котором 1 канал модбаса (допустим 10 слов - в массиве привяжем нужные переменки), вместо 10 отдельных каналов с переменками?

Cs-Cs
04.07.2023, 08:15
Zerling Фрейм - это одна посылка данных по протоколу Modbus. Например, запрос на запись или чтение - это одна посылка. Ответ на это запрос - вторая посылка.
Пауза нужна для того, что некоторые устройства могут не успевать отвечать на слишком быстрые запросы. Оставь её в 5 мсек.
И - да - один групповой запрос на чтение или запись сразу нескольких регистров быстрее, чем отдельные запросы на каждый. То есть - да - сокращай число каналов опроса.

TFear
06.07.2023, 12:54
Доброго времени суток!

Подскажите, возможно ли подключить симулятор ПЛК CODESYS Control Win SysTray к симулятору панели Wintek MT8102iE? Теги импортировать получилось, а вот законектится никак((((

Евгений Кислов
06.07.2023, 13:10
Доброго времени суток!

Подскажите, возможно ли подключить симулятор ПЛК CODESYS Control Win SysTray к симулятору панели Wintek MT8102iE? Теги импортировать получилось, а вот законектится никак((((

Добрый день.
Насколько я помню - это возможно.

TFear
06.07.2023, 13:14
Спасибо, это обнадеживает, но не затруднит ли вас написать каким образом это можно сделать или где про это почитать?

Евгений Кислов
06.07.2023, 13:25
Спасибо, это обнадеживает, но не затруднит ли вас написать каким образом это можно сделать или где про это почитать?

Уточните, по какому протоколу вы хотите настроить связь и кто будет клиентом, а кто сервером.

1exan
07.07.2023, 05:40
Есть ФБ 'НазваниеФБ' на SFC.
В ФБ переменная 'ИмяПеременной' типа STRUCT, объявленная в VAR_IN_OUT блока.
В ФБ есть переход 'ИмяПерехода', использующий значение одного из полей 'ИмяПеременной' в качестве условия.

Не могу понять смысл предупреждения:
C0371: Обращение к VAR_IN_OUT 'ИмяПеременной', объявленной в 'НазваниеФБ', из внешнего контекста '__getИмяПерехода'

Эти предупреждения - только на переходы с использованием этой переменной, на действия, содержащие в коде эту переменную, предупреждений нет

Евгений Кислов
07.07.2023, 06:32
Есть ФБ 'НазваниеФБ' на SFC.
В ФБ переменная 'ИмяПеременной' типа STRUCT, объявленная в VAR_IN_OUT блока.
В ФБ есть переход 'ИмяПерехода', использующий значение одного из полей 'ИмяПеременной' в качестве условия.

Не могу понять смысл предупреждения:
C0371: Обращение к VAR_IN_OUT 'ИмяПеременной', объявленной в 'НазваниеФБ', из внешнего контекста '__getИмяПерехода'

Эти предупреждения - только на переходы с использованием этой переменной, на действия, содержащие в коде эту переменную, предупреждений нет

https://infosys.beckhoff.com/english.php?content=../content/1033/tc3_plc_intro/9007201785048459-2.html&id=
См. раздел "Access to VAR_IN_OUT variables of the function block in a method/transition/property"

Коротко - если вызов перехода произойдет до того, как к VAR_IN_OUT в экземпляре ФБ будут привязаны какие-то переменные, то произойдет исключение из-за неициализированной ссылки (т. к. работа с VAR_IN_OUT происходит по ссылкам).
Компилятор предупреждает вас именно об этом.

iv.kmz
07.07.2023, 14:03
Здравствуйте!

Подскажите, можно ли что-то сделать, чтобы не писать каждый раз TargetVars. (и т.п.) при обращении к глобальным переменным?
Т.е. вместо Targetvars.V1 :=... сразу V1 :=...

Евгений Кислов
07.07.2023, 14:07
Здравствуйте!

Подскажите, можно ли что-то сделать, чтобы не писать каждый раз TargetVars. (и т.п.) при обращении к глобальным переменным?
Т.е. вместо Targetvars.V1 :=... сразу V1 :=...

Добрый день.
Именно "TargetVars" - можно, для этого достаточно убрать строку {attribute 'qualified_only'} в узле TargetVars.
Но это затруднит чтение вашего кода другими людьми - им потребуется больше времени, чтобы понять где именно объявлена V1.

WhyNot
07.07.2023, 14:30
Добрый день.
Подскажите почему при обрыве соединения owencommunication закрывает полностью модбас порт.
InsatModbusServer опрашивает 210 ПЛК, если вытащить изернет кабель и затем подключить то повторное соединение не проходит, посмотрел nmap порт 502 закрыт, помогает сброс ПЛК.

Вот код modbus slave:


68715

P.S NOT error это эксперемнты уже были. Изначально там просто было: fbModbusTcpSlave(xEnable := TRUE, ...

Евгений Кислов
07.07.2023, 20:56
Добрый день.
Подскажите почему при обрыве соединения owencommunication закрывает полностью модбас порт.
InsatModbusServer опрашивает 210 ПЛК, если вытащить изернет кабель и затем подключить то повторное соединение не проходит, посмотрел nmap порт 502 закрыт, помогает сброс ПЛК.

Вот код modbus slave:


68715

P.S NOT error это эксперемнты уже были. Изначально там просто было: fbModbusTcpSlave(xEnable := TRUE, ...

Добрый день.
Ответ здесь:
https://owen.ru/forum/showthread.php?t=36837

iv.kmz
10.07.2023, 09:10
Здравствуйте!

создал PERSISTENT RETAIN переменную

{attribute 'qualified_only'}
VAR_GLOBAL PERSISTENT RETAIN
AI_Profiles : ARRAY [1..AI_Signals_Count] OF AIP_Data;
END_VAR

При компиляции выдаёт предупреждение:
C0244: Не найден подходящий путь в VAR_PERSISTENT-списке для переменной GPR.AI_Profiles. Используйте команду "Добавить все пути экземпляров"

Ошибок при этом нет.

Нажимал Добавить все пути экземпляров. Не помогает. Предупреждение остаётся.

Подскажите, что от меня хочет CoDeSys? М.б. где-то в ручную нужно ещё что-то прописать? Или просто не обращать внимание?

Евгений Кислов
10.07.2023, 09:12
Здравствуйте!

создал PERSISTENT RETAIN переменную

{attribute 'qualified_only'}
VAR_GLOBAL PERSISTENT RETAIN
AI_Profiles : ARRAY [1..AI_Signals_Count] OF AIP_Data;
END_VAR

При компиляции выдаёт предупреждение:
C0244: Не найден подходящий путь в VAR_PERSISTENT-списке для переменной GPR.AI_Profiles. Используйте команду "Добавить все пути экземпляров"

Ошибок при этом нет.

Нажимал Добавить все пути экземпляров. Не помогает. Предупреждение остаётся.

Подскажите, что от меня хочет CoDeSys? М.б. где-то в ручную нужно ещё что-то прописать? Или просто не обращать внимание?

Добрый день.
Вы добавили в дерево проекта объект PERSISTENT-переменные?

lobster
10.07.2023, 09:46
Кратко по проекту: Имеется панель оператора СПК 107 на которую передается информация и осуществляется управление исполнительными устройствами по радиоканалу через rs 485 несколькими ПР 200. При разработке проекта и подключенной одной ПР 200 все работало как положено, как только добавил вторую ПР 200 появилась задержка при отправке команды на управление исп. устройством. Получилось решить данную проблему с помощью костылей установкой блока времени TP и уставкой в 6 сек. на запись булевых переменных ( скриншот №1). Прошу вашей помощи разобраться так как мне необходимо еще привязать несколько ПР200 и эта задержка носит линейных характер и будет увеличиватся с привязкой новых устройств. Я новичек в этом деле, азы знаю, но нюансы хворают.68741

Евгений Кислов
10.07.2023, 09:50
Кратко по проекту: Имеется панель оператора СПК 107 на которую передается информация и осуществляется управление исполнительными устройствами по радиоканалу через rs 485 несколькими ПР 200. При разработке проекта и подключенной одной ПР 200 все работало как положено, как только добавил вторую ПР 200 появилась задержка при отправке команды на управление исп. устройством. Получилось решить данную проблему с помощью костылей установкой блока времени TP и уставкой в 6 сек. на запись булевых переменных ( скриншот №1). Прошу вашей помощи разобраться так как мне необходимо еще привязать несколько ПР200 и эта задержка носит линейных характер и будет увеличиватся с привязкой новых устройств. Я новичек в этом деле, азы знаю, но нюансы хворают.68741

Отправьте, пожалуйста, ваш вопрос на support@owen.ru. К письму приложите проекты для CODESYS и OwenLogic.