发布于 2013-12-11 22:28:35
12楼
自己动手搞了个程序,不完善,说起来简单,真做起来也挺伤脑筋,程序还有问题,有打赏板砖的同志,请不要手下留情,还望同时能就存在的问题指点一二。
多谢!
DATA_BLOCK DB 2
TITLE =
VERSION : 0.1
STRUCT
DB_VAR : ARRAY [1 .. 10 ] OF //Temporary placeholder variable
INT := 21, 54, 261, 67, 93, 24, 60, 42, 65, 32;
END_STRUCT ;
BEGIN
DB_VAR[1] := 21;
DB_VAR[2] := 54;
DB_VAR[3] := 261;
DB_VAR[4] := 67;
DB_VAR[5] := 93;
DB_VAR[6] := 24;
DB_VAR[7] := 60;
DB_VAR[8] := 42;
DB_VAR[9] := 65;
DB_VAR[10] := 32;
END_DATA_BLOCK
FUNCTION_BLOCK FB 1
TITLE =
VERSION : 0.1
VAR_INPUT
p0 : ANY ;
END_VAR
VAR_OUTPUT
max : DINT ;
END_VAR
VAR_TEMP
pp1 : DINT ;
pp2 : DINT ;
pp3 : DINT ;
max_n : DINT ;
p1 : DINT ;
p2 : DINT ;
p3 : DINT ;
p_counter : INT ;
END_VAR
BEGIN
NETWORK
TITLE =
OPN DB 2;
L 0;
SLD 3;
T #p1;
L DBW [#p1];
T #pp1;
L L#1;
SLD 4;
T #p2;
L DBW [#p2];
T #pp2;
L L#1;
SLD 5;
T #p3;
L DBW [#p3];
T #pp3;
NETWORK
TITLE =
m00: CALL "MAX" (
IN1 := #pp1,
IN2 := #pp2,
IN3 := #pp3,
RET_VAL := #max_n);
L #max_n;
T #pp1;
L #p2;
+ L#32;
T #p2;
L DBW [#p2];
T #pp2;
L #p3;
+ L#32;
T #p3;
L DBW [#p3]; //程序运行到此处时,出现边界溢出错误(寻址DB2.DBW20,DB2中只设置了10个数据),导致CPU停机。
T #pp3;
L #p2; //循环结束判断条件
L DW#16#90; //if #p2==90H
==I ; //
JCN m00; //跳出循环
L #max_n;
T #max;
END_FUNCTION_BLOCK
DATA_BLOCK DB 1
TITLE =
VERSION : 0.0
FB 1
BEGIN
max := L#0;
END_DATA_BLOCK
ORGANIZATION_BLOCK "Cycle Execution"
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 =
CALL FB 1 , DB 1 (
p0 := DB2.DBW 0,
max := MD 100);
NOP 0;
NETWORK
TITLE =
NETWORK
TITLE =
NETWORK
TITLE =
END_ORGANIZATION_BLOCK