技术论坛

1200PLC用Modbus RTU通讯

作者 主题
游民

经验值: 72
发帖数: 7
精华帖: 0
主题:【探讨】1200PLC用Modbus RTU通讯
精编帖 推荐帖


只看楼主 只看精华 只看精编 楼主 2020-11-27 15:01:06

1200PLC用Modbus RTU通讯可以既做主站又做从站吗


 
以下网友喜欢您的帖子:

  
重要声明:

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

帖子链接:https://www.ad.siemens.com.cn/club/bbs/post.aspx?a_id=1653538&b_id=50&s_id=0&num=15

版主

经验值: 76199
发帖数: 19143
精华帖: 378
回复:1200PLC用Modbus RTU通讯
精华帖精华帖星级2级 精编帖 推荐帖


只看楼主 只看精华 只看精编 2楼 2020-11-27 23:01:40

说白了还是分身乏术,转变为主站后,无法通知外部通信对象,外部通信对象也无法获知接口什么时候切换的


Zane 注册自动化系统工程师 Always save before download
以下网友喜欢您的帖子:

  
侠圣

经验值: 2159
发帖数: 254
精华帖: 0
回复:1200PLC用Modbus RTU通讯
推荐帖


只看楼主 只看精华 只看精编 3楼 2020-11-28 11:23:54

学习了,最好分开使用,切换来切换去自己都搞神经了。


低头做事,抬头做人!!
以下网友喜欢您的帖子:

  
至圣

经验值: 12543
发帖数: 1843
精华帖: 0
回复:1200PLC用Modbus RTU通讯
推荐帖


只看楼主 只看精华 只看精编 4楼 2020-11-28 12:27:55
以下是引用宝冬在2020-11-27 20:12:26的发言 >1楼

可以是可以,但是这包含了很多约束。实际意义不大。


  • 多个站点PLC当中,首先应该设置某个站点惯常做为默认Master。其它临时Master完成事件写入任务后,要切换回Slave身份。

  • 每个站点都同时具有两个功能模块,一个是负责Master,一个负责slave功能。

  • Master和slave功能的切换,依赖几个标识变量的数值变化。所以这些标识变量数据,都是来自别的站点,它们的即时性和可靠性就至关重要。

  • 为此,Master功能的通信任务UDT中,需要增加一个标识位,它能够表明本次轮询中,当前这个读或写任务是成功还是失败。以此确认数据的可靠性。在此通信数据可靠的基础上,双方的沟通确认机制才能成立。


  • 每个希望成为临时Master的Slave,需要向默认Master发出请求(就是把自身的请求标识变量设置成特定数值,等待主站读取)。并等待默认Master的同意。

  • 默认Master需要在调度每个站点通信完毕后,检查一次这个Slave的请求标识变量。

  • 这样可以回避多个从站都想成为临时主站的冲突问题,默认Master只对当前轮询到的站点应答这种需求。其余的请求阻塞。

  • 如果确认是某个Slave的请求,且当前用户操作策略允许这样做,则通知该Slave同意(向该slave写入数值到特定的同意标识位,这需要在调度模块中有一个优先级判断的调度机制)。同意写入成功后,停止站点调度,Master功能的调度现状被悬挂中止。并把485端口初始化为Slave模式,站点切换到Slave功能模式运行,等待临时Master的完成通知的写入到自己的特定标识变量中。

  • 此时的485网络中没有Master。

  • 在确认默认Master的同意后(这个确认的过程最好要稍加等待),这个Slave切换至Master模式并发送写入。写入成功后,给默认Master发出完成通知,并把自己切换回slave功能。

  • 此时的485网络中也没有Master。

  • 默认Master收到完成通知后(这个确认的过程最好也要稍加等待),把自己从Slave切换回Master模式,并在之前的停止悬挂位置开始继续站点轮询调度。

  • 这种沟通和TCP建立连接一样,也需要三次握手。请求、同意、完成通知。三次握手的意义在于需要两次确认。任何需要考虑特定对方的通信方式,都要有三次握手。

  • 超时情况,默认slave会自复位为slave身份,默认Master会自复位为Master身份。

  • 很重要的是,modbus通信过程的细节,每一次读写成败记录和计数,都要呈现在HMI画面上,让操作员在现场就可以知道底层发生了什么。有助于现场诊断和修复。

  • 通信的切换可能会产生冲突和反射。只要传输和确认机制可靠,站点的身份转换可以很快完成,冲突状况持续很短。有错误没问题,逐渐减少,直至消除就可以了。

  • 默认主站和临时主站,都可以在切换操作的3秒钟之后,强制恢复之前的身份。不管标识位变化正确与否。

  • 最差的状况也就是:在故障情形下,每个站点都把自己切换至slave状态,在几秒钟之间,没有主站,让全网恢复寂静,之后再启动某个主站。这需要完善的站点淘汰和召回机制做为基础。

  • 这种相互通知机制,其它通信有很好的方式,比如UDP。


