循环启动电机(初学者用SCL来编写)
循环启动电机1 电机2 电机1启动运行20S 后电机2启动。如此循环启动要求用SCL编写FB功能块并在OB1中调用它,OB 1也用SCL创建。
FB1程序:
FUNCTION_BLOCK FB1//创建名为Motor_contorl的控制功能块
VAR_TEMP
// Temporary Variables
END_VAR
VAR
// 定义电机1和电机2输入、输出数据类型
dianji1_start:BOOL;
dianji1_stop:BOOL;
diangji1_out:BOOL;
dianji2_start:BOOL;
dianji2_stop:BOOL;
diangji2_out:BOOL;
END_VAR
//电机1的控制顺序
IF diangji1_start = true THEN
dianji1_out:=true; // 如果电机1有启动信号,那么电机1启动
END_IF;
ton.db1(in:=diangji1_start//in:bool,
pt:=t#20s//pt:time
);//定义计时器时间为20s
IF db1.q = true THEN
dianji1_out:=false;
dianji2_out:= true;// 如果定时器时间20s时间到,那么电机1停止,电机2启动
END_IF;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;//电机2的控制顺序
IF diangji2_start = true THEN
dianji2_out:=true; // 如果电机1有启动信号,那么电机1启动
END_IF;
ton.db1(in:=diangji2_start//in:bool,
pt:=t#20s//pt:time
);//定义计时器时间为20s
IF db1.q = true THEN
dianji1_out:=true;
dianji2_out:=false;// 如果定时器时间20s时间到,那么电机1停止,电机2启动
END_IF;
IF db1.q = true THEN
dianji2_out:=true;
dianji1_out:=false;// 如果定时器时间20s时间到,那么电机2停止,电机1启动
END_IF;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;//如果有停止信号,那么电机1和电机2停止
IF dianji1_stop=true THEN
diangji1_out:=true;
END_IF;
IF dianji2_stop=true THEN
diangji2_out:=true;
END_IF;
;
END_FUNCTION_BLOCK
调用OB1:
ORGANIZATION_BLOCK OB1//调用fb1_motor_control里面的数据
VAR_TEMP
// Reserved
info : ARRAY[0..19] OF BYTE;
// Temporary Variables
END_VAR
Motor_control(dianji1_start:=dianji1_start,//in:bool
dianji1_stop:=dianji_stop );//in:bool
Motor_control(dianji2_start:=dianji2_start,//in:bool
dianji2_stop:=dianji_stop);//in:bool
dianji1_out:=dianji1_out;//out:bool
dianji2_out:=dianji2_out);//out:bool
ton.db1(in:=dianji1_out//in:bool,
pt:=t#20s//时间为20s
);
;
END_ORGANIZATION_BLOCK
总觉得有问题,但那里有问题又不会查。而且还出现这个问题:
内部数据结构发生错误257:90