PDA

Просмотр полной версии : MB_SERVER (oscat) + ПЛК110



Badrey
09.07.2014, 08:30
Доброго времени суток!
Кто ни будь пробовал организовывать сервер модбас из этой замечательной бибки на ПЛК110? Поделитесь примером или подскажите в какую сторону копать.

Демо из бибки не работает, ошибка IP_C.ERROR - 03000000h. По ней собственно сервер и был "запилен". Пример Камзапа работает на PLCWinNT, на его основе была составлена структура V_MAP модбас, так же написан и опробован интерфейс панели. Не хотелось бы все переделывать для организации не программным способом а через конфигурацию.

Badrey
10.07.2014, 05:53
Выяснилось что в ФБ IP_CONTROL2 неудачно проходит функция SysSockListen, хотя код схож с рабочим кодом в популярном на форуме примере web сервера, вот тот участок:

TS_INIT: (* TCP-SERVER (PASSIV) *)
server_socket := SysSockCreate(SOCKET_AF_INET, SOCKET_STREAM, SOCKET_IPPROTO_IP); (* Create Socket *)
IF server_socket = SOCKET_INVALID THEN
c_status := 1; (* SysSockCreate failed *)
state:= C_CLOSE;
ELSE (* Address bindings *)
SysSockSetOption( server_socket, SOCKET_SOL, SOCKET_SO_REUSEADDR, ADR(dint_true), SIZEOF(dint_true) );
sockaddr.sin_family:= SOCKET_AF_INET;
sockaddr.sin_port := SysSockHtons(c_port);
sockaddr.sin_addr := SOCKET_INADDR_ANY;
IF NOT SysSockBind(server_socket, ADR(sockaddr), SIZEOF(sockaddr)) THEN
c_status := 2; (* SysSockBind failed *)
state := C_CLOSE;
ELSIF NOT SysSockListen(server_socket, 1) THEN (* erzeugt Warteschlange für eine Verbindung *)
c_status := 3; (* SysSockListen failed *)
state:= C_CLOSE;
ELSE
SysSockIoctl(server_socket, SOCKET_FIONBIO, ADR(dint_true)); (* NonBlocking mode *)
state:= TS_OPEN;
END_IF;
END_IF;

capzap
10.07.2014, 09:25
не раз уже писалось, что установка сокета в плк овен отличается от общепринятой кодесисовской библиотеки, при создании операционной системы были допущены разночтения, где используется INT vs BOOL
Ищите темы где описывается создание соединения для овеновских плк и вставте в свой проект