Страница 2 из 4 ПерваяПервая 1234 ПоследняяПоследняя
Показано с 11 по 20 из 34

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

  1. #11

    По умолчанию

    Цитата Сообщение от lazy Посмотреть сообщение
    да. через свитч. отключал и от компа провод и от ПЛК. единственное. я не закрываю сокет после приема/передачи. открыл и читаю пишу непрерывно. сокет "переокрываю" только как только связь потеряна (определяю по таймаутам)
    Да у меня тоже сокет закрывается только по таймауту или ошибки ( SysSockSend ) - TCP_CLIENT_2().
    А Вы пробовали мой код или свой?

  2. #12

    По умолчанию

    свой. попробуйте все же дождаться от SysSockConnect FALSE

    IF ( step = 3 ) THEN
    connectCounter := connectCounter + 1;
    sa.sin_family := SOCKET_AF_INET;
    sa.sin_addr:=SysSockHtonl( tmpHost );
    sa.sin_port := SysSockHtons( tmpPort );
    IF NOT SysSockConnect( handle, ADR( sa ), SIZEOF( sa ) ) THEN
    step := 5;
    END_IF
    RETURN;
    END_IF

  3. #13

    По умолчанию

    Цитата Сообщение от lazy Посмотреть сообщение
    свой. попробуйте все же дождаться от SysSockConnect FALSE

    IF ( step = 3 ) THEN
    connectCounter := connectCounter + 1;
    sa.sin_family := SOCKET_AF_INET;
    sa.sin_addr:=SysSockHtonl( tmpHost );
    sa.sin_port := SysSockHtons( tmpPort );
    IF NOT SysSockConnect( handle, ADR( sa ), SIZEOF( sa ) ) THEN
    step := 5;
    END_IF
    RETURN;
    END_IF
    не помогло
    хуже всего, что ни как не могу найти, какая именно функция вызывает перезагрузку

  4. #14

    По умолчанию

    сделайте все-таки проверку хэндла не только на неравенство с "-1", но и с "0" перед закрытием сокета и попробуйте. Скорее всего, проблема, как отмечал уже Артем, в закрытии закрытого сокета.

  5. #15

    По умолчанию

    Цитата Сообщение от Гарчев Евгений Посмотреть сообщение
    сделайте все-таки проверку хэндла не только на неравенство с "-1", но и с "0" перед закрытием сокета и попробуйте. Скорее всего, проблема, как отмечал уже Артем, в закрытии закрытого сокета.
    не помогло, и SysSockClose и SysSockShutdown не вызывает перезагрузки, если handle равно 0 или SOCKET_INVALID
    Вложения Вложения
    • Тип файла: zip close.zip (9.1 Кб, Просмотров: 5)

  6. #16

    По умолчанию

    честно говоря никогда не писал проекты с несколькими PRG и даже не понимаю как оно там реально на ПЛК крутицо.
    я бы переделал TCP_CLIENTы в FB. а если один из TCP_CLIENTов например, убрать тоже виснет?
    и чтобы PRG исполнилось его нужно вызывать обязательно?

  7. #17

    По умолчанию

    Цитата Сообщение от lazy Посмотреть сообщение
    честно говоря никогда не писал проекты с несколькими PRG и даже не понимаю как оно там реально на ПЛК крутицо.
    я бы переделал TCP_CLIENTы в FB. а если один из TCP_CLIENTов например, убрать тоже виснет?
    и чтобы PRG исполнилось его нужно вызывать обязательно?
    Да все нормально с PRG, я енто сделал специально, чтобы два куска кода( два разных теста ) "полностью" изолировать. TCP_CLIENT_1 и TCP_CLIENT_2 ничего не делают, пока apply равно false.

  8. #18

    По умолчанию

    у меня еще закрытие сокетов происходит в два этапа SysSockShutdown отдельно от SysSockClose и я у всех проверяю чо там они возвращают.
    как то так:

    ST_BREAK:
    o_dnRes := BOOL_TO_DINT ( SysSockShutdown( m_dnSocket, 2 ) );
    CASE i_pOptions^.ePCL OF
    OVEN_100: m_b := o_dnRes = 1;
    OVEN_110: m_b := o_dnRes = 1;
    OVEN_110_v2: m_b := o_dnRes = 0;
    END_CASE
    IF m_b THEN
    o_eCondition := ST_CLOSE;
    END_IF

    ST_CLOSE:
    o_dnRes := BOOL_TO_DINT( SysSockClose ( m_dnSocket ) );
    CASE i_pOptions^.ePCL OF
    OVEN_100: m_b := o_dnRes = 1;
    OVEN_110: m_b := o_dnRes = 0;
    OVEN_110_v2: m_b := o_dnRes = 1;
    END_CASE
    IF m_b THEN
    m_dnSocket := SOCKET_INVALID;
    o_eCondition := ST_EXPECT;
    END_IF

  9. #19

    По умолчанию

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

  10. #20

    По умолчанию

    Цитата Сообщение от Трофимов Артем Посмотреть сообщение
    попробуйте всё таки отладить с точками останова. открыли сокет, всё ок, далее. настроили , стоп. отправили , стоп. и т.д. чтобы выявить слабое место.
    я смотрю по буферу Вы модбас поднимаете? попробуйте библиотеку , что прикладывал. у меня она отлично бегает как с переинициальзацие сокета каждый раз , так и с сохранением сокета.
    Пытаюсь. Запускаю TCP_CLIENT_2, жду пока пойдет обмен, ставлю точки останова на всех шагах, кроме 0, 5 ( SysSockSend ) и 7 ( SysSockRecv ). Отрубаю сервер. Наблюдаю. Несколько секунд растет счетчик recvCounter. Потом все замирает и ПЛК уходит в перезагрузку. Точки останова не срабатывают. Т.е это либо отправка или прием или не сработали точки останова. Причем эффект стал нестабилен. Иногда приходиться раз 10 кабель передергивать.

    Мне техподдержка примеры прислала. В примерах SysSockSend и SysSockRecv выполняются с флагом SOCKET_MSG_OOB. Завтра попробую может поможет...
    Последний раз редактировалось monteg; 16.05.2018 в 17:21.

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

Похожие темы

  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

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

Ваши права

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