Вместо Enable:=FALSE; необходимо вызывать соответствующий ФБ в стиле
MV110_8acAdr7(Enable:= FALSE, Buffer:=Buffer);
Вместо Enable:=FALSE; необходимо вызывать соответствующий ФБ в стиле
MV110_8acAdr7(Enable:= FALSE, Buffer:=Buffer);
СODESYS V3.5: Repository Archive V3.5 SP4 (необходим для старых СПК) / Раздел CDS V3.5 на сайте
Форум: Вопросы и ответы / Визуализация / Настройка обмена с другими устройствами
Web-панель ВП110 / Modbus-индикатор СМИ2-М
Telegram: @JuneSmellsLikeBlood | e-mail: e.kislov@owen.ru | oscat.ru | Как обратиться в техподдержку?
Как отлаживать ошибки | Отладка проектов в CODESYS V3.5 | XY problem | Как правильно задавать вопросы | AnyDesk
Ситуация не изменилась, модуль 2АС зависает...
Код:IF ComServiceCOM2.Ready THEN CASE Step OF 0: IF MV110_8ABoks1 THEN Step:=1; ELSE Step:=2;END_IF 1: Enable:=TRUE; MV110_8aAdr5( Enable:= Enable, Mode:= MB_RTU, DevAddr:= 5, FirstAddr:= 0, Quantity:= 47, ComHandle:= ComServiceCOM2.Handle, TimeOut:= TimeOut, Buffer:= Buffer, Complete=> Complete, Exception=> ErrorMV110_8aAdr5, ByteCnt=> DataSize); IF Complete (*если установлен признак завершения операции, то *) THEN IF ErrorMV110_8aAdr5=0 THEN BufferDataM1AI:=Buffer;END_IF IF ErrorMV110_8aAdr5<>0 AND AlarmMV110_8aAdr5=FALSE THEN AmountMV110_8aAdr5:=AmountMV110_8aAdr5+1; ELSE AmountMV110_8aAdr5:=0;END_IF IF AmountMV110_8aAdr5>SetAmount THEN AlarmMV110_8aAdr5:=TRUE;END_IF MV110_8aAdr5(Enable:= FALSE, Buffer:=Buffer); Step:=2; (*переходим к выполнению следующего ФБ*) END_IF 2: IF MV110_8ABoks2 THEN Step:=3; ELSE Step:=4;END_IF 3: Enable:=TRUE; MV110_8aAdr6( Enable:= Enable, Mode:= MB_RTU, DevAddr:= 6, FirstAddr:= 0, Quantity:= 47, ComHandle:= ComServiceCOM2.Handle, TimeOut:= TimeOut, Buffer:= Buffer, Complete=> Complete, Exception=> ErrorMV110_8aAdr6, ByteCnt=> DataSize); IF Complete (*если установлен признак завершения операции, то *) THEN IF ErrorMV110_8aAdr6=0 THEN BufferDataM2AI:=Buffer;END_IF IF ErrorMV110_8aAdr6<>0 AND AlarmMV110_8aAdr6=FALSE THEN AmountMV110_8aAdr6:=AmountMV110_8aAdr6+1; ELSE AmountMV110_8aAdr6:=0;END_IF IF AmountMV110_8aAdr6>SetAmount THEN AlarmMV110_8aAdr6:=TRUE;END_IF MV110_8aAdr6(Enable:= FALSE, Buffer:=Buffer); Step:=4; (*переходим к выполнению следующего ФБ*) END_IF 4: IF MV110_2AC THEN Step:=5; ELSE Step:=6;END_IF 5: Enable:=TRUE; MV110_8acAdr7( Enable:= Enable, Mode:= MB_RTU, DevAddr:= 100, FirstAddr:= 264, Quantity:= 6, ComHandle:= ComServiceCOM2.Handle, TimeOut:= TimeOut, Buffer:= Buffer, Complete=> Complete, Exception=> ErrorMV110_2acAdr7, ByteCnt=> DataSize); IF Complete (*если установлен признак завершения операции, то *) THEN IF ErrorMV110_2acAdr7=0 THEN BufferDataM3AI:=Buffer;END_IF IF ErrorMV110_2acAdr7<>0 AND AlarmMV110_2acAdr7=FALSE THEN AmountMV110_8acAdr7:=AmountMV110_8acAdr7+1; ELSE AmountMV110_8acAdr7:=0;END_IF IF AmountMV110_8acAdr7>SetAmount THEN AlarmMV110_2acAdr7:=TRUE;END_IF MV110_8acAdr7(Enable:= FALSE, Buffer:=Buffer); Step:=6; (*переходим к выполнению следующего ФБ*) END_IF 6: Step:=0; Enable:=FALSE; END_CASE END_IF
я бы за кейсом что то подобное написал,а внутри MV110_8aAdr5(Enable:=MV110_8aAdr5.Enable...MV110_8aAdr5(Enable:=Step=0);MV110_8aAdr6(Enable:= Step=2);MV110_8acAdr7(Enable:=Step=4);
Bad programmers worry about the code. Good programmers worry about data structures and their relationships
среди успешных людей я не встречала нытиков
Барбара Коркоран
Не пойму, что это будет...
А тут еще и это:
Новый точечный рисунок.bmp
Да и два модуля 8А - опрашиваются одновременно, все же нормально...
Такое впечатление, что модуль 2АС читает данные которые ему не предназначены.... и зависает...
на всякий случай раздел описания:
Код:FUNCTION_BLOCK Com2 VAR_INPUT END_VAR VAR_OUTPUT END_VAR VAR ComServiceCOM2: COM_SERVICE; SettingsCOM2: ComSerice.SysCom.COM_SETTINGS; SettingsEXCOM2: ComSerice.SysCom.COM_SETTINGSex; // Cтруктура расширенных настроек порта COM3 Complete,Enable: BOOL; TimeOut: TIME:=T#1000MS; (*таймаут*) DataSize: WORD; SetAmount:INT:=2; Step: INT; // Переменные начала цикла опроса MV110_8aAdr5,MV110_8aAdr6,MV110_8acAdr7,MV110_16DnAdr9: MB_RD_HOLD_REGS; // ФБ опроса модуля МВ110-16Д MU110_16R: MB_WR_REGS; // ФБ опроса модуля МУ110-16Р Buffer: ARRAY [0..255] OF BYTE; AmountMV110_8aAdr5,AmountMV110_8aAdr6,AmountMV110_8acAdr7,AmountMV110_16DnAdr9:INT; END_VAR
Последний раз редактировалось a_gricaj; 27.12.2016 в 14:48.
главное ни когда наступит Complete а когда сбрасываете переменную запуска ФБ Enable. Я обычно такие вещи делаю за пределами диспетчера, либо если есть какое то условие в котором Вы выполняете какой то алгоритм, тогда надо предусмотреть и выполнение некоего алгоритма и после ELSE, чтоб работали различные варианты. А то если комплит не наступает, то как раз и получается ситуация зависания на опросе какого то модуля
Bad programmers worry about the code. Good programmers worry about data structures and their relationships
среди успешных людей я не встречала нытиков
Барбара Коркоран
сделайте паузу между опросами
Bad programmers worry about the code. Good programmers worry about data structures and their relationships
среди успешных людей я не встречала нытиков
Барбара Коркоран
начните с 4 мс и добавляйте по одной пока связь не появится. Можно еще вместо паузы записать что нибудь не существенное, потом вернутся к чтению, тоже помогает
Bad programmers worry about the code. Good programmers worry about data structures and their relationships
среди успешных людей я не встречала нытиков
Барбара Коркоран