485通讯控制交流电机应该如何实现?

君莫笑了吧


不请自来

1 首先,你这个说法是错误的,485是不能直接控制交流电机的,一般是通过控制伺服驱动器或是变频器实现的。

悟空规矩,先要来一些废话

2 485通讯简介

3 交流电机简介

4 变频器简介

以上废话共计一万字,大家可以自行查找

通过通讯来实现控制电机,一般有两种方式,一种是通过端子控制启停,通过通讯给定速度。另外一种全部通过通讯实现。如果使用485控制,建议使用前一种。

一般来说,485是一种通讯接口,但是在工控行业,它既可以指通讯接口,也可以指通讯线路,也可以指通讯协议,含义是广泛的。MODBUS是一种非常广泛的通讯协议,最初它是在RS485接口上实现的,所以,现在说到485和MODBUS,意思是一样的。但还是有些许区别的。所有的变频器的485接口都是支持MODBUS协议的,所以,现在说到485一般都是指MODBUS协议。

MODBUS协议,是由美国莫迪康公司提出的一个通信协议,是第一个用于工业现场的通讯协议,它的出现标志着工业控制从模拟量时代向通讯时代迈进。经过几十年的发展,MODBUS已经成为事实上的RS485 通讯标准,广泛应用于DCS,PLC仪器仪表等等,打败众多敌人的正是它的可靠,简单,免费。MODBUS广泛用于对实时性要求不高,传输距离不太远,数据量不太大的场合。你可以尽情的使用,而不用去问为什么,因为它是完全免费的,没人会问你要钱。而它的开发也同样简单,你可以轻易开发出符合MODBUS规范的元器件,和其他厂商的设备交换数据。

正所谓青山依旧在,几度夕阳红。MODBUS就像步兵用的迫击炮一样,虽然简单便宜,甚至那么LOW,但却不动如山的在自动化领域稳如泰山,而开发它的美国莫迪康公司确命途多舛,几易其主,最后归于法国施耐德电气旗下。值得一提的是,莫迪康公司的创始人,正是由PLC之父称呼的迪克莫利先生,而他已经在2017年10月19日去世,是的,有的人死了,他永远活着。

通讯的用途是交互信息,因此,通讯只是手段,能交互信息才是目的,怎样理解MODBUS,我们不妨举个例子,比如你有个朋友住在中央大街1号楼的12号房间,你要告诉他你们晚上20点见面,那么这一串信息就是

01 01 12 20

01 是地址 01 是告诉 12 是房间号 20 是地址。如果换成专业术语,可以表示,往01变频器的12地址 写入12。看下图,这就是MODBUS通讯的标准帧。

1号楼是地址域 告诉 是功能码 也就是写入。数据有两部分组成 房间号和内容,就是往告诉12号房间20点。差错校验是为了防止数据帧在传输过程中出错而设定的,也就是我们常说的偶校验 奇校验 停止位。

MODBUS常用的功能码如下,但用的最多的是03 和16 也就是每次读取或写入一个WORD 也就是16位的数据。

由于MODBUS只定义了应用层,因此可以在多种电气接口上应用,用于网络的MODBUS/TCP 已经成为事实上的工业以太网标准。

随着目前OEM市场竞争的激烈,在不降低设备可靠性的情况下降低成本,已经成为提高竞争力 的关键,而MODBUS就是最好的选择,因为它比用模拟量模块便宜多了

而使用MODBUS通讯,一般是在PLC中编写程序,不同的PLC实现方法是不一样的,需要自行查看手册

各个PLC对MODBUS 的处理不尽相同,但还是有些套路可寻的,今天就一边给大家讲解,一边介绍一下MODBUS通信的套路。

施耐德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写的这种程序,确实很费劲。


分享到:


相關文章: