使用mscomm控件编写基于modbus协议通讯程序的问题(在线等)(100分)

  • 主题发起人 主题发起人 雪球
  • 开始时间 开始时间

雪球

Unregistered / Unconfirmed
GUEST, unregistred user!
不知道大家有没有做过基于modbus通信协议的串口通信
modbus协议分为ASCII码模式和RTU模式两种,我是不是可以用mscomm控件来实现这个通信,如果可以的话,这两种模式对于我使用控件实现功能有什么区别?
如果是RTU模式的话,它是没有起始字符的,而是以3.5个字符时间间隔作为下一个信息包的起始,这在mscomm控件里怎么去处理判别?
 
为什么没人理我?555
 
modbus 的两种工作方式,不是让程序动态对做判断.

而是在开始通讯前由用户指定.
 
我是说如果用的是RTU模式,那用mscomm控件怎么去判定一个信息包的开头
 
这个要你在接收事件里自己写了。

一般我是这样处理的
RTU 用一个过程。

ASCII 用另一个过程

你在选定时,里面加入如:
Mscomm.onReceive := RTUReceiver;
 
前1个字符不要就可以了,一般都不准的,从后2个字符为包头即可,跟控件无关
 
不用考虑这些。Modbus是最简单的协议了。
 
ASCII码模式是要把接收到的ASCII码数据转换为原来的数据吧,即31H 30H转为10?或者我直接用textmode方式接收数据就可以吧。
RTU模式接收到的是十六进制,要用mscomm控件的benarymode(好像拼得不对)就是那个接收二进制的方式接收吧。如果我知道每次传送多说数据的话,直接设定mscomm控件的接收阈值触发接收事件就可以了吗?他每个数据包的开头即2.5个字符时间就不用去管它了吧?
不知道我理解的对不对?
 

Similar threads

回复
0
查看
879
不得闲
回复
0
查看
1K
不得闲
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
后退
顶部