...............
...............
Последний раз редактировалось Валенок; 25.02.2019 в 18:44.
ну кагбэ да, но есть нюанс )
работа модбас сервера начинается с запроса, то есть чтения сокета. и у меня с чтения, только ничего не приходит. казалось бы и что? так вот. добавил перед записью в сокет SysSockSelect:
IF m_aSockets[o_yCNow] <> SOCKET_INVALID THEN
m_tv.tv_sec := 0;
m_tv.tv_usec := 0;
m_fds.fd_count := 1;
m_fds.fd_array[0] := m_aSockets[o_yCNow];
IF SysSockSelect( SOCKET_FD_SETSIZE, 0, ADR( m_fds ), 0, ADR( m_tv ) ) > 0 THEN
o_dnRes := SysSockSend( m_aSockets[o_yCNow], i_pData, i_dnSize, 0 );
END_IF
ELSE
o_dnRes := SOCKET_INVALID;
END_IF
и что происходит. модбас работает, а вызов того же FB но при условии что при чтении сокета там ничего не было приводит к перезагрузке ПЛК по вочдогу. один и тот же код.
1. читаем сокет -> что то пришло -> пишем с вызовом SysSockSelect - все ок.
2. читаем сокет -> ничего не приходило -> пишем с вызовом SysSockSelect - перезагрузка по вочдог.
так же к перезагрузке по вочдог приводит вызов SysSockSelect перед SysSockRecv и перед SysSockAccept.
..............
Последний раз редактировалось Валенок; 25.02.2019 в 18:43.
ну пусть так. все подключились сервер то молчит ) ему нужен запрос чтобы ответить. а ты попробуй при подключении просто гнать клиенту пакеты один за одним. и посмотри что будет. селект я тоже не использую. просто копаю во все стороны. пока селект показал что бибка ведет себя по разному с запросоми и без. вот что хотел сказать про селект. кста лучше делать m_tv.tv_usec := 1; тогда перед чтением не падает система, но возвращает она какую то хрень. сегодня некогда разбирацо с понедельника начну )
Беру свои слова обратно, все работает как надо. Дело было в самом терминале. Нашел в интернетах другой (кста третий на двух были проблемы), кому интересно вот сцыль на него: https://www.hw-group.com/software/he...-setup-utility. Пакеты отправляются в каждом цикле ничего не теряется и приходят по порядку )
PS: SysSockSelect перезагружает ПЛК по вочдогу, не используйте.