您当前的位置:五五电子网电子知识plc技术PLC入门如何在S7300/400型PLC中使用高级语言编程 正文
如何在S7300/400型PLC中使用高级语言编程

如何在S7300/400型PLC中使用高级语言编程

点击数:7480 次   录入时间:03-04 11:55:44   整理:http://www.55dianzi.com   PLC入门
A:=MIN(IN1:=a, IN1:=b, IN1:=c, IN1:=d);
极限值函数
A:=LIMIT(MN:=5, IN:= Execution steps, MX:= 10);
MUX函数
A:=MUX(K:=SELECT, IN0:= Steps, IN1:=Number, IN2:=Total);
9、系统功能/功能块、标准库
SCL像其他语言一样,可以调用各种功能块,包括系统功能、功能块SFC/SFB

十一、示例 (均在PLC-SIM上测试通过)
1、编写位偏移程序
传递M变量的起始字节和位、偏移量,然后根据偏移量,算出当前M变量的字节和地址。例如针对M5.4,若给定偏移量1,则当前还是M5.4,若给定2,则为M5.5,依次类推,若给定偏移量6,则为M6.1
//根据偏移量来设定字节和位
FUNCTION FC200: void
VAR_INPUT //输入变量
byteNo:INT; //指定M起始字节号
bitNo:INT; //指定起始位号
bitNum:INT; //指定位数
END_VAR
VAR_OUTPUT //输出变量
currBit:INT; //当前位
currByte:INT; //当前字节
END_VAR
VAR_TEMP
tmp:INT;
END_VAR
BEGIN
tmp:=(bitNo+bitNum-1)DIV 8;
currByte:=byteNo+tmp;
currBit:=bitNo+bitNum-(8*tmp+1);
END_FUNCTION

2、功能选择程序

假设某个机床有若干过手动功能,使用两个按钮”+”和”-“,按一次”+”,功能号加一,然后相应的功能选择指示灯被点亮,譬如,当前功能3被选中,与之对应的指示灯亮,这时按一次按钮”+”,则功能4被选中,与之对应的指示灯亮,而与功能3对应的指示灯灭,同时,当功能号到达最大值时,若再按一次按钮”+”,则功能号转到1,重新开始循环,按钮”-“与”+”正好相反,用于控制功能号递减。同时要求,当按住某个按钮超过1s时,则功能号每过200ms钟加一或者减一。
/////////////////////////////////////////////主要控制功能FC10////////////////////////////////////////
FUNCTION FC10: VOID
VAR_INPUT //输入变量
fnAdd:BOOL; //接收"+"按钮
fnSub:BOOL; //接收"-"按钮
byteNo:INT; //指定M起始字节号,这些M位与相应得某个功能对应。
bitNo:INT; //指定起始位号
bitNum:INT; //指定总的位数
END_VAR
VAR //静态变量
pus1:BOOL; //记录按钮"+"的脉冲
pus2:BOOL; //记录按钮"-"的脉冲
button:BOOL; //确定按钮"+"或者按钮"-"被按下
currNo:INT; //记录当前的功能号
currBit:INT; //当前位
currByte:INT; //当前字节
//定时器输出
p1:BOOL;
p2:BOOL;
p11:BOOL; //记录按钮"+"的时钟
p111:BOOL;
p22:BOOL; //记录按钮"-"的时钟
p222:BOOL;
CurrTime:S5TIME;
END_VAR
VAR_TEMP
i:INT;
END_VAR
BEGIN
////若都接通,则推出块
IF fnAdd&fnSub THEN
RETURN;
END_IF;
/////////////////////////////////////////获取按钮"+"的脉冲///////////////////////////////////////////
IF fnAdd &(button=false) THEN
pus1:=true;
ELSE
pus1:=false;
END_IF;
//////////////////////////////////////////按钮"-"的脉冲/////////////////////////////////
IF fnSub &(button=false) THEN
pus2:=true;
ELSE
pus2:=false;
END_IF;
IF (fnSub&(fnAdd=false))OR (fnAdd&(fnSub=false)) THEN
button:=true;
ELSE
button:=false;
END_IF;
//////////////////////////添加定时器监测////////////////////////////////////////////////////
CurrTime:=S_ODT(T_NO:=T10, S:=fnAdd, TV:=T#800ms,Q:=p1); //按钮按下的时间
CurrTime:=S_ODT(T_NO:=T11, S:=p1&p111, TV:=T#200ms,Q:=p11);
IF p11=true THEN
p111:=false; //当定时器有输出后,断开信号,使其在下一扫瞄周期中无输出
ELSE
p111:=true; //在按钮按下的情况下重启定时器计时
END_IF;
CurrTime:=S_ODT(T_NO:=T20, S:=fnSub, TV:=T#1s,Q:=p2);
CurrTime:=S_ODT(T_NO:=T21, S:=fnSub&p222, TV:=T#200ms,Q:=p22);
IF p22=true THEN
p222:=false; //当定时器有输出后,断开信号,使其在下一扫瞄周期中无输出
ELSE
p222:=true; //在按钮按下的情况下重启定时器计时
END_IF;
///////////////////////////////////////////////////////////////////////////////////////////////////////
//功能号从1开始,最后一个的号等于bitNum
IF pus1=true OR p11 THEN //按钮"+"的脉冲
IF currNo currNo:=currNo+1;
ELSE
currNo:=1;
END_IF;
ELSIF pus2=true OR p22 THEN // 按钮"-"的脉冲
IF currNo>1 THEN
currNo:=currNo-1;
ELSE
currNo:=bitNum;
END_IF;
END_IF;
//把它的上一个功能置0
m[currByte,currBit]:=false;
fc200(byteNo:=byteNo,bitNo:=bitNo,bitNum:=currNo,currBit:=currBit, currByte:=currByte);
//把当前功能置1
m[currByte,currBit]:=true;
END_FUNCTION
注:上程序有些繁琐,主要是在编写按钮脉冲时有些费事,好像SCL不提供脉冲沿检测函数。

上一页  [1] [2] [3] 


本文关键字:如何  语言编程  PLC入门plc技术 - PLC入门

上一篇:PLC的编程步骤