施耐德plc通讯的套路就是三个功能块,ADDM ,READ_VAR,WRITE_VAR,下面分别介绍
1、ADDM
ADDM功能块是地址转换,就是把PLC 的物理地址转换成PLC可识别的地址类型,这句话比较拗口,通俗讲,就是把字符串型变量,转换成ADDRESS 型变量,我们还是看例子
图一 ADDM功能块
如图一,图中红色圆圈内就是一个字符串型变量 '2,1' 第一个数字2表示PLC 的串口2,第二个数字1 表示读取的从站地址,也就是变频器的地址,而此功能块就是把此地址转换成ADDRESS型变量 A1_Add。也许你会有疑问,为什么这么做?我也不知道,此款PLC就是这样,这就是它的套路,对于此种套路,我们只能牢记。在其他PLC特别是日系,一般是通过设置参数的方式实现,也有使用指令的。
还有一点,黄色荧光笔部分的三个黑点,是表示电路相通,而它正是把转换好的地址赋值给下面我们要介绍的功能块。也就是说,读写功能块读取或写入变量的从站地址就是使用变量A1_Add。
2 、WRITE_VAR
此功能块是用于往从站写数据,也就是写入变频器的运行频率。
图二 WRITE_VAR 功能块
这个功能块的信息量就很大了,我们一点点分析
1 看黄色荧光笔部分 Addr,这个就是从站的地址,也就是变频器的地址,它是一个ADDRESS型变量,就是我们在ADDM功能块中转化的,就是图一的那三个黑点,就是连接到此处的,这也是CFC的优点,要用的变量轻松一连,而在FBD或是LD 中,我们就要建立一个中间变量传递一下了。
2 下面三处用荧光笔表示的 就是此功能块的精髓了,它表示往变频器的地址0002开始写入一个WORD型变量,而写的这个数值放在PLC变量Fre里,这就是这个功能块的目的,也是此次通信的目的,执行结果,就是把PLC变量Fre的值,写到了变频器的0002里面。当然,此处我们只写入了一个WORD,其实此功能块是支持一次写入125个的,因为Quantity是一个SINT型变量。Fre是一个数组型变量,当我们要一次写入很多数值的时候,用数组就很方便了。
此处有个知识点,通信只能读取或是写入WORD型变量,而WORD型变量的值只能是正数,当我们要读取或是写入负数的时候,该怎么办呢?大家可以思考一下。
3 右边红色圆圈是功能块的输出,它表示了功能块执行的各种状态,它是标准的PLCopen信号(关于PLCopen以后会详细介绍,今天只介绍与此功能块有关的)
Done 表示功能块执行正常后置为TRUE,此处,我们取它的反信号来监控通信状态,如果超过3S没有Done信号,我们可以认为此次写入失败,那么就代表通信失败。
Busy表示功能块执行情况的输出,如果为高电平,表示功能块正在执行。我们读取它的下降沿,来触发下一次操作。
Error是功能块的错误,可能你会有疑问,为什么通信错误不用这个信号呢?其实这个错误表示的范围更广,它表示功能块检测到错误就报警,有时候,我们通信正常,但是当我们读取的数据有问题,或是参数设置不正确时,也会报错,而我在程序中的错误仅仅是通信不上的错误,也就是,这个Error表示的范围更广泛,它更适合我们调试的时候监控。而我在程序中取的通信错误,是在上位机做监控用的。
3、READ_VAR
读取和写入的功能块完全一样,大家可以尝试自己分析一下。
图三 READ_VAR功能块
4、数据的处理
图四 数据的处理
这段是程序中和我们直接相关的,写入的频率,读取的频率和电流都是用MOVE指令处理,放到指定的变量中,方便我们使用,毕竟通信的最终目的就是交互数据。
总结:这就是施耐德PLC,MODBUS/RTU通信程序的三个功能块,其实本文还有一个目的,那就是我在前面文章指出,初学PLC有一个很大的误区,就是喜欢对着视频或是书本一条条学指令,其实这是错误的,正确的方式是在程序中学习指令,试想,如果你不知道MODBUS通信,没有这个通信例子,干巴巴的学这三个功能块,是很枯燥的,是毫无意义的,你也许心里会有一万匹草泥马奔腾而过,这都是些什么玩意,但是当你根据这个实例,当你面对一个变频器要用通信控制的时候,再去学习这三个指令,是不是很轻松呢?至少,心里有了目的。
设置通讯参数(主要是波特率,校验,地址),并确保PLC和变频器侧参数一致,读取或写入变量的地址,个数以及数据类型(日系PLC不需要这一步,因为它不定义变量),是使用MODBUS基本套路。当你使用不同的PLC时,你的任务就是在软件中找到实现这些功能的地方,就可以完成通信。还有一点注意,不同的厂家,MODBUS接口是不一样的,常见的有DB9 RJ45,还有最简单的螺钉接线。
图五DB9
图六RJ45
如 图五 图六 所示,是常用的MODBUS接线端子,使用时,务必仔细阅读手册,确定 正 负 端子。
在大量使用功能块,而且功能块之间联系比较紧密的场合,使用CFC语言时最佳选择,比如串口通信,运动控制,高速计数等等。而这些场合用梯形图,那酸爽,用过日系PLC 的朋友应该很清楚,写了几个屏幕的程序,还没有进入主题。当然,也可以用ST语言来写,那样逼格简直就是没法形容了,不过对于后期维护很不方便,因为这么多变量,ST语言的可读性会很差,不过,对保护自己的知识产权,到是很不多。因为,要想看懂ST写的这种程序,确实很费劲
(责任编辑:admin) |