Вот рабочий пример включения модема и выхода в инет на 323
start_RTRIG(CLK:=enable);
stop_FTRIG(CLK:=enable);
test_call_F_TRIG(CLK:=test_call AND registred); test_call_R_TRIG(CLK:=test_call AND registred); in_state(in:=state<>prev_state,pt:=my_time);
IF in_state.Q THEN
prev_state:=state;
END_IF
IF stop_FTRIG.Q THEN
in_state(in:=FALSE);
state:=0;prev_state:=-1;
END_IF
IF start_RTRIG.Q THEN
in_state(in:=FALSE);
state:=3;prev_state:=-1;
END_IF
IF test_call_R_TRIG.Q THEN
in_state(in:=FALSE);
state:=6;prev_state:=-1;
END_IF
IF test_call_F_TRIG.Q THEN
in_state(in:=FALSE);
state:=11;prev_state:=-1;
END_IF
CASE state OF
(*Выключаем все!!!*)
0: (*OFF 1*)
stop_complete:=FALSE;
start_complete:=FALSE;
pwr:=0;
pwr_key:=1;
IF in_state.Q THEN state:=state+1; in_state(in:=FALSE); END_IF
1: (*OFF 2*)
stop_complete:=TRUE; (*конечное состояние - нет перехода*)
(*Включаем все!!!*)
3: (*ON 1*)
start_complete:=FALSE;
pwr:=1;
pwr_key:=1;
IF in_state.Q THEN state:=state+1; in_state(in:=FALSE);END_IF
4:
pwr_key:=0;
IF in_state.Q THEN state:=state+1;in_state(in:=FALSE);END_IF
5:
pwr_key:=1;
IF in_state.Q THEN state:=state+1;in_state(in:=FALSE);END_IF
(*Включено - можно работать с портом*)
6:
IF Status=0 THEN
set1.sPort := Port; // ttyS1
set1.ulBaudrate := 115200;
set1.byParity := 0;
set1.ulTimeout := 0;
set1.byStopBits := 1;
set1.ulBufferSize := 0;
set2.byByteSize := 8;
set2.bBinary := TRUE;
set2.bDtrControl := FALSE;
set2.bRtsControl := TRUE;
set2.bOutxCtsFlow := FALSE;
set2.bOutxDsrFlow := FALSE;
set2.bDsrSensitivity := FALSE;
handle:=SysCom.SysComOpen2(ADR(set1),ADR(set2),ADR (res));
IF handle<>16#FFFFFFFF THEN
//str1:='ATZ$R';
//SysCom.SysComWrite(handle,ADR(str1),len(str1),0,AD R(res));
SysCom.SysComRead(handle,ADR(str_in),255,0,ADR(res ));
state:=7;
END_IF
ELSE
start_failure:=TRUE;
END_IF
(*Инициализация!*)
7:
IF in_state.Q THEN
str_out:='ATZ$R';
SysCom.SysComWrite(handle,ADR(str_out),len(str_out ),0,ADR(res));
state:=state+1;in_state(in:=FALSE);
END_IF
(* Прошла успешно*)
8:
IF in_state.Q THEN
SysCom.SysComRead(handle,ADR(str_in),255,0,ADR(res ));
IF Find(str_in,'OK')>0 THEN
start_complete:=TRUE; (*конечное состояние - нет
перехода*)
(*проверка прошивки *)
state:=9;in_state(in:=FALSE);
ELSE
(* Не успешно! обратно на 7*)
state:=7;in_state(in:=FALSE);
END_IF
END_IF
9:
(* Проверка решистрации в сети*)
IF in_state.Q THEN
str_out:='AT+CREG?$R';
SysCom.SysComWrite(handle,ADR(str_out),len(str_out ),0,ADR(res));
state:=state+1;in_state(in:=FALSE);
END_IF
10:
IF in_state.Q THEN
SysCom.SysComRead(handle,ADR(str_in),255,0,ADR(res ));
IF Find(str_in,'+CREG:')>0 OR registred THEN (*+CREG: 0,1*)
str_2:=standard.delete(str_in,Find(str_in,'+CREG: ')+8,1);
registred:=STRING_TO_INT(str_2)=1;
IF registred THEN
(* Зарегистрированна *)
state:=13;
ELSE
state:=9;in_state(in:=FALSE);
END_IF
ELSE
state:=9;in_state(in:=FALSE);
END_IF
END_IF
11: ; (*Ничего нет*)
end_test_call:=FALSE;
12: (* Звонок*)
IF in_state.Q THEN
str_out:=CONCAT('ATD+',number);
str_out:=CONCAT(str_out,';$R'); SysCom.SysComWrite(handle,ADR(str_out),len(str_out ),0,ADR(res));
end_test_call:=TRUE;
SysCom.SysComClose(handle);
state:=11;
END_IF
13:
SysCom.SysComClose(handle);
if x=false then
x:=true;
state:=14;
else
state:=14;
end_if
14:
// str_out:='AT+CGATT=1$R';
// SysCom.SysComWrite(handle,ADR(str_out),len(str_out ),0,ADR(res));
//IF y<100 THEN
SysExecute('pppd call mts.gprs');
state:=15;
// y:=y+1;
//END_IF
// GPRS_ready:=true;
15:;
END_CASE