У вас запись в wsModbusError_Alll выполняется только по условию xModbusError_Alll - а оно, видимо, не выполняется.
Будем ждать. =)
Вид для печати
Я не правильно написал условие, должно быть:
Теперь все корректно.Цитата:
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 удалить не используемые переменные в автоматическом режиме?