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

Тема: Подключение ПЛК308, ПЛК304 и СКАДА системе

Древовидный режим

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

    По умолчанию

    Цитата Сообщение от capzap Посмотреть сообщение
    Давно уже все придумано, в оскат-нетворк есть модбас, там из переделок надо только адаптировать открытие сокета из v23 в.v3
    Я где то выкладывал пробный пример,года два назад, ни кого не заинтересовало я и не стал развивать дальше
    Начал осваивать SysSocket на ПЛК304! Начал с серверной части, прием данных заработал без проблем. Но стоит вытащить провод связи Ethernet из ПЛК клиента, или не вставить его еще до включения ПЛК304, в роли клиента ПЛК100, и сразу происходит остановка обработки программы в ПЛК304, если воткнуть провод обратно, через некоторое время связь восстанавливается и ПЛК304 продолжает выполнение программы.
    Сразу уточню что сокет перевожу в неблокирующий режим!
    Что я делаю не так?
    CASE Step OF

    0: (* Шаг создания и настройки сокета *)
    hServerSocket:= SysSockCreate(iAddressFamily:= SOCKET_AF_INET, diType:= SOCKET_STREAM, diProtocol:= SOCKET_IPPROTO_TCP, pResult:= ADR(Result_SysSockCreate));
    Result_SysSockIoctl:= SysSockIoctl(hSocket:= hServerSocket, diCommand:= SOCKET_FIONBIO, pdiParameter:= ADR(mode)); (* Переводи сокет в не блокирующий режим *)

    Socket.sin_family:= SOCKET_AF_INET;
    Socket.sin_addr.ulAddr := SOCKET_INADDR_ANY; (* Принимать от любого адреса *)
    Socket.sin_port := SysSockHtons(usHost:= Port); (* Порт по которому будет осуществляться прием *)

    Result_SysSockBind:= SysSockBind(hSocket:= hServerSocket, pSockAddr:= ADR(Socket), diSockAddrSize:= SIZEOF(Socket)); (* Привязываем порт к сокету *)
    Result_SysSockListen:= SysSockListen(hSocket:= hServerSocket, diMaxConnections:= MaxConnections);
    (* Включаем прослушивание сокета *)


    Step:= 1;
    1:
    Tries_1:= Tries_1 + 1;
    hClientSocket:= SysSockAccept(hSocket:= hServerSocket, pSockAddr:= ADR(Socket), pdiSockAddrSize:= ADR(SocketSize), pResult:= ADR(Result_SysSockAccept)); (* Ожидание соединение от клиента, возвращаем номер сокета клиента *)

    IF hClientSocket <> 16#FFFFFFFF THEN
    Result_SysSockInetNtoa:= SysSockInetNtoa(pInAddr:= ADR(Socket.sin_addr.ulAddr), szIPADDR:= Client_IP, diIPAddrSize:= SIZEOF(Client_IP));
    Step:= 3;
    ELSIF Tries_1 > 10 THEN
    Tries_1:= 0;
    Step:= 5;
    END_IF;
    2:
    Tries_2:= Tries_2 + 1;
    Send_Buf[1]:= Send_Buf[1] + 1;
    Send_Buf[2000]:= Send_Buf[2000] + 1;
    Send_Buf[3000]:= Send_Buf[3000] + 1;
    Send_Buf[5000]:= 50;

    SendByte:= SysSockSend(hSocket:= hClientSocket, pbyBuffer:= ADR(Send_Msg), diBufferSize:= SIZEOF(Send_Msg), diFlags:= 0, pResult:= ADR(Result_SysSockSend)); (* Отправляем сообщение *)
    IF SendByte > 0 THEN
    Step:= 3;
    END_IF

    IF Tries > 1000 THEN
    Step:= 3;
    END_IF;
    3:
    Tries_3:= Tries_3 + 1;
    Recv_Msg:= '';
    RecvByte:= SysSockRecv(hSocket:= hClientSocket, pbyBuffer:= ADR(Recv_Buf), diBufferSize:= 256, diFlags:= 0, pResult:= ADR(Result_SysSockRecv));
    Step:= 4;
    IF RecvByte > 0 THEN
    Step:= 3;
    Tries_3:= 0;
    ELSIF
    Tries_3 > 10
    THEN
    Tries_3:= 0;
    Step:= 4;
    END_IF;

    4:
    SysSockClose(hSocket:= hClientSocket);
    Step:= 5;
    Tries_4:= Tries_4 + 1;
    5:
    SysSockClose(hSocket:= hServerSocket);
    Step:= 0;
    Tries:= 0;
    Tries_5:= Tries_5 + 1;
    END_CASE;
    Последний раз редактировалось Леонид; 18.08.2014 в 19:47.

Похожие темы

  1. ПЛК304(ПЛК308) + 2х МУ110-8И
    от SergSB в разделе ПЛК3xx (архив)
    Ответов: 1
    Последнее сообщение: 20.12.2013, 10:53
  2. Доступ к файловой системе СПК207
    от Андрей Косоротов в разделе СПК2xx (архив)
    Ответов: 2
    Последнее сообщение: 01.12.2012, 00:05
  3. ТРМ 133 в системе вентиляции
    от inovator в разделе Эксплуатация
    Ответов: 7
    Последнее сообщение: 04.11.2011, 16:30
  4. терморегулирование в системе отопления
    от 207 в разделе Трёп (Курилка)
    Ответов: 12
    Последнее сообщение: 29.11.2010, 22:46

Ваши права

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