Нашёл PersistentVars, спасибо. Его добавить нельзя почему-то, но он был создан автоматически
Вид для печати
Напомните пожалуйста, как вызывать ФБ, у которого имеются переменные типа VAR_IN_OUT в языке ST? Просто присваиванием, или там хитрее синтаксис? Например, ONTIME из OSCAT Basic:
fbOntime(IN := xVar1, RST := xVar2, CYCLES := udiVar1, SECONDS :=udiVar2);
здравствуйте, подскажите пожалуйста, работаю с ПЛК210 и вот такое сообщение.Вложение 68803
порты езернет настроены на разные ип. Как такое можно исправить?
Еще раз здравствуйте, так и не могу настроить модули ввода вывода. Подскажите, где параметр порта менять?Вложение 68810
Добрый день. Я использую в проекте управление пользователями. Хочу вывести на экран таймер до автоматического Logout из-за неактивности пользователя на визуализации. Существует ли какая-то BOOL переменная, которая отвечает за активность пользователя? Или можно сразу достать таймер, который отчитывается сам где-то фоном?
Прошу руководство компании ОВЕН объявить благодарность Евгению Кислову за своевременную помощь и поддержку при настройке ПЛК 210!!! Благодарю Вас Евгений, спасибо большое!!!
Добрый день.
См. п. 10.3.7 (конкретнее - табл. 10.3 на стр. 375):
https://ftp.owen.ru/CoDeSys3/11_Docu..._Visu_v3.0.pdf
Добрый день. ПЛК 200, на SD карте база sqlite. Через Putty командами создал таблицу и заполнил ее данными, проверил - данные записались. Через "веб" перезагрузил ПЛК. Подключился повторно Putty, пытаюсь прочитать данные из созданной таблицы, а ее нету. Почему так ?
UPD
воспроизвел все действия еще раз - таблица созданная осталась
День добрый.
Подскажите как узнать программно, есть ли активные тревоги определеннго класса, например класса "error".
Спасибо!
Добрый день.
Вам нужно изучить эти материалы:
https://content.helpme-codesys.com/e...iveAlarms.html
https://youtu.be/R4mHOPzAkUA
https://ftp.owen.ru/CoDeSys3/21_Exam...anager.package
Здравствуйте!
Правильно ли я понимаю, что если для ПЛК200 создать 2 элемента Modbus_TCP_Master и к каждому добавить по 1 ME210_701, то опрос ME210_701 будет проходить в многопоточном режиме (параллельно) (Вариант А), а если создать только 1 Modbus_TCP_Master и добавить в него оба ME210_701, то опрос будет происходить последовательно (Вариант Б)?
Вариант А:
Modbus_TCP_Master_1
ME210_701_1
Modbus_TCP_Master_2
ME210_701_2
Вариант Б:
Modbus_TCP_Master
ME210_701_1
ME210_701_2
Добрый день.
Пытаюсь преобразовать код ошибки связи в текст и почему-то выводит не правильно
Код:
A111.byModbusError имеет значение 0 т.е. RESPONSE_SUCCESS соответственно должно писать связь востановлена, но пишет что связь потерянаЦитата:
// Ошибка связи с МВ210-101
xModbusError_A111 := A111.byModbusError <> IoDrvModbus.MB_ErrorCodes.RESPONSE_SUCCESS; // проверка наличии ошибки
fbA111Ton(IN := NOT (xModbusError_A111), PT := T#5S); // Таймер на тот случай когда ошибка не постоянная
xModbusStatusAlarm_A111 := NOT (fbA111Ton.Q); // Установка наличии ошибки
IF xModbusError_A111 THEN
wsModbusError_A111 := MB_MODBUS_ERROR_TO_WSTRING(A111.byModbusError) ; // Вывод названии ошибки
wsModbusError_A111 := wConcat (wsModbusError_A111, wsNameA111);
ELSE
xModbusError_A111 := FALSE ;
END_IF
в функции написано правильно
Что делаю не так?Цитата:
CASE eError_Modbus OF
IoDrvModbus.MB_ErrorCodes.RESPONSE_SUCCESS :
MB_MODBUS_ERROR_TO_WSTRING := "Связь востановлена";
.....
IoDrvModbus.MB_ErrorCodes.UNDEFINED :
MB_MODBUS_ERROR_TO_WSTRING := "Потеря связи";
END_CASE
sco-scorpion Если я не туплю и если смотреть код, показанный на картинке, то у тебя же текст ошибки переводится в строку только когда в IF выполняется TRUE.
А когда в IF выполняется ветка ELSE - то строка ошибки не меняется, и остаётся как есть.
На будущее: весь этот код лучше не копипастить под A111 и так далее, а сделать отдельный FB с каким-нить говорящим названием "MBDeviceCheck", и уже его экземпляры вызывать для модулей IO или других устройств. Я так и делаю. Как-нить напишу статью про это...
PS. Евгений Кислов, ахаха, мы в одно время ответили =))
Я не правильно написал условие, должно быть:
Теперь все корректно.Цитата:
IF xModbusStatusAlarm_A111 THEN
wsModbusError_A111 := MB_MODBUS_ERROR_TO_WSTRING(A111.byModbusError) ; // Вывод названии ошибки
wsModbusError_A111 := wConcat (wsModbusError_A111, wsNameA111);
ELSE
xModbusError_A111 := FALSE ;
END_IF
Ну лучше сразу написать FB, а не копипастить A112, A111 и так далее, чтобы не путаться. Торопыжничество вида "ща сделаю кое-как, а потом сделаю нормально" приводит к глюкам, ерунде и фигне. А что будет, если потом тебе захочется добавить какое-то другое вычисление ошибки Modbus, и надо будет этот кусок кода копипастить во все места?
Вложение 68968
К сожалению, нет. Принципы работы опишу потом в статье у себя на сайте. Они простые: построены на том же, на чём у тебя - отлов серии нескольких ошибок подряд через TON/TOF. А дальше тупо считается статистика: сколько штук ошибок было, сколько штук успешных опросов.
Решил все таки попробовать сделать ФБ, я так понимаю на вход мы передаем сигнал ошибки
и в самом начале кодесис начинает ругаться что не понимает что такое xError_Modbus : IoDrvModbus.xError;Цитата:
FUNCTION_BLOCK MBDeviceCheck
VAR_INPUT
xError_Modbus : IoDrvModbus.xError;
END_VAR
VAR_OUTPUT
xModbusStatusAlarm : BOOL; // Установка наличии ошибки
wsModbusError : WSTRING; // Вывод названии ошибки
END_VAR
VAR
eError_Modbus : IoDrvModbus.MB_ErrorCodes;
fbTon : TON;
END_VAR
сам ФБ вызываю
Цитата:
MBDeviceCheck(xError_Modbus:= A111.byModbusError, xModbusStatusAlarm=> xCheck, wsModbusError=> wsCheck);
Вы же ФБ делаете на разные случаи, а пытаетесь конкретный вход IoDrvModbus.xError; прямо в ФБ воткнуть, надо так
А уже потом на вход нужноеКод:VAR_INPUT
xError : BOOL;
END_VAR
MBDeviceCheck(xError:= A111.byModbusError, xModbusStatusAlarm=> xCheck, wsModbusError=> wsCheck);
А это в VAR, вообще вставлять не надо. Получится внутренняя (неизвестного типа) переменная ФБ, вместо глобальной, потому и ругается.
Код:VAR
eError_Modbus : IoDrvModbus.MB_ErrorCodes; // Это убрать
fbTon : TON;
END_VAR
Добрый день, подскажите а можно ли как то в CS удалить не используемые переменные в автоматическом режиме?
Подскажите с помощью чего или как можно передать значение ошибки A111.byModbusError в ФБ ?
Я хочу передать на вход ФБ значение кода ошибки чтобы потом преобразовать в текстовое значение т.е. A111.byModbusError имеет значение RESPONSE_SUCCESS на входе ФБ я получаю это значение и с ним что-то делаю.
Вызов ФБ:
Сам ФБ:Цитата:
Check_1(xError_Modbus:= A111.xConfirmError, sName := A111_OwenDriver.ProjectName, Code :=A111.byModbusError , xModbusStatusAlarm=> xCheck, wsModbus_Error=> wsCheck);
Цитата:
VAR_INPUT
xError_Modbus : BOOL;
sName : STRING;
Code : ??? ;
END_VAR
VAR_OUTPUT
xModbusStatusAlarm : BOOL; // Установка наличии ошибки
wsModbus_Error : WSTRING; // Вывод названии ошибки
END_VAR
Сode: IoDrvModbusTcp.MB_ErrorCodes;
И надо будет сделать так:
https://youtu.be/IFUN4cYskRI?t=286
Здравствуйте!
Не нашел ссылки на материал, который описывает в какой библиотеке искать какие ФБ... Например, нужен реверсивный счётчик. Или счётчик времени-таймер. Или ПИД-регулятор. Не спрашивать же по каждому нужному элементу? И не изучать же описания всех библиотек на всякий случай? Не ткнёте меня носом в такой перечень-описание?
Для некоторых библиотек есть созданная нами документация на русском.
Конкретно для Standard и Util - есть описание на русском из руководства CoDeSys V2.3 (приложение D):
https://owen.ru/uploads/373/cds23_manual_v2.8.pdf
В V3.5 каких-то существенных отличий от V2.3 в плане этих библиотек нет.