Просмотр полной версии : Немного о SysLibSockets
Может быть, к (https://ufa.com.ru/?q=node/1)ому-то будет интересно. Разбор работы функций библиотеки. Описание пока не закончено, но планирую доделать его в ближайшем будущем. Хотелось бы выслушать комментарии и прочие замечания-предложения.
Любителям конструкций BOOL_TO_DINT(SysLibSocketFunction()) посвящается..:D
Молодец, классно! Думаю Владислав должен прокомментировать сие..
Самое печальное то, что эту инфу нужно собирать по крупицам по форуму, что усложняет вход новичков и вызывает отторжение у некоторых.
Самое печальное - это то, что подобное, мягко выражаясь, безобразие тиражируется из прошивки в прошивку. При том, что косяки (нет. правильнее КОСЯКИ) видны невооружённым взглядом.
Хороший самопиар, но уже для первой функции ошибко.
Ау! Владислав!!! Хоть бы спасибо сказали за проделанную работу?
ЗЫ. Большинство этих косяков исправляется элементарно даже в обычном HEX-редакторе, безо всяких исходников. И этот тяжёлый труд в "Овене" не смогли осилить за десяток лет?
Да, кстати, все свои выводы по функциям библиотеки могу подтвердить мелкими программками на CoDeSys.
Чтобы не быть голословным, приведу пример для проверки правильности выводов по первой функции. Ну, где "ошибко":
39592
Окно telnet-сервера:
39587
Упс?
ЗЗЫ. Описание закончено.
Ещё одна ошибка работы сокетов. Возьмём для примера самую простую программу:
VAR
tcp_adr: SOCKADDRESS;
diSocket: DINT := SOCKET_INVALID;
diParam: DINT := 0;
recv_buf: STRING[250];
res: DINT;
resIoctl: DINT;
first_run: BOOL := TRUE;
counter: DWORD;
END_VAR
IF first_run THEN
diSocket := SysSockCreate(SOCKET_AF_INET, SOCKET_STREAM, SOCKET_IPPROTO_TCP);
resIoctl := SysSockIoctl(diSocket, SOCKET_FIONBIO, ADR(diParam)); (* Включаем блокирующий режим - diParam<>1 *)
tcp_adr.sin_family := SOCKET_AF_INET;
tcp_adr.sin_addr := 16#C0A80135;
tcp_adr.sin_port := 23;
SysSockBind(diSocket, ADR(tcp_adr), SIZEOF(tcp_adr));
SysSockListen(diSocket, 1);
first_run := FALSE;
END_IF
res := SysSockRecv(diSocket, ADR(recv_buf), SIZEOF(recv_buf), 0);
counter := counter +1; (* просто счётчик. посмотреть, работает ли программа *)
Как Вы думаете, что произойдёт при соединении с этим сервером? Правильный ответ - ничего хорошего. Данные через SysSockRecv не принимаются, ПЛК через примерно 5 секунд после установки соединения уходит в reboot (видимо, по тайм-ауту соединения). Если закомментировать строку с установкой блокирующего режима, то данные через SysSockRecv принимаются, но если в сокет ничего не посылать, то соединение закроется по тайм-ауту (хотя бы без reboot'а - и то хорошо) и повторно с ним соединиться уже не получится.
Обнаружил я это при изучении неблокирующего режима. Выяснилось, что сокеты работают по умолчанию в неблокирующем режиме, а при попытке его отключения видим то, что видим.
В дальнейшем попробую разобраться, почему это происходит.
Вот это заклинание переводит ПЛК110 М02 в неблокирующий режим
SysSockSetOption( handle, SOCKET_SOL, 16#1014, 0, 0 );
А зачем Вам вообще блокирующий режим?
Какой у Вас ПЛК?
Трофимов Артем
06.11.2018, 16:45
замечательное видео разбора полётов с сокетами на примере кодесис 3. отлично описано различие блокирующего и неблокирующего режимов. станет понятно, почему у вас срабатывает ватчдог при работе указанного сервера в блокирующем режиме
https://www.youtube.com/watch?v=ThVLXygHnnU&t=29s
ну есть же поясняющий пример работы с сокетами от S3Software, известны особенности овеновской разработки с булями, но сперва же мастерят код собственного изготовления, а потом жалуются что не работает чегойто
Как уже выше писалось, только ради самопиара поднимает тему в верх списка, чтоб больше народу увидело какой он молодец, дизасемблировал закрытую библиотеку
ЗЫ бибку я тоже выкладывал, повторно загружать не буду
ЗЫЫ ссылка на бибку (http://www.owen.ru/forum/showthread.php?t=10555&p=278623&viewfull=1#post278623)
Вот это заклинание переводит ПЛК110 М02 в неблокирующий режим
SysSockSetOption( handle, SOCKET_SOL, 16#1014, 0, 0 );
А зачем Вам вообще блокирующий режим?
Какой у Вас ПЛК?
М02, может, и переводит. Для версий с прошивками 2.17.0 SysSockSetOption не делает ровно ничего.
ну есть же поясняющий пример работы с сокетами от S3Software, известны особенности овеновской разработки с булями, но сперва же мастерят код собственного изготовления, а потом жалуются что не работает чегойто
Как уже выше писалось, только ради самопиара поднимает тему в верх списка, чтоб больше народу увидело какой он молодец, дизасемблировал закрытую библиотеку
ЗЫ бибку я тоже выкладывал, повторно загружать не буду
Почему бы и не молодец? Народ вот уже лет 10 пытается добиться от производителя вменяемой документации по не самой немаловажной библиотеке. А ещё лучше вменяемой работы этой библиотеки. И? Результат-то где? Ваш example демонстрирует только то, что встроенными функциями пользоваться невозможно. О чём, собственно, я и веду речь.
Да. За "особенности овеновской разработки с булями" отдельное спасибо. Поржал от души.
ЗЫ. "Бибку" тоже хрен где найдёшь. С сайта она уже давно не грузится. А жаль. Хотелось посмотреть..
М02, может, и переводит. Для версий с прошивками 2.17.0 SysSockSetOption не делает ровно ничего.
Наверно потому, что не надо ничего делать.
Какой у Вас ПЛК?
Почему бы и не молодец? Народ вот уже лет 10 пытается добиться от производителя вменяемой документации по не самой немаловажной библиотеке. А ещё лучше вменяемой работы этой библиотеки. И? Результат-то где? Ваш example демонстрирует только то, что встроенными функциями пользоваться невозможно. О чём, собственно, я и веду речь.
Поймите, все косяки Овена заложены в его цену. Чудес не бывает.
замечательное видео разбора полётов с сокетами на примере кодесис 3. отлично описано различие блокирующего и неблокирующего режимов. станет понятно, почему у вас срабатывает ватчдог при работе указанного сервера в блокирующем режиме
https://www.youtube.com/watch?v=ThVLXygHnnU&t=29s
Хорошее видео. Ничего нового из него не узнал, но спасибо.
Вачдог отключен. Собственно, поэтому я и не ожидал reboot'а. Видимо, я неправильно понимаю смысл этой галочки.
39671
Вы правы в том, что с момента подключения и до перезагрузки ПЛК Counter уже не считает. Только ещё раз уточню - данные в сокет тоже не принимаются. Вообще. Т.е. блокирующий режим работы полностью неработоспособен.
И, согласитесь, сокеты работают по умолчанию в неблокирующем режиме. Что несколько расходится с их стандартным поведением. И с документацией.
Поймите, все косяки Овена заложены в его цену. Чудес не бывает.
Это я даже комментировать не хочу. Давайте ещё косяков добавим?
Филоненко Владислав
06.11.2018, 19:14
М02, может, и переводит. Для версий с прошивками 2.17.0 SysSockSetOption не делает ровно ничего.
Потому что там уже в неблокирующем всегда!
Потому что там уже в неблокирующем всегда!
Угу. И где это написано? И при чём здесь SysSockSetOption?
Филоненко Владислав
06.11.2018, 19:19
Хорошее видео. Ничего нового из него не узнал, но спасибо.
Вачдог отключен. Собственно, поэтому я и не ожидал reboot'а. Видимо, я неправильно понимаю смысл этой галочки.
39671
Вы правы в том, что с момента подключения и до перезагрузки ПЛК Counter уже не считает. Только ещё раз уточню - данные в сокет тоже не принимаются. Вообще. Т.е. блокирующий режим работы полностью неработоспособен.
И, согласитесь, сокеты работают по умолчанию в неблокирующем режиме. Что несколько расходится с их стандартным поведением. И с документацией.
1. Ради Вашей безопасности Вы никак не можете отключить аппаратный WatchDog. Только програмный.
2. Да, на старой линейке ПЛК блокирующий режим 100% неработоспособен. На новой он работает 5 секунд до ватчдога. Успеет произойти обмен - программа проживёт еще 5 секунд :D Системы реального времени и блокирующие функции несовместимы от слова совсем.
3. Сокеты на embedded реализации ну никак не могут 100% соответствовать стандарту, Вы небось на linux/Windows ориентируетесь? Особенности известны, примеры есть, на ОШИБКИ мы оперативно реагируем. Так что не надо паники!
1. Ради Вашей безопасности Вы никак не можете отключить аппаратный WatchDog. Только програмный.
2. Да, на старой линейке ПЛК блокирующий режим 100% неработоспособен. На новой он работает 5 секунд до ватчдога. Успеет произойти обмен - программа проживёт еще 5 секунд :D Системы реального времени и блокирующие функции несовместимы от слова совсем.
3. Сокеты на embedded реализации ну никак не могут 100% соответствовать стандарту, Вы небось на linux/Windows ориентируетесь? Особенности известны, примеры есть, на ОШИБКИ мы оперативно реагируем. Так что не надо паники!
Да я не паникую. Я разбираюсь в том, как работает ваша техника. Недавно (уже упоминал) убил полтора месяца на то, за что в принципе даже не брался бы, зная то, что знаю сейчас. Хочу вот уберечь других программистов от повторения моих ошибок.
ЗЫ. В оперативность реагирования, простите, не верю. Как и в то, что ошибки бережно сохраняются в новых прошивках для сохранения совместимости с ранее написанным для ПЛК софтом. По мне так нормальной реакцией была бы новая прошивка с правильно функционирующей библиотекой и объявление о том, что обновление прошивки не рекомендуется тем-то и тем-то по таким-то причинам. Вместо этого мы годами читаем на форуме о том, как правильно делать BOOL_TO_DINT при полном отсутствии документации.
alexx751
07.11.2018, 16:47
Пять раз Владислава спросили про документацию. Пять раз он не ответил:)
Озвучили. Только смысл ответа от меня ускользает. Что значит "никто не будет их "исправлять"? Это почему? Некому? Давайте я исправлю?
И почему "исправлять" в кавычках? Т.е. вас в (https://ufa.com.ru/?q=node/1)от это все устраивает? Всех всё устраивает? Один я никак не врублюсь в "особенности овеновской разработки с булями" (с) ?
Ладно бы всё это касалось древних приборов, давно ушедших в прошлое. Так ведь нет - половина производимых сегодня ПЛК идёт с такими вот "особенностями" (с).
ЗЫ. Есть ещё один вариант выхода из положения. Выпускайте 2 прошивки - одну для любителей мазохизма, вторую - соответствующую документации.
Как я понял, пока единственная реакция со стороны "Овена" - это забота о том, как бы я не получил излишнее количество самопиара.:D
Ну, да я не гордый. Повторю вкратце выводы здесь.
Для всех ПЛК с прошивкой 2.17.0 из 25 функций библиотеки SysLibSockets:
Функции, возвращающие свой аргумент (не скажу, что это ненормально, но применять их в проектах только для ПЛК "Овен" смысла нет):
SysSockHtonl
SysSockHtons
SysSockNtohl
SysSockNtohs
Полностью неработоспособные функции:
SysSockAccept
SysSockGetHostByName
SysSockGetHostName
SysSockGetLastError
SysSockGetOption
SysSockInetAddr
SysSockInetNtoa
SysSockSelect
SysSockSetIPAddress
SysSockSetOption
SysSockShutdown
Работают, но не так, как заявлено в документации:
SysSockClose - возвращает TRUE вместо FALSE и наоборот;
SysSockConnect - возвращает всегда FALSE;
SysSockIoctl - расхождение с документацией, причём разное для разных команд;
SysSockListen - возвращает всегда FALSE. Примечание: BOOL_TO_DINT от результата возвращает всегда 0.
Работают как заявлено в документации:
SysSockBind
SysSockCreate
SysSockRecv
SysSockRecvFrom
SysSockSend
SysSockSendTo
Вывод то какой? Если что, у меня два плк100 между собой в быки-коровы играли по Ethernet, им ни чего не мешает, неужто потому что яичек нет?
Вывод то какой? Если что, у меня два плк100 между собой в быки-коровы играли по Ethernet, им ни чего не мешает, неужто потому что яичек нет?
Вывод простой. Производителю, как ни странно, почему-то не нужно, чтобы ПЛК определённых серий нормально поддерживали сетевые функции. Тот детский лепет, который мы услышали от уважаемого Владислава, тому подтверждение.
а зачем, еще раз повторяю не пользуюсь я всеми функциями, которые Вы забраковали как не рабочие, тех которые работают вполне достаточно для обмена информацией. ПЛК программируется для конкретных задач, а не поддерживать весь функционал стека на всякий случай
А вы можете хоть 50 раз повторять. Вы не пользуетесь нерабочими функциями, потому что они нерабочие. ;) (Интересен ещё вопрос, а как вы догадались, что они нерабочие и сколько ушло на это понимание времени?) И вопрос отнюдь не в полной или неполной поддержке сетевого функционала. Вопрос в том, что всё это никак не отражено в документации.
ЗЫ. Попробую попроще объяснить. Я покупаю ПЛК отнюдь не подвального изготовления, читаю всю прилагающуюся к нему документацию, пишу (опираясь на эту документацию) программу и... ну да - программа не работает. Это нормально?
А я попробую тогда в открытую сказать, раз не поняли намека: плохому танцору ... => ищите подсказку в предыдущих постах
А я попробую тогда в открытую сказать, раз не поняли намека: плохому танцору ... => ищите подсказку в предыдущих постах
Рад за ваши танцорские умения. Развивайте талант и дальше...
PS. Уважаемые модераторы! (здесь же бывают модераторы?) Конечно, товарищ capzap обладает невероятными талантами - великолепный танцор и обладатель чёрного пояса по программированию без правил (уверен, что он может заставить играть в "быки и коровы" хоть арифмометры "Феликс"), но я не уверен в том, что эти яркие достоинства дают ему право нарушать правила форума. Нет?
Овену надо было поступить с SysLibSockets также, как SysLibCom. Сделать дополнительную библиотеку ( или библиотеки ) с функциональными блоками ( например TcpClient, TcpServer, UdpClient и т.д. ), снабдить все это описанием и примерами. И разработчикам было бы проще и матов на форуме было бы меньше.
Овену надо было поступить с SysLibSockets также, как SysLibCom. Сделать дополнительную библиотеку ( или библиотеки ) с функциональными блоками ( например TcpClient, TcpServer, UdpClient и т.д. ), снабдить все это описанием и примерами. И разработчикам было бы проще и матов на форуме было бы меньше.
ну не совсем так, но овеновцы изменили работу с сокетами в М02 для большего соответствия стандартам и что, ругани стало еще больше. Ответ уже дали, ни чего меняться не будет
Овену надо было поступить с SysLibSockets также, как SysLibCom. Сделать дополнительную библиотеку ( или библиотеки ) с функциональными блоками ( например TcpClient, TcpServer, UdpClient и т.д. ), снабдить все это описанием и примерами. И разработчикам было бы проще и матов на форуме было бы меньше.
SysLibCom работает вроде точно так же, как и SysLibSockets. Так же функции библиотеки реализованы в прошивке.
Вынос библиотечных функций наружу подразумевает необходимость предоставления пользователю доступа непосредственно к железу контроллера - вряд ли это правильно.
SysLibCom работает вроде точно так же, как и SysLibSockets. Так же функции библиотеки реализованы в прошивке.
Вынос библиотечных функций наружу подразумевает необходимость предоставления пользователю доступа непосредственно к железу контроллера - вряд ли это правильно.
ВЫ меня не так поняли. Я о SyslibCom.lib и ComService.lib
ну не совсем так, но овеновцы изменили работу с сокетами в М02 для большего соответствия стандартам и что, ругани стало еще больше. Ответ уже дали, ни чего меняться не будет
Ну не знаю. Мне кажется, что ComService.lib была хорошая идея.
Ну не знаю. Мне кажется, что ComService.lib была хорошая идея.
ComService насколько я знаю, разработка пользователя а не овеновское предложение, просто это удобно, но какой смысл что то предлагать с сокетами, когда есть http://www.owen.ru/forum/showthread.php?t=29703&p=291852&viewfull=1#post291852 вложение от КДС, остается переделать преобразование типов в нужных местах и всё, все мои примеры которые я на форуме выкладывал написаны через этот код
ComService насколько я знаю, разработка пользователя а не овеновское предложение, просто это удобно, но какой смысл что то предлагать с сокетами, когда есть http://www.owen.ru/forum/showthread.php?t=29703&p=291852&viewfull=1#post291852 вложение от КДС, остается переделать преобразование типов в нужных местах и всё, все мои примеры которые я на форуме выкладывал написаны через этот код
Я не знаю чья именно разработка ComService.lib, но сейчас она входит в "стандартный набор" библиотек, который можно скачать с сайта owen.ru.
Я не настаиваю на создании дополнительных библиотек для сокетов. Просто с ними тоже было бы удобно, и скрыло бы некоторые нюансы реализации сокетов в ПЛК Овен. И разработчикам на стороне клиента, и техподдержке на стороне производителя было бы удобней.
TcpUdpLib этим и занимается, сама бибка открытая, поправить в двух-трех местах и Вы в шоколаде
TcpUdpLib этим и занимается, сама бибка открытая, поправить в двух-трех местах и Вы в шоколаде
А вот автор этой темы другого мнения
так то он и код свой выкладывал, который не похож на то что я показал и тоже не рабочий, может дело не в бибке
так то он и код свой выкладывал, который не похож на то что я показал и тоже не рабочий, может дело не в бибке
ПЛК - это важный компонент промышленной автоматики.
Понимаете, одно дело когда используешь библиотеки скачанные с официального сайта, например отсюда
https://www.owen.ru/product/programmiruemij_logicheskij_kontroller_oven_plk110
и другое когда используешь код, который кто-то выложил на форуме. Вы же в Овене не работаете.
ПЛК - это важный компонент промышленной автоматики.
Понимаете, одно дело когда используешь библиотеки скачанные с официального сайта, например отсюда
https://www.owen.ru/product/programmiruemij_logicheskij_kontroller_oven_plk110
и другое когда используешь код, который кто-то выложил на форуме. Вы же в Овене не работаете.
смешно, а не прочли ли Вы на что я ссылался, если Вы зарегестрированы на сайте КДС, то тоже можете получить из официальных рук эту библиотеку, я тут плюшки запретные выкладываю, а они еще ерепеняться
ну есть же поясняющий пример работы с сокетами от S3Software, известны особенности овеновской разработки с булями, но сперва же мастерят код собственного изготовления, а потом жалуются что не работает чегойто
ЗЫЫ ссылка на бибку (http://www.owen.ru/forum/showthread.php?t=10555&p=278623&viewfull=1#post278623)
Посмотрел. Нисколько не удивлён тому, что "бибка" "Запретная плюшка" полностью неработоспособна. По очевидным причинам, изложенным мной чуть выше. Могу пройтись по всем её функциям. Если вдруг интересно, конечно.
Чтобы несколько разбавить эту скучную тему, выложу код NTP-клиента. Товарищ capzap выкладывал давным-давно (http://www.owen.ru/forum/showthread.php?t=14056&p=126715&viewfull=1#post126715) свою версию. Моя, пожалуй, чуть получше. Скачать проект можно здесь (https://ufa.com.ru/files/ntp.pro).
PROGRAM PLC_PRG
VAR
GetTime: CurTimeEx;
TimeAndDate: SystemTimeDate;
Sys_Time: SysTime64;
ntp_socket : DINT:= SOCKET_INVALID;
ntp_sockaddr : SOCKADDRESS;
state: DWORD;
R_BUF: ARRAY[0..47] OF BYTE;
i: WORD;
received: DINT;
NTP_TIME: SDT;
tx, last: DWORD;
OK, ERRORS: DWORD; (* Счётчики удачных и неудачных запросов - для справки *)
END_VAR
VAR CONSTANT
S_BUF: ARRAY[0..47] OF BYTE := 27,47(0);
TIMEOUT: TIME := t#500ms; (* Тайм-аут ожидания ответа ntp-сервера *)
HOME: TIME := t#5h; (* UTC+5 мой часовой пояс *)
PERIOD: TIME := t#30s; (* Время между ntp-запросами. Не менее 30 секунд! *)
ntp_port: UINT := 123;
ntp_addr: UDINT := 16#34B2A129; (* 52.178.161.41 time.windows.com *)
END_VAR
================================================== ===============
(* Для компиляции требуются библиотеки SYSLIBTIME, SysLibSockets и oscat_basic_333 *)
(*Читаем текущее время - здесь только для контроля правильности работы программы *)
TimeAndDate.Year :=0; TimeAndDate.Month :=0; TimeAndDate.Day :=0; TimeAndDate.DayOfWeek :=0;
TimeAndDate.HOUR :=0; TimeAndDate.MINUTE :=0; TimeAndDate.SECOND :=0; TimeAndDate.Milliseconds :=0;
TimeAndDate.dwHighMsec :=0; TimeAndDate.dwLowMSecs :=0;
Sys_time.ulHigh :=0; Sys_time.ulLow :=0;
GetTime (SystemTime:=Sys_Time , TimeDate:= TimeAndDate);
(* tx := T_PLC_MS(); *) (* Этот вариант годится, если часть программы выше отсутствует, т.е. когда нам неизвестно значение переменных структуры TimeAndDate *)
tx := TimeAndDate.dwLowMSecs;
CASE state OF
0: (* Cоздание сокета *)
ntp_socket := SysSockCreate(SOCKET_AF_INET, SOCKET_DGRAM, SOCKET_IPPROTO_UDP);
ntp_sockaddr.sin_family := SOCKET_AF_INET;
ntp_sockaddr.sin_port := ntp_port;
ntp_sockaddr.sin_addr := ntp_addr;
FOR i:=0 TO 47 DO R_BUF[i] := 0; END_FOR (* Очистка приёмного буфера *)
state := 1;
1: (* Посылаем запрос на ntp-сервер *)
SysSockSendTo(ntp_socket, ADR(S_BUF), SIZEOF(S_BUF), SOCKET_MSG_OOB, ADR(ntp_sockaddr), SIZEOF(ntp_sockaddr));
last := tx;
state := 2;
2: (* Ждём ответ ntp-сервера в течение времени TIMEOUT *)
received := SysSockRecvFrom(ntp_socket, ADR(R_BUF), SIZEOF(R_BUF), SOCKET_MSG_OOB, ADR(ntp_sockaddr), SIZEOF(ntp_sockaddr));
IF received=48 AND R_BUF[40]<>0 THEN
state := 3;
ELSE
IF tx-last>TIME_TO_DWORD(TIMEOUT) THEN
ERRORS := ERRORS+1; (* Ошибки появляются только при обрыве связи *)
state := 4;
END_IF
END_IF
3: (* Запись полученного времени в системный таймер*)
NTP_TIME:= DT_TO_SDT( DWORD_TO_DT(DWORD_OF_BYTE(R_BUF[40],R_BUF[41],R_BUF[42],R_BUF[43]) - DWORD#2208988800 + TIME_TO_DWORD(HOME)/1000));
TimeAndDate.Year := NTP_TIME.YEAR; TimeAndDate.Month := NTP_TIME.MONTH; TimeAndDate.Day :=NTP_TIME.DAY;
TimeAndDate.HOUR := NTP_TIME.HOUR; TimeAndDate.MINUTE := NTP_TIME.MINUTE; TimeAndDate.SECOND := NTP_TIME.SECOND;
GetTime (SystemTime:=Sys_Time , TimeDate:= TimeAndDate);
OK := OK + 1;
state := 4;
4: (* Закрываем сокет *)
SysSockClose(ntp_socket);
state := 5;
5: (* Ждём окончания времени между запросами *)
IF tx-last>TIME_TO_DWORD(PERIOD) THEN
state := 0;
END_IF
END_CASE
ну и зачем было выкладывать то непотребство из шестого поста, если можете нормально писать?
А по этому коду, используется
SysSockCreate
SysSockSendTo
SysSockRecvFrom
зачем остальные функции?
ну и зачем было выкладывать то непотребство из шестого поста, если можете нормально писать?
А по этому коду, используется
SysSockCreate
SysSockSendTo
SysSockRecvFrom
зачем остальные функции?
"Непотребство" из 6 поста доказывало неработоспособность блокирующего режима. Со своей задачей вполне справлялось.
Мой ntp-клиент работает именно потому, что не использует косячных функций. С udp-сокетами дела обстоят более-менее прилично.
Главная мысль какая - tcp-сокеты не работают или либы несколько несоответственно описаны ?
Работа с сокетами в неблокирующем режиме с нерабочей функцией GetLastError - это как минимум странно. Про несоответственность описания я уж и упоминать устал. Tcp-сокеты в текущей их реализации таковы, что лучше ими не пользоваться.
ЗЫ. Особенно это касается серверного режима работы.Написать клиента ещё с грехом пополам можно, написать нормально функционирующий сервер - нереально.
Работа с сокетами в неблокирующем режиме с нерабочей функцией GetLastError - это как минимум странно. Про несоответственность описания я уж и упоминать устал. Tcp-сокеты в текущей их реализации таковы, что лучше ими не пользоваться.
ЗЫ. Особенно это касается серверного режима работы.Написать клиента ещё с грехом пополам можно, написать нормально функционирующий сервер - нереально.
а веб сервер статических страниц, а у меня еще и с ajax (https://ru.wikipedia.org/wiki/AJAX) это не нормально функционирующий сервер, а слейв модбасТСР это не нормально функционирующий сервер?
я как раз про программный, то что выкладывал здесь на форуме, правда это было по UDP с вейнтековской панелью, зато используется на производстве уже несколько лет, а не чисто потестить
Я и задаю вопрос: "Доколе?!" А в ответ тишина.. Пардон, ответ был "никто ничего "исправлять" не будет". Потом его, правда, стыдливо потерли.
Я с косяками "Овена" разобрался и по мере возможности могу их обходить, но это вот все нифига не нормально. Разговоры про то, что у всех косяки мне тоже абсолютно непонятны.
А более всего непонятно, почему бы эти косяки не исправить. При наличии исходников прошивки эту работу можно выполнить максимум за день. Во всяком случае, я за день точно исправил бы большую их часть. Даже впервые увидев эти исходники.. Что уж и говорить о разработчиках? Для них это исправление вряд ли заняло бы более 15 минут. И?
Я за них отвечу. "Как только так сразу". Это ж Овен.
Пойдет ?
Это ключевое слово. Сами догадаетесь ?
Прикол в том, что и без исходников вполне можно все поправить. Ну, за неделю максимум.
Исправляйте. В чем вопрос-то ?
Да уж начал. Сделаю 2.0.17bis для собственного употребления. Раз уж иначе никак..
Вот щас повозился с tcp. Программный tcp-сервер на плк (30-МО2) ответил делфийскому стандартному tcp-клиенту на пк..
У М02 прошивка другая.
Может, там и нет такого безобразия. Кто его знает?
Может, там и нет такого безобразия. Кто его знает?
Овен же......
Работа с сокетами в неблокирующем режиме с нерабочей функцией GetLastError - это как минимум странно. Про несоответственность описания я уж и упоминать устал. Tcp-сокеты в текущей их реализации таковы, что лучше ими не пользоваться.
ЗЫ. Особенно это касается серверного режима работы.Написать клиента ещё с грехом пополам можно, написать нормально функционирующий сервер - нереально.
Ну не знаю. Вроде делал ModbusTcp сервер, вроде проверил и вроде работает. Для М01 на одно подключение, на М02 на 4. Правда в реальных проектах еще не использовал.
Долго тестировали? У меня тоже сервер будто бы работал. Но обычно не более суток. И да - про М02 ничего сказать не могу. Другой процессор, другая прошивка.
Долго тестировали? У меня тоже сервер будто бы работал. Но обычно не более суток. И да - про М02 ничего сказать не могу. Другой процессор, другая прошивка.
Где-то сутки, может на пару часов меньше меньше. Клиент был тоже ПЛК. Пробовал на ПЛК110-30 М01, ПЛК110-30 М02 и ПЛК100.
Пример рабочего кода выложить несколько проблематично. Просто все это существует в виде библиотеки для modbus, делал для себя. Если хотите могу выложить, но нет ни описаний и ни примеров. Есть только тесты.
Оно Вам надо?
Всем доброго дня!
У меня такой вопрос, есть owen ПЛК110-30, программа написана на функциональных блоках, работаем с ним по TCP отправляя регистры
Сама программа отрабатывает претензий к ней нет, но эпизодически при переподключении не можем подключиться к контроллеру.
почитав документацию выяснилось что есть ограничение по количеству созданных сокетов, а проверка их если и есть, то она по таймингам совсем не вписывается.
Собственно вопрос: есть ли возможно пример или сможете подсказать как осуществлять контроль за неиспользуемыми сокетами, в проекте который написан на ФБ.
возможно есть какая-то возможность получить список открытых сокетов, пробежаться по ним и закрыть неактивные, или что то в таком духе
я видел пример клиент\сервер, но если честно не могу сообразить как его применить в текущей программе
Вероятно мой вопрос останется без ответа или возможно меня закидют гневными словами типа учи мат часть, но так вышло что это совсем не моя тема и от связи с контроллером зависит стабильность работы приложения. Очень надеюсь на хоть какю-то помощь.
Powered by vBulletin® Version 4.2.3 Copyright © 2024 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot