找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 4661|回复: 15

S7-1200与变频器进行modbus RTU进行通讯方法

  [复制链接]
  • 打卡等级:常驻代表
  • 打卡总天数:34
  • 打卡月天数:6
  • 打卡总奖励:9027
  • 最近打卡:2025-12-17 23:15:51

2823

主题

541

回帖

2万

积分

管理员

积分
22569
发表于 2019-6-9 19:56:58 | 显示全部楼层 |阅读模式
来源:剑指工控
一、组态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

工控课堂 www.gkket.com

0

主题

179

回帖

443

积分

注册会员

积分
443
发表于 2019-6-12 01:05:57 | 显示全部楼层
激动人心,无法言表!
工控课堂 www.gkket.com

0

主题

106

回帖

373

积分

注册会员

积分
373
发表于 2019-6-13 08:11:32 | 显示全部楼层
绝对干货,楼主给力,支持了!!!
工控课堂 www.gkket.com

0

主题

78

回帖

379

积分

注册会员

积分
379
发表于 2019-6-13 19:19:18 | 显示全部楼层
党的好公民,人民的好公仆。。。
工控课堂 www.gkket.com

0

主题

146

回帖

460

积分

注册会员

积分
460
发表于 2019-6-19 10:52:53 | 显示全部楼层
加油,加油,不要沉下去,我是最热贴
工控课堂 www.gkket.com

0

主题

108

回帖

632

积分

中级会员

积分
632
发表于 2019-6-22 06:37:44 | 显示全部楼层
看了楼主的帖子,不由得精神一振,豁然开朗,牛掰
工控课堂 www.gkket.com

0

主题

51

回帖

62

积分

新手上路

积分
62
QQ
发表于 2025-11-20 21:50:10 | 显示全部楼层
我先占个楼,等下再慢慢看~
工控课堂 www.gkket.com

0

主题

132

回帖

280

积分

注册会员

积分
280
发表于 2025-11-20 22:01:07 | 显示全部楼层
楼主太会说了,字字句句都在理~
工控课堂 www.gkket.com

0

主题

167

回帖

355

积分

注册会员

积分
355
发表于 2025-11-20 22:03:42 | 显示全部楼层
赞同 + 10086,没毛病,完全没毛病
工控课堂 www.gkket.com

0

主题

546

回帖

1736

积分

高级会员

积分
1736
发表于 2025-11-20 22:06:56 | 显示全部楼层
蹲一波同款,有没有姐妹 / 兄弟推荐?
工控课堂 www.gkket.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

QQ|手机版|免责声明|本站介绍|工控课堂 ( 沪ICP备20008691号-1 )

GMT+8, 2025-12-22 19:55 , Processed in 0.380512 second(s), 26 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表