技术论坛

 • 产品分类
 • 咱工程师的故事
 • 培训与认证答疑专区
 • 服务合作伙伴专区

 S7-1214C通过模块扩展CM1241(RS422/485)实现Modbus rtu通讯

返回主题列表
作者 主题
WWCWWC
至圣

经验值: 72837
发帖数: 8224
精华帖: 145
楼主    2020-07-06 14:33:33
主题:S7-1214C通过模块扩展CM1241(RS422/485)实现Modbus rtu通讯 精华帖 

S7-1214C通过模块扩展CM1241(RS422/485)实现Modbus rtu通讯

  近期,因为项目需要在S7-1214C PLC中需要添加一个Modbus rtu通讯口,读取流量仪表及其它第三方仪表的数据。之前,没有做过S7-1200系列的Modbus rtu通讯项目,于是拿出原来做过200 Smart Modbus rtu时的富士温度表,作为验证对象,组态一个以S7-1214C模块扩展的CM1241的Modbus rtu做Modbus rtu通讯验证。

验证硬件:软件:portal V15

1) S7-1214C(订货号:6ES7 214-1AG40-0XB0),RS422/485模块(订货号:6ES7 241-1CH32-0XB0)作为Modbus rtu通讯的接口模块。

2) 为连接到富士温度表实现Modbus rtu通讯,采用西门子DP插头,直接连接到富士仪表端子,其中CM1241侧3+对应富士温度表端子26#,8-对应富士温度表端子25#。

3) 富士温度表订货号:PXF9AEY2-FWM00。

富士温度表通讯参数设置:

1) 设置从站地址:富士温度表地址为5#;参数:参数通道9的761#

2) 设置通讯频率:9600 Pbs;参数:参数通道9的762#;、参数通道9的763#为NONE(无校验)

3) 其它参数暂时不设置。

程序:

1) 组态一个以S7-1214C(DC/DC/DC)为主控的项目,并按项目要求扩展一个通讯模块CM1241 422/485,插入到101槽位,并定义通讯参数(这里均按富士仪表的通讯参数保持一致):

调用系统和时钟存储区:

2) 创建一个数据块DB,用于实现Modbus rtu通讯时的时间交换区域:

创建DB时,在属性中取消“优化的块访问”。

3) 利用创建的系统标志位M1.0,初始化标志位在S7-1200启动的第一个扫描周期,将数值4传送到在“Modbus_Comm_Load.DB”MODE,将工作模式设置为半双工 RS485两线制模式:

4) Modbus rtu通讯口初始化程序:

这里的PORT管脚连接的是CM1241硬件:

5) 利用初始化完成标志位,M2.0传输轮询状态值结果存放在MB6:

从MB6的状态值中,可以看通讯轮询的状态(轮询位置)

6) 试着将富士温度表SV数据写入数据区40003中:

Modbus Master指令:

REQ:指令使能端

MB_ADD:从站地址,按既定的定义,填写从站:5

MODE:=0,读从站数据; = 1,写从站数据(因为要将40003的数据写入温度表,这里填写为1,写数据)

DATA_ADDR:数据寄存器地址,40003 = 富士温度表的SV通讯地址

DATA_LEN:数据的长度,这里是一个字(word)

DATA_PTR:主站存放待写入、发送到从站的数据寄存器地址,DB3对应的地址。

DONE:指令完成标志位,完成后为1,进行时为0.

BUSY:运行状态值

ERROR:指令出错时为1.

STATUS:指令的工作状态,正常时为0.

7) 如果能够顺利执行Modbus_Master指令,则完成标志位M2.2 = 1,将通过逻辑关系下转到第2条Modbus_Master指令:

8) 第2条指令,这里定义为读从站5是PV数据,地址:32001

将读取到的PV数据存放在DB3.DBW2中。

9) 读取从站5的PV数据完成后,返回到第一条写SV指令中:

这样作为一个无限循环的逻辑,实现对从站5的读与写操作。

   将硬件及用户Modbus rtu程序下载到实际的PLC中,连接必须的通讯数据线,我这里因为的验证程序,所以随便找了一条普通的0.5平方导线连接到温度表,连接好温度表电源及K型传感器(导线替代)输入,在线监控:读取到的PV值

上述程序旨在验证Modbus rtu通讯轮询及初始化功能及Modbus_Master指令各管脚的正确填写方式,如果与其它第三方通讯方式是一致的。

上述程序是参考官方例子程序的模板而写的。


WWCWWC
至圣

经验值: 72837
发帖数: 8224
精华帖: 145
1楼    2020-07-06 15:58:28
主题:回复:S7-1214C通过模块扩展CM1241(RS422/485)实现Modbus rtu通讯

