Просмотр полной версии : проблема с сокетами
Добрый день!
Я только начал учится програмированию, не пинайте сильно если буду задавать не те вопросы ;)
SysSockCreate( SOCKET_AF_INET, SOCKET_STREAM, SOCKET_IPPROTO_TCP) Возвращает -1 :(
Библиотека SysLibSockets.lib с диска которы был вместе с ПЛК
Таргет файлы с диска тоже
Коротко о плк:
PLC model MODEL PLC 100
Binary VERSION 2.05.7
Need Target version 2.05
Compiled: 17:03:33 May 30 2008
MAC 00:12:34:56:78:9A
IP 192.168.0.249
GATE 192.168.0.1
MASK 255.255.255.0
PIC upper version is 07
Licence unlimited
No DAC
PIC lower version is 0a
Филоненко Владислав
17.12.2009, 19:43
вы сколько раз пробовали? видимо все сокеты то и кончились...
даже ресет кнопкой на плк непомогает :)
помог ресет спрятаной кнопкой сброс :)
экспериментальным путём было выявлено, что если не делать сокклозе, можно открыть только 15 сокетов. появляются некоторые опасения, например после пропажи электричества на удалённом объекте останется вечно висячий сокет?
А если проверять наличие питания через модуль statistic и закрывать всё что надо, если оно пропало?
плк будет ещё будет работать после пропадания питания?
будет, столько , чтобы закрыть обмен!!!!!
это хорошо :)
а всё таки где хранится информация о открытых сокетах?
как её обнулить без ресета плк кнопкой? и возможно ли вообще?
открыли соединение и затем следите за его состоянием, если что не так закрыли с последующем открытием заново и продолжаем работать (ну на практике всё несколько сложнее). с модемами пм01, мс35,а также Udp у меня прокатывает.
P. S. в примере отправки/получения смс (на этом форуме) понятен подход и написано что проверять чего ждать и тд. правда на мой взгляд времени не хватило что бы красиво доделать.
имеется в виду отправка смс через Ip? я такого примера не видел. ткните носом
вот страничка http://www.owen.ru/forum/showthread.php?t=517&page=3
от Филоненко Владислава при открытии порта один разок перепроверяется открытость порта :-)
я аналогично и с езернетом делаю (только чуток чаще проверяю - это про UDP)
и в полезностях похожее http://www.owen.ru/forum/showthread.php?t=551&page=4 тема сообщения "Пример работы ПЛК с смс сообщениями".
а смотреть внимательно нужно в этом месте
TON_Port(IN:=NOT TON_Port.Q, PT:=t#200ms);
IF TON_Port.Q AND NOT port_init THEN (*Пытаемся открыть порт*)
com_handle:=SysComOpen(com_num);
IF com_handle<>16#FFFFFFFF THEN
port_init:=TRUE;
ELSE
SysComClose(com_num);
END_IF
END_IF
IF TON_Port.Q AND port_init THEN (*Настраиваем порт*)
com_set.Port:=com_num;
com_set.dwBaudRate:=9600;
com_set.byParity:=0;
com_set.dwTimeout:=0;
com_set.byStopBits:=0;
com_set.dwBufferSize:=0;
com_set.dwScan:=0;
res:=SysComSetSettings(com_num,ADR(com_set));
IF NOT res THEN
blnPortOpen:=TRUE; (*Далее пошли работать с портом в следующий шаг SFC*)
END_IF
END_IF
и дальше в программе иногда проверять com_handle на вменяемость иначе закрыли порт и возврящаемся в этот кусок программы:-) Извени что не про езернет пример (вот что под руками было то и выложил), но там аналогично, идея таже. Удачи!
З. Ы. СМС через IP пока тоже не видел :-(хотя поставить не вдалеке комп + инет и думаю можно начинать пробывать на скриптах :-) есть же спамеры и на СМС.
Спасибо, с закрыванием сокетов разобрался, вроде ;)
Новая проблема :(
Делаю
buf :='GET / HTTP/1.0 $R$N';
res:=SysSockSend(sock, ADR( buf ), SIZEOF( buf ), SOCKET_MSG_OOB );
Через пол секунды делаю
rcv:=SysSockRecv(sock, ADR(rcv_buf), SIZEOF(rcv_buf), SOCKET_MSG_OOB );
в rcv возвращает 0 и rcv_buf пустой.
В логах хттп сервера записи появляются
Филоненко Владислав
18.12.2009, 16:21
надо не пол-секунды ждать, а читать пока не появится или не выйдет таймаут - секунд 120. интернет штука медленная.
надо не пол-секунды ждать, а читать пока не появится или не выйдет таймаут - секунд 120. интернет штука медленная.
Тоесть читать пока res не -1?
Следующая проблема, SysSockSend тоже за следующей попыткой -1 :(
Филоненко Владислав
18.12.2009, 19:23
Пример web-сервера посмотрите
смотрю, но там пока сложновато для меня :( а нету примера попроще?
Филоненко Владислав
20.12.2009, 13:45
куда уж проще.
SysSockConnect постоянно возвращает false, но не сморя на это SysSockSend работает. Что за дела?
Powered by vBulletin® Version 4.2.3 Copyright © 2025 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot