Страница 5 из 8 ПерваяПервая ... 34567 ... ПоследняяПоследняя
Показано с 41 по 50 из 76

Тема: Вопрос по библиотеке Modbus.lib

  1. #41

    По умолчанию

    Цитата Сообщение от capzap Посмотреть сообщение
    судя по этой теме, этого не видно. В исходниках не возможно не заметить, как используется буфер и переменная enable
    Вы хотите сказать, что у меня может включиться дискретный выход который я не включаю????

  2. #42

    По умолчанию

    Цитата Сообщение от capzap Посмотреть сообщение
    судя по этой теме, этого не видно. В исходниках не возможно не заметить, как используется буфер и переменная enable
    Я видел не в этой теме, а ранее, в той, на которую вы мне ссылку указали))

  3. #43
    Пользователь
    Регистрация
    10.11.2014
    Адрес
    Санкт-Петербург
    Сообщений
    980

    По умолчанию

    Цитата Сообщение от a_gricaj Посмотреть сообщение
    Вы хотите сказать, что у меня может включиться дискретный выход который я не включаю????
    Будьте внимательны! Если Вы будете не правильно пользоваться библиотекой, то такое возможно.
    Рекомендую прочесть вот этот пост.

  4. #44

    По умолчанию

    Цитата Сообщение от Спорягин Кирилл Посмотреть сообщение
    Будьте внимательны! Если Вы будете не правильно пользоваться библиотекой, то такое возможно.
    Рекомендую прочесть вот этот пост.
    Перед каждым вызовом я пишу значение в буфер:
    Код:
    29:IF OldDOByteAdr67=DOByteAdr67 THEN master1:=30;
                           ELSE
                               Buffer[0]:=0;
                               Buffer[1]:=DOByteAdr67;
                               ModbusAdrDO67(
    	                                                Enable:= enabl,
    	                                                Mode:= MB_RTU,
    	                                                DevAddr:= 67,
    	                                                FirstAddr:= 50,
    	                                                Quantity:= 1,
    	                                                ComHandle:= Settings.Port,
    	                                                TimeOut:= TimeOut,
    	                                                Buffer:= Buffer,
    	                                                Complete=> cmpl,
    	                                                Exception=> ErrorDO67,
    	                                                RegCnt=> DataSize);
                               
                               IF cmpl
                                  THEN
                                            OldDOByteAdr67:=DOByteAdr67;
                                            master1:=30; 
                               END_IF
                               END_IF
    30: ......
    или я неправильно делаю???
    Последний раз редактировалось a_gricaj; 20.09.2016 в 10:28.

  5. #45
    Пользователь
    Регистрация
    10.11.2014
    Адрес
    Санкт-Петербург
    Сообщений
    980

    По умолчанию

    Цитата Сообщение от a_gricaj Посмотреть сообщение
    Перед каждым вызовом я пишу значение в буфер:
    Подход не правильный. Правильно так:
    1. Сформировали буфер на шаге Х. Перешли на шаг Х+1.
    2. На шаге Х+1 вызвали нужный ФБ из библиотеки Modbus.lib.

  6. #46

    По умолчанию

    Цитата Сообщение от Спорягин Кирилл Посмотреть сообщение
    Подход не правильный. Правильно так:
    1. Сформировали буфер на шаге Х. Перешли на шаг Х+1.
    2. На шаге Х+1 вызвали нужный ФБ из библиотеки Modbus.lib.
    Код:
    28:  Buffer[0]:=0;
          Buffer[1]:=DOByteAdr67;
          master1:=29; 
    29:IF OldDOByteAdr67=DOByteAdr67 THEN master1:=30;
                           ELSE
                                   ModbusAdrDO67(
    	                                                Enable:= enabl,
    	                                                Mode:= MB_RTU,
    	                                                DevAddr:= 67,
    	                                                FirstAddr:= 50,
    	                                                Quantity:= 1,
    	                                                ComHandle:= Settings.Port,
    	                                                TimeOut:= TimeOut,
    	                                                Buffer:= Buffer,
    	                                                Complete=> cmpl,
    	                                                Exception=> ErrorDO67,
    	                                                RegCnt=> DataSize);
                               
                               IF cmpl
                                  THEN
                                            OldDOByteAdr67:=DOByteAdr67;
                                            master1:=30; 
                               END_IF
                               END_IF
    30: ......
    правильно???

  7. #47
    Пользователь
    Регистрация
    10.11.2014
    Адрес
    Санкт-Петербург
    Сообщений
    980

    По умолчанию

    Цитата Сообщение от a_gricaj Посмотреть сообщение
    правильно???
    С точки зрения того, что теперь буфер не изменяется в процессе вызова ФБ modbus правильно.

    Но обращаю Ваше внимание, что есть потенциальная ошибка.
    Если DOByteAdr67 <> OldDOByteAdr67 мы вызвали блок. Блок послал запрос в линию. Теперь предположим, что пока блок ждет ответ у Вас DOByteAdr67 стало равно OldDOByteAdr67. То Ваш код перейдет на шаг 30 не дождавшись ответа. Что явно не хорошо.

  8. #48

    По умолчанию

    Цитата Сообщение от Спорягин Кирилл Посмотреть сообщение
    С точки зрения того, что теперь буфер не изменяется в процессе вызова ФБ modbus правильно.

    Но обращаю Ваше внимание, что есть потенциальная ошибка.
    Если DOByteAdr67 <> OldDOByteAdr67 мы вызвали блок. Блок послал запрос в линию. Теперь предположим, что пока блок ждет ответ у Вас DOByteAdr67 стало равно OldDOByteAdr67. То Ваш код перейдет на шаг 30 не дождавшись ответа. Что явно не хорошо.
    Значит наверное так?
    Код:
     
    28: IF OldDOByteAdr67=DOByteAdr67 
            THEN master1:=31;
            ELSE      
                  Buffer[0]:=0;
                  Buffer[1]:=DOByteAdr67;
                  master1:=29; 
           END_IF
    29: ModbusAdrDO67(
    	                    Enable:= enabl,
    	                    Mode:= MB_RTU,
    	                    DevAddr:= 67,
    	                    FirstAddr:= 50,
    	                    Quantity:= 1,
    	                    ComHandle:= Settings.Port,
    	                    TimeOut:= TimeOut,
    	                    Buffer:= Buffer,
    	                    Complete=> cmpl,
    	                    Exception=> ErrorDO67,
    	                    RegCnt=> DataSize);
                               
                               IF cmpl
                                  THEN
                                            OldDOByteAdr67:=DOByteAdr67;
                                            master1:=31; 
                               END_IF
                              
    31: ......

  9. #49
    Пользователь
    Регистрация
    10.11.2014
    Адрес
    Санкт-Петербург
    Сообщений
    980

    По умолчанию

    Уже лучше.
    Но что Ваш код будет делать если модуль не ответил или ответил ошибкой, т.е. если ErrorDO67 <> 0?

  10. #50

    По умолчанию

    Цитата Сообщение от Спорягин Кирилл Посмотреть сообщение
    Уже лучше.
    Но что Ваш код будет делать если модуль не ответил или ответил ошибкой, т.е. если ErrorDO67 <> 0?
    Если хотя бы один модуль будет иметь Exception <> 0 тогда сформируется общая ошибка по сети (с задержкой 1 - 2 сек) - и отключение всех исполнительных механизмов на всех модулях, а на самом модуле сетевой там аут 2 секунды.
    Если ошибка уйдет тогда ее буду сбрасывать со скады...
    Или тут я тоже намудрил???

Страница 5 из 8 ПерваяПервая ... 34567 ... ПоследняяПоследняя

Похожие темы

  1. Еще раз о библиотеке SysLibSockets
    от dudanov в разделе ПЛК1хх
    Ответов: 52
    Последнее сообщение: 28.01.2015, 15:41
  2. По библиотеке UNM
    от Сергей Мих в разделе ПЛК1хх
    Ответов: 1
    Последнее сообщение: 25.04.2012, 23:06
  3. Вопрос по библиотеке UNM
    от askpify в разделе ПЛК1хх
    Ответов: 3
    Последнее сообщение: 31.10.2009, 23:50
  4. По Овеновской библиотеке PID ?
    от mar154 в разделе ПЛК1хх
    Ответов: 5
    Последнее сообщение: 28.10.2008, 12:32

Ваши права

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