FX3u轮训27个压力表程序,思路清晰简洁,备注明确。 程序中只用了一条通讯程序轮训, 全部程序加起来步数622, 实现以下功能: 1:压力表当前数据 2:压力表通讯状态数据 3:压力表错误通讯数据 4:压力表上下限位判断数据 5:对应的压力表故障输出数据 6:查看单周期通讯时间及全周期时间。 程序中压力表数量可实时调整。
首先,这个程序的核心就是一条通讯程序轮训。没错,就一条!轮训27个压力表,所有的功能都靠这条通讯程序搞定。整个程序加起来才622步,算是相当精简了。
FX3u轮训27个压力表程序,思路清晰简洁,备注明确。 程序中只用了一条通讯程序轮训, 全部程序加起来步数622, 实现以下功能: 1:压力表当前数据 2:压力表通讯状态数据 3:压力表错误通讯数据 4:压力表上下限位判断数据 5:对应的压力表故障输出数据 6:查看单周期通讯时间及全周期时间。 程序中压力表数量可实时调整。
先来看看实现的功能:
- 压力表当前数据
- 压力表通讯状态数据
- 压力表错误通讯数据
- 压力表上下限位判断数据
- 对应的压力表故障输出数据
- 查看单周期通讯时间及全周期时间
而且,程序里的压力表数量还可以实时调整,灵活性相当不错。
核心代码分析
LD M8000 OUT M8122这段代码的作用是启动通讯。M8000是PLC的常开触点,M8122是通讯启动信号。简单粗暴,直接启动通讯轮训。
MOV K27 D100这里用MOV指令将常数K27(表示27个压力表)传送到数据寄存器D100中。这个D100就是用来存储压力表数量的,后续的轮训逻辑会根据这个值来决定轮训的次数。
FOR K0 TO D100FOR循环指令,从K0开始,到D100结束,循环次数就是压力表的数量。这个循环是轮训的核心,每次循环都会处理一个压力表的数据。
CALL P100CALL指令调用子程序P100,这个子程序就是处理单个压力表数据的逻辑。每次循环都会调用一次,处理一个压力表。
P100: LD M8122 OUT M8123 MOV D200 D201 CMP D201 K100 OUT Y0 RET子程序P100的逻辑也很简单:
LD M8122和OUT M8123是通讯处理的一部分,确保通讯正常进行。MOV D200 D201将压力表的数据从D200传送到D201。CMP D201 K100比较D201和K100,判断压力是否超过上限。OUT Y0根据比较结果输出故障信号。
轮训时间监控
LD M8000 OUT T0这段代码用来监控单周期通讯时间。M8000是常开触点,T0是定时器,记录每次轮训的时间。
LD T0 OUT D300将定时器T0的值传送到D300,这样就可以在程序中查看单周期通讯时间了。
压力表数量调整
MOV K10 D100如果需要调整压力表数量,直接修改D100的值即可。比如这里将压力表数量改为10,程序会自动调整轮训次数。
总结
这个程序虽然功能不少,但代码非常简洁,核心就是一条通讯程序轮训27个压力表。通过FOR循环和子程序调用,实现了对每个压力表的数据处理。压力表数量可以实时调整,灵活性很高。
代码中的注释也很明确,每个指令的作用都一目了然。如果你也在搞类似的轮训程序,可以参考这个思路,简洁高效,值得一试。