Значит получается, по любому нужно уходить от конфигуратора, но блин я вообще немогу понять как подступится к вашему примеру....
В PLC_PRG отсекайте все лишнее, оставте только работу модбаса. Структуру данных, которую он отправляет заполняйте в ручную в режиме онлайн, чтоб пока привыкнуть к этому виду, скачайте билдер от вейнтека и запустите эмулятор онлайновый, в качестве контроллера выберите модбас зеро и галку поставте работать по UDP. Если нет желания то вот набор можно скачать от производителя КДС http://www.owen.ru/forum/showthread....l=1#post102798, открывал сокеты я по этим примерам, что UDP, что TCP,для ТСР будет всё тоже самое что касается модбас, измениться только открытие/закрытие сокета и отправка/чтение
да пока не зачто, если возникнут проблемы выкладывайте проект с тестированием слейва, подскажу что не так
К сожалению, Владислав передал в группу технической поддержки версию на 110-30. Тогда завтра попрошу его выложить на 110-60.
Прошу использовать прошивку 0.3.62
Большое спасибо! Надо только имя файла переименовать, а то при выполнении команды UpdateCore браузер скажет, что прошивка не найдена
Только у меня возник ряд вопросов в добавок к уже имеющимся. Посмотрите пожалуйста - http://www.owen.ru/forum/showthread....780#post223780
Здравствуйте, не стал создавать новую тему, а решил продолжить свою старую так как, в принципе название подходит.
Начал делать новый проект: таже связка ПЛК110+ОРСсервер(Инсат)+МастерСкада. Уж очень не хочется в ручную вбивать 600-700 регистров в конфигураторе и решил разобраться с бибкой SysLibSockets.
Подогнали мне пример:
раздел описания:
код FB:Код:FUNCTION_BLOCK SENSOR
VAR CONSTANT
TIMEOUT_TIME : TIME := T#5S ;
POLLING_TIME : TIME := T#10S ;
TRUST_TIME : TIME := T#15S ;
END_VAR
VAR_INPUT
IP1 : DWORD := 16#0A000665;
IP2 : DWORD ;
END_VAR
VAR_OUTPUT
SKY : UINT ;
SUN : UINT ;
TRUST : BOOL ;
END_VAR
VAR
STATE : INT := 0 ;
TIMEOUT_TIMER : TON ;
TRUST_TIMER : TOF ;
SOCKET : DINT :=SOCKET_INVALID ;
SADR : SOCKADDRESS ;
REQUEST : ARRAY [0..11] OF BYTE := 5(0) , 6 , 1 , 3 , 0 , 0 , 0 , 2 ;
ANSWER : ARRAY [0..12] OF BYTE ;
_IP2 : BOOL ;
END_VAR
И появились вопросы:Код:IF IP1 <> 0 THEN
CASE STATE OF
0:
SOCKET := SysSockCreate ( SOCKET_AF_INET , SOCKET_STREAM , SOCKET_IPPROTO_TCP ) ;
IF SOCKET <> SOCKET_INVALID THEN
STATE := 1 ;
ELSE STATE:=4;
END_IF
TIMEOUT_TIMER ( IN := TRUE , PT := TIMEOUT_TIME ) ;
1:
SADR.sin_addr := IP1;(*SEL ( _IP2 AND ( IP2 <> 0 ) , IP1 , IP2 ) ;*)
SADR.sin_family := SOCKET_AF_INET ;
SADR.sin_port := 502 ;
SysSockConnect ( SOCKET , ADR ( SADR ) , SIZEOF ( SADR ) ) ;
STATE := 2 ;
2:
IF SysSockSend ( SOCKET , ADR ( REQUEST ) , SIZEOF ( REQUEST ) , 0 ) = SIZEOF ( REQUEST ) THEN
STATE := 3 ;
ELSE
TIMEOUT_TIMER ( IN := TRUE ) ;
END_IF
3:
IF SysSockRecv ( SOCKET , ADR ( ANSWER ) , SIZEOF ( ANSWER ) , 0 ) <> 0 THEN
IF ( ANSWER [ 0 ] = REQUEST [ 0 ] ) AND ( ANSWER [ 1 ] = REQUEST [ 1 ] ) THEN
SKY := WORD_OF_BYTE ( ANSWER [ 9 ] , ANSWER [ 10 ] ) ;
SUN := WORD_OF_BYTE ( ANSWER [ 11 ] , ANSWER [ 12 ] ) ;
TRUST_TIMER ( IN := TRUE ) ;
_IP2 := FALSE ;
END_IF
STATE := 4 ;
ELSE
TIMEOUT_TIMER ( IN := TRUE ) ;
END_IF
4:
SysSockClose ( SOCKET ) ;
SOCKET := SOCKET_INVALID ;
IF REQUEST [ 1 ] = BYTE#16#FF THEN
REQUEST [ 0 ] := REQUEST [ 0 ] + 1 ;
END_IF
REQUEST [ 1 ] := REQUEST [ 1 ] + 1 ;
STATE := SEL ( TIMEOUT_TIMER.Q , 5 , 0 ) ;
TIMEOUT_TIMER ( IN := FALSE ) ;
5:
TIMEOUT_TIMER ( IN := TRUE , PT := POLLING_TIME ) ;
IF TIMEOUT_TIMER.Q THEN
TIMEOUT_TIMER ( IN := FALSE ) ;
STATE := 0 ;
END_IF
END_CASE
IF TIMEOUT_TIMER.Q THEN
STATE := 4 ;
_IP2 := NOT _IP2 ;
END_IF
ELSIF SOCKET <> SOCKET_INVALID THEN
SysSockClose ( SOCKET ) ;
SOCKET := SOCKET_INVALID ;
STATE := 0 ;
END_IF
TRUST_TIMER ( IN := FALSE , PT := TRUST_TIME ) ;
TRUST := TRUST_TIMER.Q ;
1. ІР-адрес 10.0.6.101 будет 16#0A000665. Правильно???
2. Если этот код не переходит на 3 шаг кейса, значит нет ответа от ПК с OPC-cервером(в моем случае это 10.0.6.101)??????
3. На третьем шаге (если правильно понял)идет чтение переменных, а как тогда записать значение переменной в OPC-сервер?????
4. Вообще насколько этот код подходит для ПЛК110+ОРСсервер(Инсат), может нужно что-то переделать?????
Сразу извиняюсь за тупые вопросы - это мое первое знакомство с SysLibSockets....
Никто не может подсказать????