这种实现,要求modbus通信的模块化和通用化、淘汰和优先级机制,完善的调度机制、过程和错误记录和显示,重启通信等功能,都比较成熟了,可以玩一玩。否则更多是折腾自己。没啥必要,不如用TCP了。


很详细,赞一个。


邮箱 yongquancun@126.com
以下网友喜欢您的帖子:

  
侠圣

经验值: 2853
发帖数: 364
精华帖: 0
回复:1200PLC用Modbus RTU通讯
推荐帖


只看楼主 只看精华 只看精编 5楼 2020-11-29 00:09:15
说的很详细。通讯很麻烦,做的时候多试验。
努力、坚持、平和
以下网友喜欢您的帖子:

  
侠圣

经验值: 3705
发帖数: 556
精华帖: 0
回复:1200PLC用Modbus RTU通讯
推荐帖


只看楼主 只看精华 只看精编 6楼 2020-11-29 00:25:04
 
以下网友喜欢您的帖子:

  
奇侠

经验值: 8877
发帖数: 2002
精华帖: 12
回复:1200PLC用Modbus RTU通讯
推荐帖


只看楼主 只看精华 只看精编 7楼 2020-11-30 09:05:23

安装2个485模块,一个做主一个做从呗


污水处理自控工程师,简称污师。
以下网友喜欢您的帖子:

  
游民

经验值: 90
发帖数: 9
精华帖: 0
回复:1200PLC用Modbus RTU通讯
推荐帖


只看楼主 只看精华 只看精编 8楼 2020-11-30 11:41:41
以下是引用宝冬在2020-11-27 20:12:26的发言 >1楼

可以是可以,但是这包含了很多约束。实际意义不大。


  • 多个站点PLC当中,首先应该设置某个站点惯常做为默认Master。其它临时Master完成事件写入任务后,要切换回Slave身份。

  • 每个站点都同时具有两个功能模块,一个是负责Master,一个负责slave功能。

  • Master和slave功能的切换,依赖几个标识变量的数值变化。所以这些标识变量数据,都是来自别的站点,它们的即时性和可靠性就至关重要。

  • 为此,Master功能的通信任务UDT中,需要增加一个标识位,它能够表明本次轮询中,当前这个读或写任务是成功还是失败。以此确认数据的可靠性。在此通信数据可靠的基础上,双方的沟通确认机制才能成立。


  • 每个希望成为临时Master的Slave,需要向默认Master发出请求(就是把自身的请求标识变量设置成特定数值,等待主站读取)。并等待默认Master的同意。

  • 默认Master需要在调度每个站点通信完毕后,检查一次这个Slave的请求标识变量。

  • 这样可以回避多个从站都想成为临时主站的冲突问题,默认Master只对当前轮询到的站点应答这种需求。其余的请求阻塞。

  • 如果确认是某个Slave的请求,且当前用户操作策略允许这样做,则通知该Slave同意(向该slave写入数值到特定的同意标识位,这需要在调度模块中有一个优先级判断的调度机制)。同意写入成功后,停止站点调度,Master功能的调度现状被悬挂中止。并把485端口初始化为Slave模式,站点切换到Slave功能模式运行,等待临时Master的完成通知的写入到自己的特定标识变量中。

  • 此时的485网络中没有Master。

  • 在确认默认Master的同意后(这个确认的过程最好要稍加等待),这个Slave切换至Master模式并发送写入。写入成功后,给默认Master发出完成通知,并把自己切换回slave功能。

  • 此时的485网络中也没有Master。

  • 默认Master收到完成通知后(这个确认的过程最好也要稍加等待),把自己从Slave切换回Master模式,并在之前的停止悬挂位置开始继续站点轮询调度。

  • 这种沟通和TCP建立连接一样,也需要三次握手。请求、同意、完成通知。三次握手的意义在于需要两次确认。任何需要考虑特定对方的通信方式,都要有三次握手。

  • 超时情况,默认slave会自复位为slave身份,默认Master会自复位为Master身份。

  • 很重要的是,modbus通信过程的细节,每一次读写成败记录和计数,都要呈现在HMI画面上,让操作员在现场就可以知道底层发生了什么。有助于现场诊断和修复。

  • 通信的切换可能会产生冲突和反射。只要传输和确认机制可靠,站点的身份转换可以很快完成,冲突状况持续很短。有错误没问题,逐渐减少,直至消除就可以了。

  • 默认主站和临时主站,都可以在切换操作的3秒钟之后,强制恢复之前的身份。不管标识位变化正确与否。

  • 最差的状况也就是:在故障情形下,每个站点都把自己切换至slave状态,在几秒钟之间,没有主站,让全网恢复寂静,之后再启动某个主站。这需要完善的站点淘汰和召回机制做为基础。

  • 这种相互通知机制,其它通信有很好的方式,比如UDP。


