Страница 1 из 4 123 ... ПоследняяПоследняя
Показано с 1 по 10 из 34

Тема: ПЛК110 М02, прошивка 0.3.73, TCP клиент на SysLibSockets вызывает перезагрузку ПЛК.

  1. #1

    По умолчанию ПЛК110 М02, прошивка 0.3.73, TCP клиент на SysLibSockets вызывает перезагрузку ПЛК.

    Здравствуйте,
    TCP-клиент на SysLibSockets вызывает перезагрузку ПЛК.
    Стенд - ПК, свитч, ПЛК110-30 М02, протокол Modbus TCP. На ПК использовал " Эмулятор Modbus TCP/RTU устройств". В качестве сервера пробовал ПЛК100, результат, конечно, такой же.
    В штатном режиме все хорошо. Но если ПЛК установил связь с сервером, и потом у сервера отвалилось сетевое подключение (например, выдернуть ethernet кабель), это приводит к перезагрузке клиента. Причем на ПЛК110-30 М01 тот же самый код работает нормально.
    Что с этим делать?

    PS: ПЛК110-30 у меня сейчас один, в феврале носил его в сервис на доработку, может в нем дело?...

    Итог: эффект пропадает, если timeout ставить не больше двух секунд, по моему мнению, баг в ПЛК есть, но он безобидный.
    Вложения Вложения
    • Тип файла: zip client.zip (29.3 Кб, Просмотров: 10)
    Последний раз редактировалось monteg; 19.05.2018 в 14:21.

  2. #2

    По умолчанию

    вы вызываете SysSockConnect и ждете 50ms. А если за это время коннекта не произойдет?
    попробуйте вызывать SysSockConnect пока он не возвратит FALSE и как только это произойдет переходите к следующей итерации. У меня устроено именно так и перезагрузок не замечал (хотя щя специально проверю и отпишусь). Единственное, заметил что вызов то ли SysSockConnect то ли SysSockListen (щя уже не помню) в каждом цикле сильно тормозил ПЛК поэтому вызывал их раз в 50 циклов. как то так:

    ST_CONECT:
    m_y := m_y + 1;
    IF ( m_y MOD 50 ) = 0 THEN
    IF i_pOptions^.bServer THEN
    o_dnRes := BOOL_TO_DINT( SysSockListen( m_dnSocket, 1 ) );
    IF i_pOptions^.ePCL = OVEN_110_v2 THEN
    IF o_dnRes < 0 THEN
    o_eCondition := ST_CLOSE;
    ELSE
    o_eCondition := ST_ACCEPT;
    END_IF
    ELSE
    IF o_dnRes = 0 THEN
    o_eCondition := ST_WORK;
    END_IF
    END_IF
    ELSIF NOT SysSockConnect( m_dnSocket, ADR( m_SAddress ), SIZEOF( m_SAddress ) ) THEN
    o_eCondition := ST_WORK;
    END_IF
    END_IF

  3. #3

    По умолчанию

    1) сделайте проверку перед shutdown и close что handle <> 0. возможно вы в какой то момент времени закроете закрытый сокет, что приведет к watchdog.
    2) Вы работаете в режиме блокирующих сокетов т.е. все функции сокета блокируют выполнение кода до момента пока операция не завершится. в этот момент (коннект, send, recv ) код просто встаёт на месте, а таймер собаки продолжает тикать. если сервер Вам не ответит на запрос, привет ребут по watchdog. попробуйте перейти на неблокирующий сокет SysSockSetOption( SOCK, SOCKET_SOL, SOCK_NBIO, 0, 0 ) ;

    3) рекомендация вместо условий if step = 1 then и if step = 4 then используйте конструкцию case step of 0: код; 1:код; ююю N: код; end_case
    будет легче организовывать ветвление по одной переменной.

    4) во вложении пример работы с модбас TCP , может он Вам подскажет в каком направлении двигаться
    Вложения Вложения

  4. #4

    По умолчанию

    проверил. прошивка 73. отрываем кабель - плк пашет. присоединяем обратно - пашет.
    проверял с каким-то Multiwy v10.7 от omron:
    https://www.support-omron.fr/details...-%202107046460

  5. #5

    По умолчанию

    [QUOTE=Трофимов Артем;278496]1)
    2) Вы работаете в режиме блокирующих сокетов т.е. все функции сокета блокируют выполнение кода до момента пока операция не завершится. в этот момент (коннект, send, recv ) код просто встаёт на месте, а таймер собаки продолжает тикать. если сервер Вам не ответит на запрос, привет ребут по watchdog. попробуйте перейти на неблокирующий сокет SysSockSetOption( SOCK, SOCKET_SOL, SOCK_NBIO, 0, 0 ) ;

    в ФБ TcpClient он вызывает SysSockSetOption( handle, SOCKET_SOL, 16#1014, 0, 0 ); ( step = 2 ) такшто все ок.

    а в остальном... нужно и хендлы проверять и обрабатывать то, что функции возвращают.

  6. #6

    По умолчанию

    [QUOTE=lazy;278501]
    Цитата Сообщение от Трофимов Артем Посмотреть сообщение
    1)
    2) Вы работаете в режиме блокирующих сокетов т.е. все функции сокета блокируют выполнение кода до момента пока операция не завершится. в этот момент (коннект, send, recv ) код просто встаёт на месте, а таймер собаки продолжает тикать. если сервер Вам не ответит на запрос, привет ребут по watchdog. попробуйте перейти на неблокирующий сокет SysSockSetOption( SOCK, SOCKET_SOL, SOCK_NBIO, 0, 0 ) ;

    в ФБ TcpClient он вызывает SysSockSetOption( handle, SOCKET_SOL, 16#1014, 0, 0 ); ( step = 2 ) такшто все ок.

    а в остальном... нужно и хендлы проверять и обрабатывать то, что функции возвращают.
    Вы правы, недоглядел.

    UPD. monteg откатите компилятор до версии 2.3.8.1 и проверьте работоспособность. проект - опции - генератор кода
    Последний раз редактировалось Трофимов Артем; 16.05.2018 в 11:12.

  7. #7

    По умолчанию

    Цитата Сообщение от lazy Посмотреть сообщение
    проверил. прошивка 73. отрываем кабель - плк пашет. присоединяем обратно - пашет.
    проверял с каким-то Multiwy v10.7 от omron:
    https://www.support-omron.fr/details...-%202107046460
    Вы подключались через свитч и выдергивали кабель от ПК?
    Это принципиально, если у ПЛК падает линк, то перезагрузки не происходит.
    Последний раз редактировалось monteg; 16.05.2018 в 12:32.

  8. #8

    По умолчанию

    [QUOTE=Трофимов Артем;278504]
    Цитата Сообщение от lazy Посмотреть сообщение

    Вы правы, недоглядел.

    UPD. monteg откатите компилятор до версии 2.3.8.1 и проверьте работоспособность. проект - опции - генератор кода
    не помогло

  9. #9

    По умолчанию

    По поводу проверки handle - вроде везде проверяется
    Код:
    if not ( handle = SOCKET_INVALID ) then
        SysSockShutdown( handle, 2 );
        SysSockClose( handle );
        handle := SOCKET_INVALID;
    end_if

  10. #10

    По умолчанию

    Цитата Сообщение от monteg Посмотреть сообщение
    Вы подключались через свитч и выдергивали кабель от ПК?
    Это принципиально, если у ПЛК падает линк, то перезагрузки не происходит.
    да. через свитч. отключал и от компа провод и от ПЛК. единственное. я не закрываю сокет после приема/передачи. открыл и читаю пишу непрерывно. сокет "переокрываю" только как только связь потеряна (определяю по таймаутам)

Страница 1 из 4 123 ... ПоследняяПоследняя

Похожие темы

  1. плк110-32 прошивка
    от Jonikk в разделе ПЛК1хх
    Ответов: 11
    Последнее сообщение: 23.03.2020, 13:57
  2. Ответов: 4
    Последнее сообщение: 04.05.2018, 08:08
  3. Ответов: 9
    Последнее сообщение: 23.06.2017, 11:54
  4. Ответов: 1
    Последнее сообщение: 31.03.2016, 08:29
  5. TCP клиент на SysLibSockets
    от Carter в разделе ПЛК1хх
    Ответов: 45
    Последнее сообщение: 12.10.2015, 16:09

Метки этой темы

Ваши права

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