Уважаемые специалисты ОВЕН, жду вашией помощи!!!
Уважаемые специалисты ОВЕН, жду вашией помощи!!!
если речь о ПМ, незнаю назначение блока modem, я открыва порт и АТ-командами устанавливаю соединение, как вышеизложенный код, единственно у меня ПМ с чипсетом SIM900GPRS.
Настройка и установка GPRS соединения:
AT+SAPBR=3,1,«CONTYPE»,«GPRS»
AT+SAPBR=3,1,«APN»,«internet.beeline.ru»
AT+SAPBR=3,1,«USER»,«beeline»
AT+SAPBR=3,1,«PWD»,«beeline»
AT+SAPBR=1,1 — установка GPRS связи
AT+SAPBR=2,1 — полученный IP адрес
+SAPBR: 1,1,«10.229.9.115»
AT+SAPBR=4,1 — текущие настройки соединения
AT+SAPBR=0,1 — разорвать GPRS соединение
Спасибо конечно, но с установкой соединения с помощью SysLibCom всё получилось. Проблема в отсылки значений в формате modbus, с помощью MB_WR_REGS. Нужно оценивать ответ slave устройства о том, что переменная получена... Может нужен какойто отдельный блок, кот анализирует в ответе контрольную сумму? Хотя судя по тому, что у него есть таймаут, то врятли....
Последний раз редактировалось Антон12345; 24.05.2012 в 13:01.
Важно, но с техникой так не бывает, что чтение идет нормально, а запрос с записью не доходит. Тут либо ни чего не идет, либо все доходит. Кроме того, если привыкать к забугорным технологиям, то на каждое устройство ставиться обратная связь. И уж если она показывает, что требуемое устройство не включилось, я начинаю "волноваться"
Task = OPEN_TSK, Task = CLOSE_TSK вроде алгоритм понятен. Вопрос по этой части
IF Task = RESET_TSK THEN
Ready := NOT SysComSetSettings(Settings.Port, ADR(Settings));
END_IF
Почему ОК возвращается инверсией? Ведь в описании четко написано SysComSetSettings возвращает true при успехе, в противном случае false. Или эту часть алгоритма я недопонимаю или все наоборот?
SysComSetSettings возвращает 0, если Ok
требуется помощь в изобретении велосипеда. В общем нужна поддержка SysComSetSettings Ex(антимат озабоченый слитно не дал написать) чего в com_service.lib не предусмотрено. Стал писать свой ФБ открытия закрытия порта.
FUNCTION_BLOCK COM_SERVICEEX
VAR_INPUT
Enable:BOOL;
Settings:COMSETTINGSEX;
TASK:BYTE;
END_VAR
VAR_OUTPUT
Ready:BOOL;
END_VAR
VAR
P_discr: DWORD;
CLOSE_OK:BOOL;
END_VAR
_________________________________________
IF Enable THEN
IF TASK=0 THEN SysComClose(Settings.Port); P_discr:=SysComOpen(Settings.Port);
IF P_discr<>16#FFFFFFFF THEN
Settings.Size:=SIZEOF(Settings);
Ready:=NOT SysComSetSettingsEx(Settings.Port, ADR(Settings));
ELSE TASK:=2;
END_IF
ELSIF TASK=2 THEN CLOSE_OK:=SysComClose(Settings.Port); Ready:=FALSE;
END_IF
END_IF
в итоге при открытии порта не прокатывает задание настроек для SysComSetSettingsEx. Вываливается инвалид 16#FE. Глядел в различных темах как писали другие люди - я делаю вроде все так же. Может кто подскажет в чем я не прав. COM_SERVICE.lib работает исправно, а у меня не работает, причем на любом порту. Открывается порт нормально, загвоздка именно в настройках.
Последний раз редактировалось S.A.D.; 08.10.2013 в 12:10.
Чтобы понять рекурсию нужно понять рекурсию