CODESYS форум
https://forum-ru.codesys.com/

PLC WinNT и системные библиотеки
https://forum-ru.codesys.com/viewtopic.php?f=1&t=1843
Страница 1 из 1

Автор:  March [ Чт фев 28, 2013 2:59 pm ]
Заголовок сообщения:  PLC WinNT и системные библиотеки

Доброго времени суток! Интересует следующий вопрос:

Хочу использовать PLC WinNT для тестирования программы без использования контроллера. Скажем, программа читает данные с приборов по Modbus RTU, взаимодействует со SCADA через Modbus TCP. Для этих целей в CoDeSys можно использовать системные библиотеки SysLibCom и SysLibSockets. Они платформозависимые. Для контроллера они уже использовались (в данном случае использую контроллеры ОВЕН). Как я понимаю, для симулятора должны быть свои реализации этих библиотек.

Теперь возникает вопрос - где их найти?
Смотрел во всех каталогах установленных CoDeSys - не нашел. На сайте codesys.com ничего подобного тоже не нашел.

Автор:  March [ Пт мар 01, 2013 11:36 am ]
Заголовок сообщения:  Re: PLC WinNT и системные библиотеки

Прошу прощения за глупый пост :oops: . У себя нашел в директории "C:\Program Files\Common Files\CAA-Targets\3S\Lib_PLCWinNT".

Автор:  March [ Вс мар 03, 2013 6:31 pm ]
Заголовок сообщения:  Re: PLC WinNT и системные библиотеки

Здравствуйте! Опять вопрос по PLC WinNT и библиотеке SysLibSockets. C помощью данной библиотеки удалось реализовать TCP клиент. Все нормально, вроде работает. Далее пытаюсь реализовать ТСР сервер. Вот тут посложнее. Вот кусок кода:
Код:
VAR
   state         : SERV_STATE := SERV_INIT;
   sock, sock_acc   : DINT;
   tcp_adr      : SOCKADDRESS;
   acc_adr      : SOCKADDRESS;
   res         : BOOL;
   param_ctrl      : DINT;
   InBuff         : ARRAY[1..300] OF BYTE;
   OutBuff      : ARRAY[1..300] OF BYTE;
END_VAR
....
CASE state OF

SERV_INIT:      (* SOCK CREATE *)
    sock   := SysSockCreate(SOCKET_AF_INET, SOCKET_STREAM, SOCKET_IPPROTO_TCP);
    state   := SERV_SETUP;

SERV_SETUP:      (* SOCK SETUP *)
    param_ctrl      := 1;
    tcp_adr.sin_family   := SOCKET_AF_INET;
    tcp_adr.sin_port   := SysSockNtohs(502);
    tcp_adr.sin_addr   := SOCKET_INADDR_ANY;

    res         := SysSockBind(sock, ADR(tcp_adr), SIZEOF(tcp_adr));
    SysSockIoctl(sock,SOCKET_FIONBIO,ADR(param_ctrl)); (* Non blocking mode *)
    res         := SysSockListen(sock, 1);
    state         := SERV_ACC;

SERV_ACC:      (* WAIT FOR CONNECTION *)
    sock_acc   := SysSockAccept(sock, ADR(acc_adr), SIZEOF(acc_adr));
    IF (sock_acc = 16#FFFFFFFF) THEN
        RETURN;
    ELSIF (sock_acc = 0) THEN
        RETURN;
    ELSE
        state := SERV_RCV;
    END_IF;

SERV_RCV:      (* WAIT FOR REQUEST *)
...
END_CASE

При попытке подключения вылетает функция SysSockAccept и выдается ошибка: "#81: Access violation in 'Access violation Task = DefaultTask'"...
Возможно кто-то сталкивался с подобным. Пробовал разные варианты - блокирующий/неблокирующий режим, пробовал SysSockSelect... В чем может проблема? Работает ли данная библиотечная функция для PLC WinNT? Или данную задачу не решить c помощью SysLibSockets
для PLC WinNT? Если нужен будет проект - я выложу.

Страница 1 из 1 Часовой пояс: UTC+01:00
Powered by phpBB® Forum Software © phpBB Limited
https://www.phpbb.com/