首页 上一页 1 2 下一页 尾页

MODBUS RS-485 传输双向传输切换盲点 点击:5735 | 回复:29



IREX

    
  • 精华:10帖
  • 求助:0帖
  • 帖子:225帖 | 318回
  • 年度积分:1
  • 历史总积分:1239
  • 注册:2003年8月04日
发表于:2006-06-12 07:59:00
楼主
MODBUS RS-485 传输 双向传输切换盲点 MODBUS 是采取一问一答的协议, 如果物理层 ( 硬件层 ) 使用 RS-232 或是 RS-422 因为是 “接收” 与 “发送” 分离, 因此一般不会发生传送遗失问题; 但如使用 RS-485 时, 因为是 “接收” 与 “发送” 同在一条传输线上, 因此容易造成资料遗失. 造成资料遗失的问题取决主因是 [ Master发送最后一笔资料后哪时释放发送权 ] 问题 ? 根据标准 MODBUS 规则是等待 四个 传输字符当间格. 举例来说 在 9600,E,8,1 传输率上则必须间格 ( 1.1416ms * 4 ) 既一般说的 4ms 空闲时间. 但; 实际上有一问题; 如果产品定义只是 MODBUS I/O 这 [空闲问题] 可能可以接受, 因为 CPU 可以有很充分时间等待; 若产品是 人机或是PLC 这4ms可能就会有问题, 当然解决方式可以使用双CPU来解决, 既是用一颗CPU专门处理传输问题. 因此许多人机与 PLC 都是以最后一个字符传输完毕来区隔; 事实证明这种传输方式也是有效. 但要让整体传输能缩短空闲时间其实可以在接收MODBUS码五个以内 ( 依句柄不同 ) 既能得知总共会接收多少个码; 因此既可缩短或几乎不需要 空闲时间 . 但不管是双CPU或是单CPU来处理 MODBUS 协议处理, 想要减低传送时间耗损, 我们必须在解析MODBUS协议的工作上充分利用其传输特性. 并避开 ”盲点” . 如下照片, 我们可以用以解说 “盲点” 误区 1. “1”是Slave1回复Master, 在发送最后一笔资料立即Master 既马上回复. 2.是 Master 传送完毕, 被呼叫到的 Slave2 回复状况, 这回复是Slave2 故意延迟一个传送字符时间. 这是已经避开误区的做法, 但避开误区的理论则为如下 : 1.主机 ( 上位机 如 PC / HMI / PLC ) 有许多传输部分处理都是引用高阶内核去写, 常见使用 “C语言” 开发. 在这我先声明不是批评 “C语言 “, 但因为一般上位机很复杂, 如果没有一些功力很难用原生汇编语言来写. 因此 使用者很难自行完全掌握目前工作时序. 2.上位机处理 “传送 / 接收 “ 都是用 “中断” 来处理, 也就是对上位机来说 由其 “传送 / 接收 “ 应件完成的 中断来引发进一步数据处理. 3.由第 ”2” 状况我们可以得知照片 Slave1 回送后 Master 可以马上发送理由. 因为对 Master 而言它确实是完整接收完资料, 其短暂的延时则为其数据处理时间. 4.由第 ”2” 状况我们可以得知照片 Master 送完后 Slave2 必须延时一个字符时间发送理由. 因为对 Master而言它确实是完整发送完资料, 对Slave2而言它确实是完整接收完资料, 但如果Slave2马上将RS485 硬件切入发送模式并开始发送, 对 Master 而言其发送刚结束也正准备离开 “串移中断程序” 此时Master并没放开 RS-485 硬件发送模式, 这时将会引发 “总线冲突” 此冲突会导致 主机 接收硬件第一时序第一个位无预期错误. 但糟糕的是这会引发主机 “接收硬件” 开始工作, 而导致错误. 5.由上 “4” Slave2为了要避开冲突. Slave2 在接收完 Master 后也静空一个 “传送字符时间” 在将 RS-485 由接收转为发送. 上海智国电子 刘永智



莫其麟

  • 精华:14帖
  • 求助:0帖
  • 帖子:120帖 | 5688回
  • 年度积分:0
  • 历史总积分:29157
  • 注册:2004年2月27日
