Попробуйте сами пока что перенести проект на другой ПК и проверить. Или закрыть и открыть CODESYS заново.
Я думаю, у вас на ПК информация о соединении просто прокэшировалась.
Вид для печати
Прошу помощи по рефакторингу. Задача есть мотор асинхронный кнопка ПУСК без фиксации кнопка СТОП с фиксацией и контроль за АВАРИЯМИ по току и температуре.
Код://интерфейс аварий
INTERFACE IAlarm
// Метод выключения Аварии
METHOD AlarmOff : BOOL
VAR_INPUT
END_VAR
// Метод включения Аварии
METHOD AlarmOn : BOOL
VAR_INPUT
END_VAR
// Интерфей Моторов
INTERFACE IMotor
// выключить мотор
METHOD MotorOff : BOOL
VAR_INPUT
END_VAR
// включить Мотор
METHOD MotorOn : BOOL
VAR_INPUT
END_VAR
---------------------------------------------
// класс мотор с отслеживанием аварии
FUNCTION_BLOCK classMotor IMPLEMENTS IMotor, IAlarm
VAR_INPUT
onMotor: BOOL;// запуск мотора
offMotor: BOOL;// выключение мотора
alarmKz: BOOL; //авария короткого замыкания
alarmTemp: BOOL;//авария по температуре
END_VAR
VAR_OUTPUT
motorOut: BOOL;//выход мотора
motorAlarmOut: BOOL;// выход аварии мотора
END_VAR
VAR
// Логика работы
motorTrigRs: Standard.RS;
statusMotor: BOOL;
statusAlarm: BOOL;
END_VAR
// запуск мотора
motorTrigRs(SET:= onMotor, RESET1:= offMotor OR motorAlarmOut);
IF motorTrigRs.Q1 THEN
MotorOn();
ELSE
MotorOff();
END_IF
motorOut:= statusMotor;
// отследить аварию мотора
IF alarmKz OR alarmTemp THEN
AlarmOn();
ELSE
AlarmOff();
END_IF
motorAlarmOut:= statusAlarm;
(* Метод выключения Аварии*)
METHOD AlarmOff : BOOL
statusAlarm:= FALSE;
(* Метод включения Аварии*)
METHOD AlarmOn : BOOL
statusAlarm:= TRUE;
(* выключить мотор*)
METHOD MotorOff : BOOL
statusMotor:= FALSE;
(* включить Мотор*)
METHOD MotorOn : BOOL
statusMotor:= TRUE;
--------------------------------------------
PROGRAM PLC_PRG
VAR
// блок моторов
// входы
InStartMotor_2:BOOL;// пуск мотора
InStopMotor_2: BOOL;// стоп мотора
// авария мотора
InAlarmKz_2,InAlarmTemp_2: BOOL;
// выходы мотора
Q_2Motor: BOOL;
Q_2Alarm: BOOL;
// объект мотор
objMotor_2: classMotor;
END_VAR
objMotor_2(onMotor:= InStartMotor_2,offMotor:= InStopMotor_2,// включить мотор
alarmKz:= InAlarmKz_2,alarmTemp:= InAlarmTemp_2,// отслеживаем аварию
motorOut=> Q_2Motor,motorAlarmOut=> Q_2Alarm);// визуализация выходов мотора и аварии
Здравствуйте коллеги, подскажите пожалуйста, как подключиться к симплскаде от ПЛК210? говорят, что можно как то через символьные переменные и по ОПС серверу(arOPC). Что нужно включить или настроить у ПЛК 210. чтоб подключиться?Вложение 72537
Добрый день.
Посмотрите примеры в этом документе:
https://ftp.owen.ru/CoDeSys3/11_Docu...5_OPC_v3.0.pdf
Как мне считать эти цифры? Вложение 72539
Вложение 72540 это я уже делал
Используйте вместо Modbus Poll другое ПО, в котором есть логи - например, Modbus Universal MasterOPC
https://masteropc.ru/download
Добрый вечер.
Подскажите пожалуйста, как правильно организовать задержку в цикле.
Поскольку из-за того что в string можно затолкать всего 255 символов, курл со всеми токенами и ботАйДи занимает 164 символа UTF-8 оставляя на сообщение около 45 символов UTF16
Оттого появилась задача - отправлять сообщения в телеграм с задержкой в 2 секунды в связи с ограничением API не более 30 сообщений в минуту и не более 1 в секунд.
Хотел затолкать TON прямо в начало цикла, типа wait. но не понимаю как его правильно прикрутить.
Код:IF eStatus <> Mx210Assistant.ANALOG_SENSOR_ERRORS.NO_ERROR
THEN xSensorError := TRUE;
wsErrorMessage := ANALOG_SENSOR_ERROR_TO_WSTRING(eStatus);
wsMessage := WCONCAT(wsSensorName,wsErrorMessage);
sCommand := OSU.ReplaceAllSubstrings(c_sCommand, '#TOKEN#', sToken);
sCommand := OSU.ReplaceAllSubstrings(sCommand, '#CHAT_ID#', sChatId);
sCommand := OSU.ReplaceAllSubstrings(sCommand, '#PARSE_MODE#', sParseMode);
STU.ConvertUTF16toUTF8(ADR(wsMessage), ADR(sUtf8Message), SIZEOF(sUtf8Message), FALSE);
sCommand := OSU.ReplaceAllSubstrings(sCommand, '#TEXT#', sUtf8Message);
ELSIF rValue > rHiSpDeviationLevel OR rValue < rLowSpDeviationLevel
THEN
rValueRound := OSCAT_BASIC.ROUND(rValue,2);
wsValueText := TO_WSTRING(rValueRound);
wsSetPointText := TO_WSTRING(rSetPoint);
wsMaxDevPerc := TO_WSTRING(iMaxDeviationPercent);
awsMessage[1] := wsSensorName;
awsMessage[2] := OSU.WCONCAT8("Отклонился от уставки", wsSetPointText, " более чем на ", wsMaxDevPerc, "%");
awsMessage[3] := OSU.WCONCAT4("Текущее значение датчика", wsValueText, wsUnitsName, "");
FOR i := 1 TO 3 DO
sCommand := OSU.ReplaceAllSubstrings(c_sCommand, '#TOKEN#', sToken);
sCommand := OSU.ReplaceAllSubstrings(sCommand, '#CHAT_ID#', sChatId);
sCommand := OSU.ReplaceAllSubstrings(sCommand, '#PARSE_MODE#', sParseMode);
STU.ConvertUTF16toUTF8(ADR(awsMessage[i]), ADR(sUtf8Message), SIZEOF(sUtf8Message), FALSE);
sCommand := OSU.ReplaceAllSubstrings(sCommand, '#TEXT#', sUtf8Message);
END_FOR
ELSE
xSensorOK := TRUE;
END_IF