关于Modbus_Master指令DATA_PTR管脚的输入写法。

假设我需要读取连续3个字(word)的从站数据,40006、40007、40008,那么在DATA_PTR管脚只能写P#DB3.DBW10.0,如果再写入按DATA_LEN管脚定义的长度单位,指令报错。

错误的写法:P#DB3.DBW10 WORD 3

正确的写法:P#DB3.DBX10.0(第一个位值)。图示:

监控数据:



WWCWWC
至圣

经验值: 72837
发帖数: 8224
精华帖: 145
2楼    2020-07-06 16:09:01
主题:回复:S7-1214C通过模块扩展CM1241(RS422/485)实现Modbus rtu通讯

前几天,有一个网友问假设项目中有3个CM1241,我认为这个轮询还是单独编写各自硬件标设中轮询机制。

因为,我没有这么多CM1241模块测试,也仅仅只能停留在我的认识上。

手机用户20190501411268
游士

经验值: 251
发帖数: 14
精华帖: 0
3楼    2020-07-13 11:09:38
主题:回复:S7-1214C通过模块扩展CM1241(RS422/485)实现Modbus rtu通讯

谢谢,学习了

WWCWWC
至圣

经验值: 72837
发帖数: 8224
精华帖: 145
4楼    2020-07-17 16:44:07
主题:回复:S7-1214C通过模块扩展CM1241(RS422/485)实现Modbus rtu通讯

回复:怂娃

  我之前测试各频率段通讯,还曾经闹出一小段笑话来着。

我是先修改plc侧的通讯频率,下载;然后修改富士侧的通讯频率,退出修改模式为运行,通讯正常,但总体感觉通讯速度并没有理解上的加速,这个我曾经在200 smart也测试过,也知道并不是与通讯频率呈比例关系的。后来索性将plc侧的频率改到9600,富士仪表侧为19200,或者更高的版本,通讯“仍然”有效。

  这时,我感觉不理解了,这个是以往通讯应用中是不可能的事情。

想到了断电后再测试,果然,原来正常的通讯,断电后再上电通讯异常,原来如此。

最后排查的问题是富士温度仪,通讯频率等参数设置后,需要重新上电的操作。

由此,我联想到我曾经的笑话,才让你也这样重新操作一下的。

WWCWWC
至圣

经验值: 72837
发帖数: 8224
精华帖: 145
5楼    2020-07-17 16:48:38
主题:回复:S7-1214C通过模块扩展CM1241(RS422/485)实现Modbus rtu通讯

你如果看到我在这里回复,你可以这样试试。

锁定在plc侧的通讯频率19200,保存后下载,在线,确认通讯频率值

重新设置你的从站仪表,与串口通讯,也设置到19200,确认通讯频率值

然后,断开与串口的连接,改为与plc的连接。

WWCWWC
至圣

经验值: 72837
发帖数: 8224
精华帖: 145
6楼    2020-07-17 16:49:45
主题:回复:S7-1214C通过模块扩展CM1241(RS422/485)实现Modbus rtu通讯

我这里没有你的从站,所以,无法测试。

jaso
游民

经验值: 56
发帖数: 3
精华帖: 0
7楼    2020-07-18 08:28:12
主题:回复:S7-1214C通过模块扩展CM1241(RS422/485)实现Modbus rtu通讯

1200其实不用那么复杂通常情况下mdbus comm直接放在OB100即可不必单独调用时钟Firstscan 同时使用多个cm1241确实应该分开编写轮询相互独立。

WWCWWC
至圣

经验值: 72837
发帖数: 8224
精华帖: 145
8楼    2020-07-18 08:36:17
主题:回复:S7-1214C通过模块扩展CM1241(RS422/485)实现Modbus rtu通讯

modbus_comm初始化指令放在哪里都可以,主要是能够理解初始化操作方法,在OB100或者调用系统标志位“Firstscan ”均可以,目的就是利用一个周期的进程,处理好modbus rtu的初始化操作。

我放在一起的初衷是想归纳一下功能。

在实际项目应用中,我是创建通讯数据块及通讯数据区方式应用与modbus_comm及modbus_master指令各管脚的应用实参。

Zane
至圣

经验值: 78911
发帖数: 19731
精华帖: 383
9楼    2020-07-21 23:18:23
精华帖  主题:回复:S7-1214C通过模块扩展CM1241(RS422/485)实现Modbus rtu通讯

一,MODBUS通信使用优化编程及优化数据完全没有问题,没有任何必要使用非优化编程。