发表于:2006-06-12 12:17:00
1楼
哦,了解了解,谢谢楼主。

yangyfeng

  • 精华:4帖
  • 求助:0帖
  • 帖子:37帖 | 764回
  • 年度积分:0
  • 历史总积分:0
  • 注册:1900年1月01日
发表于:2006-06-12 17:05:00
2楼
不错

王晟磊

  • 精华:12帖
  • 求助:0帖
  • 帖子:70帖 | 687回
  • 年度积分:0
  • 历史总积分:1173
  • 注册:2004年2月11日
发表于:2006-06-13 21:53:00
3楼
刘总讲得很清晰!
目前很多屏和设备,在这个切换时间上有很多问题,造成与标准的MODBUS设备联不上.
大多就是多在这个切换时间上面,我测过好多种产品都有这个问题,收完后马上就发,如果我这边是一个标准的MODBUS设备会有一个死区时间,也就是4个T,这样会造成通信帧头的丢失,为此我们不得不在软件上增加一个设置寄存器,来解决这些问题.
当然很多朋友会问为什么一定要这个死区时间,这主是考虑防止反射回来的自己的数据被误接收.
这在PROFIBUS协议里面要求更为严格,也更长.

budong

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 12回
  • 年度积分:0
  • 历史总积分:69
  • 注册:2004年9月02日
发表于:2006-06-14 23:41:00
4楼
其实也不是什么死区,modbus就那么两种方式,一种判断时间,一种
判断字节数,协议上推荐判断时间为主,但也有很多人判断字节数,完全可以实现。
但在搭配各种产品的时候,就要考虑别人是不是按3.5个字节实现,
要考虑别人的3.5个字节是不是能和你的3.5个字节时间一致,这就
导致你要保证同时只能有一个报文在传输,这样modbus的速度也就
慢了。

一灵

  • 精华:1帖
  • 求助:0帖
  • 帖子:29帖 | 310回
  • 年度积分:0
  • 历史总积分:410
  • 注册:2004年10月22日
发表于:2006-06-15 23:59:00
5楼
好文章,值得顶一下!  谢谢搂主!

王晟磊

  • 精华:12帖
  • 求助:0帖
  • 帖子:70帖 | 687回
  • 年度积分:0
  • 历史总积分:1173
  • 注册:2004年2月11日
发表于:2006-06-18 18:19:00
6楼
理论上,发送完一个帧后,要有4个T的时间不应开接收的.所以称之为死区时间.

西风正急

  • 精华:0帖
  • 求助:0帖
  • 帖子:2帖 | 5回
  • 年度积分:0
  • 历史总积分:81
  • 注册:2005年7月12日
发表于:2006-06-21 09:20:00
7楼
好文章,顶

linac

  • 精华:0帖
  • 求助:0帖
  • 帖子:18帖 | 48回
  • 年度积分:0
  • 历史总积分:312
  • 注册:2002年7月21日
发表于:2006-07-01 00:17:00
8楼
假设等了4个T的时间,从站还没有应答呢? 主站应该设置一个timeout,但是这个timeout多少是合理呢?
如果从站是PLC,这个反应时间应该在几个ms之内,如果从站是一个网关,要从以太网上把数据读过来,延时可能就需要几百ms甚至更长。

请问王工,你们的V80对这个timeout是怎么处理的?

♂长空♂

  • 精华:0帖
  • 求助:0帖
  • 帖子:4帖 | 217回
  • 年度积分:0
  • 历史总积分:290
  • 注册:2006年6月30日
发表于:2006-07-01 13:27:00
9楼
谢谢  晚辈受教了~~~~我要好好看看 

共创美好

  • 精华:1帖
  • 求助:0帖
  • 帖子:70帖 | 1644回
  • 年度积分:0
  • 历史总积分:1957
  • 注册:2006年6月23日
发表于:2006-07-01 19:17:00
10楼
请教楼主  MODBUS RS-485的9针引脚定义,
RS-485只要两根线就够了,
是1#和2#
还是3#和8#

共创美好

  • 精华:1帖
  • 求助:0帖
  • 帖子:70帖 | 1644回
  • 年度积分:0
  • 历史总积分:1957
  • 注册:2006年6月23日
