PLC(即Programmable Logic Controller的简称),又称可编程逻辑控制器,是以微处理器、嵌入式芯片为基础,综合了计算机技术、自动控制技术和通信技术发展而来的一种新型工业控制装置,是工业控制的主要手段和重要的基础设备之一。
在西门子工厂自动化系统中,核心的就是PLC,它通过在现场层、控制层和管理层分别部署PLC的硬件产品和对应软件,实现了管理控制一体化。西门子目前主流的PLC产品为S7系列PLC,包括S7-200SMART、S7-1200、S7-300、S7-400、S7-1500等,具有外观轻巧、速度敏捷、标准化程度高等特点,同时借助的网络通信能力和标准,可以构成复杂多变的控制系统。
本文主要介绍的就是S7-1200的一些基本指令应用。
1. 西门子S7-1200 PLC
如图1-1所示,西门子S7-1200 PLC模块包括CPU、电源、输入信号处理回路、输出信号处理回路、存储区、RJ45端口和扩展模块接口。
图1-1 S7-1200 PLC模块
根据PLC的定义,S7-1200 PLC的本质为一台计算机,负责系统程序的调度、管理、运行和PLC的自诊断,负担将用户程序作出编译解释处理以及调度用户目标程序运行的任务。
与之前西门子S7-200系列PLC模块大的区别在于它标准配置了以太网接口RJ45,并可以采用一根标准网线与安装有博途软件的PC进行编程组态和工程应用。
S7-1200 PLC系统的基本构成
图1-2所示为S7-1200 PLC系统,它包括CPU模块、SM信号模块、CM通信模块、电源模块和其他附件。
图1-2 S7-1200 PLC系统
2. S7-1200基本指令应用
2.1 位逻辑指令
位逻辑指令是实现PLC控制的基本指令,即按照一定的控制要求对“0”、“1” 两个布尔操作数(BOOL)进行逻辑组合,可以构成“与”、“或”、“异或”等基本逻辑操作,也可以构成“置位”、“复位”、“上升沿检测”、“下降沿检测”等复杂逻辑操作,并将其结果送入存储器状态字的逻辑操作结果(RLO)。
表2-1所示为常见的位逻辑指令汇总,主要包括触点和线圈指令,具体说明如下:
(1)取反指令
取反指令(-| NOT|-、-( / )-)改变能流输入的状态,将RLO的当前值由0变1,或由1变0。如图2-1中,左右母线是一个直流电源的正负极,左母线是接正极,右母线接负极,能流(电流)沿着梯形图,从左母线流到右母线,形成一条回路。如果采用-( / )-线圈取反指令,如图2-2所示,则输出结果与图2-1刚好相反。
图2-1能流的概念
图2-2 线圈取反指令(2)边沿检测指令
边沿信号在PLC程序中比较常见,如电动机的起动、停止、故障等信号的捕捉都是通过边沿信号实现的。如图2-3所示,上升沿检测指令检测每一次0 到1的正跳变,让能流接通一一个扫描周期;下降沿检测指令检测每一次1到0的负跳变,让能流接通一一个扫描周期。
图2-3边沿检测示意(3)置位/复位指令
当触发条件满足(即RL0= 1)时,置位指令将一一个线圈置1;当触发条件不再满足(即RLO=0)时,线圈值保持不变,只有触发复位指令时才能将线圈值复位为0。单独的复位指令也可以对定时器、计数器的值进行清零。梯形图编程指令中RS、SR触发器带有触发优先级,当置位、复位信号同时为1时,将触发优先级高的动作,如RS触发器,S (置位在后)优先级高。
表2-1 位逻辑指令汇总【实例2-1】用自锁实现输送带起停控制
采用S7-1200 CPU1215C DC/DC/DC来进行输送带启停控制电路的设计,即用启动按钮SB1控制输送带电动机运行,带动BOX物品从右向左运行,当达到到右侧的接近开关附近时,接近开关感应到物品,输送带电动机停止;急停按钮可以随时按下来停止输送带电动机;指示灯的运行和停止指示与电动机的动作一致。请用自锁控制来进行梯形图编程,并进行程序编辑与下载。
图2-4 输送带起停控制示意
1.[STEP1] 定义输入输出元件
输送带启停控制涉及按钮、接近开关、电动机和指示灯等元件,表2-2所示为本实例的输入输出元件及控制功能。
表2-2 输入输出元件及控制功能PLC软元件
元件符号/名称
输入
I0.0
SB1/启动按钮
I0.1
SQ1/接近开关
I1.0
SB2/急停按钮(紧急停止)
输出
Q0.0
KM/接触器
Q0.1
HL1/运行指示
Q0.2
HL2/停止指示
2.[STEP2] 电气接线
本实例采用S7-1200 PLC中的CPU1215C DC/DC/DC,具体接线图如图2-5所示。为了更加直观反映输入输出情况,将电源部分略作修改后的接线图如图2-6所示(本书后续实例主要采用这种画法)。
图2-5 【实例2-1】接线图
图2-6 【实例2-1】接线简化图3.[STEP3] PLC梯形图编程
PLC的梯形图编程方法可以采用传统的“继电器—接触器”思路,如本实例中的“自锁控制”方法,当按下按钮I0.0后,Q0.0线圈闭合;此时Q0.0的触点动作,持续接通Q0.0线圈,形成自锁控制。当I1.0紧急停止动作或I0.1接近开关动作,Q0.0线圈断开,自锁失效。在编程中,还需要注意Q0.2输出和Q0.1刚好相反,可以采用取反线圈实现。
图2-7 输送带起停梯形图
4.[STEP4] PLC调试
将图2-7所示的梯形图程序经编译下载到PLC后,可以进行在线监控如图2-8所示。需要注意的是SB2急停按钮在接线上是常闭触电,因此在梯形图编程中画的是常开,正常情况实际的在线监控也是接通的,只有当按下急停按钮后,I1.0信号才断开。
图2-8 在线监控示意2.2 定时器与时钟存储器
2.2.1 定时器种类
使用定时器指令用以创建可编程的延迟时间,表2-3所示为S7-1200的定时器指令,常用的为如下4种定时器:
1)TP:脉冲定时器可生成具有预设宽度时间的脉冲。
2)TON:接通延迟定时器,输出Q在预设的延时过后设置为ON。
3)TOF:关断延迟定时器,输出 Q在预设的延时过后重置为OFF。
4)TONR:保持型接通延迟定时器,输出在预设的延时过后设置为ON。在使用 R 输入重置经过的时间之前,会跨越多个定时时段一直累加经过的时间。
表2-3 定时器指令2.2.2 TON指令
TON指令就是接通延迟定时器输出Q在预设的延时过后设置为ON,其指令形式如图2-9所示,参数及其数据类型如表2-4所示。参数 IN 从 0 跳变为 1 将启动定时器TON。
图2-9 TON指令
表2-4 TON参数及数据类型PT(预设时间)和 ET(经过的时间)值以表示毫秒时间的有符号双精度整数形式存储在存储器中(表2-5所示)。TIME 数据使用 T# 标识符,可以简单时间单元“T#200ms”或复合时间单元“T#2s_200ms(或T#2s200ms)”的形式输入。
表2-5 TIME数据类型
如图2-10所示,在指令窗口中选择“定时器操作”中的TON指令,并将之拖入到程序段中(图2-11),这时就会跳出一个“调用数据块”窗口,选择自动编号,则会直接生成DB1数据块;也可以选择手动编号,根据用户需要生成DB数据块。
图2-10 选择TON定时器操作
图2-11 TON指令调用数据块
在项目树的“程序块”中,可以看到自动生成的IEC_Timer_0_DB[DB1]数据块,生成后的TON指令调用如图2-12所示。
图2-12 TON指令调用示意
2.2.3 TOF定时器
TOF关断延时定时器指令的参数与TON相同,区别在于IN 从1 跳变为 0 将启动定时器。
2.2.4 TP脉冲定时器
TP脉冲定时器指令虽然参数格式与TON、TOF一致,但含义跟接通延时和断电延时不同,它是在IN输入从0跳变到1之后,立即输出一个脉冲信号,其持续长度受PT值控制。
图2-13 TP指令应用
图2-14所示为TP指令时序图,从图中可以看到:即使TON的IN信号还处于“1”状态,TP指令输出Q在完成PT时长后,就不再保持为“1”;即使TON的IN信号为多个“脉冲”信号,输出Q也能完成PT时长的脉冲宽度。
图2-14 TP指令时序图
2.2.5 TONR时间累加器
TONR指令如图2-15所示,与TON、TOF、TP相比增加了参数R,相关的参数及数据类型见表2-7。
图2-15 TONR指令
表2-7 TONR参数及数据类型
图2-16所示为TONR的时序图,当IN信号不连续输入时,定时器ET的值一直在累计,直到定时时间PT到,ET的值保持为PT值;当R信号ON时,ET的值复位为零。
图2-16 TONR时序图2.2.6系统和时钟存储器的选用
在报警指示中经常会碰到“闪烁”的频率概念,用TON等定时器可以完成,但更便捷的方式就是采用博途软件自带的PLC“系统和时钟存储器”。
在图2-17中,选中PLC属性中所示的“系统和时钟存储器",点击右边窗口的复选框“启用系统存储器字节”和“启用时钟存储器字节”,采用默认的MB1、MB0作为系统存储器字节、时钟存储器字节,也可以修改该2字节的地址。
图2-17系统和时钟存储器
将MB1设置为系统存储器字节后,该字节的M1.0~M1.3的意义如下:
● M1.0(FirstScan): 仅在进入RUN模式的扫描时为1状态,以后为0状态。
● M1.1(DiagStatusUpdate): 诊断状态已更改。
● M1.2(Always TRUE): 总是为1状态,其常开触点总是闭合或高电平。
● M1.3(Always FALSE); 总是为0状态,其常闭触点总是闭合或低电平。
时钟脉冲是一个周期内0状态和1状态所占的时间各为50%的方波信号,以M0.5为例,其时钟脉冲的周期为1s,如果用它的触点来控制接在某输出点的指示灯,指示灯将以1Hz的频率闪动,亮0.5s、熄灭0.5s。
因为系统存储器和时钟存储器不是保留的存储器,用户程序或通信可能改写这些存储单元,破坏其中的数据。应避免改写这两个M字节,保证它们的功能正常运行。指定了系统存储器和时钟存储器字节后,这些字节不能再作它用,否则将会使用户程序运行出错,甚至造成设备损坏或人身伤害。
【实例2-2】用TON指令延时启动电动机
某电动机在启动按钮SB1动作后10s之后才启动,在停止按钮SB2动作后立即停止,请用TON指令进行编程。
1.[STEP1] 定义输入输出元件和电气接线
表2-6所示的输入元件包括SB1启动按钮和SB2停止按钮,均采取常开触点接线;输出元件包括接触器KM1。具体电气接线如图2-18所示。
表2-6 输入输出元件及控制功能
PLC软元件
元件符号/名称
输入
I0.0
SB1/启动按钮
I0.1
SB2/停止按钮
输出
Q0.0
KM/接触器
图2-18 延时启动电动机电气接线
2.[STEP2] PLC梯形图编程
图2-19所示延时启动电动机PLC梯形图编程示意。
程序段1:对中间变量M10.1电动机起动信号定时10s,输出为Q0.0。
程序段2:采用启动按钮和停止按钮的SR触发器,输出为M10.1电动机起动信号,停止按钮复位优先。
需要注意的是:程序段1和2的位置对于本实例来说其先后次序不影响程序的正确执行。
图2-19 延时起动电动机梯形图
3.[STEP3]调试
为了更好地理解TON指令,图2-20所示为程序下载后的实时监控,即在DB1中实时读取当前的延时时间,如T#3S_110MS。
图2-20 TON指令实时监控
【实例2-3】用TONR指令统计设备运行时间
某设备所用的电动机在运行100分钟后要进行计时到指示,以便于维护人员进行停机检查。请用TONR指令进行编程。
1.[STEP1]定义输入输出元件和电气接线
表2-8所示为统计设备运行时间的输入输出元件及控制功能,包括3个输入信号的按钮和输出接触器、指示灯。电气接线如图2-21所示。
表2-8 输入输出元件及控制功能
PLC软元件
元件符号/名称
输入
I0.0
SB1/启动按钮
I0.1
SB2/停止按钮
I0.2
SB3/计时复位按钮
输出
Q0.0
KM/接触器
Q0.1
HL1/运行累计时间到指示
图2-21 统计设备运行时间电气接线
2.[STEP2]PLC梯形图编程
如图2-22所示为统计设备运行时间的梯形图。
程序段1:调用TONR对输入信号Q0.0(即接触器KM1)进行累计定时,100分钟时间一到即输出HL1指示灯Q0.1,该定时器可以通过SB3进行复位。
程序段2:调用SR触发器对输入信号SB1进行Q0.0置位、对停止按钮SB2和运行累计时间到信号HL1进行Q0.0复位,其中复位优先。
图2-22 统计设备运行时间梯形图
【实例2-4】用时钟存储器来编程指示灯闪烁
如图2-23所示的指示灯HL1有两种闪烁方式,一种是当SB1按下时进行快闪,另外一种是当SB2按下时进行慢闪。当两个按钮同时按下时,指示灯HL1灭掉,然后进入待机状态,即按下SB1或SB2继续处于两种闪烁状态。请用时钟存储器来进行编程。
图2-23 指示灯闪烁示意
1.[STEP1]定义输入输出元件和电气接线
指示灯闪烁实例包括2个按钮输入和1个指示灯输入见表2-9。电气接线如图2-24所示。
表2-8 输入输出元件及控制功能PLC软元件
元件符号/名称
输入
I0.0
SB1/快闪按钮
I0.1
SB2/慢闪按钮
输出
Q0.0
HL1/指示灯
图2-24 指示灯闪烁电气接线
2.[STEP2]PLC梯形图编程
图2-25所示为指示灯闪烁梯形图,采用M0.2来作为快闪的时钟存储器、M0.7来作为慢闪的时钟存储器。
程序段1:按下SB1快闪按钮,则置位快闪中间变量M10.0,复位慢闪中间变量M10.1。
程序段2:按下SB2慢闪按钮,则置位慢闪中间变量M10.1,复位快闪中间变量M10.0。
程序段3:同时按下2个按钮时,则复位%M10.0和M10.1,同时置位M10.2(即复位中间变量)。
程序段4:用2.5Hz表示快闪,用0.5Hz表示慢闪,在两种状态下输出指示灯。
程序段5:在同时按下2个按钮情况下,过2s后自动激活,运行再次进行慢闪或快闪动作。
图2-25 指示灯闪烁梯形图
2.3 比较、运算和移动指令
2.3.1 比较指令
表2-14所示为S7-1200共有10个常见的比较操作,用来比较数据类型相同的两个数IN1与IN2的大小,其操作数可以是I/Q/M/L/D等存储区中的变量或常量。当满足比较关系式给出的条件时,等效触点接通。
表2-14比较指令表2-15所示为等于、不等于、大于等于、小于等于、大于、小于等6种比较指令触点的满足条件,且要比较的两个值必须为相同的数据类型。
表2-15比较指令触点这里以“等于”比较指令为例进行说明:如图2-26a所示可以使用“等于”指令确定个比较值(<操作数 1>)是否等于第二个比较值(<操作数2>)。比较器运算指令可以通过指令右上角黄色三角的个选项来选择等于、大于等于等比较器类型(图2-26b),也可以通过右下角黄色三角的第二个选项来选择数据类型,如整数、实数等(图2-26c)。
图2-26 比较器运算指令
(1)CMP==:等于比较器:
可以使用“等于”指令判断个比较值(<操作数 1>)是否等于第二个比较值(<操作数 2>)。如果满足比较条件,则该指令返回逻辑运算结果 (RLO)“1”。如果不满足比较条件,则该指令返回 RLO“0”。
(2)CMP<>:不等于
使用“不等于”指令判断个比较值(<操作数 1>)是否不等于第二个比较值(<操作数 2>)。如果满足比较条件,则该指令返回逻辑运算结果 (RLO)“1”。如果不满足比较条件,则该指令返回 RLO“0”。
(3)CMP>=:大于或等于
可以使用“大于或等于”指令判断个比较值(<操作数 1>)是否大于或等于第二个比较值(<操作数 2>)。如果满足比较条件,则该指令返回逻辑运算结果 (RLO)“1”。如果不满足比较条件,则该指令返回 RLO“0”。
(4)CMP<=:小于或等于
可以使用“小于或等于”指令判断个比较值(<操作数 1>)是否小于或等于第二个比较值(<操作数 2>)。如果满足比较条件,则该指令返回逻辑运算结果 (RLO)“1”。如果不满足比较条件,则该指令返回 RLO“0”。
(5)CMP>:大于
可以使用“大于”指令确定个比较值(<操作数 1>)是否大于第二个比较值(<操作数 2>)。如果满足比较条件,则该指令返回逻辑运算结果 (RLO)“1”。如果不满足比较条件,则该指令返回 RLO“0”。
(6)CMP<:小于
可以使用“小于”指令判断个比较值(<操作数 1>)是否小于第二个比较值(<操作数 2>)。如果满足比较条件,则该指令返回逻辑运算结果 (RLO)“1”。如果不满足比较条件,则该指令返回 RLO为“0”。
除了上述的常见比较指令之外,还有其他变量比较指令,其类型与说明如表2-14所示。
表2-14 变量比较类型与说明
2.3.2 移动指令
移动指令是将数据元素复制到新的存储器地址,并从一种数据类型转换为另一种数据类型,移动过程中不更改源数据
1.MOVE移动值
如图2-27可以使用“移动值”指令将 IN 输入操作数中的内容传送给 OUT1 输出的操作数中。始终沿地址升序方向进行传送。如果使能输入 EN 的信号状态为“0”或IN 参数的数据类型与 OUT1 参数的指定数据类型不对应时,则使能输出 ENO 的信号状态为“0”
图2-27 MOVE指令
表2-15 MOVE指令可传送的类型在MOVE指令中,若IN 输入端数据类型的位长度超出了OUT1 输出端数据类型的位长度,则传送源值中多出来的有效位会丢失。若 IN 输入端数据类型的位长度小于 OUT1 输出端数据类型的位长度,则用零填充传送目标值中多出来的有效位。
在初始状态,指令框中包含 1 个输出 (OUT1),可以鼠标点击图符扩展输出数目。 在该指令框中,应按升序顺序排列所添加的输出端。执行该指令时,将 IN 输入端操作数中的内容发送到所有可用的输出端。如果传送结构化数据类型 (DTL, STRUCT, ARRAY) 或字符串 (STRING)的字符,则无法扩展指令框。可以输出多个地址OUT1、OUT2、OUT3等,如图2-28所示。
图2-28 MOVE指令的多个变量输出
2.MOVE_BLK指令
如图2-29所示,使用“MOVE_BLK块移动”指令,可将存储区(源区域)的内容移动到其他存储区(目标区域)。 使用参数 COUNT 可以指定待复制到目标区域中的元素个数。 可通过 IN 输入端的元素宽度来指定待复制元素的宽度。 并按地址升序顺序执行复制操作。
图2-29 MOVE_BLK指令
3.UMOVE_BLK无中断块移动
使用图2-30所示的“UMOVE_BLK无中断块移动”指令,可将存储区(源区域)的内容连续复制到其他存储区(目标区域)。 使用参数 COUNT 可以指定待复制到目标区域中的元素个数。可通过 IN 输入端的元素宽度来指定待复制元素的宽度。 源区域内容沿地址升序方向复制到目标区域。
图2-30 UMOVE_BLK指令
4.FILL_BLK填充块
图2-31所示的“FILL_BLK填充块”指令,用 IN 输入的值填充一个存储区域(目标区域)。将以 OUT 输出指定的起始地址,填充目标区域。可以使用参数 COUNT 指定复制操作的重复次数。执行该指令时,将选择 IN 输入的值,并复制到目标区域 COUNT 参数中指定的次数。
图2-31 FILL_BLK填充块
5. SWAP交换指令
“SWAP交换”指令可以更改输入 IN 中字节的顺序,并在输出 OUT 中查询结果。图2-32说明了如何使用“交换”指令交换数据类型为 DWORD 的操作数的字节。表2-15所示为SWAP指令的参数。
图2-32 SWAP交换数据类型为DWORD的示意
表2-15 SWAP指令的参数
2.3.3 数学运算指令
在数学运算指令中,ADD、SUB、MUL和DIV分别是加、减、乘、除指令,其操作数的数据类型可选SInt、Int、 Dint、 USInt、 UInt、 UDInt和Real。在运算过程中,操作数的数据类型应该相同。
1.加法ADD指令
加法ADD指令可以从TIA软件右边指令窗口的“基本指令”下的“数学函数”中直接添加(图2-33a所示)。使用“ADD”指令,根据图2-33b选选择的数据类型,将输入 IN1 的值与输入 IN2 的值相加,并在输出 OUT (OUT = IN1+IN2)处查询总和。
图2-33 ADD指令
在初始状态下,指令框中至少包含两个输入(IN1 和 IN2),可以鼠标点击图符扩展输入数目(图2-33c),在功能框中按升序对插入的输入进行编号,执行该指令时,将所有可用输入参数的值相加,并将求得的和存储在输出 OUT 中。
表2-16列出了“ADD”指令的参数。根据参数说明,只有使能输入 EN 的信号状态为“1”时,才执行该指令。如果成功执行该指令,使能输出ENO 的信号状态也为“1”。如果满足下列条件之一,则使能输出 ENO 的信号状态为“0”:
● 使能输入EN的信号状态为“0”。
● 指令结果超出输出 OUT 指定的数据类型的允许范围。
● 浮点数具有无效值。
表2-16 ADD指令的参数图2-34中举例说明了ADD指令的工作原理:如果操作数I0.0的信号状态为“1”,则将执行“加”指令,将操作数IW64的值与IW66的值相加,并将相加的结果存储在操作数MW0中。如果该指令执行成功,则使能输出 ENO 的信号状态为“1”,同时置位输出Q0.0。
图2-34 ADD指令应用
2.减法SUB指令
如图2-35所示,可以使用减法SUB指令从输入 IN1 的值中减去输入 IN2 的值并在输出 OUT (OUT = IN1-IN2)处查询差值。SUB指令的参数与ADD指令相同。
图2-35 SUB指令
图2-36中举例说明了SUB指令的工作原理:如果操作数I0.0的信号状态为“1”,则将执行“减”指令,将操作数IW64的值减去IW66的值,并将结果存储在操作数MW0中。如果该指令执行成功,则使能输出 ENO 的信号状态为“1”,同时置位输出Q0.0。
图2-36 SUB指令应用
3.乘法MUL指令
如图2-37所示,可以使用乘法MUL指令将输入 IN1 的值乘以输入 IN2 的值,并在输出 OUT (OUT = IN1*IN2)处查询乘积。同ADD指令一样,可以在指令功能框中展开输入的数字,并在功能框中以升序对相加的输入进行编号。表2-27为MUL指令的参数。
图2-37 MUL指令
表2-17 MUL指令的参数图2-38举例说明了MUL指令的工作原理:如果操作数I0.0的信号状态为“1”,则将执行“乘”指令。将操作数IW64的值中乘以操作数IN2常数值“4”,相乘的结果存储在操作数MW20中。如果成功执行该指令,则输出 ENO 的信号状态为“1”,并将置位输出Q0.0。
图2-38 MUL指令应用
4.除法DIV和返回除法余数MOD指令
除法DIV和返回除法余数MOD指令如图2-39所示,前者是返回除法的商,后者是余数。需要注意的是,MOD指令只有在整数相除时才能应用。
图2-39 DIV和MOD指令图2-40举例说明了DIV和MOD指令的工作原理:如果操作数I0.0的信号状态为“1”,则将执行DIV指令。将操作数IW64的值中除以操作数IN2常数值“4”,商存储在操作数MW20中,余数则存储在操作数MW30中。
图2-40 DIV和MOD指令的应用
除了上述运算指令之外,还有MOD、NEG、INC、DEC和ABS等数学运算指令,具体说明如下:
1)MOD指令:除法指令只能得到商,余数被丢掉,MOD指令可以用来求除法的余数。
2)NEG指令:将输入IN的值取反,保存在OUT中。
3)INC和DEC指令:参数IN/OUT的值分别加1和减1。
4)值指令ABS:求输入IN中有符号整数或实数的值。
对于浮点数函数运算,其梯形图和对应的描述如表2-18中所示,需要注意的是,三角函数和反三角函数指令中的角度均为以弧度为单位的浮点数。
表2-18 浮点数函数运算2.3.4 其他数据指令
1.转换操作指令
如果在一个指令中包含多个操作数,必须确保这些数据类型是兼容的。如果操作数不是同一数据类型,则必须进行转换,转换方式有两种。
(1)隐式转换
如果操作数的数据类型是兼容的,由系统按照统一的规则自动执行隐式转换。可以根据设定的严格或较宽松的条件来进行兼容性检测,例如块属性中缺省的设置为执行IEC检测,这样自动转换的数据类型相对要少。编程语言LAD、FBD、SCL和GRAPH支持隐式转换。STL 编程语言不支持隐式转换。
(2)显式转换
如果操作数的数据类型不兼容或者由编程人员设定转换规则时,则可以进行显式转换(不是所有的数据类型都支持显式转换),显式转换的指令参考表2-19。
表2-19 转换操作指令与说明2.移位和循环指令
LAD移位指令可以将输入参数IN中的内容向左或向右逐位移动;循环指令可以将输入参数IN中的全部内容循环地逐位左移或右移,空出的位用输入IN移出位的信号状态填充。该指令可以对8、16、 32以及64位的字或整数进行操作,移位和循环指令参考表2-20。
表2-20 移位和循环指令与说明字移位指令移位的范围为0~15,双字移位指令移位的范围为0~31,长字移位指令移位的范围为0~63。对于字、双字和长字移位指令,移出的位信号丢失,移空的位使用0补足。例如将一个字左移6位,移位前后位排列次序如图2-41所示。
图2-41 左移6位
带有符号位的整数移位范围为0~15;双整数移位范围为0~31;长整数移位指令移位的范围为0~63。移位方向只能向右移,移出的位信号失,移空的位使用符号位补足。如整数为负值,符号位为1;整数为正值,符号位为0。例如将-个整数右移4位, 移位前后位排列次序如图2-42所示。
图2-42 右移4位
3.字逻辑运算指令
LAD字逻辑指令可以对BYTE (字节)、WORD (字)、DWORD ( 双字)或LWORD(长字)逐位进行“与”、“或”、“异或”逻辑运算操作。“与”操作可以判断两个变量在相同的位数上有多少位为1,通常用于变量的过滤,例如一个字变量与常数W#16#00FF相“与”,则可以将字变量中的高字节过滤为0;“或”操作可以判断两个变量中为1位的个数;“异或”操作可以判断两个变量有多少位不相同。字逻辑指令还包含编码解码等操作。字逻辑指令参考表2-31所示。
表2-21 字逻辑运算指令与说明【实例2-5】用比较指令来实现交通灯控制
某红绿灯控制时序图如图2-43所示,在按钮SB1启动之后,红灯先亮6s,然后绿灯亮6s,后黄灯闪烁4s;反复循环,直至按钮SB2停止。请用PLC进行编程。
图2-43交通灯控制时序图
1.[STEP1]定义输入输出元件和电气接线
表2-22所示是交通灯I/O表,其电气接线如图2-44所示。
表2-22 交通灯I/O表输入
说明
输出
说明
I0.0
按钮SB1
Q0.0
红灯HL1
I0.1
按钮SB2
Q0.1
绿灯HL2
Q0.2
黄灯HL3
图2-44 交通灯控制电气接线
2.[STEP2]程序编写
图2-45所示为交通灯控制MD20的时序图,主要采用了定时器数值的区间数据比较指令,即0-6s之间为红灯,6s-12s之间是绿灯,12s之后是4s闪烁黄灯;依次循环。选用TONR的原因,是因为有复位参数,而其他计数器均没有。
图2-45 MD20时序图
本实例重要的进行时间TIME与DINT的转换,这里采用CONV指令,在图2-46所示的程序段3中将定时器的时间值转为双整数MD20。