二,COMM_LOAD不仅仅是一个初始化的问题,放在OB100或用首次扫描标志位触发执行可以,但并不是一种合理的方式。

Zane 注册自动化系统工程师 Always save before download
WWCWWC
至圣

经验值: 72837
发帖数: 8224
精华帖: 145
10楼    2020-07-22 09:16:31
主题:回复:S7-1214C通过模块扩展CM1241(RS422/485)实现Modbus rtu通讯

@Z版:

  请说说更加合理的COMM_LOAD初始方法,谢谢。

WWCWWC
至圣

经验值: 72837
发帖数: 8224
精华帖: 145
12楼    2020-07-22 15:10:34
主题:回复:S7-1214C通过模块扩展CM1241(RS422/485)实现Modbus rtu通讯

可以的。

  主要是因为对定义的变量单位,拆分到位时的那个黄色字体的担心,虽然我实际测试过黄色字体应用的变量有报警,但是可以使用,基于这个才取消了优化访问。

  说到底,还是我熟悉过程了。多应用几次会熟悉的。


yming
至圣

经验值: 130792
发帖数: 22341
精华帖: 846
13楼    2020-07-22 17:39:37
主题:回复:S7-1214C通过模块扩展CM1241(RS422/485)实现Modbus rtu通讯

黄色警告?

优化的变量拆分到字、字节、位都是可以的,不应出警告的。

学而时习之,不亦说乎?温故而知新,不亦乐乎?
Zane
至圣

经验值: 78911
发帖数: 19731
精华帖: 383
17楼    2020-07-22 23:00:26
主题:回复:S7-1214C通过模块扩展CM1241(RS422/485)实现Modbus rtu通讯

关于通信使用优化数据的说明




Zane 注册自动化系统工程师 Always save before download
WWCWWC
至圣

经验值: 72837
发帖数: 8224
精华帖: 145
18楼    2020-07-23 08:03:20
主题:回复:S7-1214C通过模块扩展CM1241(RS422/485)实现Modbus rtu通讯

已经养成了一个不好的习惯,就是没有提前准备所需要的变量及数据类型。改来改去怕麻烦,就用绝对地址了。

熟悉了,习惯了会改善的。


yming
至圣

经验值: 130792
发帖数: 22341
精华帖: 846
19楼    2020-07-23 09:12:16
主题:回复:S7-1214C通过模块扩展CM1241(RS422/485)实现Modbus rtu通讯

很早以前,看见过ZANE版主编程。都是用EXCEL配置数据,而不是直接用TIA。

学而时习之,不亦说乎?温故而知新,不亦乐乎?
WWCWWC
至圣

经验值: 72837
发帖数: 8224
精华帖: 145
20楼    2020-07-23 09:18:55
主题:回复:S7-1214C通过模块扩展CM1241(RS422/485)实现Modbus rtu通讯

是的,主要还是习惯问题。

   无论是哪种方式,先定义后使用看来是必须要习惯起来的习惯,感谢您的指正。

WOWUWUWU
至圣

经验值: 10814
发帖数: 1820
精华帖: 0
21楼    2020-07-30 16:25:49
主题:回复:S7-1214C通过模块扩展CM1241(RS422/485)实现Modbus rtu通讯

谢谢分享,值得学习。

我家牛
奇侠

经验值: 9093
发帖数: 2334
精华帖: 30
22楼    2020-07-31 08:53:37
主题:回复:S7-1214C通过模块扩展CM1241(RS422/485)实现Modbus rtu通讯

错误的写法:P#DB3.DBW10 WORD 3???

您试试,把数据块取消“优化访问”。

学习ing!学习!
WWCWWC
至圣

经验值: 72837
发帖数: 8224
精华帖: 145
23楼    2020-07-31 09:15:34
主题:回复:S7-1214C通过模块扩展CM1241(RS422/485)实现Modbus rtu通讯

,正如11楼y侠所说的那样,不取消优化访问才是tia软件推荐的。

解渴小西瓜
游侠

经验值: 390
发帖数: 56
精华帖: 0
24楼    2020-07-31 16:08:35
主题:回复:S7-1214C通过模块扩展CM1241(RS422/485)实现Modbus rtu通讯


为什么官方帮助文档让用非优化啊?

hy_12306
奇侠

经验值: 6429
发帖数: 709
精华帖: 19
40楼    2020-12-16 07:01:51
主题:回复:S7-1214C通过模块扩展CM1241(RS422/485)实现Modbus rtu通讯

一直使用优化,不用绝对地址,改东西也方便。3个1241,各自轮询18台设备。无异常

您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。