Страница 2 из 3 ПерваяПервая 123 ПоследняяПоследняя
Показано с 11 по 20 из 29

Тема: Подскажите где ошибка в использовании библиотеки Modbus

  1. #11
    Супер Модератор Аватар для Евгений Кислов
    Регистрация
    27.01.2015
    Адрес
    Москва
    Сообщений
    13,850

    По умолчанию

    Вместо Enable:=FALSE; необходимо вызывать соответствующий ФБ в стиле

    MV110_8acAdr7(Enable:= FALSE, Buffer:=Buffer);

  2. #12

    По умолчанию

    Цитата Сообщение от Евгений Кислов Посмотреть сообщение
    Вместо Enable:=FALSE; необходимо вызывать соответствующий ФБ в стиле

    MV110_8acAdr7(Enable:= FALSE, Buffer:=Buffer);
    Ситуация не изменилась, модуль 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

  3. #13
    Banned
    Регистрация
    25.02.2011
    Адрес
    Киров
    Сообщений
    10,664

    По умолчанию

    я бы за кейсом что то подобное написал,
    MV110_8aAdr5(Enable:=Step=0);MV110_8aAdr6(Enable:= Step=2);MV110_8acAdr7(Enable:=Step=4);
    а внутри MV110_8aAdr5(Enable:=MV110_8aAdr5.Enable...

  4. #14

    По умолчанию

    Цитата Сообщение от capzap Посмотреть сообщение
    я бы за кейсом что то подобное написал, а внутри MV110_8aAdr5(Enable:=MV110_8aAdr5.Enable...
    Не пойму, что это будет...
    А тут еще и это:
    Новый точечный рисунок.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.

  5. #15

    По умолчанию

    Цитата Сообщение от capzap Посмотреть сообщение
    я бы за кейсом что то подобное написал, а внутри MV110_8aAdr5(Enable:=MV110_8aAdr5.Enable...
    А понял, но у меня же все равно модуль опрашивается на соответствующем шаге, и с шага не сойдет пока Complete не станет TRUE, и одновременный опрос двух модулей исключен. Или нет???
    Последний раз редактировалось a_gricaj; 27.12.2016 в 14:58.

  6. #16
    Banned
    Регистрация
    25.02.2011
    Адрес
    Киров
    Сообщений
    10,664

    По умолчанию

    главное ни когда наступит Complete а когда сбрасываете переменную запуска ФБ Enable. Я обычно такие вещи делаю за пределами диспетчера, либо если есть какое то условие в котором Вы выполняете какой то алгоритм, тогда надо предусмотреть и выполнение некоего алгоритма и после ELSE, чтоб работали различные варианты. А то если комплит не наступает, то как раз и получается ситуация зависания на опросе какого то модуля

  7. #17

    По умолчанию

    Цитата Сообщение от capzap Посмотреть сообщение
    главное ни когда наступит Complete а когда сбрасываете переменную запуска ФБ Enable. Я обычно такие вещи делаю за пределами диспетчера, либо если есть какое то условие в котором Вы выполняете какой то алгоритм, тогда надо предусмотреть и выполнение некоего алгоритма и после ELSE, чтоб работали различные варианты. А то если комплит не наступает, то как раз и получается ситуация зависания на опросе какого то модуля
    Но в моем случае Complete наступает и Step бегает 0-6-0, модуль 8А опрашивеется, а 2ас висит....
    И насколько я понял Complete наступет всегда в независимости от ошибки, а только от таймаута - получается задержка его появления...

  8. #18
    Banned
    Регистрация
    25.02.2011
    Адрес
    Киров
    Сообщений
    10,664

    По умолчанию

    сделайте паузу между опросами

  9. #19

    По умолчанию

    Цитата Сообщение от capzap Посмотреть сообщение
    сделайте паузу между опросами
    Читаете мои мысли), но тогда потеря времени будет при опросе...А сколько мс порекомендуете?? И опять же, два 8А опрашиваются и все ок

  10. #20
    Banned
    Регистрация
    25.02.2011
    Адрес
    Киров
    Сообщений
    10,664

    По умолчанию

    начните с 4 мс и добавляйте по одной пока связь не появится. Можно еще вместо паузы записать что нибудь не существенное, потом вернутся к чтению, тоже помогает

Страница 2 из 3 ПерваяПервая 123 ПоследняяПоследняя

Похожие темы

  1. Ошибка библиотеки IoDrvModbusBase
    от Андрей Плеханов в разделе СПК2xx (архив)
    Ответов: 26
    Последнее сообщение: 05.02.2024, 09:46
  2. Ответов: 13
    Последнее сообщение: 10.02.2020, 13:34
  3. Таймаут при использовании ModBus.lib
    от Vasily777 в разделе ПЛК1хх
    Ответов: 4
    Последнее сообщение: 23.10.2016, 15:32
  4. Ответов: 7
    Последнее сообщение: 14.07.2016, 16:24
  5. Ошибка библиотеки ПЧВ
    от GTS в разделе ПЛК1хх
    Ответов: 11
    Последнее сообщение: 25.11.2015, 08:27

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •