PDA

Просмотр полной версии : проблема с сокетами



yuren
17.12.2009, 17:36
Добрый день!
Я только начал учится програмированию, не пинайте сильно если буду задавать не те вопросы ;)
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
вы сколько раз пробовали? видимо все сокеты то и кончились...

yuren
17.12.2009, 19:47
даже ресет кнопкой на плк непомогает :)

yuren
17.12.2009, 22:29
помог ресет спрятаной кнопкой сброс :)
экспериментальным путём было выявлено, что если не делать сокклозе, можно открыть только 15 сокетов. появляются некоторые опасения, например после пропажи электричества на удалённом объекте останется вечно висячий сокет?

Dmitry
17.12.2009, 23:49
А если проверять наличие питания через модуль statistic и закрывать всё что надо, если оно пропало?

yuren
18.12.2009, 00:04
плк будет ещё будет работать после пропадания питания?

МИХАИЛ
18.12.2009, 01:08
будет, столько , чтобы закрыть обмен!!!!!

yuren
18.12.2009, 04:07
это хорошо :)
а всё таки где хранится информация о открытых сокетах?
как её обнулить без ресета плк кнопкой? и возможно ли вообще?

Gans
18.12.2009, 09:47
открыли соединение и затем следите за его состоянием, если что не так закрыли с последующем открытием заново и продолжаем работать (ну на практике всё несколько сложнее). с модемами пм01, мс35,а также Udp у меня прокатывает.
P. S. в примере отправки/получения смс (на этом форуме) понятен подход и написано что проверять чего ждать и тд. правда на мой взгляд времени не хватило что бы красиво доделать.

yuren
18.12.2009, 10:47
имеется в виду отправка смс через Ip? я такого примера не видел. ткните носом

Gans
18.12.2009, 15:04
вот страничка 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 пока тоже не видел :-(хотя поставить не вдалеке комп + инет и думаю можно начинать пробывать на скриптах :-) есть же спамеры и на СМС.

yuren
18.12.2009, 16:11
Спасибо, с закрыванием сокетов разобрался, вроде ;)
Новая проблема :(
Делаю
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. интернет штука медленная.

yuren
18.12.2009, 16:44
надо не пол-секунды ждать, а читать пока не появится или не выйдет таймаут - секунд 120. интернет штука медленная.

Тоесть читать пока res не -1?
Следующая проблема, SysSockSend тоже за следующей попыткой -1 :(

Филоненко Владислав
18.12.2009, 19:23
Пример web-сервера посмотрите

yuren
19.12.2009, 12:22
смотрю, но там пока сложновато для меня :( а нету примера попроще?

Филоненко Владислав
20.12.2009, 13:45
куда уж проще.

yuren
23.12.2009, 14:02
SysSockConnect постоянно возвращает false, но не сморя на это SysSockSend работает. Что за дела?