у меня прием - передача без флагов.
посмотрел твой код еще. зависает на чтении SysSockRecv возвращает 0 или -1, и как это обрабатывает прога?
я вроде не увидел как - походу никак. как она сокет переоткроет? - никак )
error при разрыве связи не возникает при чтении (да и при записи не возникнет ибо протокол не гарантирует доставку пакета а только отправку) completed тоже не возникает. нет пакетов на чтение какое то разумное время - переоткрываем сокет. хотя канеш и в ребут по хорошему уходить не должно. еще я пишу в проектах client.pBuffer := ADR( buffer[0] ); хоть и масло масляное но значит когда то нарывался причины уже не помню )
если ошибка продолжает вызывать эту же функцию в следующем цикле. у нас же вроде асинхронный режим включен (не блокирующий). на первый взгляд все должно виснуть но такого никогда не замечал. )
ps/ нашел. watchdog(); там точка останова стояла (после watchdog.Q)? )
TIMEOUT_DEFAULT 5 сек - думаю и секунды хватит (у меня 500ms обычно) но не принципиально. в ребут не должно уходить все равно по хорошему.
Последний раз редактировалось lazy; 16.05.2018 в 17:59.
Победить не получилось. Делаю следующие.
Стенд - ПЛК110-30 М02, свитч, ПК, к ПЛК подключаюсь по USB
1. Залил проект в ПЛК, «Онлайн» - «Старт», перехожу на визуализацию «TcpClient2»
2. Заполняю, ip, port, timeout=T#1m, pause=T#50ms, жму “apply”
2. жду пока пойдет обмен данными – начнут расти счетчики totalSend и totalRecv
3. выдергиваю ethernet кабель от ПК, наблюдаю
4. растет только recvCounter в течении 2.5 - 3.0 секунд ( смотрю watchdog.ET )*
5. потом все замирает на несколько секунд и ПЛК перезагружается
Сегодня не поленился, съездил на производство взял другой ПЛК110-30 М02, куплен в 2018, на корпусе переключатель в защите . Ведет себя абсолютно также. Причем хочу опровергнуть свое утверждение в первом посте – на прошивке 0.3.72 ПЛК ведет себя также. Поэтому обновил первый пост. Может данный эффект не стабилен, может просто не заметил. ПЛК110-30 перезагружается быстро и без лишнего шума. Поэтому в PLC_PRG сделал задержку запуска 2 секунды и включил динамик.
Вообще я это явление случайно обнаружил – помогли старый пачкорд, и моя рассеянность – забыл сделать загрузочный проект.
* - если передернуть кабель «быстро», то обмен восстанавливается, и перезагрузки не происходит
PS: использование флагов в SysSockSend и SysSockRecv не помогло
Последний раз редактировалось monteg; 18.05.2018 в 19:18.
Последний раз редактировалось monteg; 18.05.2018 в 19:17.
Просто, если в моём проекте таймаут ставить не больше двух секунд, по описанный эффект не происходит. Все хорошо работает. Баг в ПЛК, по моему мнению, все таки есть, но он безобидный. А я с этой ерундой неделю провозился. Зато приобрел бесценный опыт.
А вообще в этом есть, что-то странное - Вы взяли библиотеку, переделали, создали на ее основе проект, протестировали, а пробовать готовый проект не стали.
Про 63 я своего мнения я с тех пор не изменил, вообще не стал его использовать, он сейчас где-то на складе пылиться. По мне так совершенно тупиковая ветвь развития.
А по поводу этой темы - Вы не стали пробовать мой код, написали свой, но ничего не стали выкладывать, сказали, что у Вас все работает, а чужие проблемы Вас не волнуют.. Я не понимаю Вашей мотивации, а вообще зачем, Вы заходили на форум и что-то писали в эту тему?