文档介绍:
在西门子PLC中使用SCL语言编程的技巧
前言:两年半前我就在工控网上发表了有关 SCW程的知识<<ft S7300400型PLC中使用高级语言编程 >>,但发表完 后,即使我自己都从没有把任何使用 SCW写的程序s:= ( NOT button_Input) & button_Last;
button_Last:= button_Input;
5、编写脉冲发生器 波峰持续时间仅为一个PLC扫描周期的波形称为脉冲波,而波峰持续时间大于或等于两个 PLC扫描周期的波形称 为方波,脉冲波可用于计数、定时,方波可用于控制信号灯的闪烁输出,可以在西门子 PLC的硬件配置中配置一个字节的各种时间的
方波(波峰时间和波谷时间为1:1),假设"FP_1Sec"为这个字节中1秒的方波,则:<1>、间隔1秒的脉冲波“ Impls_1Sec”如下 编程: “Impls_1Sec" := "FP_1Sec" AND (NOT “Impls_1Sec_Aux”); “Impls_1Sec_Aux" := "FP_1Sec" ; <2> 、间隔 10 秒的脉
冲波 “Impls_10Sec” 如下编程:IF ( "Impls_10Sec" )THENDount_ Actual:=0; "Impls_10Sec" :=0; ELS日F ( "Impls_1Sec” ) THEN Count_ Actual:= Count _ Actual +1; END_IF; "Impls_10Sec" := Count_ Actual>=10; END_IF; Count_ Actual 的初始值为 0,同时当系统新启动时,也需将其设为零。间隔更长时间的脉冲波编程都可以按照上面的方式编程。
6、尽量使用编程计数功能来替代定时器功能,这样使程序更可靠和易于阅读假设 Input_Condition 为输入,Output_Delay为通过定
时处理后的输出,Timer_Setpoint为时间设定点,Timer_Actual为当前时间计数的实际值,“ Impls_1Sec”为系统编程产生的1秒 脉冲。<1>、在输入条件满足的情况下,延时输出的定时器: IF (NOT Input_Condition) THEN Timer_Actual:= 0; Output_Delay:=
0; ELSE IF ( "Impls_1Sec” AND NOT Output_Delay) THEN Timer_ Actual:= Timer_ Actual +1; END_IF; Output_Delay:=
Timer_Actual >= Timer_Setpoint; END_IF;
j*
Timer Setooint
<2>、有记忆的延时输出定时器,即在延时过程中,若输入条件终止,不影响延时,这种 定时器必须使用其它的信号复位。IF
Input_Condition THEN Output_Aux:=1; END_IF; IF (NOT Output_Aux) THEN Timer_Actual:= 0; Output_Delay:=0 ; ELSE IF
("Impls_1Sec” AND NOT Output_Delay) THEN Timer_ Actual:= Timer_ Actual +1; END_IF; Output_Delay:= Timer_Actual >= Timer_Setpoint; END_IF; 若想终止Output_Delay的输出,必须在后面追加一条条件语句,用于复位 Output_Aux
j*
Timer Setooint
<3>、立即输出,延时断开的定时器 IF Input_Condtion THEN Timer_Actual:= 0; Output_Aux:= 0; Output_Delay:=1; // 立即输出
ELSE IF ( "Impls_1Sec” AND NOT Output_Aux) THEN Timer_ Actual:= Timer_ Actual +1; END_IF; Output_Aux:= Timer_Actual >= Timer_Setpoint; END_IF; IF Output_Aux THEN Output_Delay:=0; // 延时断开 END_IF;
<4>、在检测到一个上升沿脉冲后,立即输出,并开始计时,在 时间到达后断开。IF Input_Condition