一、组态PLC:
打开博图V15软件,新建项目,进行PLC的硬件组态,在CPU的左侧添加CM1241 modbusRTU通讯模块。
二、组态通讯端口
双击CM1241 modbusRTU通讯模块,在下方“RS422/485接口”选项下,点击“端口组态”,右侧设置如下:协议---自由口;操作模式--半双工(RS485)2线制模式;接收线路初始状态--无;波特率--9600、奇偶校验--无、数据位--8位/字符、停止位--1;其余默认;如图1、图2所示:
图1
图2
三、设置CPU系统和时钟存储器
双击CPU,点击“系统和时钟存储器”,点击右侧“启用系统存储器字节”和“启用时钟存储器字节”,用于编程时使用首次扫描位和时钟脉冲;如图3
图3
四、新建读写数据块
新建读写全局数据块DB3、DB5,数据块里新建数据类型为UINT的数组;如图4
图4
五、编写modbusRTU初始化程序
在OB1里,编写modbusRTU初始化程序,点击右侧“通信”--“通信处理器”--“MODBUS(RTU)”--“Modbus_Comm_Load”,拖拽到程序段1中,自动生成背景数据块;
Modbus_Comm_Load模块的引脚说明:
EN--使能端,一直使能;
REQ--只在第一次扫描周期为1,且必须是上升沿触发;
PORT--指定CM1241模块的硬件标识符(标注方法:如图7)
BAUD--指定通讯波特率(9600);
PARITY--指定奇偶校验位(0--无校验)
MB_DB--指向主站生成的背景数据块的MB_DB参数;
输出引脚指定地址即可,如图6
注意:在左侧“程序块”--“系统块”--“程序资源”下拉列表中,双击Modbus_Comm_Load的背景数据块,Modbus_Comm_Load_DB,修改第19行MODE的数值,由默认值修改为16#04;如图8
0=全双工(RS232);
1=全双工(RS422)四线制模式(点对点);
2=全全双工(RS422)四线制模式(多点主站,CM PtP(ET200SP));
3=全全双工(RS422)四线制模式(多点从站,CM PtP(ET200SP));
4=半双工(RS485)二线制模式;
图6
图7
图8
六、编写主站程序(读指令)
在OB1里,编写modbusRTU主站程序,点击右侧“通信”--“通信处理器”--“MODBUS(RTU)”--“Modbus_Master”,拖拽到程序段2中,自动生成背景数据块;
Modbus_Master模块的引脚说明:
EN--使能端,一直使能;
REQ--上升沿触发;
MB_ADDR--从站地址;
MODE--读或写指令(0是读指令,1是写指令);
DATA_ADDR--从站的起始地址(需将从站的地址由16进制转换为10进制,转换成10进制后,数据加1(因为从站地址是从0开始的,而PLC的地址是从1开始的,所以要加1));
DATA_LAN--指定读取的数据长度(即一下读取几个数据);
DATA_PTR--指定读取的数据存放到此数组中;
输出引脚指定地址即可,如图9
图9
图9程序解析:
从站地址:
1000--频率给定(只写);
1001--运行频率(只读);
1002--母线电压(只读);
1003--输出电压(只读);
1004--输出电流(只读);
1001H转成10进制是4097,4097 1=4098;
所以此程序就是用4号功能码读取从站地址为1的从4098(从站从4097)开始的4个数据(运行频率、母线电压、输出电压、输出电流),存放到数据块_1(DB3)的第一个变量的数组里(对应关系是一一对应的,即DB3.DBW0是运行频率,DB3.DBW2是母线电压,DB3.DBW4是输出电压,DB3.DBW6是输出电流),也就是说在上位机或监控里监控时,只要写DB3.DBW0、DB3.DBW2、DB3.DBW4、DB3.DBW6即可;
七、编写主站程序(写指令)
同第六项读指令一样,只是将MODE改为1即可;如图10
图10
图10程序解析:
从站地址:
2000--变频启动停止指令(只写);
2000地址=1:正转运行;
2000地址=2:反转运行;
2000地址=3:正转点动;
2000地址=4:反转点动;
2000地址=5:自由停机;
2000地址=6:减速停机;
2000地址=7:故障复位;
2000H转成10进制是8192,8192 1=8193;
所以此程序就是用4号功能码向从站地址为1的从8193(从站从48192)开始的1个数据写数据(变频器启停控制),存放到数据块_2(DB5)的第一个变量的数组里(对应关系是一一对应的,即DB5.DBW0是启停信号,即DB5.DBW0=1时变频器正转,DB5.DBW0=6时变频器减速停机),也就是说在上位机或监控里写命令时,只要将DB5.DBW0数值写成0~7即可;
八、轮询
当一个CM 1241带很多从站时,或者带一个从站,但是一个从站里需要多次用到读或写指令时,就需要用轮询的方式来读写,不能同时对多个Modbus_Master模块进行读写;
轮询程序如图11~图16
图11
图12
图13
图14
图15
图16
九、运行监控画面:
给定频率32.6Hz
图17
十、停机监控画面
给定频率32.6Hz,停机指令6(减速停机)
图18