这种实现,要求modbus通信的模块化和通用化、淘汰和优先级机制,完善的调度机制、过程和错误记录和显示,重启通信等功能,都比较成熟了,可以玩一玩。否则更多是折腾自己。没啥必要,不如用TCP了。


点赞,很详细,主要各种异常、可靠性的保证


 
以下网友喜欢您的帖子:

  
至圣

经验值: 18294
发帖数: 2654
精华帖: 14
回复:1200PLC用Modbus RTU通讯


只看楼主 只看精华 只看精编 9楼 2020-11-30 12:00:16

最好还是扩展两个模块,用软件弥补硬件的功能,还是尽量少用


sometimes you have to be your own hero!
以下网友喜欢您的帖子:

  
侠客

经验值: 961
发帖数: 133
精华帖: 0
回复:1200PLC用Modbus RTU通讯
推荐帖


只看楼主 只看精华 只看精编 10楼 2020-11-30 12:06:21

买485模块,不然直接买第三方的网关。配好了程序都不用写的


二蛋
以下网友喜欢您的帖子:

  
侠客

经验值: 976
发帖数: 150
精华帖: 1
回复:1200PLC用Modbus RTU通讯


只看楼主 只看精华 只看精编 11楼 2020-12-01 19:16:50

肯定是可以的,但是需要两个模块,模块之间相互独立,同一个模块做主站或做从站,同一个PLC扩展两个CM1241,一个做主,一个做从即可。


100020100020100020100020v
以下网友喜欢您的帖子:

  
奇侠

经验值: 7359
发帖数: 817
精华帖: 5
回复:1200PLC用Modbus RTU通讯


只看楼主 只看精华 只看精编 12楼 2020-12-02 09:09:37

在实际项目中,同一个通信模块不能既做主站又做从站,增加一个通信模块,也不会有太多成本。


办法总比困难多
以下网友喜欢您的帖子:

  
侠士

经验值: 1180
发帖数: 266
精华帖: 0
回复:1200PLC用Modbus RTU通讯


只看楼主 只看精华 只看精编 13楼 2020-12-02 13:50:01

理论上行的通,实际上没有人会这样做吧。


无闻
以下网友喜欢您的帖子:

  
侠士

经验值: 1253
发帖数: 302
精华帖: 0
回复:1200PLC用Modbus RTU通讯


只看楼主 只看精华 只看精编 14楼 2020-12-02 21:26:16

我现在项目中有一块ET200SP串口模块读仪表数据,是做主站还是从站??


新年新希望
以下网友喜欢您的帖子:

  
至圣

经验值: 45555
发帖数: 19835
精华帖: 3
回复:1200PLC用Modbus RTU通讯


只看楼主 只看精华 只看精编 15楼 2020-12-03 08:45:20
以下是引用WZP985在2020-12-02 21:26:16的发言 >14楼

我现在项目中有一块ET200SP串口模块读仪表数据,是做主站还是从站??

一般来说是作为主站


 
以下网友喜欢您的帖子:

  
侠士

经验值: 1081
发帖数: 202
精华帖: 0
回复:1200PLC用Modbus RTU通讯


只看楼主 只看精华 只看精编 16楼 2021-06-27 22:15:26

建议用两个通讯模块,一个配置配置成主站,一个配置成从站


 
以下网友喜欢您的帖子:

  
  • 上一页
  • 1
  • 下一页
收起
1200PLC用Modbus RTU通讯
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。