You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
1662 lines
34 KiB
1662 lines
34 KiB
4 months ago
|
FUNCTION_BLOCK BS_ModbusCom
|
||
|
VAR_EXTERNAL
|
||
|
|
||
|
END_VAR
|
||
|
|
||
|
VAR_INPUT
|
||
|
|
||
|
SerialCom : byte;
|
||
|
NetSend : array[0..64] of NetSendConfig;
|
||
|
NetSendDelay : time;
|
||
|
ComSend : array[0..64] of ComSendConfig;
|
||
|
ComSendDelay : time; (*系统默认t#200ms*)
|
||
|
ComRecvDelay : time; (*系统默认t#120ms*)
|
||
|
ComAnalysisDelay: time; (*系统默认t#150ms*)
|
||
|
DataReadLength : int;
|
||
|
|
||
|
END_VAR
|
||
|
|
||
|
VAR_OUTPUT
|
||
|
|
||
|
DataStr : array[0..128] of byte;
|
||
|
DataRead : array[0..128] of DataFormat;
|
||
|
|
||
|
END_VAR
|
||
|
|
||
|
VAR
|
||
|
|
||
|
SendFB : NW_SerSend;
|
||
|
RecvFB : NW_SerRecv;
|
||
|
SendP : pointer;
|
||
|
RecvP : pointer;
|
||
|
Send_act : bool;
|
||
|
Recv_act : bool;
|
||
|
i,j,k : int;
|
||
|
i0,i1,i2,i3 : int;
|
||
|
CRC16Lo1 : Byte;
|
||
|
CRC16Hi1 : Byte;
|
||
|
CRC16Lo : Byte;
|
||
|
CRC16Hi : Byte;
|
||
|
CL,CH : Byte;
|
||
|
SaveHi,SaveLo : Byte;
|
||
|
Flag : int;
|
||
|
ENO_Count0 : dword;
|
||
|
ENO_Count1 : dword;
|
||
|
timer1 : ton;
|
||
|
timer1_run : bool;
|
||
|
NetVarSend1 : NetVarSend;
|
||
|
t1 : ton;
|
||
|
t1_in : bool;
|
||
|
t1_q : bool;
|
||
|
t2 : ton;
|
||
|
t2_in : bool;
|
||
|
t2_q : bool;
|
||
|
t3 : ton;
|
||
|
t3_in : bool;
|
||
|
t3_q : bool;
|
||
|
Commandsend : int;
|
||
|
SendStr : array[0..8] of byte;
|
||
|
RecvStr : array[0..200] of byte;
|
||
|
CalcStr : array[0..200] of byte;
|
||
|
ErrStr : array[0..100] of int;
|
||
|
Recv_len : int;
|
||
|
Recv_lenp : int;
|
||
|
Recv_DataLen : int;
|
||
|
Recv_CRCLo : int;
|
||
|
Recv_CRCHi : int;
|
||
|
TestMode : bool;
|
||
|
StopMem : int;
|
||
|
ComTimeoutCount : int;
|
||
|
ComTimeoutClear : bool;
|
||
|
checkmark1 : bool;
|
||
|
checkmark2 : bool;
|
||
|
checkmark3 : bool;
|
||
|
checkmark4 : bool;
|
||
|
|
||
|
DATA1 : int;
|
||
|
DATA2 : int;
|
||
|
|
||
|
TempStr : array[0..128] of byte;
|
||
|
TempReal : real;
|
||
|
v2v : NW_MemCopy;
|
||
|
P1 : Pointer;
|
||
|
P2 : Pointer;
|
||
|
|
||
|
END_VAR
|
||
|
|
||
|
(*Automatically declared*)
|
||
|
VAR_EXTERNAL
|
||
|
END_VAR
|
||
|
(** {* **)
|
||
|
(** ʱ �䣺20200915 **)
|
||
|
(** �� ����1.3 **)
|
||
|
(** �� �ߣ�Ҧ�� **)
|
||
|
(** �� �ƣ�ͨѶ���ܿ� **)
|
||
|
(** ˵ ���� **)
|
||
|
(** ֧��ModbusЭ����03/04�����Ķ�ȡ������ **)
|
||
|
(** ֧�ֶ�ȡʧ�ܴ�����ѯ **)
|
||
|
(** ֧�ֶ�ȡʧ�������������������� **)
|
||
|
(** ֧��ModbusЭ����06�����ĵ����Ĵ���д�� **)
|
||
|
(** ��һ��������ͨѶ��λ���� **)
|
||
|
(** **)
|
||
|
(** input ����˵�� **)
|
||
|
(** **)
|
||
|
(** SerialCom : byte; **)
|
||
|
(** NetSend : array[0..64] of NetSendConfig; **)
|
||
|
(** NetSendDelay : time; **)
|
||
|
(** ComSend : array[0..64] of ComSendConfig; **)
|
||
|
(** ComSendDelay : time; **)
|
||
|
(** ComRecvDelay : time; **)
|
||
|
(** ComAnalysisDelay: time; **)
|
||
|
(** DataReadLength : int; **)
|
||
|
(** DataType : array[0..256] of int ; **)
|
||
|
(** **)
|
||
|
(** output ����˵�� **)
|
||
|
(** **)
|
||
|
(** DataStr : array[0..256] of byte; **)
|
||
|
(** DataRead : array[0..256] of DataFormat; **)
|
||
|
(** **)
|
||
|
(** config ����� **)
|
||
|
(** **)
|
||
|
(** ComSend[1].Enable :=1; ��ȡ����1 ����Ϊ0������Ϊ2������ʱ�����뱻�����������ж�; **)
|
||
|
(** ComSend[1].EquipAddr :=1; �豸վ��0-255 **)
|
||
|
(** ComSend[1].FunctionCode :=16#03; ������ Ŀǰ֧�� ��ȡHR��16#03����ȡAR��16#04 ��д��HR����16#06 **)
|
||
|
(** ComSend[1].StartAddr :=2504; Modscan���Ե�ַ **)
|
||
|
(** ComSend[1].Length :=12; ��ȡ�Ĵ������� **)
|
||
|
(** ComSend[1].StartMem :=0; ������DataStr������ʼλ�ã�һ��Ϊǰһ���ݵ���ʼ��ַ+ǰһ���ݶ�ȡ�Ĵ�������*2 **)
|
||
|
(** ComSend[1].WriteDataH1 :=0; д�����ݵĸ�λ����ȡʱ����Ҫ���� **)
|
||
|
(** ComSend[1].WriteDataL1 :=WriteTestW; д�����ݵĵ�λ����ȡʱ����Ҫ���� **)
|
||
|
(** **)
|
||
|
(** read ��ȡ���� **)
|
||
|
(** **)
|
||
|
(** DataType[00]:=1; ������������ 1 int 2 float 3 byte 0 ���⣬���ݶ�ʱ������Ϊ0 **)
|
||
|
(** **)
|
||
|
(** DATA:=DataRead[00].TO_BYTE; �ֱ���Ӧ DataType 3 **)
|
||
|
(** DATA:=DataRead[00].TO_REAL; �ֱ���Ӧ DataType 2 **)
|
||
|
(** DATA:=DataRead[00].TO_INT; �ֱ���Ӧ DataType 1 **)
|
||
|
(** **)
|
||
|
(** **)
|
||
|
(** �� ע�� **)
|
||
|
(** ĿǰΪʾ����������δ���ɷ�װ�����Գ�������̨EXC5000C3�汾����CPU������������CPU����COM��Ϊ���ɿڣ���һCPU����COM��ΪModbus **)
|
||
|
(** ����ʾ����ȡ����Ϊ���߷�������MeterSim **)
|
||
|
(** �����飺�� **)
|
||
|
(** **)
|
||
|
(** *} **)
|
||
|
(** **)
|
||
|
(** {**********************************************ͨѶ����**********************************************} **)
|
||
|
(** {* **)
|
||
|
(** �����ӳ�ʱ����ϵΪ����EXC1000COM��485��ȡ�������ٶ�Ϊ9600BPS���� **)
|
||
|
(** �����̺��ӳ�����ͬ��������������ϵ�ο�Ŀǰ��ϵ **)
|
||
|
(** �ӳ�ʱ�������߲����ʣ��������豸��Ӧ�ٶ��йأ�������ʵ���������� **)
|
||
|
(** *} **)
|
||
|
(** **)
|
||
|
(** **)
|
||
|
(** **)
|
||
|
(** {********************************************����ͨѶ����********************************************} **)
|
||
|
(** **)
|
||
|
(** t1_in:=not t1.q; **)
|
||
|
(* assign - Stmt *)
|
||
|
LD t1.q
|
||
|
NOT
|
||
|
ST t1_in
|
||
|
|
||
|
(** t1(IN :=t1_in , PT :=ComSendDelay ); **)
|
||
|
(* call - Stmt *)
|
||
|
CAL t1 (
|
||
|
IN := t1_in,
|
||
|
PT := ComSendDelay
|
||
|
)
|
||
|
|
||
|
(** t2(IN :=t1_in , PT :=ComRecvDelay ); **)
|
||
|
(* call - Stmt *)
|
||
|
CAL t2 (
|
||
|
IN := t1_in,
|
||
|
PT := ComRecvDelay
|
||
|
)
|
||
|
|
||
|
(** t3(IN :=t1_in , PT :=ComAnalysisDelay ); **)
|
||
|
(* call - Stmt *)
|
||
|
CAL t3 (
|
||
|
IN := t1_in,
|
||
|
PT := ComAnalysisDelay
|
||
|
)
|
||
|
|
||
|
(** **)
|
||
|
(** if t1.q=0 and t1_q=1 then **)
|
||
|
(* if - Cond *)
|
||
|
LD t1.q
|
||
|
EQ 0
|
||
|
AND ( t1_q
|
||
|
EQ 1
|
||
|
)
|
||
|
JMPCN ODK_SKIP_000000000000001_000000000000001
|
||
|
|
||
|
(* then - Stmts *)
|
||
|
|
||
|
(** Send_act:=1; **)
|
||
|
(* assign - Stmt *)
|
||
|
LD 1
|
||
|
ST Send_act
|
||
|
|
||
|
JMP ODK_END_IF_000000000000001
|
||
|
|
||
|
(** else **)
|
||
|
(* else *)
|
||
|
ODK_SKIP_000000000000001_000000000000001:
|
||
|
|
||
|
(* else - Stmts *)
|
||
|
|
||
|
(** Send_act:=0; **)
|
||
|
(* assign - Stmt *)
|
||
|
LD 0
|
||
|
ST Send_act
|
||
|
|
||
|
(** end_if; **)
|
||
|
(* if - End *)
|
||
|
ODK_END_IF_000000000000001:
|
||
|
|
||
|
(** **)
|
||
|
(** if t2.q=1 then **)
|
||
|
(* if - Cond *)
|
||
|
LD t2.q
|
||
|
EQ 1
|
||
|
JMPCN ODK_SKIP_000000000000002_000000000000001
|
||
|
|
||
|
(* then - Stmts *)
|
||
|
|
||
|
(** Recv_act:=1; **)
|
||
|
(* assign - Stmt *)
|
||
|
LD 1
|
||
|
ST Recv_act
|
||
|
|
||
|
JMP ODK_END_IF_000000000000002
|
||
|
|
||
|
(** else **)
|
||
|
(* else *)
|
||
|
ODK_SKIP_000000000000002_000000000000001:
|
||
|
|
||
|
(* else - Stmts *)
|
||
|
|
||
|
(** Recv_act:=0; **)
|
||
|
(* assign - Stmt *)
|
||
|
LD 0
|
||
|
ST Recv_act
|
||
|
|
||
|
(** end_if; **)
|
||
|
(* if - End *)
|
||
|
ODK_END_IF_000000000000002:
|
||
|
|
||
|
(** **)
|
||
|
(** if ComSend[1].Enable=1 then {*������λ�����õĻ���ʼִ�з�������*} **)
|
||
|
(* if - Cond *)
|
||
|
LD ComSend[1].Enable
|
||
|
EQ 1
|
||
|
JMPCN ODK_SKIP_000000000000003_000000000000001
|
||
|
|
||
|
(* then - Stmts *)
|
||
|
|
||
|
(** if Send_act=1 then **)
|
||
|
(* if - Cond *)
|
||
|
LD Send_act
|
||
|
EQ 1
|
||
|
JMPCN ODK_SKIP_000000000000004_000000000000001
|
||
|
|
||
|
(* then - Stmts *)
|
||
|
|
||
|
(** if TestMode=0 then **)
|
||
|
(* if - Cond *)
|
||
|
LD TestMode
|
||
|
EQ 0
|
||
|
JMPCN ODK_SKIP_000000000000005_000000000000001
|
||
|
|
||
|
(* then - Stmts *)
|
||
|
|
||
|
(** Commandsend:=Commandsend + 1; **)
|
||
|
(* assign - Stmt *)
|
||
|
LD Commandsend
|
||
|
ADD 1
|
||
|
ST Commandsend
|
||
|
|
||
|
JMP ODK_END_IF_000000000000005
|
||
|
|
||
|
(** end_if; **)
|
||
|
(* if - End *)
|
||
|
ODK_SKIP_000000000000005_000000000000001:
|
||
|
ODK_END_IF_000000000000005:
|
||
|
|
||
|
JMP ODK_END_IF_000000000000004
|
||
|
|
||
|
(** end_if; **)
|
||
|
(* if - End *)
|
||
|
ODK_SKIP_000000000000004_000000000000001:
|
||
|
ODK_END_IF_000000000000004:
|
||
|
|
||
|
(** if ComSend[Commandsend].Enable=0 then {*ִ�е�������λ����*} **)
|
||
|
(* if - Cond *)
|
||
|
LD ComSend[Commandsend].Enable
|
||
|
EQ 0
|
||
|
JMPCN ODK_SKIP_000000000000006_000000000000001
|
||
|
|
||
|
(* then - Stmts *)
|
||
|
|
||
|
(** Commandsend:=0; **)
|
||
|
(* assign - Stmt *)
|
||
|
LD 0
|
||
|
ST Commandsend
|
||
|
|
||
|
JMP ODK_END_IF_000000000000006
|
||
|
|
||
|
(** end_if; **)
|
||
|
(* if - End *)
|
||
|
ODK_SKIP_000000000000006_000000000000001:
|
||
|
ODK_END_IF_000000000000006:
|
||
|
|
||
|
(** **)
|
||
|
(** if ComSend[Commandsend].Enable=1 then **)
|
||
|
(* if - Cond *)
|
||
|
LD ComSend[Commandsend].Enable
|
||
|
EQ 1
|
||
|
JMPCN ODK_SKIP_000000000000007_000000000000001
|
||
|
|
||
|
(* then - Stmts *)
|
||
|
|
||
|
(** {*��ȡ����*} **)
|
||
|
(** if ComSend[Commandsend].FunctionCode = 16#03 then **)
|
||
|
(* if - Cond *)
|
||
|
LD ComSend[Commandsend].FunctionCode
|
||
|
EQ 16#03
|
||
|
JMPCN ODK_SKIP_000000000000008_000000000000001
|
||
|
|
||
|
(* then - Stmts *)
|
||
|
|
||
|
(** SendStr[0]:=ComSend[Commandsend].EquipAddr;{*��ַ*} **)
|
||
|
(* assign - Stmt *)
|
||
|
LD ComSend[Commandsend].EquipAddr
|
||
|
ST SendStr[0]
|
||
|
|
||
|
(** SendStr[1]:=ComSend[Commandsend].FunctionCode;{*������*} **)
|
||
|
(* assign - Stmt *)
|
||
|
LD ComSend[Commandsend].FunctionCode
|
||
|
ST SendStr[1]
|
||
|
|
||
|
(** SendStr[2]:=int_to_byte((ComSend[Commandsend].StartAddr-1) / 256);{*��ʼ��ַ��λ*} **)
|
||
|
(* assign - Stmt *)
|
||
|
LD ComSend[Commandsend].StartAddr
|
||
|
SUB 1
|
||
|
DIV 256
|
||
|
int_to_byte
|
||
|
ST SendStr[2]
|
||
|
|
||
|
(** SendStr[3]:=int_to_byte((ComSend[Commandsend].StartAddr-1) mod 256);{*��ʼ��ַ��λ*} **)
|
||
|
(* assign - Stmt *)
|
||
|
LD ComSend[Commandsend].StartAddr
|
||
|
SUB 1
|
||
|
MOD 256
|
||
|
int_to_byte
|
||
|
ST SendStr[3]
|
||
|
|
||
|
(** SendStr[4]:=0;{*���ȸ�λ*} **)
|
||
|
(* assign - Stmt *)
|
||
|
LD 0
|
||
|
ST SendStr[4]
|
||
|
|
||
|
(** SendStr[5]:=ComSend[Commandsend].Length;{*���ȵ�λ*} **)
|
||
|
(* assign - Stmt *)
|
||
|
LD ComSend[Commandsend].Length
|
||
|
ST SendStr[5]
|
||
|
|
||
|
JMP ODK_END_IF_000000000000008
|
||
|
|
||
|
(** end_if; **)
|
||
|
(* if - End *)
|
||
|
ODK_SKIP_000000000000008_000000000000001:
|
||
|
ODK_END_IF_000000000000008:
|
||
|
|
||
|
(** {*��ȡ����*} **)
|
||
|
(** if ComSend[Commandsend].FunctionCode = 16#04 then **)
|
||
|
(* if - Cond *)
|
||
|
LD ComSend[Commandsend].FunctionCode
|
||
|
EQ 16#04
|
||
|
JMPCN ODK_SKIP_000000000000009_000000000000001
|
||
|
|
||
|
(* then - Stmts *)
|
||
|
|
||
|
(** SendStr[0]:=ComSend[Commandsend].EquipAddr;{*��ַ*} **)
|
||
|
(* assign - Stmt *)
|
||
|
LD ComSend[Commandsend].EquipAddr
|
||
|
ST SendStr[0]
|
||
|
|
||
|
(** SendStr[1]:=ComSend[Commandsend].FunctionCode;{*������*} **)
|
||
|
(* assign - Stmt *)
|
||
|
LD ComSend[Commandsend].FunctionCode
|
||
|
ST SendStr[1]
|
||
|
|
||
|
(** SendStr[2]:=int_to_byte((ComSend[Commandsend].StartAddr-1) / 256);{*��ʼ��ַ��λ*} **)
|
||
|
(* assign - Stmt *)
|
||
|
LD ComSend[Commandsend].StartAddr
|
||
|
SUB 1
|
||
|
DIV 256
|
||
|
int_to_byte
|
||
|
ST SendStr[2]
|
||
|
|
||
|
(** SendStr[3]:=int_to_byte((ComSend[Commandsend].StartAddr-1) mod 256);{*��ʼ��ַ��λ*} **)
|
||
|
(* assign - Stmt *)
|
||
|
LD ComSend[Commandsend].StartAddr
|
||
|
SUB 1
|
||
|
MOD 256
|
||
|
int_to_byte
|
||
|
ST SendStr[3]
|
||
|
|
||
|
(** SendStr[4]:=0;{*���ȸ�λ*} **)
|
||
|
(* assign - Stmt *)
|
||
|
LD 0
|
||
|
ST SendStr[4]
|
||
|
|
||
|
(** SendStr[5]:=ComSend[Commandsend].Length;{*���ȵ�λ*} **)
|
||
|
(* assign - Stmt *)
|
||
|
LD ComSend[Commandsend].Length
|
||
|
ST SendStr[5]
|
||
|
|
||
|
JMP ODK_END_IF_000000000000009
|
||
|
|
||
|
(** end_if; **)
|
||
|
(* if - End *)
|
||
|
ODK_SKIP_000000000000009_000000000000001:
|
||
|
ODK_END_IF_000000000000009:
|
||
|
|
||
|
(** {*�����*} **)
|
||
|
(** if ComSend[Commandsend].FunctionCode = 16#06 then **)
|
||
|
(* if - Cond *)
|
||
|
LD ComSend[Commandsend].FunctionCode
|
||
|
EQ 16#06
|
||
|
JMPCN ODK_SKIP_00000000000000A_000000000000001
|
||
|
|
||
|
(* then - Stmts *)
|
||
|
|
||
|
(** SendStr[0]:=ComSend[Commandsend].EquipAddr;{*��ַ*} **)
|
||
|
(* assign - Stmt *)
|
||
|
LD ComSend[Commandsend].EquipAddr
|
||
|
ST SendStr[0]
|
||
|
|
||
|
(** SendStr[1]:=ComSend[Commandsend].FunctionCode;{*������*} **)
|
||
|
(* assign - Stmt *)
|
||
|
LD ComSend[Commandsend].FunctionCode
|
||
|
ST SendStr[1]
|
||
|
|
||
|
(** SendStr[2]:=int_to_byte((ComSend[Commandsend].StartAddr-1) / 256);{*��ʼ��ַ��λ*} **)
|
||
|
(* assign - Stmt *)
|
||
|
LD ComSend[Commandsend].StartAddr
|
||
|
SUB 1
|
||
|
DIV 256
|
||
|
int_to_byte
|
||
|
ST SendStr[2]
|
||
|
|
||
|
(** SendStr[3]:=int_to_byte((ComSend[Commandsend].StartAddr-1) mod 256);{*��ʼ��ַ��λ*} **)
|
||
|
(* assign - Stmt *)
|
||
|
LD ComSend[Commandsend].StartAddr
|
||
|
SUB 1
|
||
|
MOD 256
|
||
|
int_to_byte
|
||
|
ST SendStr[3]
|
||
|
|
||
|
(** SendStr[4]:=ComSend[Commandsend].WriteDataH1; **)
|
||
|
(* assign - Stmt *)
|
||
|
LD ComSend[Commandsend].WriteDataH1
|
||
|
ST SendStr[4]
|
||
|
|
||
|
(** SendStr[5]:=ComSend[Commandsend].WriteDataL1; **)
|
||
|
(* assign - Stmt *)
|
||
|
LD ComSend[Commandsend].WriteDataL1
|
||
|
ST SendStr[5]
|
||
|
|
||
|
JMP ODK_END_IF_00000000000000A
|
||
|
|
||
|
(** end_if; **)
|
||
|
(* if - End *)
|
||
|
ODK_SKIP_00000000000000A_000000000000001:
|
||
|
ODK_END_IF_00000000000000A:
|
||
|
|
||
|
JMP ODK_END_IF_000000000000007
|
||
|
|
||
|
(** end_if; **)
|
||
|
(* if - End *)
|
||
|
ODK_SKIP_000000000000007_000000000000001:
|
||
|
ODK_END_IF_000000000000007:
|
||
|
|
||
|
(** **)
|
||
|
(** if ComSend[Commandsend].Enable=2 then **)
|
||
|
(* if - Cond *)
|
||
|
LD ComSend[Commandsend].Enable
|
||
|
EQ 2
|
||
|
JMPCN ODK_SKIP_00000000000000B_000000000000001
|
||
|
|
||
|
(* then - Stmts *)
|
||
|
|
||
|
(** SendStr[0]:= 16#00 ; **)
|
||
|
(* assign - Stmt *)
|
||
|
LD 16#00
|
||
|
ST SendStr[0]
|
||
|
|
||
|
(** SendStr[1]:= 16#00 ; **)
|
||
|
(* assign - Stmt *)
|
||
|
LD 16#00
|
||
|
ST SendStr[1]
|
||
|
|
||
|
(** SendStr[2]:= 16#00 ; **)
|
||
|
(* assign - Stmt *)
|
||
|
LD 16#00
|
||
|
ST SendStr[2]
|
||
|
|
||
|
(** SendStr[3]:= 16#00 ; **)
|
||
|
(* assign - Stmt *)
|
||
|
LD 16#00
|
||
|
ST SendStr[3]
|
||
|
|
||
|
(** SendStr[4]:= 16#00 ; **)
|
||
|
(* assign - Stmt *)
|
||
|
LD 16#00
|
||
|
ST SendStr[4]
|
||
|
|
||
|
(** SendStr[5]:= 16#00 ; **)
|
||
|
(* assign - Stmt *)
|
||
|
LD 16#00
|
||
|
ST SendStr[5]
|
||
|
|
||
|
JMP ODK_END_IF_00000000000000B
|
||
|
|
||
|
(** end_if; **)
|
||
|
(* if - End *)
|
||
|
ODK_SKIP_00000000000000B_000000000000001:
|
||
|
ODK_END_IF_00000000000000B:
|
||
|
|
||
|
(** **)
|
||
|
(** {*CRC��*} **)
|
||
|
(** CRC16Lo := 255; **)
|
||
|
(* assign - Stmt *)
|
||
|
LD 255
|
||
|
ST CRC16Lo
|
||
|
|
||
|
(** CRC16Hi := 255; **)
|
||
|
(* assign - Stmt *)
|
||
|
LD 255
|
||
|
ST CRC16Hi
|
||
|
|
||
|
(** CL := 1; **)
|
||
|
(* assign - Stmt *)
|
||
|
LD 1
|
||
|
ST CL
|
||
|
|
||
|
(** CH := 160; **)
|
||
|
(* assign - Stmt *)
|
||
|
LD 160
|
||
|
ST CH
|
||
|
|
||
|
(** **)
|
||
|
(** for i := 0 To 5 by 1 do **)
|
||
|
(* for - Init *)
|
||
|
LD 0
|
||
|
ST i
|
||
|
EQ 5
|
||
|
JMPC ODK_FOR_STMTS_00000000000000C
|
||
|
|
||
|
(* for - Cond *)
|
||
|
ODK_FOR_00000000000000C:
|
||
|
|
||
|
LD 0
|
||
|
GT 5
|
||
|
JMPC ODK_FOR_DOWN_00000000000000C
|
||
|
|
||
|
LD 0
|
||
|
GT 1
|
||
|
JMPC ODK_END_FOR_00000000000000C
|
||
|
|
||
|
LD 5
|
||
|
LT i
|
||
|
JMPC ODK_END_FOR_00000000000000C
|
||
|
JMP ODK_FOR_STMTS_00000000000000C
|
||
|
|
||
|
ODK_FOR_DOWN_00000000000000C:
|
||
|
|
||
|
LD 5
|
||
|
GT i
|
||
|
JMPC ODK_END_FOR_00000000000000C
|
||
|
|
||
|
LD 0
|
||
|
LT 1
|
||
|
JMPC ODK_END_FOR_00000000000000C
|
||
|
|
||
|
(* for - Stmts *)
|
||
|
ODK_FOR_STMTS_00000000000000C:
|
||
|
|
||
|
(** CRC16Lo := CRC16Lo xor SendStr[i]; **)
|
||
|
(* assign - Stmt *)
|
||
|
LD CRC16Lo
|
||
|
XOR SendStr[i]
|
||
|
ST CRC16Lo
|
||
|
|
||
|
(** for Flag := 0 to 7 by 1 do **)
|
||
|
(* for - Init *)
|
||
|
LD 0
|
||
|
ST Flag
|
||
|
EQ 7
|
||
|
JMPC ODK_FOR_STMTS_00000000000000D
|
||
|
|
||
|
(* for - Cond *)
|
||
|
ODK_FOR_00000000000000D:
|
||
|
|
||
|
LD 0
|
||
|
GT 7
|
||
|
JMPC ODK_FOR_DOWN_00000000000000D
|
||
|
|
||
|
LD 0
|
||
|
GT 1
|
||
|
JMPC ODK_END_FOR_00000000000000D
|
||
|
|
||
|
LD 7
|
||
|
LT Flag
|
||
|
JMPC ODK_END_FOR_00000000000000D
|
||
|
JMP ODK_FOR_STMTS_00000000000000D
|
||
|
|
||
|
ODK_FOR_DOWN_00000000000000D:
|
||
|
|
||
|
LD 7
|
||
|
GT Flag
|
||
|
JMPC ODK_END_FOR_00000000000000D
|
||
|
|
||
|
LD 0
|
||
|
LT 1
|
||
|
JMPC ODK_END_FOR_00000000000000D
|
||
|
|
||
|
(* for - Stmts *)
|
||
|
ODK_FOR_STMTS_00000000000000D:
|
||
|
|
||
|
(** SaveHi := CRC16Hi; **)
|
||
|
(* assign - Stmt *)
|
||
|
LD CRC16Hi
|
||
|
ST SaveHi
|
||
|
|
||
|
(** SaveLo := CRC16Lo; **)
|
||
|
(* assign - Stmt *)
|
||
|
LD CRC16Lo
|
||
|
ST SaveLo
|
||
|
|
||
|
(** CRC16Hi := shr(CRC16Hi,1); **)
|
||
|
(* assign - Stmt *)
|
||
|
LD CRC16Hi
|
||
|
shr 1
|
||
|
ST CRC16Hi
|
||
|
|
||
|
(** CRC16Lo := shr(CRC16Lo,1); **)
|
||
|
(* assign - Stmt *)
|
||
|
LD CRC16Lo
|
||
|
shr 1
|
||
|
ST CRC16Lo
|
||
|
|
||
|
(** **)
|
||
|
(** if ((SaveHi and 1) = 1) then **)
|
||
|
(* if - Cond *)
|
||
|
LD SaveHi
|
||
|
AND 1
|
||
|
EQ 1
|
||
|
JMPCN ODK_SKIP_00000000000000E_000000000000001
|
||
|
|
||
|
(* then - Stmts *)
|
||
|
|
||
|
(** CRC16Lo := CRC16Lo Or 128; **)
|
||
|
(* assign - Stmt *)
|
||
|
LD CRC16Lo
|
||
|
OR 128
|
||
|
ST CRC16Lo
|
||
|
|
||
|
JMP ODK_END_IF_00000000000000E
|
||
|
|
||
|
(** end_If; **)
|
||
|
(* if - End *)
|
||
|
ODK_SKIP_00000000000000E_000000000000001:
|
||
|
ODK_END_IF_00000000000000E:
|
||
|
|
||
|
(** If ((SaveLo and 1) = 1) then **)
|
||
|
(* if - Cond *)
|
||
|
LD SaveLo
|
||
|
AND 1
|
||
|
EQ 1
|
||
|
JMPCN ODK_SKIP_00000000000000F_000000000000001
|
||
|
|
||
|
(* then - Stmts *)
|
||
|
|
||
|
(** CRC16Hi := CRC16Hi xor CH; **)
|
||
|
(* assign - Stmt *)
|
||
|
LD CRC16Hi
|
||
|
XOR CH
|
||
|
ST CRC16Hi
|
||
|
|
||
|
(** CRC16Lo := CRC16Lo xor CL; **)
|
||
|
(* assign - Stmt *)
|
||
|
LD CRC16Lo
|
||
|
XOR CL
|
||
|
ST CRC16Lo
|
||
|
|
||
|
JMP ODK_END_IF_00000000000000F
|
||
|
|
||
|
(** end_if; **)
|
||
|
(* if - End *)
|
||
|
ODK_SKIP_00000000000000F_000000000000001:
|
||
|
ODK_END_IF_00000000000000F:
|
||
|
|
||
|
(* for - By *)
|
||
|
LD 1
|
||
|
ADD Flag
|
||
|
ST Flag
|
||
|
(** end_for; **)
|
||
|
|
||
|
JMP ODK_FOR_00000000000000D
|
||
|
|
||
|
(* for - End *)
|
||
|
ODK_END_FOR_00000000000000D:
|
||
|
|
||
|
(* for - By *)
|
||
|
LD 1
|
||
|
ADD i
|
||
|
ST i
|
||
|
(** end_for; **)
|
||
|
|
||
|
JMP ODK_FOR_00000000000000C
|
||
|
|
||
|
(* for - End *)
|
||
|
ODK_END_FOR_00000000000000C:
|
||
|
|
||
|
(** **)
|
||
|
(** SendStr[6]:=CRC16Lo; **)
|
||
|
(* assign - Stmt *)
|
||
|
LD CRC16Lo
|
||
|
ST SendStr[6]
|
||
|
|
||
|
(** SendStr[7]:=CRC16Hi; **)
|
||
|
(* assign - Stmt *)
|
||
|
LD CRC16Hi
|
||
|
ST SendStr[7]
|
||
|
|
||
|
JMP ODK_END_IF_000000000000003
|
||
|
|
||
|
(** **)
|
||
|
(** end_if; **)
|
||
|
(* if - End *)
|
||
|
ODK_SKIP_000000000000003_000000000000001:
|
||
|
ODK_END_IF_000000000000003:
|
||
|
|
||
|
(** **)
|
||
|
(** **)
|
||
|
(** if t3.q=1 then **)
|
||
|
(* if - Cond *)
|
||
|
LD t3.q
|
||
|
EQ 1
|
||
|
JMPCN ODK_SKIP_00000000000000G_000000000000001
|
||
|
|
||
|
(* then - Stmts *)
|
||
|
|
||
|
(** **)
|
||
|
(** {*�������ݴ���*} **)
|
||
|
(** if Recv_len>=6 then{*���*} **)
|
||
|
(* if - Cond *)
|
||
|
LD Recv_len
|
||
|
GE 6
|
||
|
JMPCN ODK_SKIP_00000000000000H_000000000000001
|
||
|
|
||
|
(* then - Stmts *)
|
||
|
|
||
|
(** Recv_lenp :=Recv_len-3;{*ȥ��У��λ-2,0��ʼ-1*} **)
|
||
|
(* assign - Stmt *)
|
||
|
LD Recv_len
|
||
|
SUB 3
|
||
|
ST Recv_lenp
|
||
|
|
||
|
(** **)
|
||
|
(** CRC16Lo := 255; **)
|
||
|
(* assign - Stmt *)
|
||
|
LD 255
|
||
|
ST CRC16Lo
|
||
|
|
||
|
(** CRC16Hi := 255; **)
|
||
|
(* assign - Stmt *)
|
||
|
LD 255
|
||
|
ST CRC16Hi
|
||
|
|
||
|
(** CL := 1; **)
|
||
|
(* assign - Stmt *)
|
||
|
LD 1
|
||
|
ST CL
|
||
|
|
||
|
(** CH := 160; **)
|
||
|
(* assign - Stmt *)
|
||
|
LD 160
|
||
|
ST CH
|
||
|
|
||
|
(** **)
|
||
|
(** for i := 0 To Recv_lenp by 1 do **)
|
||
|
(* for - Init *)
|
||
|
LD 0
|
||
|
ST i
|
||
|
EQ Recv_lenp
|
||
|
JMPC ODK_FOR_STMTS_00000000000000I
|
||
|
|
||
|
(* for - Cond *)
|
||
|
ODK_FOR_00000000000000I:
|
||
|
|
||
|
LD 0
|
||
|
GT Recv_lenp
|
||
|
JMPC ODK_FOR_DOWN_00000000000000I
|
||
|
|
||
|
LD 0
|
||
|
GT 1
|
||
|
JMPC ODK_END_FOR_00000000000000I
|
||
|
|
||
|
LD Recv_lenp
|
||
|
LT i
|
||
|
JMPC ODK_END_FOR_00000000000000I
|
||
|
JMP ODK_FOR_STMTS_00000000000000I
|
||
|
|
||
|
ODK_FOR_DOWN_00000000000000I:
|
||
|
|
||
|
LD Recv_lenp
|
||
|
GT i
|
||
|
JMPC ODK_END_FOR_00000000000000I
|
||
|
|
||
|
LD 0
|
||
|
LT 1
|
||
|
JMPC ODK_END_FOR_00000000000000I
|
||
|
|
||
|
(* for - Stmts *)
|
||
|
ODK_FOR_STMTS_00000000000000I:
|
||
|
|
||
|
(** CRC16Lo := CRC16Lo xor RecvStr[i]; **)
|
||
|
(* assign - Stmt *)
|
||
|
LD CRC16Lo
|
||
|
XOR RecvStr[i]
|
||
|
ST CRC16Lo
|
||
|
|
||
|
(** for Flag := 0 to 7 by 1 do **)
|
||
|
(* for - Init *)
|
||
|
LD 0
|
||
|
ST Flag
|
||
|
EQ 7
|
||
|
JMPC ODK_FOR_STMTS_00000000000000J
|
||
|
|
||
|
(* for - Cond *)
|
||
|
ODK_FOR_00000000000000J:
|
||
|
|
||
|
LD 0
|
||
|
GT 7
|
||
|
JMPC ODK_FOR_DOWN_00000000000000J
|
||
|
|
||
|
LD 0
|
||
|
GT 1
|
||
|
JMPC ODK_END_FOR_00000000000000J
|
||
|
|
||
|
LD 7
|
||
|
LT Flag
|
||
|
JMPC ODK_END_FOR_00000000000000J
|
||
|
JMP ODK_FOR_STMTS_00000000000000J
|
||
|
|
||
|
ODK_FOR_DOWN_00000000000000J:
|
||
|
|
||
|
LD 7
|
||
|
GT Flag
|
||
|
JMPC ODK_END_FOR_00000000000000J
|
||
|
|
||
|
LD 0
|
||
|
LT 1
|
||
|
JMPC ODK_END_FOR_00000000000000J
|
||
|
|
||
|
(* for - Stmts *)
|
||
|
ODK_FOR_STMTS_00000000000000J:
|
||
|
|
||
|
(** SaveHi := CRC16Hi; **)
|
||
|
(* assign - Stmt *)
|
||
|
LD CRC16Hi
|
||
|
ST SaveHi
|
||
|
|
||
|
(** SaveLo := CRC16Lo; **)
|
||
|
(* assign - Stmt *)
|
||
|
LD CRC16Lo
|
||
|
ST SaveLo
|
||
|
|
||
|
(** CRC16Hi := shr(CRC16Hi,1); **)
|
||
|
(* assign - Stmt *)
|
||
|
LD CRC16Hi
|
||
|
shr 1
|
||
|
ST CRC16Hi
|
||
|
|
||
|
(** CRC16Lo := shr(CRC16Lo,1); **)
|
||
|
(* assign - Stmt *)
|
||
|
LD CRC16Lo
|
||
|
shr 1
|
||
|
ST CRC16Lo
|
||
|
|
||
|
(** **)
|
||
|
(** if ((SaveHi and 1) = 1) then **)
|
||
|
(* if - Cond *)
|
||
|
LD SaveHi
|
||
|
AND 1
|
||
|
EQ 1
|
||
|
JMPCN ODK_SKIP_00000000000000K_000000000000001
|
||
|
|
||
|
(* then - Stmts *)
|
||
|
|
||
|
(** CRC16Lo := CRC16Lo Or 128; **)
|
||
|
(* assign - Stmt *)
|
||
|
LD CRC16Lo
|
||
|
OR 128
|
||
|
ST CRC16Lo
|
||
|
|
||
|
JMP ODK_END_IF_00000000000000K
|
||
|
|
||
|
(** end_If; **)
|
||
|
(* if - End *)
|
||
|
ODK_SKIP_00000000000000K_000000000000001:
|
||
|
ODK_END_IF_00000000000000K:
|
||
|
|
||
|
(** If ((SaveLo and 1) = 1) then **)
|
||
|
(* if - Cond *)
|
||
|
LD SaveLo
|
||
|
AND 1
|
||
|
EQ 1
|
||
|
JMPCN ODK_SKIP_00000000000000L_000000000000001
|
||
|
|
||
|
(* then - Stmts *)
|
||
|
|
||
|
(** CRC16Hi := CRC16Hi xor CH; **)
|
||
|
(* assign - Stmt *)
|
||
|
LD CRC16Hi
|
||
|
XOR CH
|
||
|
ST CRC16Hi
|
||
|
|
||
|
(** CRC16Lo := CRC16Lo xor CL; **)
|
||
|
(* assign - Stmt *)
|
||
|
LD CRC16Lo
|
||
|
XOR CL
|
||
|
ST CRC16Lo
|
||
|
|
||
|
JMP ODK_END_IF_00000000000000L
|
||
|
|
||
|
(** end_if; **)
|
||
|
(* if - End *)
|
||
|
ODK_SKIP_00000000000000L_000000000000001:
|
||
|
ODK_END_IF_00000000000000L:
|
||
|
|
||
|
(* for - By *)
|
||
|
LD 1
|
||
|
ADD Flag
|
||
|
ST Flag
|
||
|
(** end_for; **)
|
||
|
|
||
|
JMP ODK_FOR_00000000000000J
|
||
|
|
||
|
(* for - End *)
|
||
|
ODK_END_FOR_00000000000000J:
|
||
|
|
||
|
(* for - By *)
|
||
|
LD 1
|
||
|
ADD i
|
||
|
ST i
|
||
|
(** end_for; **)
|
||
|
|
||
|
JMP ODK_FOR_00000000000000I
|
||
|
|
||
|
(* for - End *)
|
||
|
ODK_END_FOR_00000000000000I:
|
||
|
|
||
|
(** CRC16Hi1:=CRC16Hi; **)
|
||
|
(* assign - Stmt *)
|
||
|
LD CRC16Hi
|
||
|
ST CRC16Hi1
|
||
|
|
||
|
(** CRC16Lo1:=CRC16Lo; **)
|
||
|
(* assign - Stmt *)
|
||
|
LD CRC16Lo
|
||
|
ST CRC16Lo1
|
||
|
|
||
|
(** **)
|
||
|
(** Recv_CRCLo:=Recv_lenp+1; **)
|
||
|
(* assign - Stmt *)
|
||
|
LD Recv_lenp
|
||
|
ADD 1
|
||
|
ST Recv_CRCLo
|
||
|
|
||
|
(** Recv_CRCHi:=Recv_lenp+2; **)
|
||
|
(* assign - Stmt *)
|
||
|
LD Recv_lenp
|
||
|
ADD 2
|
||
|
ST Recv_CRCHi
|
||
|
|
||
|
(** **)
|
||
|
(** {* **)
|
||
|
(** funtionCode03 **)
|
||
|
(** Tx �豸��ַ 03 ��ʼ��ַ��λ ��ʼ��ַ��λ �Ĵ���������λ �Ĵ���������λ CRCH CRCL **)
|
||
|
(** Rx �豸��ַ 03 �ֽ��� �Ĵ���1��λ �Ĵ���1��λ... CRCH CRCL **)
|
||
|
(** Recv_DataLen =(RecvStr[2])-1 ����Ϊ���ݳ���=���ֽ��������ֽ����պ���RecvStr[2]��-1��i��0��ʼ������-1�� **)
|
||
|
(** j = i+3 ����Ϊ����λ�Ǵӵ�3λ֮����ʼ�� **)
|
||
|
(** **)
|
||
|
(** funtionCode06 **)
|
||
|
(** Tx �豸��ַ 06 ��ʼ��ַ��λ ��ʼ��ַ��λ �Ĵ���ֵ��λ �Ĵ���ֵ��λ CRCH CRCL **)
|
||
|
(** Rx �豸��ַ 06 ��ʼ��ַ��λ ��ʼ��ַ��λ �Ĵ���ֵ��λ �Ĵ���ֵ��λ CRCH CRCL **)
|
||
|
(** Recv_DataLen =(RecvStr[2])-1 ����Ϊ���ݳ���=2�������Ĵ�����ȡֻ��2λ��-1��i��0��ʼ������-1�� **)
|
||
|
(** j = i+4 ����Ϊ����λ�Ǵӵ�4λ֮����ʼ�� **)
|
||
|
(** **)
|
||
|
(** *} **)
|
||
|
(** if ComSend[Commandsend].FunctionCode = 16#03 or ComSend[Commandsend].FunctionCode = 16#04 then **)
|
||
|
(* if - Cond *)
|
||
|
LD ComSend[Commandsend].FunctionCode
|
||
|
EQ 16#03
|
||
|
OR ( ComSend[Commandsend].FunctionCode
|
||
|
EQ 16#04
|
||
|
)
|
||
|
JMPCN ODK_SKIP_00000000000000M_000000000000001
|
||
|
|
||
|
(* then - Stmts *)
|
||
|
|
||
|
(** Recv_DataLen:=byte_to_int(RecvStr[2])-1; **)
|
||
|
(* assign - Stmt *)
|
||
|
LD RecvStr[2]
|
||
|
byte_to_int
|
||
|
SUB 1
|
||
|
ST Recv_DataLen
|
||
|
|
||
|
JMP ODK_END_IF_00000000000000M
|
||
|
|
||
|
(** end_if; **)
|
||
|
(* if - End *)
|
||
|
ODK_SKIP_00000000000000M_000000000000001:
|
||
|
ODK_END_IF_00000000000000M:
|
||
|
|
||
|
(** if ComSend[Commandsend].FunctionCode = 16#06 then **)
|
||
|
(* if - Cond *)
|
||
|
LD ComSend[Commandsend].FunctionCode
|
||
|
EQ 16#06
|
||
|
JMPCN ODK_SKIP_00000000000000N_000000000000001
|
||
|
|
||
|
(* then - Stmts *)
|
||
|
|
||
|
(** Recv_DataLen:=1; **)
|
||
|
(* assign - Stmt *)
|
||
|
LD 1
|
||
|
ST Recv_DataLen
|
||
|
|
||
|
JMP ODK_END_IF_00000000000000N
|
||
|
|
||
|
(** end_if; **)
|
||
|
(* if - End *)
|
||
|
ODK_SKIP_00000000000000N_000000000000001:
|
||
|
ODK_END_IF_00000000000000N:
|
||
|
|
||
|
(** if Commandsend<>0 then **)
|
||
|
(* if - Cond *)
|
||
|
LD Commandsend
|
||
|
NE 0
|
||
|
JMPCN ODK_SKIP_00000000000000O_000000000000001
|
||
|
|
||
|
(* then - Stmts *)
|
||
|
|
||
|
(** if RecvStr[Recv_CRCLo]=CRC16Lo and RecvStr[Recv_CRCHi]=CRC16Hi then{*У����ȷ*} **)
|
||
|
(* if - Cond *)
|
||
|
LD RecvStr[Recv_CRCLo]
|
||
|
EQ CRC16Lo
|
||
|
AND ( RecvStr[Recv_CRCHi]
|
||
|
EQ CRC16Hi
|
||
|
)
|
||
|
JMPCN ODK_SKIP_00000000000000P_000000000000001
|
||
|
|
||
|
(* then - Stmts *)
|
||
|
|
||
|
(** **)
|
||
|
(** for i:=0 to Recv_DataLen by 1 do **)
|
||
|
(* for - Init *)
|
||
|
LD 0
|
||
|
ST i
|
||
|
EQ Recv_DataLen
|
||
|
JMPC ODK_FOR_STMTS_00000000000000Q
|
||
|
|
||
|
(* for - Cond *)
|
||
|
ODK_FOR_00000000000000Q:
|
||
|
|
||
|
LD 0
|
||
|
GT Recv_DataLen
|
||
|
JMPC ODK_FOR_DOWN_00000000000000Q
|
||
|
|
||
|
LD 0
|
||
|
GT 1
|
||
|
JMPC ODK_END_FOR_00000000000000Q
|
||
|
|
||
|
LD Recv_DataLen
|
||
|
LT i
|
||
|
JMPC ODK_END_FOR_00000000000000Q
|
||
|
JMP ODK_FOR_STMTS_00000000000000Q
|
||
|
|
||
|
ODK_FOR_DOWN_00000000000000Q:
|
||
|
|
||
|
LD Recv_DataLen
|
||
|
GT i
|
||
|
JMPC ODK_END_FOR_00000000000000Q
|
||
|
|
||
|
LD 0
|
||
|
LT 1
|
||
|
JMPC ODK_END_FOR_00000000000000Q
|
||
|
|
||
|
(* for - Stmts *)
|
||
|
ODK_FOR_STMTS_00000000000000Q:
|
||
|
|
||
|
(** if ComSend[Commandsend].FunctionCode = 16#03 or ComSend[Commandsend].FunctionCode = 16#04 then **)
|
||
|
(* if - Cond *)
|
||
|
LD ComSend[Commandsend].FunctionCode
|
||
|
EQ 16#03
|
||
|
OR ( ComSend[Commandsend].FunctionCode
|
||
|
EQ 16#04
|
||
|
)
|
||
|
JMPCN ODK_SKIP_00000000000000R_000000000000001
|
||
|
|
||
|
(* then - Stmts *)
|
||
|
|
||
|
(** j:=i+3; **)
|
||
|
(* assign - Stmt *)
|
||
|
LD i
|
||
|
ADD 3
|
||
|
ST j
|
||
|
|
||
|
JMP ODK_END_IF_00000000000000R
|
||
|
|
||
|
(** end_if; **)
|
||
|
(* if - End *)
|
||
|
ODK_SKIP_00000000000000R_000000000000001:
|
||
|
ODK_END_IF_00000000000000R:
|
||
|
|
||
|
(** if ComSend[Commandsend].FunctionCode = 16#06 then **)
|
||
|
(* if - Cond *)
|
||
|
LD ComSend[Commandsend].FunctionCode
|
||
|
EQ 16#06
|
||
|
JMPCN ODK_SKIP_00000000000000S_000000000000001
|
||
|
|
||
|
(* then - Stmts *)
|
||
|
|
||
|
(** j:=i+4; **)
|
||
|
(* assign - Stmt *)
|
||
|
LD i
|
||
|
ADD 4
|
||
|
ST j
|
||
|
|
||
|
JMP ODK_END_IF_00000000000000S
|
||
|
|
||
|
(** end_if; **)
|
||
|
(* if - End *)
|
||
|
ODK_SKIP_00000000000000S_000000000000001:
|
||
|
ODK_END_IF_00000000000000S:
|
||
|
|
||
|
(** if (SendStr[2]=int_to_byte((ComSend[Commandsend].StartAddr-1) / 256)) and (SendStr[3]=int_to_byte((ComSend[Commandsend].StartAddr-1) mod 256) )and (SendStr[1]=ComSend[Commandsend].FunctionCode) then{*������*} **)
|
||
|
(* if - Cond *)
|
||
|
LD SendStr[2]
|
||
|
EQ ( ComSend[Commandsend].StartAddr
|
||
|
SUB 1
|
||
|
DIV 256
|
||
|
int_to_byte
|
||
|
)
|
||
|
AND ( SendStr[3]
|
||
|
EQ ( ComSend[Commandsend].StartAddr
|
||
|
SUB 1
|
||
|
MOD 256
|
||
|
int_to_byte
|
||
|
)
|
||
|
)
|
||
|
AND ( SendStr[1]
|
||
|
EQ ComSend[Commandsend].FunctionCode
|
||
|
)
|
||
|
JMPCN ODK_SKIP_00000000000000T_000000000000001
|
||
|
|
||
|
(* then - Stmts *)
|
||
|
|
||
|
(** CalcStr[i]:=RecvStr[j]; **)
|
||
|
(* assign - Stmt *)
|
||
|
LD RecvStr[j]
|
||
|
ST CalcStr[i]
|
||
|
|
||
|
(** k:=ComSend[Commandsend].StartMem+i; **)
|
||
|
(* assign - Stmt *)
|
||
|
LD ComSend[Commandsend].StartMem
|
||
|
ADD i
|
||
|
ST k
|
||
|
|
||
|
(** DataStr[k]:=CalcStr[i]; **)
|
||
|
(* assign - Stmt *)
|
||
|
LD CalcStr[i]
|
||
|
ST DataStr[k]
|
||
|
|
||
|
JMP ODK_END_IF_00000000000000T
|
||
|
|
||
|
(** end_if; **)
|
||
|
(* if - End *)
|
||
|
ODK_SKIP_00000000000000T_000000000000001:
|
||
|
ODK_END_IF_00000000000000T:
|
||
|
|
||
|
(* for - By *)
|
||
|
LD 1
|
||
|
ADD i
|
||
|
ST i
|
||
|
(** end_for; **)
|
||
|
|
||
|
JMP ODK_FOR_00000000000000Q
|
||
|
|
||
|
(* for - End *)
|
||
|
ODK_END_FOR_00000000000000Q:
|
||
|
|
||
|
(** ErrStr[commandsend]:=0; **)
|
||
|
(* assign - Stmt *)
|
||
|
LD 0
|
||
|
ST ErrStr[Commandsend]
|
||
|
|
||
|
JMP ODK_END_IF_00000000000000P
|
||
|
|
||
|
(** else **)
|
||
|
(* else *)
|
||
|
ODK_SKIP_00000000000000P_000000000000001:
|
||
|
|
||
|
(* else - Stmts *)
|
||
|
|
||
|
(** {*�����ۼ�*} **)
|
||
|
(** ErrStr[Commandsend]:=ErrStr[Commandsend]+1; **)
|
||
|
(* assign - Stmt *)
|
||
|
LD ErrStr[Commandsend]
|
||
|
ADD 1
|
||
|
ST ErrStr[Commandsend]
|
||
|
|
||
|
(** if ErrStr[Commandsend]>999 then **)
|
||
|
(* if - Cond *)
|
||
|
LD ErrStr[Commandsend]
|
||
|
GT 999
|
||
|
JMPCN ODK_SKIP_00000000000000U_000000000000001
|
||
|
|
||
|
(* then - Stmts *)
|
||
|
|
||
|
(** ErrStr[Commandsend]:=999; **)
|
||
|
(* assign - Stmt *)
|
||
|
LD 999
|
||
|
ST ErrStr[Commandsend]
|
||
|
|
||
|
JMP ODK_END_IF_00000000000000U
|
||
|
|
||
|
(** end_if; **)
|
||
|
(* if - End *)
|
||
|
ODK_SKIP_00000000000000U_000000000000001:
|
||
|
ODK_END_IF_00000000000000U:
|
||
|
|
||
|
(** end_if; **)
|
||
|
(* if - End *)
|
||
|
ODK_END_IF_00000000000000P:
|
||
|
|
||
|
JMP ODK_END_IF_00000000000000O
|
||
|
|
||
|
(** end_if; **)
|
||
|
(* if - End *)
|
||
|
ODK_SKIP_00000000000000O_000000000000001:
|
||
|
ODK_END_IF_00000000000000O:
|
||
|
|
||
|
(** {*���ս���*} **)
|
||
|
(** for i:=0 to 200 by 1 do **)
|
||
|
(* for - Init *)
|
||
|
LD 0
|
||
|
ST i
|
||
|
EQ 200
|
||
|
JMPC ODK_FOR_STMTS_00000000000000V
|
||
|
|
||
|
(* for - Cond *)
|
||
|
ODK_FOR_00000000000000V:
|
||
|
|
||
|
LD 0
|
||
|
GT 200
|
||
|
JMPC ODK_FOR_DOWN_00000000000000V
|
||
|
|
||
|
LD 0
|
||
|
GT 1
|
||
|
JMPC ODK_END_FOR_00000000000000V
|
||
|
|
||
|
LD 200
|
||
|
LT i
|
||
|
JMPC ODK_END_FOR_00000000000000V
|
||
|
JMP ODK_FOR_STMTS_00000000000000V
|
||
|
|
||
|
ODK_FOR_DOWN_00000000000000V:
|
||
|
|
||
|
LD 200
|
||
|
GT i
|
||
|
JMPC ODK_END_FOR_00000000000000V
|
||
|
|
||
|
LD 0
|
||
|
LT 1
|
||
|
JMPC ODK_END_FOR_00000000000000V
|
||
|
|
||
|
(* for - Stmts *)
|
||
|
ODK_FOR_STMTS_00000000000000V:
|
||
|
|
||
|
(** RecvStr[i]:=0; **)
|
||
|
(* assign - Stmt *)
|
||
|
LD 0
|
||
|
ST RecvStr[i]
|
||
|
|
||
|
(** CalcStr[i]:=0; **)
|
||
|
(* assign - Stmt *)
|
||
|
LD 0
|
||
|
ST CalcStr[i]
|
||
|
|
||
|
(* for - By *)
|
||
|
LD 1
|
||
|
ADD i
|
||
|
ST i
|
||
|
(** end_for; **)
|
||
|
|
||
|
JMP ODK_FOR_00000000000000V
|
||
|
|
||
|
(* for - End *)
|
||
|
ODK_END_FOR_00000000000000V:
|
||
|
|
||
|
(** **)
|
||
|
(** {*�����ۼƳ�ʱ����������*} **)
|
||
|
(** if ErrStr[Commandsend]>ComTimeoutCount and ComTimeoutClear=1 then **)
|
||
|
(* if - Cond *)
|
||
|
LD ErrStr[Commandsend]
|
||
|
GT ComTimeoutCount
|
||
|
AND ( ComTimeoutClear
|
||
|
EQ 1
|
||
|
)
|
||
|
JMPCN ODK_SKIP_00000000000000W_000000000000001
|
||
|
|
||
|
(* then - Stmts *)
|
||
|
|
||
|
(** StopMem:=ComSend[Commandsend].StartMem+byte_to_int(ComSend[Commandsend].Length); **)
|
||
|
(* assign - Stmt *)
|
||
|
LD ComSend[Commandsend].StartMem
|
||
|
ADD ( ComSend[Commandsend].Length
|
||
|
byte_to_int
|
||
|
)
|
||
|
ST StopMem
|
||
|
|
||
|
(** for i:=ComSend[Commandsend].StartMem to StopMem by 1 do **)
|
||
|
(* for - Init *)
|
||
|
LD ComSend[Commandsend].StartMem
|
||
|
ST i
|
||
|
EQ StopMem
|
||
|
JMPC ODK_FOR_STMTS_00000000000000X
|
||
|
|
||
|
(* for - Cond *)
|
||
|
ODK_FOR_00000000000000X:
|
||
|
|
||
|
LD ComSend[Commandsend].StartMem
|
||
|
GT StopMem
|
||
|
JMPC ODK_FOR_DOWN_00000000000000X
|
||
|
|
||
|
LD 0
|
||
|
GT 1
|
||
|
JMPC ODK_END_FOR_00000000000000X
|
||
|
|
||
|
LD StopMem
|
||
|
LT i
|
||
|
JMPC ODK_END_FOR_00000000000000X
|
||
|
JMP ODK_FOR_STMTS_00000000000000X
|
||
|
|
||
|
ODK_FOR_DOWN_00000000000000X:
|
||
|
|
||
|
LD StopMem
|
||
|
GT i
|
||
|
JMPC ODK_END_FOR_00000000000000X
|
||
|
|
||
|
LD 0
|
||
|
LT 1
|
||
|
JMPC ODK_END_FOR_00000000000000X
|
||
|
|
||
|
(* for - Stmts *)
|
||
|
ODK_FOR_STMTS_00000000000000X:
|
||
|
|
||
|
(** DataStr[i]:=0; **)
|
||
|
(* assign - Stmt *)
|
||
|
LD 0
|
||
|
ST DataStr[i]
|
||
|
|
||
|
(* for - By *)
|
||
|
LD 1
|
||
|
ADD i
|
||
|
ST i
|
||
|
(** end_for; **)
|
||
|
|
||
|
JMP ODK_FOR_00000000000000X
|
||
|
|
||
|
(* for - End *)
|
||
|
ODK_END_FOR_00000000000000X:
|
||
|
|
||
|
JMP ODK_END_IF_00000000000000W
|
||
|
|
||
|
(** end_if; **)
|
||
|
(* if - End *)
|
||
|
ODK_SKIP_00000000000000W_000000000000001:
|
||
|
ODK_END_IF_00000000000000W:
|
||
|
|
||
|
JMP ODK_END_IF_00000000000000H
|
||
|
|
||
|
(** **)
|
||
|
(** end_if; **)
|
||
|
(* if - End *)
|
||
|
ODK_SKIP_00000000000000H_000000000000001:
|
||
|
ODK_END_IF_00000000000000H:
|
||
|
|
||
|
JMP ODK_END_IF_00000000000000G
|
||
|
|
||
|
(** **)
|
||
|
(** end_if; **)
|
||
|
(* if - End *)
|
||
|
ODK_SKIP_00000000000000G_000000000000001:
|
||
|
ODK_END_IF_00000000000000G:
|
||
|
|
||
|
(** **)
|
||
|
(** **)
|
||
|
(** **)
|
||
|
(** **)
|
||
|
(** SendP:=&SendStr; **)
|
||
|
(* assign - Stmt *)
|
||
|
LD &SendStr
|
||
|
ST SendP
|
||
|
|
||
|
(** RecvP:=&RecvStr; **)
|
||
|
(* assign - Stmt *)
|
||
|
LD &RecvStr
|
||
|
ST RecvP
|
||
|
|
||
|
(** SendFB(EN :=Send_act , COM :=SerialCom , DATA :=SendP , LENGTH :=8 , IQM :=0 ); **)
|
||
|
(* call - Stmt *)
|
||
|
CAL SendFB (
|
||
|
EN := Send_act,
|
||
|
COM := SerialCom,
|
||
|
DATA := SendP,
|
||
|
Length := 8,
|
||
|
IQM := 0
|
||
|
)
|
||
|
|
||
|
(** RecvFB(EN :=Recv_act , COM :=SerialCom , DATA :=RecvP , IQM :=0 | Recv_len:= LENGTH); **)
|
||
|
(* call - Stmt *)
|
||
|
CAL RecvFB (
|
||
|
EN := Recv_act,
|
||
|
COM := SerialCom,
|
||
|
DATA := RecvP,
|
||
|
IQM := 0
|
||
|
|
|
||
|
Recv_len := Length
|
||
|
)
|
||
|
|
||
|
(** **)
|
||
|
(** t1_q:=t1.q; **)
|
||
|
(* assign - Stmt *)
|
||
|
LD t1.q
|
||
|
ST t1_q
|
||
|
|
||
|
(** t2_q:=t2.q; **)
|
||
|
(* assign - Stmt *)
|
||
|
LD t2.q
|
||
|
ST t2_q
|
||
|
|
||
|
(** t3_q:=t3.q; **)
|
||
|
(* assign - Stmt *)
|
||
|
LD t3.q
|
||
|
ST t3_q
|
||
|
|
||
|
(** **)
|
||
|
(** {********************************************���ݴ���********************************************} **)
|
||
|
(** **)
|
||
|
(** for i := 0 To DataReadLength by 1 do **)
|
||
|
(* for - Init *)
|
||
|
LD 0
|
||
|
ST i
|
||
|
EQ DataReadLength
|
||
|
JMPC ODK_FOR_STMTS_00000000000000Y
|
||
|
|
||
|
(* for - Cond *)
|
||
|
ODK_FOR_00000000000000Y:
|
||
|
|
||
|
LD 0
|
||
|
GT DataReadLength
|
||
|
JMPC ODK_FOR_DOWN_00000000000000Y
|
||
|
|
||
|
LD 0
|
||
|
GT 1
|
||
|
JMPC ODK_END_FOR_00000000000000Y
|
||
|
|
||
|
LD DataReadLength
|
||
|
LT i
|
||
|
JMPC ODK_END_FOR_00000000000000Y
|
||
|
JMP ODK_FOR_STMTS_00000000000000Y
|
||
|
|
||
|
ODK_FOR_DOWN_00000000000000Y:
|
||
|
|
||
|
LD DataReadLength
|
||
|
GT i
|
||
|
JMPC ODK_END_FOR_00000000000000Y
|
||
|
|
||
|
LD 0
|
||
|
LT 1
|
||
|
JMPC ODK_END_FOR_00000000000000Y
|
||
|
|
||
|
(* for - Stmts *)
|
||
|
ODK_FOR_STMTS_00000000000000Y:
|
||
|
|
||
|
(** **)
|
||
|
(** {* Type Ϊ0ʱȫ��*} **)
|
||
|
(** **)
|
||
|
(** i0:=i; **)
|
||
|
(* assign - Stmt *)
|
||
|
LD i
|
||
|
ST i0
|
||
|
|
||
|
(** i1:=i+1; **)
|
||
|
(* assign - Stmt *)
|
||
|
LD i
|
||
|
ADD 1
|
||
|
ST i1
|
||
|
|
||
|
(** i2:=i+2; **)
|
||
|
(* assign - Stmt *)
|
||
|
LD i
|
||
|
ADD 2
|
||
|
ST i2
|
||
|
|
||
|
(** i3:=i+3; **)
|
||
|
(* assign - Stmt *)
|
||
|
LD i
|
||
|
ADD 3
|
||
|
ST i3
|
||
|
|
||
|
(** **)
|
||
|
(** {* 1 int *} **)
|
||
|
(** DataRead[i].TO_INT:=byte_to_int(DataStr[i0])*256+byte_to_int(DataStr[i1]); **)
|
||
|
(* assign - Stmt *)
|
||
|
LD DataStr[i0]
|
||
|
byte_to_int
|
||
|
MUL 256
|
||
|
ADD ( DataStr[i1]
|
||
|
byte_to_int
|
||
|
)
|
||
|
ST DataRead[i].TO_INT
|
||
|
|
||
|
(** **)
|
||
|
(** {* 2 Float *} **)
|
||
|
(** TempStr[0]:=DataStr[i1]; **)
|
||
|
(* assign - Stmt *)
|
||
|
LD DataStr[i1]
|
||
|
ST TempStr[0]
|
||
|
|
||
|
(** TempStr[1]:=DataStr[i0]; **)
|
||
|
(* assign - Stmt *)
|
||
|
LD DataStr[i0]
|
||
|
ST TempStr[1]
|
||
|
|
||
|
(** TempStr[2]:=DataStr[i3]; **)
|
||
|
(* assign - Stmt *)
|
||
|
LD DataStr[i3]
|
||
|
ST TempStr[2]
|
||
|
|
||
|
(** TempStr[3]:=DataStr[i2]; **)
|
||
|
(* assign - Stmt *)
|
||
|
LD DataStr[i2]
|
||
|
ST TempStr[3]
|
||
|
|
||
|
(** P1:=&TempStr; **)
|
||
|
(* assign - Stmt *)
|
||
|
LD &TempStr
|
||
|
ST P1
|
||
|
|
||
|
(** P2:=&TempReal; **)
|
||
|
(* assign - Stmt *)
|
||
|
LD &TempReal
|
||
|
ST P2
|
||
|
|
||
|
(** v2v(DEST :=P2 , SRC :=P1 , LENGTH :=4 , IQM :=0 ); **)
|
||
|
(* call - Stmt *)
|
||
|
CAL v2v (
|
||
|
DEST := P2,
|
||
|
SRC := P1,
|
||
|
Length := 4,
|
||
|
IQM := 0
|
||
|
)
|
||
|
|
||
|
(** DataRead[i].TO_REAL:=TempReal; **)
|
||
|
(* assign - Stmt *)
|
||
|
LD TempReal
|
||
|
ST DataRead[i].TO_REAL
|
||
|
|
||
|
(** **)
|
||
|
(** {* 3 byte *} **)
|
||
|
(** DataRead[i].TO_BYTE:=1; **)
|
||
|
(* assign - Stmt *)
|
||
|
LD 1
|
||
|
ST DataRead[i].TO_BYTE
|
||
|
|
||
|
(* for - By *)
|
||
|
LD 1
|
||
|
ADD i
|
||
|
ST i
|
||
|
(** **)
|
||
|
(** end_for; **)
|
||
|
|
||
|
JMP ODK_FOR_00000000000000Y
|
||
|
|
||
|
(* for - End *)
|
||
|
ODK_END_FOR_00000000000000Y:
|
||
|
|
||
|
(** **)
|
||
|
(** {* �˶ν�����ʽ�Ϻ��ᵼ�´�λ����ʱ��ʱ����ԭ�� **)
|
||
|
(** for i := 0 To DataReadLength by 1 do **)
|
||
|
(** **)
|
||
|
(** if DataType[i]=1 or DataType[i]=0 then **)
|
||
|
(** i0:=i; **)
|
||
|
(** i1:=i+1; **)
|
||
|
(** DataRead[i].TO_INT:=byte_to_int(DataStr[i0])*256+byte_to_int(DataStr[i1]); **)
|
||
|
(** end_if; **)
|
||
|
(** **)
|
||
|
(** if DataType[i]=2 or DataType[i]=0 then **)
|
||
|
(** i0:=i; **)
|
||
|
(** i1:=i+1; **)
|
||
|
(** i2:=i+2; **)
|
||
|
(** i3:=i+3; **)
|
||
|
(** TempStr[0]:=DataStr[i1]; **)
|
||
|
(** TempStr[1]:=DataStr[i0]; **)
|
||
|
(** TempStr[2]:=DataStr[i3]; **)
|
||
|
(** TempStr[3]:=DataStr[i2]; **)
|
||
|
(** P1:=&TempStr; **)
|
||
|
(** P2:=&TempReal; **)
|
||
|
(** v2v(DEST :=P2 , SRC :=P1 , LENGTH :=4 , IQM :=0 ); **)
|
||
|
(** DataRead[i].TO_REAL:=TempReal; **)
|
||
|
(** end_if; **)
|
||
|
(** **)
|
||
|
(** if DataType[i]=3 or DataType[i]=0 then **)
|
||
|
(** i0:=i; **)
|
||
|
(** DataRead[i].TO_BYTE:=DataStr[i]; **)
|
||
|
(** end_if; **)
|
||
|
(** **)
|
||
|
(** 4 BCD **)
|
||
|
(** if DataType[i]=4 or DataType[i]=0 then **)
|
||
|
(** i0:=i; **)
|
||
|
(** i1:=i+1; **)
|
||
|
(** k1:=byte_to_int(DataStr[i0])*256+byte_to_int(DataStr[i1]); **)
|
||
|
(** DataRead[i].TO_BCD01:=int_to_bool( k1 Mod 2#0000000000000001 ); **)
|
||
|
(** DataRead[i].TO_BCD02:=int_to_bool( k1 Mod 2#0000000000000010 ); **)
|
||
|
(** DataRead[i].TO_BCD03:=int_to_bool( k1 Mod 2#0000000000000100 ); **)
|
||
|
(** DataRead[i].TO_BCD04:=int_to_bool( k1 Mod 2#0000000000001000 ); **)
|
||
|
(** DataRead[i].TO_BCD05:=int_to_bool( k1 Mod 2#0000000000010000 ); **)
|
||
|
(** DataRead[i].TO_BCD06:=int_to_bool( k1 Mod 2#0000000000100000 ); **)
|
||
|
(** DataRead[i].TO_BCD07:=int_to_bool( k1 Mod 2#0000000001000000 ); **)
|
||
|
(** DataRead[i].TO_BCD08:=int_to_bool( k1 Mod 2#0000000010000000 ); **)
|
||
|
(** DataRead[i].TO_BCD09:=int_to_bool( k1 Mod 2#0000000100000000 ); **)
|
||
|
(** DataRead[i].TO_BCD10:=int_to_bool( k1 Mod 2#0000001000000000 ); **)
|
||
|
(** DataRead[i].TO_BCD11:=int_to_bool( k1 Mod 2#0000010000000000 ); **)
|
||
|
(** DataRead[i].TO_BCD12:=int_to_bool( k1 Mod 2#0000100000000000 ); **)
|
||
|
(** DataRead[i].TO_BCD13:=int_to_bool( k1 Mod 2#0001000000000000 ); **)
|
||
|
(** DataRead[i].TO_BCD14:=int_to_bool( k1 Mod 2#0010000000000000 ); **)
|
||
|
(** DataRead[i].TO_BCD15:=int_to_bool( k1 Mod 2#0100000000000000 ); **)
|
||
|
(** DataRead[i].TO_BCD16:=int_to_bool( k1 Mod 2#1000000000000000 ); **)
|
||
|
(** **)
|
||
|
(** end_if; **)
|
||
|
(** *} **)
|
||
|
(** **)
|
||
|
|
||
|
END_FUNCTION_BLOCK
|