Связь со мной: telegram: @JuneSmellsLikeBlood | e-mail: e.kislov@owen.ru (личка на форуме - не подходит)
Раздел CDS V3.5 на сайте | Основные темы по CDS V3.5 на форуме: Вопросы и ответы | Визуализация | Настройка обмена с другими устройствами
Repository Archive V3.5 SP4 (необходим для СПК207/СПК1хх без Eth/ПЛК3xx)
oscat.ru | Как обратиться в техподдержку? | Как отлаживать ошибки | Отладка проектов в CODESYS V3.5 | Проблема XY | Как правильно задавать вопросы | AnyDesk
Прошу помощи по рефакторингу. Задача есть мотор асинхронный кнопка ПУСК без фиксации кнопка СТОП с фиксацией и контроль за АВАРИЯМИ по току и температуре.
Код://интерфейс аварий 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. чтоб подключиться?Снимок.PNG
Последний раз редактировалось sssssaaaaabbbbb; 21.12.2023 в 14:54.
Добрый день.
Посмотрите примеры в этом документе:
https://ftp.owen.ru/CoDeSys3/11_Docu...5_OPC_v3.0.pdf
Связь со мной: telegram: @JuneSmellsLikeBlood | e-mail: e.kislov@owen.ru (личка на форуме - не подходит)
Раздел CDS V3.5 на сайте | Основные темы по CDS V3.5 на форуме: Вопросы и ответы | Визуализация | Настройка обмена с другими устройствами
Repository Archive V3.5 SP4 (необходим для СПК207/СПК1хх без Eth/ПЛК3xx)
oscat.ru | Как обратиться в техподдержку? | Как отлаживать ошибки | Отладка проектов в CODESYS V3.5 | Проблема XY | Как правильно задавать вопросы | AnyDesk
Как мне считать эти цифры? Снимок.PNG
Связь со мной: telegram: @JuneSmellsLikeBlood | e-mail: e.kislov@owen.ru (личка на форуме - не подходит)
Раздел CDS V3.5 на сайте | Основные темы по CDS V3.5 на форуме: Вопросы и ответы | Визуализация | Настройка обмена с другими устройствами
Repository Archive V3.5 SP4 (необходим для СПК207/СПК1хх без Eth/ПЛК3xx)
oscat.ru | Как обратиться в техподдержку? | Как отлаживать ошибки | Отладка проектов в CODESYS V3.5 | Проблема XY | Как правильно задавать вопросы | AnyDesk
Снимок.PNG это я уже делал
Используйте вместо Modbus Poll другое ПО, в котором есть логи - например, Modbus Universal MasterOPC
https://masteropc.ru/download
Связь со мной: telegram: @JuneSmellsLikeBlood | e-mail: e.kislov@owen.ru (личка на форуме - не подходит)
Раздел CDS V3.5 на сайте | Основные темы по CDS V3.5 на форуме: Вопросы и ответы | Визуализация | Настройка обмена с другими устройствами
Repository Archive V3.5 SP4 (необходим для СПК207/СПК1хх без Eth/ПЛК3xx)
oscat.ru | Как обратиться в техподдержку? | Как отлаживать ошибки | Отладка проектов в CODESYS V3.5 | Проблема XY | Как правильно задавать вопросы | AnyDesk
Добрый вечер.
Подскажите пожалуйста, как правильно организовать задержку в цикле.
Поскольку из-за того что в 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