Код:
IF port_opened=0 THEN
handle := SysComOpen2(pSettings:= pSett, pSettingsEx:= pSettEX, pResult:= result);
SysComPurge(hCom:= handle);
IF NOT (handle = 16#FFFFFFFF) THEN
port_opened := 1;
END_IF
pReadStr := ADR(readStr);
ptrWR := ADR(BufWR[0]); // to string
ELSE
IF close THEN
count := 13 ;
END_IF
CASE count OF
//========================================================================================================
109: strWR := 'ATE0$R$N';
IF (find(modemAns,'$R$NOK$R$N') > 0) THEN
count :=110; // AT+CGDCONT
ELSIF (find(modemAns,'$R$NERROR$R$N') > 0) THEN
count := 109; // AT+CIPSHUT
END_IF
110: strWR := 'AT$R$N';
IF (find(modemAns,'$R$NOK$R$N') > 0) THEN
count :=120; // AT+CGDCONT
ELSIF (find(modemAns,'$R$NERROR$R$N') > 0) THEN
count := 190; // AT+CIPSHUT
END_IF
120: strWR := 'AT+CGATT=1$R$N';
IF (find(modemAns,'$R$NOK$R$N') > 0) THEN
count :=133; // AT+CGDCONT
ELSIF (find(modemAns,'$R$NERROR$R$N') > 0) THEN
count := 110; // AT+CIPSHUT
END_IF
130: strWR:='AT+CIPMODE=1$R$N';
IF (find(modemAns,'$R$NOK$R$N') > 0) THEN
count :=140; // AT+CIPCCFG
ELSIF (find(modemAns,'$R$NERROR$R$N') > 0) THEN
count := 133;
END_IF
133: strWR :='AT+CIPMODE?$R$N';
IF (find(modemAns,'$R$N+CIPMODE: 0') > 0) THEN
count :=140;
ELSIF (find(modemAns,'$R$N+CIPMODE: 1') > 0) THEN
count :=130; // AT+CIPCCFG
END_IF
140: strWR :='AT+CSTT="www.ab.kyivstar.ua","",""$R$N';
IF (find(modemAns,'$R$NOK$R$N') > 0) THEN
count :=150;
ELSIF (find(modemAns,'$R$NERROR$R$N') > 0) THEN
count := 190;
END_IF
150: strWR :='AT+CIICR$R$N';
IF (find(modemAns,'$R$NOK$R$N') > 0) THEN
count :=160;
ELSIF (find(modemAns,'$R$NERROR$R$N') > 0) THEN
count := 150;
END_IF
160: strWR :='AT+CIFSR$R$N';
IF (find(modemAns,'$R$N10.') > 0) THEN
count :=170;
ELSIF (find(modemAns,'$R$NERROR$R$N') > 0) THEN
count := 160;
END_IF
170: strWR:='AT+CIPSTART="TCP","46.202.226.243","2323"$R$N';
IF (find(modemAns,'$R$NCONNECT FAIL$R$N') > 0) THEN
count :=190; // cipclose
ELSIF find(modemAns,'$R$NCONNECT OK$R$N') > 0 THEN // if result of find > 0 this string is in, if "0", no need string in
count :=180; // transparant
modemAns:='';
ELSIF (find(modemAns,'$R$NOK$R$N') > 0) THEN
modemAns:='';
wait := TRUE; cc:=0;
ELSIF (find(modemAns,'$R$NERROR$R$N') > 0) THEN
// count :=12; // AT+CIPSTATUS
END_IF
180: strWR := 'AT+CIPSEND$R$N';
IF (find(modemAns,'>') > 0) THEN
count := 188;
END_IF
188: strWR := '100101010a1f0000090000000042c8666642c8666642c8666642c8666653696633000000008d54$1A';
IF (find(modemAns,'$R$NSEND OK$R$N') > 0) THEN
count := 180;
END_IF
190: strWR:='AT+CIPSHUT$R$N';
IF (find(modemAns,'$R$NSHUT OK$R$N') > 0) THEN
count:=110;
END_IF
END_CASE
modemAns := '';
// transparant mode
IF count=180 OR count=188 THEN
IF tick AND pReadROC<>16#000000000 AND count=180 THEN
byteWR:= SysComWrite( hCom := handle, pbyBuffer := ADR(strWR), ulSize := SIZEOF(strWR),
ulTimeout := 50, pResult := errorWR);
ELSIF count=188 THEN
byteWR:= SysComWrite( hCom := handle, pbyBuffer := ADR(strWR), ulSize := SIZEOF(strWR),
ulTimeout := 50, pResult := errorWR);
END_IF
// initialization of gprs connection
ELSE
IF tick THEN
cc:= cc + 1;
END_IF
R_TRIG(CLK:= (cc=5 AND NOT wait), Q=> send);
IF cc = 45 AND wait THEN // wait answer from modem 1 min after ask again
wait:= FALSE;
cc := 0;
errCount := errCount + 1;
END_IF
cur := len(strWR);
IF send AND handle <> 16#FFFFFFFF THEN
bytew := SysComWrite( hCom := handle, pbyBuffer := ADR(strWR), ulSize := cur,
ulTimeout := 50, pResult := errorWR);
IF bytew <> 0 THEN
send := FALSE;
wait := TRUE;
cc := 0;
END_IF //send := FALSE;
END_IF
END_IF
//pReadStr^:='';
byteRD := SysComRead(
hCom := handle,
pbyBuffer := pReadStr,
ulSize := 596,
ulTimeout := 50,
pResult := errorRD);
// cut waste bytes
IF (byteRD <> 0) THEN
wait := FALSE;
cc := 0;
modemAns := '';
IF pReadStr^<>'' THEN
modemAns := '';
modemAns := left(pReadStr^, UDINT_TO_INT(byteRD));
pReadStr^ := '';
ans :='';
ans := modemAns;
// sinc time with PC
IF find(modemAns,'0108')>0 AND (count=105 or count=9) THEN
SysTimeRtcSet(ulTimestamp := HEX_TO_DWORD(Hex:= mid(modemAns,8,5)) );
END_IF
END_IF
END_IF
IF (find(modemAns,'$R$NOK$R$N') > 0) THEN
errCount := 0;
ELSIF (find(modemAns,'OK$R$N') > 0) THEN
errCount := 0;
ELSIF (find(modemAns,'$R$NERROR$R$N') > 0) THEN
errCount := errCount + 1;
END_IF
IF errCount = 3 THEN
count := 8;
END_IF
IF (find(modemAns,'$R$NCLOSED$R$N') > 0) THEN
count:=0;
ELSIF (find(modemAns,'$R$NALREADY CONNECT$R$N') > 0) THEN
count:=12;
// ELSIF (find(modemAns,'ALREADY CONNECTION') > 0) THEN
// count:=9;
ELSIF (find(modemAns,'$R$N+PDP: DEACT$R$N') > 0) THEN
count:=8;
ELSIF (find(modemAns,'$R$NSTATE: TCP CLOSED$R$N$R$NCONNECT FAIL$R$N') > 0) THEN
count := 0;
END_IF
END_IF