Страница 3 из 4 ПерваяПервая 1234 ПоследняяПоследняя
Показано с 21 по 30 из 37

Тема: SysLibCom

  1. #21

    По умолчанию

    Спасибо конечно, но с установкой соединения с помощью SysLibCom всё получилось. Проблема в отсылки значений в формате modbus, с помощью MB_WR_REGS. Нужно оценивать ответ slave устройства о том, что переменная получена... Может нужен какойто отдельный блок, кот анализирует в ответе контрольную сумму? Хотя судя по тому, что у него есть таймаут, то врятли....
    Последний раз редактировалось Антон12345; 24.05.2012 в 14:01.

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

    По умолчанию

    Цитата Сообщение от Антон12345 Посмотреть сообщение
    Спасибо конечно, но с установкой соединения с помощью SysLibCom всё получилось. Проблема в отсылки значений в формате modbus, с помощью MB_WR_REGS. Нужно оценивать ответ slave устройства о том, что переменная получена... Может нужен какойто отдельный блок, кот анализирует в ответе контрольную сумму? Хотя судя по тому, что у него есть таймаут, то врятли....
    Если Вы остановились только на этой функции, а не о протоколе в целом, то я никогда не контролирую ответ на команду записи регистров, ценной для меня информации в ней нет

  3. #23

    По умолчанию

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

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

    По умолчанию

    Цитата Сообщение от Антон12345 Посмотреть сообщение
    Т.е. вам не важно дошла ли информация до устроийства и записалась ли или нет?
    Важно, но с техникой так не бывает, что чтение идет нормально, а запрос с записью не доходит. Тут либо ни чего не идет, либо все доходит. Кроме того, если привыкать к забугорным технологиям, то на каждое устройство ставиться обратная связь. И уж если она показывает, что требуемое устройство не включилось, я начинаю "волноваться"

  5. #25

    По умолчанию

    Вроде в тему. Попробую прояснить для себя кое-что.
    Код:
    IF port_opened=0 THEN
    		Settings.Port:=com_num;              
    		Settings.dwBaudRate:=115200;    
    		Settings.byParity:=0;
    		Settings.dwTimeout:=0;
    		Settings.byStopBits:=0;
    		Settings.dwBufferSize:=0;
    		Settings.dwScan:=0;
    END_IF
    
    COM_SERVICE1(Enable:=(port_opened=0) , Settings:=Settings , Task:=OPEN_TSK  );
    IF COM_SERVICE1.ready THEN
    	port_opened:=2;
    END_IF
    Вот это отлично открывает и настраивает порт. Потом проверяю с помощью эмулятора slave modbus на ПК. Обмен идет все хорошо. Это с библиотекой Modbus.lib.
    А вот такая штука с библиотекой syslibcom.
    Код:
    IF NOT port_opened THEN
    	com_handle:=SysComOpen(com_num);
    	IF com_handle<>16#FFFFFFFF THEN
    		port_init:=TRUE;
    	ELSE
    		SysComClose(	com_num);
    		com_handle:=SysComOpen(	com_num);
    		port_init:=TRUE;
    	END_IF
    
    	com_set.Port:=com_num;
    	com_set.dwBaudRate:=9600;
    	com_set.byParity:=0;
    	com_set.dwTimeout:=0;
    	com_set.byStopBits:=0; (* *)
    	com_set.dwBufferSize:=0;
    	com_set.dwScan:=0;
    	res:=SysComSetSettings(com_num,ADR(com_set));
    
    	IF NOT res THEN
    		port_opened:=TRUE;
    	END_IF
    В общем получается так. Порт всегда уже открыт. Но он закрывается, а потом открывается (handle=1 вернулся нормально). А вот настроить порт все не удается. TRUE не возвращается. Проверка та же что и в первом случае с помощью эмулятора - результат ноль. Ошибка явно глупая, но какая?

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

    По умолчанию

    Цитата Сообщение от zaur Посмотреть сообщение
    Вроде в тему. Попробую прояснить для себя кое-что.
    Код:
    IF port_opened=0 THEN
    		Settings.Port:=com_num;              
    		Settings.dwBaudRate:=115200;    
    		Settings.byParity:=0;
    		Settings.dwTimeout:=0;
    		Settings.byStopBits:=0;
    		Settings.dwBufferSize:=0;
    		Settings.dwScan:=0;
    END_IF
    
    COM_SERVICE1(Enable:=(port_opened=0) , Settings:=Settings , Task:=OPEN_TSK  );
    IF COM_SERVICE1.ready THEN
    	port_opened:=2;
    END_IF
    Вот это отлично открывает и настраивает порт. Потом проверяю с помощью эмулятора slave modbus на ПК. Обмен идет все хорошо. Это с библиотекой Modbus.lib.
    А вот такая штука с библиотекой syslibcom.
    Код:
    IF NOT port_opened THEN
    	com_handle:=SysComOpen(com_num);
    	IF com_handle<>16#FFFFFFFF THEN
    		port_init:=TRUE;
    	ELSE
    		SysComClose(	com_num);
    		com_handle:=SysComOpen(	com_num);
    		port_init:=TRUE;
    	END_IF
    
    	com_set.Port:=com_num;
    	com_set.dwBaudRate:=9600;
    	com_set.byParity:=0;
    	com_set.dwTimeout:=0;
    	com_set.byStopBits:=0; (* *)
    	com_set.dwBufferSize:=0;
    	com_set.dwScan:=0;
    	res:=SysComSetSettings(com_num,ADR(com_set));
    
    	IF NOT res THEN
    		port_opened:=TRUE;
    	END_IF
    В общем получается так. Порт всегда уже открыт. Но он закрывается, а потом открывается (handle=1 вернулся нормально). А вот настроить порт все не удается. TRUE не возвращается. Проверка та же что и в первом случае с помощью эмулятора - результат ноль. Ошибка явно глупая, но какая?
    А вот так выглядит COM_SERVICE.lib из нутри
    IF NOT Enable THEN RETURN;
    END_IF
    Delay := Delay + 1;
    IF (Delay MOD 100) = 0 THEN
    IF Task = OPEN_TSK THEN
    IF Opened = FALSE THEN
    IF SysComOpen(Settings.Port) = 16#FFFFFFFF THEN
    Task := CLOSE_TSK;
    ELSE
    Opened := TRUE;
    END_IF
    ELSE
    Task := RESET_TSK;
    END_IF
    END_IF
    IF Task = RESET_TSK THEN
    Ready := NOT SysComSetSettings(Settings.Port, ADR(Settings));
    END_IF
    IF Task = CLOSE_TSK THEN
    SysComClose(Settings.Port);
    Ready := FALSE;
    Opened := FALSE;
    END_IF
    END_IF

  7. #27

    По умолчанию

    Task = OPEN_TSK, Task = CLOSE_TSK вроде алгоритм понятен. Вопрос по этой части
    IF Task = RESET_TSK THEN
    Ready := NOT SysComSetSettings(Settings.Port, ADR(Settings));
    END_IF
    Почему ОК возвращается инверсией? Ведь в описании четко написано SysComSetSettings возвращает true при успехе, в противном случае false. Или эту часть алгоритма я недопонимаю или все наоборот?

  8. #28
    Пользователь
    Регистрация
    23.09.2008
    Адрес
    Центророссийск
    Сообщений
    2,251

    По умолчанию

    SysComSetSettings возвращает 0, если Ok

  9. #29

    По умолчанию

    Цитата Сообщение от Валенок Посмотреть сообщение
    SysComSetSettings возвращает 0, если Ok
    Если так, то тогда все становится на свои места. Правда вроде логика немного нарушена.

  10. #30

    По умолчанию

    Цитата Сообщение от Антон12345 Посмотреть сообщение
    Может кто подскажет в чем проблема: управляю входом блока MB_WR_REGS библиотеке modbus.lib. Запросы уходят, в терминале вижу что от устройства приходит ответ, но ошибка все время 255. Таймаут тоже пробывал менять. В чем моя ошибка? Или не моя?
    На ПЛК73 нарвался на точно такую же засаду. Слейв команду записи отрабатывает, шлет ответ, но ПЛК в момент прихода ответа выкидывает комплит в месте с ошибкой 255, задолго до назначенного таймаута. При этом 06-я функция работает корректно.
    Господа разработчики - в чем проблема?

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

Похожие темы

  1. SysLibCom
    от JoSaint в разделе ПЛК1хх
    Ответов: 2
    Последнее сообщение: 09.11.2010, 14:13
  2. Syslibcom
    от Назаров Александр в разделе ПЛК1хх
    Ответов: 1
    Последнее сообщение: 28.04.2010, 17:34
  3. SysLibCom
    от demon в разделе ПЛК1хх
    Ответов: 1
    Последнее сообщение: 20.03.2009, 13:08
  4. ПЛК 150 и SysLibCom.lib.
    от Анатолий в разделе ПЛК1хх
    Ответов: 2
    Последнее сообщение: 13.12.2008, 13:48
  5. SysLibCom.lib
    от Nekit в разделе ПЛК1хх
    Ответов: 0
    Последнее сообщение: 05.05.2007, 11:14

Ваши права

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