发布于 2007-10-11 14:27:09
0楼
我用300/400做过一个判断I点位数的,楼主可以参考一下:
FUNCTION FC 1 : VOID
TITLE =
VERSION : 0.1
VAR_INPUT
byte_of_start : DINT ;
byte_of_end : DINT ;
END_VAR
VAR_OUTPUT
total : REAL ;
END_VAR
BEGIN
NETWORK
TITLE =
SET ;
R M 0.2;
L 0.000000e+000;
T #total;
L #byte_of_start;
L #byte_of_end;
<=D ;
JC m001;
S M 0.2; //error Bit
JU m100;
m001: L #byte_of_start;
L 8;
*D ;
T MD 1;
L #byte_of_end;
L 8;
*D ;
L 8;
+D ;
T MD 5;
m003: A I [MD 1]; //计算I点
JCN m002;
L 1.000000e+000;
L #total;
+R ;
T #total;
m002: L MD 1;
L 1;
+D ;
T MD 1;
L MD 5;
>=D ;
JCN m003;
m100: NOP 0;
END_FUNCTION
ORGANIZATION_BLOCK OB 1
TITLE = "Main Program Sweep (Cycle)"
VERSION : 0.1
VAR_TEMP
OB1_EV_CLASS : BYTE ; //Bits 0-3 = 1 (Coming event), Bits 4-7 = 1 (Event class 1)
OB1_SCAN_1 : BYTE ; //1 (Cold restart scan 1 of OB 1), 3 (Scan 2-n of OB 1)
OB1_PRIORITY : BYTE ; //Priority of OB Execution
OB1_OB_NUMBR : BYTE ; //1 (Organization block 1, OB1)
OB1_RESERVED_1 : BYTE ; //Reserved for system
OB1_RESERVED_2 : BYTE ; //Reserved for system
OB1_PREV_CYCLE : INT ; //Cycle time of previous OB1 scan (milliseconds)
OB1_MIN_CYCLE : INT ; //Minimum cycle time of OB1 (milliseconds)
OB1_MAX_CYCLE : INT ; //Maximum cycle time of OB1 (milliseconds)
OB1_DATE_TIME : DATE_AND_TIME ; //Date and time OB1 started
END_VAR
BEGIN
NETWORK
TITLE =
A M 0.0;
JNB _001;
CALL FC 1 (
byte_of_start := MD 10,
byte_of_end := MD 20,
total := MD 100);
_001: NOP 0;
END_ORGANIZATION_BLOCK
与人规矩,不与人巧!