PDA

Просмотр полной версии : 3 разных файла SysLibSockets.lib - какой использовать



Михаил Грушев
14.07.2017, 10:51
Подскажите пожалуйста
Пытаюсь открыть для себя дивный мир TCP-соединений на ПЛК-150, терплю фейл.
Соединение не устанавливается, даже простая функция SysSockInetAddr возвращает ноль вместо адреса.
Закралась мысль - а ту ли библиотеку я подключил. Стал искать и нашел аж 3 файла SysLibSockets.lib:
Program Files (x86)\3S Software\CoDeSys V2.3\Library
Program Files (x86)\Common Files\CAA-Targets\3S\Lib_NTRT
Program Files (x86)\Common Files\CAA-Targets\3S\Lib_PLCWinNT
Пробовал подключать их всех по одной. С первыми двумя все грузится, но не работает.
С третьей все компилируется, но при прогрузке выдает сообщение "Неразрешенные ссылки на внешние POU: SysSockGetLastErrorSync, SOCK_IP_MREQinit, SOCK_KEEPALIVEinit"

Вопрос, думаю, понятен: какой файл библиотеки подключать, и если из Lib_PLCWinNT то как заставить его прогружаться?

Таргет файлы версии 2.11
Версия прошивки ПЛК 2.16

capzap
14.07.2017, 10:58
Program Files (x86)\3S Software\CoDeSys V2.3\Library

почему примерами других не воспользоваться, например http://www.owen.ru/forum/showthread.php?t=14056&p=126715&viewfull=1#post126715

Михаил Грушев
14.07.2017, 11:22
Скажите пожалуйста - есть какой-то глубинный смысл писать
IF BOOL_TO_DINT(x) < 0
вместо
IF x = FALSE

capzap
14.07.2017, 11:49
Скажите пожалуйста - есть какой-то глубинный смысл писать
IF BOOL_TO_DINT(x) < 0
вместо
IF x = FALSE

попробуйте в обычных условиях в формате буля, состоящего из 0 и 1, задать -1 (минус единица)

Михаил Грушев
14.07.2017, 11:55
Я читаю справку по SysSockConnect и вижу:
Возвращаемый тип BOOL
TRUE = успех
FALSE = не успех

при чем тут минус единица?

capzap
14.07.2017, 11:59
Я читаю справку по SysSockConnect и вижу:
Возвращаемый тип BOOL
TRUE = успех
FALSE = не успех

при чем тут минус единица?

ну сложно будет отправить искать на форуме объяснение разработчика, в кратце когда писалась первая прошивка к овеновским контроллерам, была допущена неточность, когда обнаружилось менять уже было поздно

Михаил Грушев
14.07.2017, 12:05
ООО, чую череп трещит - видать сознание расширилось :)
Большое спасибо за наводку

Теперь к веселой шутке, что индусы проверяют булеву переменную выражением if ( BoolToString(x).Length == 4)
добавляется грустная шутка, как проверять ее в ПЛК Овен

capzap
14.07.2017, 12:09
Вам как бы шашечки или ехать? Ну возвращается интовое число вместо буля как подразумевалось в стандартной библиотеке у немцев, оно от этого хуже или лучше работать не будет

Михаил Грушев
14.07.2017, 12:23
Да тут не в шашечках дело, а в том что такая ловушка должна быть отражена в документации.
А то можно очень долго мучаться, пока не спросишь на форуме.

Михаил Грушев
14.07.2017, 15:12
Чтоб расставить все точки над и, отмечу что и в виде BOOL_TO_DINT(SysSockConnect(...)) результат проверить невозможно.
Указываю параметры верные - связь идет
Указываю параметры неверные - связи нет
А BOOL_TO_DINT(SysSockConnect(...)) в обоих случаях 0

capzap
14.07.2017, 16:38
Чтоб расставить все точки над и, отмечу что и в виде BOOL_TO_DINT(SysSockConnect(...)) результат проверить невозможно.
Указываю параметры верные - связь идет
Указываю параметры неверные - связи нет
А BOOL_TO_DINT(SysSockConnect(...)) в обоих случаях 0
В итоге смогли отправить что нибудь по ТСР, если да, то в чем проблема то. Если хочется увидеть значения отличные от нуля, то точно это делается не на глаз

Михаил Грушев
14.07.2017, 18:21
Да, в итоге работает и на передачу и на прием.