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

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

  1. #11

  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
    Пользователь Аватар для capzap
    Регистрация
    25.02.2011
    Адрес
    Киров
    Сообщений
    10,246

    По умолчанию

    я бы за кейсом что то подобное написал,
    MV110_8aAdr5(Enable:=Step=0);MV110_8aAdr6(Enable:= Step=2);MV110_8acAdr7(Enable:=Step=4);
    а внутри MV110_8aAdr5(Enable:=MV110_8aAdr5.Enable...
    Bad programmers worry about the code. Good programmers worry about data structures and their relationships

    среди успешных людей я не встречала нытиков
    Барбара Коркоран

  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
    Пользователь Аватар для capzap
    Регистрация
    25.02.2011
    Адрес
    Киров
    Сообщений
    10,246

    По умолчанию

    главное ни когда наступит Complete а когда сбрасываете переменную запуска ФБ Enable. Я обычно такие вещи делаю за пределами диспетчера, либо если есть какое то условие в котором Вы выполняете какой то алгоритм, тогда надо предусмотреть и выполнение некоего алгоритма и после ELSE, чтоб работали различные варианты. А то если комплит не наступает, то как раз и получается ситуация зависания на опросе какого то модуля
    Bad programmers worry about the code. Good programmers worry about data structures and their relationships

    среди успешных людей я не встречала нытиков
    Барбара Коркоран

  7. #17

    По умолчанию

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

  8. #18
    Пользователь Аватар для capzap
    Регистрация
    25.02.2011
    Адрес
    Киров
    Сообщений
    10,246

    По умолчанию

    сделайте паузу между опросами
    Bad programmers worry about the code. Good programmers worry about data structures and their relationships

    среди успешных людей я не встречала нытиков
    Барбара Коркоран

  9. #19

    По умолчанию

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

  10. #20
    Пользователь Аватар для capzap
    Регистрация
    25.02.2011
    Адрес
    Киров
    Сообщений
    10,246

    По умолчанию

    начните с 4 мс и добавляйте по одной пока связь не появится. Можно еще вместо паузы записать что нибудь не существенное, потом вернутся к чтению, тоже помогает
    Bad programmers worry about the code. Good programmers worry about data structures and their relationships

    среди успешных людей я не встречала нытиков
    Барбара Коркоран

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

Похожие темы

  1. Ошибка библиотеки IoDrvModbusBase
    от Андрей Плеханов в разделе СПК2хх
    Ответов: 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

Ваши права

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