上两个章节我们介绍了Modbus通讯的基本内容和通过串口助手实现变频器通讯控制,今天我们使用三菱FX3G型号的PLC进行通讯控制英威腾变频器。这节内容主要硬件连接、通讯参数说明、PLC程序编写以及现场演示,过程中用到的硬件、软件如下:
三菱FX3G-40MT的PLC一台
威纶通MT6103IP触摸屏一台
英威腾GD200A变频器一台
DC24的开关电源一台
三相异步电机一台
GX-Works2编程软件
硬件连接硬件主要由PLC、触摸屏、变频器、开关电源以及三相电机组成,PLC作为控制器发送通讯指令,触摸屏作为数据输入和显示设备,DC24V电源为触摸屏进行供电,变频器控制电机进行速度调节、正反转控制和运行状态监控,实物连接图如下:

三菱FX3G系列PLC的基本单元没有自带的485接口,所以需要添加扩展的通讯模块,有FX3G-485BD通信板和FX3U-485ADP通信适配器可供使用,这里我们选择485BD通信板。FX3G-485BD板上的的SDA和RDA短接后与变频器的485+端子连接,SDB和RDB短接后与变频器的485-端子连接。PLC与触摸屏通过串口线进行连接,变频器所有的控制都由PLC发送指令来完成,电气原理图如下:

PLC侧与变频器侧都需要设置通讯参数,变频器的通讯参数通过按钮在控制面板进行修改,参数设置与上一节的基本差不多,这里我们把通讯速度波特率调节成38400BPS,这样更快一点。
参数
名称
参数说明
运行指令通道
2:通讯运行指令
频率指令选择
8:MODBUS通讯设定
本机通讯地址
1:站号设定01
波特率
5:38400BPS
数据位校验
3:无校验(N,8,2)forRTU
PLC侧的通讯参数可以两个方式来修改,第一种是通过参数设置面板完成如下:

第二种是通过编写程序完成,往特殊寄存器D8120输出通信数据,通讯数据按照下图的方法进行设置:

根据变频器的通讯参数我们进行如下图的换算,最终得到结果是CA9(16进制),我们只需要把这个数值输入到D8120的特殊寄存器即可完成通讯参数设置。

PLC程序这块我们重点讲述RS指令和CRC校验值的计算。
3.1RS指令介绍
在三菱FX3G系列的PLC中可以完成Modbus通讯的指令有ADPRW、RS和RS2三个指令,其中ADPRW指令必须配FX3U-485-ADP通信适配器才能使用,而它的价格很高性价比很低,相对来讲485BD板的价格很低。RS与RS2指令基本差不多都是无协议通讯指令,连接支持串行通信的设备,可以实现数据的交换通信。此处的无协议你可以理解为发送的数据是最原始格式的,例如Modbus-RTU通讯中,所有的数据都必须转换为RTU格式进行发送。所以在PLC编程中数据转换占有很大一部分。
下图是RS指令的介绍,其中包括发送数据的起始元件以及个数,接受数据的起始元件及个数。


3.2CRC校验码的计算
CRC校验码在FX3U的PLC中有专门计算它的指令CRC,而在FX3G系列的PLC还不支持我们需要自己编程计算,计算过程如下:
载入一个内容为FFFFH的16-bit寄存器(称为CRC寄存器)
将命令信息第一个字节与16-bitCRC寄存器的低次字节进行XOR异或运算,并将结果存回CRC寄存器
将CRC寄存器之内容向右移1bit,最左bit填入0,检查CRC寄存器最低位的值
若CRC寄存器的最低位为0,则重复步骤3;否则将CRC寄存器与A001H进行XOR异或运算
重复步骤3及步骤4,直到CRC寄存器之内容已被右移了8bits。此时,该字节已完成处理对命令信息下一个字节重复重复步骤2至步骤5,直到所有字节皆完成处理,CRC寄存器的最后内容即是CRC值
这块我们以02字节数据为例展示下它的CRC校验码计算过程:
CRC寄存器
FFFF
02
XOR
11111111
00000000
11111111
11111111
00000010
11111101
右移1
A001
XOR
01111111
10100000
11011111
11111110
00000001
11111111
移位2
A001
XOR
01101111
10100000
11001111
11111111
00000001
11111110
移位3
移位4
A001
XOR
01100111
00110011
10100000
10010011
11111111
11111111
00000001
11111110
移位5
移位6
A001
XOR
01001001
00100100
10100000
10000100
11111111
11111111
00000001
11111110
移位7
移位8
A001
XOR
01000010
00100001
10100000
10000001
01111111
00111111
00000001
00111110
CRC
81
3E
上表中黄色背景的是移出位,绿色表示计算结果,02的Modbus-CRC校验码是813EH,如果02数据后面还有字节,只需要把初始值FFFF换成813E继续计算即可,最后得出的结果就是整个指令的校验码。
下图是它的PLC程序编写示意,其中用到了异或指令WXOR、位右移指令SFTR、循环指令ROR→NEXT以及跳转指令CJ,它的计算过程还是很麻烦的,对于初学者或者没有计算机基础的第一次很难理解的。

3.3PLC程序编写
程序开头先设定通讯格式8位数据模式、无奇偶校验、停止位2、波特率是38400(8N238400)。

频率给定程序,PLC开机默认频率是50Hz,将频率数值分高低8位转换为RTU格式。

然后把变频器站号01、功能码写入06、频率给的地址2001、频率数据以及CRC校验码写入到RS指令的数据寄存器中,最后置位发送请求M8122即可发送频率设定命令。后面的正反转控制、状态读取也依次按照这样的格式进行编写。

为了方便我们输入数据以及显示,这块我们使用触摸屏进行操作如下图所示,界面中有设定频率数据框,正反转停止按钮,运行频率、输出电压电流以及运行状态的显示。

下面红色闪烁的是PLC上485BD通讯模块的LED指示灯,一个表示发送状态一个表示接收状态,可以通过其来判断通讯状态。

触摸屏界面显示:

变频器输出电流显示:

25Hz下变频器输出电压显示:

运行频率显示:

通过上图可以看到在变频器的键盘界面上显示的数据与我们在触摸屏看到的是一致的,表明这次的Modbus-RTU通讯变频器成功实现了对其设定频率、正反转控制以及状态监控。下一章节我们将采用Modbus-ASCII的方式继续实现对变频器的控制。