方法一:使用两个定时器,优点是可以分别控制灯亮和灯灭的时间。但缺点是使用定时器多。
方法二:使用一个定时器,但要使用比较指令进行比较,也可控制灯亮灭时间。
信捷PLC之子程序和中断
本文字数: 735 阅读时长 ≈ 6 分钟
子程序调用
1、子程序调用指令:CALL。例如CALL P0
2、子程序返回指令:SRET。
3、子程序用指针:Pn。
4、主程序结束指令:FEND。
如果X0= “ON”,则执行调用指令,跳转到标记为P10的子程序步。在这里,执行子程序后,通过执行SRET指令后,返回到原来的主程序步,接着继续执行后续的主程序。
在后述的 FEND 指令后对标记编程。
在子程序内可以允许有 9 次调用指令,整体而言可做10 层嵌套。
调用子程序时,主程序所属的OUT、PLS、PLF、定时器等均保持。
子程序返回时,子程序所属的OUT、PLS、PLF、定时器等均保持。
子程序中不要写脉冲、计数、定时等一个扫描周期内无法完成的指令。
CALL 指令和子程序指针 P 必须要配合使用,否则会报错“不存在的标号类型”。
中断
- 允许中断[EI]
- 禁止中断[DI]
- 中断返回[IRET]
- 中断子程序用指针:In
- 主程序结束指令:FEND
XC系列PLC中断功能分两种:一、外部中断:二、定时中断。
外部中断(IO中断):输入端子X 可以作为外部中断的输入用,每一输入端对应于一个外部中断,输入的上升沿或者下降沿都可触发中断,中断子程序写在主程序之后(FEND 命令之后)。当产生中断后,主程序立即止执行,转而执行相应的中断子程序,等中断子程序执行完成后,再立即返回继续执行主程序。
定时中断:在主程序的执行周期很长的情况下,如果要处理特定的程序;或者在顺控扫描中,需要每隔一段时间执行特定的程序时,定时中断功能非常适用。它可以不受可编程控制器的扫描周期的影响,每隔Nms执行定时中断子程序。
在中断子程序里,只能写简单的置位、复位、传送、运算等可以在一个扫描周期内执行的指令,其他如发脉冲、定时(精确定时除外)、通讯等需要持续执行的指令均不支持。
信捷PLC之传送指令
本文字数: 1.2k 阅读时长 ≈ 10 分钟
| 助记符 | 功能 |
|---|---|
| CMP | 数据比较 |
| ZCP | 数据区间比较 |
| MOV | 传送 |
| BMOV | 数据块传送 |
| PMOV | 数据块传送 |
| FMOV | 多点重复传送 |
| EMOV | 浮点数传送 |
| FWRT | FlashROM 的写入 |
| MSET | 批次置位 |
| ZRST | 批次复位 |
| SWAP | 高低字节交换 |
| XCH | 两个数据交换 |
16位和32位传送指令(MOV,DMOV)
16位传送指令:MOV
32位传送指令:DMOV
将指定软元件中的数据照原样传送到另一个软元件中。
MOV K10 D10:将K10传送到D10,就是把十进制的10赋值给D10。
运算结果以32位输出的应用指令(MUL等)、32位数值或32位软元件的高速计数器当前值等数据的传送,必须使用DMOV指令。
DMOV D0 D10 :将D1和D0中的数据传送到D11和D10中。
数据块传送(BMOV)
将指定的软元件的数据照原样传送到其他软元件中。
BMOV D5 D10 K3
将D5开始的三个字,即D5,D6,D7批量传送到D10开始的三个字,即D10,D11,D12。
注意:使用BMOV指令不要产生数据重叠。
数据块传送(PMOV)
本指令比BOMV效率更高。
PMOV和BMOV使用方法一样。
PMOV D5 D10 K3
16位多点重复传送和32位多点重复传送(FMOV,DFMOV)
16位多点重复传送(FMOV)
FMOV K0 D0 K10:将K0传送至D0~D9,同一数据多点传送指令。
32位多点重复传送(DFMOV)
DFMOV D0 D10 K3:将D0、D1中的内容传送到D10、D11;D12、D13;D14、D15。
浮点数传送(EMOV)
EMOV K3.14 D0:将3.14传送到D0、D1中
EMOV D0 D10:将D0、D1传送到D10、D11
常数K、H被指定为源数据时,自动转换为2进制浮点数。
K500自动二进制浮点化。
FlashROM写入(FWRT)
单字的写入
FWRT D0 FD0:将D0里面的值写入到FD0中
双字的写入
DFWRT D0 FD0:将D0里的数据写入到FD0、FD1
多字的写入
FWRT D0 FD0 K3:将D0D2里的值写入到FD0FD2
批次置位(MSET)、批次复位(ZRST)
将指定范围的位软元件进行置位或复位操作。
MSET M10 M120:整体置位元件M10M120M559
ZRST M500 M559:整体复位位元件M500
ZRST D0 D100:整体复位字元件D0~D100
高低字节交换(SWAP)
将指定寄存器的高8位字节和低8位字节进行交换。
SWAP D10 将D10这个16位寄存器的高8位和低8位交换。
上例中如果将条件X0改为常开或常闭线圈触发,当输入X0为ON时,每个扫描周期都执行一次该指令,所以建议用上升沿或下降沿触发。
交换指令(XCH)
将两个软元件中的数据相互交换。
16位指令
XCH D10 D11:把D10的数据放到D11,D11的数据放到D10
32位指令
DXCH D10 D20:把D10、D11中的数据和D20、D21中的双字数据交换。
信捷PLC之比较指令
本文字数: 298 阅读时长 ≈ 2 分钟
| 助记符 | 指令功能 |
|---|---|
| LD= | 开始(S1)=(S2)时导通 |
| LD> | 开始(S1)>(S2)时导通 |
| LD< | 开始(S1)<(S2)时导通 |
| LD<> | 开始(S1)≠(S2)时导通 |
| LD>= | 开始(S1)≥(S2)时导通 |
| LD<= | 开始(S1)≤(S2)时导通 |
注意:
当源数据的最高位(16位指令:b15,32位:b31)为1时,将该数值作为负数进行比较。
32位计数器的比较,必须以32位指令来进行。若指定16位指令时,会导致程序出错或运算错误。
比较指令。想比较32位数据,把LD改为DLD即可。
使用的指令:LD= K3 C0
当C0的计数达到3时,Y0被置位。
信捷PLC之数据寄存器
本文字数: 750 阅读时长 ≈ 6 分钟
PLC数据存储单位
PLC数据存储单位有:位、字节、字等。位是最小的存储单位,每个位存储一个1位的二进制数据。
位:只能存储0或1状态。
字节:一个字节有8个位。
字:一个字有两个字节。
双字:一个双字有两个字。
寄存器
数据寄存器是用于存储数据的软元件,包括16位(最高位为符号位)、32位(由两个数据寄存器组合,最高位为符号位)两种类型。
16位数据寄存器
一个16位的数据寄存器,其处理的数值范围为K-32,768~K+32,767。
32位数据寄存器
由两个地址相邻的16位数据寄存器组成的32位数据(高字在后,低字在前)
处理的数值范围为K-2,147,483,648~K2,147,483,647。
建议低位采用偶数软元件编号。
位软元件组合寄存器
一般用,16位(由连续的16个位元件组合而成)。
支持组合成字的软元件由X、Y、M、S、T、C。
格式:在软元件前加D,如DM10,表示从M10-M25组成的16位数。
数据寄存器的数据存储范围
位:0-1
字节:无符号:0~255。有符号:-128~127。
字:无符号:0~65535。有符号:-32768~32767。
双字:无符号:0~4294967295,有符号:-2147483648~2147483647。
使用数据寄存器处理数据
数据存储
MOV K100 D0:向D0内写入16位的十进制数100。
DMOV K1000000 D10:向D11和D10内写入32位十进制数1000000。
MOV D0 D10:将D0内数据传送给D10。
读取定时器或计数器
MOV C10 D0:将计数器C10的计数值读取到D0中。
作为定时器或计数器的设定值:
TMR_A T0 D0 D2:T0的定时时间与D0中的数值相等时,T0置位。D2是时基。
CNT HC0 D4:HC0的计数值与D4中的数值相等时,HC0置位。
信捷PLC之计数器
本文字数: 423 阅读时长 ≈ 4 分钟
16位增计数器
16 位二进制增计数器,其有效设定值为 K1~K32,767(十进制常数)。设定值 K0 和 K1 具有相同的
含义,即在第一次计数开始时输出触点就动作。
使用指令:CNT C0 K10,来计数0-10之间的数字,当计数大于等于10时,C0接通。
注意:切断电源,计数器数值清零。
16位减计数器
指令:CNT_D C0 K-10
上面梯形图的含义就是,当C0计数器从0减到-10时,C0接通。
32位增减计数器
计数器计数模式是32 位线性增/减模式(-2,147,483,648 ~+2,147,483,647),当计数器的计数值递增达到最大值 K2,147,483,647 会变成 K-2,147,483,648,当计数器的计数值递减达到最小值K-2,147,483,648 会变成 K2,147,483,647,计数器的 ON/OFF 状态也随计数值的变化而变化。
使用32位增计数器计数到1000000:DCNT C0 K1000000
DCNT_D即为减计数器。
信捷PLC之定时器
本文字数: 394 阅读时长 ≈ 3 分钟
不累计定时器
普通定时器不设专用指令,使用TMR指令进行定时;
采用程序存储器内的常数(K)作为设定值,也可用数据寄存器(D)的内容进行间接指定。
驱动输入断开或停电,定时器复位,输出触点复位。
指令格式:TMR T0 K200 K100
上例计时器的计时时间就是200乘100等于20000ms,也就是20s。
当T0计时器到达设定值的时候,定时器的输出触点动作。
使用定时器T0的常开触点:LD T0
累计定时器
累计定时器有掉电记忆功能。
上面的例子中,计时的时间为10s,在这10s中,X0断开后,再次启动X0,之前累积的时间不会清零。
当X1为1时,HT0被复位。使用的指令是:RST HT0。
定时器应用
小灯闪烁程序
要求: X0接通,小灯Y0亮0.5S,灭0.5S闪烁,断开X0,小灯停止输出。
输出延时关断
要求:按下装料按钮X0,装料电磁阀Y0输出5S的时间,时间到自动断开输出。(装料过程中再次按装料按钮无效)
信捷PLC之位逻辑指令
本文字数: 369 阅读时长 ≈ 3 分钟
常开、常闭、线圈指令
- 常开触点指令:LD X0
操作对象:X、Y、M、S、T、C、Dn.m、FDn.m - 常闭触点指令:LDI X1
操作对象:X、Y、M、S、T、C、Dn.m、FDn.m - 线圈指令:OUT Y0
操作对象:Y、M、S、T、C、Dn.m、FDn.m
上升沿、下降沿指令
- 上升沿指令:LDP X0
当PLC检测到上升沿信号时,保持一个扫描周期的高电平。 - 下降沿指令:LDF X1
当PLC检测到下升沿信号时,保持一个扫描周期的高电平。
置位、复位指令
- 置位指令:SET Y0
操作对象:Y、M、S、T、C、Dn.m - 复位指令:RST Y1
操作对象:Y、M、S、T、C、Dn.m
- 对于同一软元件,SET、RST可多次使用,顺序也可随意,但最后执行者有效。
- 此外,定时器、计数器当前值的复位以及触点复位也可使用RST指令。
- 使用 SET、RST 指令时,避免与 OUT 指令使用同一定义号