发表于:2006-07-01 19:17:00
11楼
请教楼主  MODBUS RS-485的9针引脚定义,
RS-485只要两根线就够了,
是1#和2#
还是3#和8#

小猫抽烟

  • 精华:0帖
  • 求助:0帖
  • 帖子:2帖 | 3回
  • 年度积分:0
  • 历史总积分:21
  • 注册:2006年10月07日
发表于:2006-07-01 22:17:00
12楼
好,顶一下,目前我刚好要做双CPU挂MODBUS,参考一下

IREX

  • 精华:10帖
  • 求助:0帖
  • 帖子:225帖 | 318回
  • 年度积分:1
  • 历史总积分:1239
  • 注册:2003年8月04日
发表于:2006-07-03 08:27:00
13楼
对 RS-232 而言是用 #2 ( RXD )  #3 ( TXD )  #5 ( GND )
对 RS-485 而言只能说绝大部分是 #1 #2 ; 因为许多厂家对 485 接脚不一定是遵照规范.

王晟磊

  • 精华:12帖
  • 求助:0帖
  • 帖子:70帖 | 687回
  • 年度积分:0
  • 历史总积分:1173
  • 注册:2004年2月11日
发表于:2006-07-05 21:04:00
14楼
linac
不好意思,在西藏,一直没时间回
你理解错TIMEOUT,你说的我称之为死区时间,发送方发送完信息后在这个时间内是不开接收的,主要是为了防止反射和干扰
TIMEOUT是指发送方发送完后,在多少时间内没有收到对方的回答,则认为接收方有问题,并重发或者放弃与接收方的通信去干其它的工作。
TIMEOUT一般与通信的速率相关系,一般默认采用的方式是TB*44+TK
其中TB为每一位的波特率时间,而TK是一个固定的系数,与你的系统相关系,如果你的通信对象是通用型的一般选10MS以上50MS以下。
但大家在做的时侯大多会提供一个寄存器供大家选择。
如果你的系统波特率比较高,可以供用户从100us至10s选择。

linac

  • 精华:0帖
  • 求助:0帖
  • 帖子:18帖 | 48回
  • 年度积分:0
  • 历史总积分:312
  • 注册:2002年7月21日
发表于:2006-07-06 11:52:00
15楼
TB*44就是所谓的4字节的死区时间吧。
TK,你们有提供一个用户定义的寄存器吗?

王晟磊

  • 精华:12帖
  • 求助:0帖
  • 帖子:70帖 | 687回
  • 年度积分:0
  • 历史总积分:1173
  • 注册:2004年2月11日
发表于:2006-08-15 17:24:00
16楼

jiasong

  • 精华:0帖
  • 求助:0帖
  • 帖子:2帖 | 51回
  • 年度积分:0
  • 历史总积分:446
  • 注册:2004年3月09日
发表于:2006-08-20 14:02:00
17楼
刘老板,你的文章,我看不懂,错字太多!

yangyfeng

  • 精华:4帖
  • 求助:0帖
  • 帖子:37帖 | 764回
  • 年度积分:0
  • 历史总积分:0
  • 注册:1900年1月01日
发表于:2006-08-30 14:57:00
18楼
下面引用由jiasong在 2006-8-20 14:02:00 发表的内容:
  刘老板,你的文章,我看不懂,错字太多!
--------------------------------------------------------------------------------------------
就是!!,本来是个简单的问题.

yangyfeng

  • 精华:4帖
  • 求助:0帖
  • 帖子:37帖 | 764回
  • 年度积分:0
  • 历史总积分:0
  • 注册:1900年1月01日
发表于:2006-08-30 15:01:00
19楼
举例来说 在 9600,E,8,1 传输率上则必须间格 ( 1.1416ms * 4 )中的"1.1416ms * 4" 怎么来的?
1/9600*1000=0.10416

活到老,学到老

  • 精华:0帖
  • 求助:0帖
  • 帖子:9帖 | 79回
  • 年度积分:0
  • 历史总积分:175
  • 注册:2005年12月01日
发表于:2007-04-18 11:16:00
20楼
好文章,谢谢楼主

热门招聘
相关主题

官方公众号

智造工程师
    首页 上一页 1 2 下一页 尾页