Показано с 1 по 10 из 51

Тема: PLC 110-30 v2 & сокеты

Комбинированный просмотр

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1

    По умолчанию

    Они и должны возвращать -1 при отсутствии данных.
    Варианта 2 - либо считать код посл ошибки, либо таймаут на обрыв связи.
    Лучше и то и другое
    Тролль-наседка, добрый, нежный и ласковый

  2. #2

    По умолчанию

    Цитата Сообщение от Филоненко Владислав Посмотреть сообщение
    Они и должны возвращать -1 при отсутствии данных.
    Варианта 2 - либо считать код посл ошибки, либо таймаут на обрыв связи.
    Лучше и то и другое
    Аллилуйя, сервер заработал )

    Тем не менее, можно поподробнее о SysSockGetLastError? Что там за значения в wErrorId и dwLastError могут быть?

  3. #3

    По умолчанию

    Цитата Сообщение от lazy Посмотреть сообщение
    Аллилуйя, сервер заработал )

    Тем не менее, можно поподробнее о SysSockGetLastError? Что там за значения в wErrorId и dwLastError могут быть?
    Покажи сервер плииииз.

  4. #4

    По умолчанию

    Цитата Сообщение от Андрей Шатохин Посмотреть сообщение
    Покажи сервер плииииз.
    CASE o_eCondition OF

    ST_EXPECT:
    IF i_pOptions^.bEnable THEN
    IF m_dnSocket = SOCKET_INVALID THEN
    m_dnSocket := SysSockCreate( SOCKET_AF_INET, SOCKET_STREAM, SOCKET_IPPROTO_IP );
    ELSE
    IF SysSockSetOption( m_dnSocket, SOCKET_SOL, SOCK_NBIO, 0, 0 ) THEN
    o_eCondition := ST_SETUP;
    ELSE
    o_eCondition := ST_CLOSE;
    END_IF
    END_IF
    END_IF

    ST_SETUP:
    m_y := 255;
    o_eCondition := ST_CONECT;
    m_SAddress.sin_family := SOCKET_AF_INET;
    IF i_pOptions^.bServer THEN
    m_SAddress.sin_addr := SOCKET_INADDR_ANY;
    m_SAddress.sin_port := SysSockHtons( i_pOptions^.wMyPort );
    IF NOT SysSockBind( m_dnSocket, ADR( m_SAddress ), SIZEOF( m_SAddress ) ) THEN
    o_eCondition := ST_CLOSE;
    END_IF
    ELSE
    m_SAddress.sin_port := SysSockHtons( i_pOptions^.wOutPort );
    m_SAddress.sin_addr := SysSockHtonl( SHL( SHL( SHL(
    BYTE_TO_DWORD( i_pOptions^.yOutAddr1 ), 8 )
    OR BYTE_TO_DWORD( i_pOptions^.yOutAddr2 ), 8 )
    OR BYTE_TO_DWORD( i_pOptions^.yOutAddr3 ), 8 )
    OR BYTE_TO_DWORD( i_pOptions^.yOutAddr4 ) );
    END_IF

    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

    ST_ACCEPT:
    m_dnClient := SysSockAccept( m_dnSocket, ADR( m_SAddress ), SIZEOF( m_SAddress ) );
    IF NOT i_pOptions^.bEnable THEN
    o_eCondition := ST_CLOSE;
    ELSIF m_dnClient <> SOCKET_INVALID THEN
    o_eCondition := ST_WORK;
    END_IF

    ST_WORK:
    IF NOT i_pOptions^.bEnable THEN
    o_eCondition := ST_BREAK;
    END_IF

    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_bLink := FALSE;
    m_tonExpet( IN := o_bLink );
    IF m_dnClient <> SOCKET_INVALID THEN
    IF SysSockClose( m_dnClient ) = 1 THEN
    m_dnClient := SOCKET_INVALID;
    END_IF
    END_IF
    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
    AND m_dnClient = SOCKET_INVALID THEN
    m_dnSocket := SOCKET_INVALID;
    o_eCondition := ST_EXPECT;
    END_IF

    END_CASE

    здесь и сервер и клиент для всех ПЛК. Но на новом 110 все еще остаюцо траблы. после программного сброса сокеты не работают. это не так страшно, но неудобно.

Похожие темы

  1. ПЛК100 2.17 не работают сокеты
    от murdemon в разделе ПЛК1хх
    Ответов: 6
    Последнее сообщение: 02.07.2018, 21:15
  2. ПЛК100 + Сокеты
    от ribamuka в разделе ПЛК1хх
    Ответов: 4
    Последнее сообщение: 30.08.2017, 11:55
  3. Возможно ли в режиме эмуляции Codesys тестировать работу через сокеты TCP
    от Денис Бердяев в разделе Сетевые технологии
    Ответов: 2
    Последнее сообщение: 09.10.2014, 08:23

Ваши права

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