信捷PLC之软元件
本文字数: 1.1k 阅读时长 ≈ 9 分钟
输入继电器(X)
用于接收外部的开关量信号,用X表示。
地址分配原则
在基本单元中,以八进制形式表示,例如X0-X7,X10-X17。
在扩展单元中,第一路扩展从X100开始,第二路从X200开始,以此类推。
输出继电器(Y)
用于驱动PLC外部负载的接口,用Y表示。
地址分配原则
在基本单元中,以八进制形式表示,例如Y0-Y7,Y10-Y17。
在扩展单元中,第一路扩展从Y100开始,第二路从Y200开始,以此类推。
辅助继电器(M)
PLC内部的继电器,用M表示。
注意⚠️:辅助继电器有断电保持功能。
地址分配
按照十进制分配地址,例如M0-M9,M10-M19。
状态继电器(S)
步进梯形图使用的继电器,用S表示。
按十进制分配地址。
注意:不作为工序号使用时,与辅助继电器一样,可作为普通的触点/线圈进行编程。另外,可作为信号报警器,用于外部故障。
定时器(T)
达到设定值的时候,输出触点动作。
地址分配
在基本单元中,按照十进制数分配定时器的地址,又根据时钟脉冲、累计与否将地址划分为几块区域。
时间脉冲
定时器的时钟脉冲有1ms、10ms、100ms三种规格,若选用10ms的定时器,则将对10ms的时间脉冲进行加法计算。
累计/不累计
定时器分为累计与不累计两种模式。
累计定时器,定时器线圈的驱动输入断开,仍保持当前值,等驱动输入再次导通时继续累计动作。
而不累计定时器,输入驱动断开就清零。
计数器(C)
内部计数用(一般使用或停电保持)
- 16位计数器:增计数用,计数范围1~32,767
- 32位计数器:增计数用,计数范围1~2,147,483,647
这些计数器供PLC的内部信号使用,其响应速度为一个扫描周期或以上。
高速计数用(停电保持用)
32位计数器:增/减计数用,计数范围-2,147,483,648~+2,147,483,647(单相递增计数,单相增/减计数,AB相计数)分配给特定的输入点。
速计数可以进行频率80kHz以下的计数,而与可编程控制器的扫描周期无关。
地址分配:按十进制编址。
数据寄存器(D)
供存储数据用的软元件,以符号D表示。
地址分配
XC系列PLC的数据寄存器都是16位的(最高位为符号位),将两个寄存器组合可以进行32位(最高位为符号位)的数据处理。
数据寄存器以十进制编址。
注意⚠️:跟其他软元件一样,数据寄存器也有供一般使用和停电保持。
内部扩展寄存器(ED)
用于存储数据。
以十进制进行编址。
注意⚠️⚠️⚠️:该存储区出厂默认都为停电保持使用,其功能主要用于数据的存储,只适合 MOV,BMOV,FMOV 等数据传送的指令。
一个偶数总能表示为两个素数之和
本文字数: 665 阅读时长 ≈ 6 分钟
题目:一个偶数总能表示为两个素数之和
1 | #include <stdio.h> |