注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

海宏软件的个人主页

用机器解放人的双手

 
 
 

日志

 
 

ModBus协议3.5个字符间隔时长是多少?delphi代码。  

2015-05-02 21:29:05|  分类: 默认分类 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
Modbus 通讯时规定主机发送完一组命令必须间隔3.5个字符再发送下一组新命令,这个3.5字符主要用来告诉其他设备这次命令(数据)已结束,而这个3.5字符的时间间隔采用以下方式计算:
1个字符包括1位起始位、8位数据位(一般情况)、1位校验位(或者没有)、1位停止位(一般情况下)
这样说起来一般情况下1个字符就包括11位
那么3.5个字符就是3.5*11=38.5位
还有比如没有校验位的
1个字符包括1位起始位、8位数据位(一般情况)、1位停止位(一般情况下)
这样说起来一般情况下1个字符就包括10位
那么3.5个字符就是3.5*10=35位

波特率含义是每秒传输的二进制位的个数
比如9600bps,意思就是说每1秒(也就是1000毫秒)传输9600个位,
反过来说传输9600个二进制位需要1000毫秒
那么传输38.5个二进制位需要的时间就是:
38.5/9.6=4.0104167毫秒
MODBUS RTU要求一帧数据起始和结束至少有大于等于3.5个字符的时间
在波特率为9600的情况下,只要大于4.0104167毫秒即可!


function get35ByteTime(ACom:TApdComPort):integer;
var i,j:integer;
begin
    //Modbus 通讯时规定主机发送完一组命令必须间隔3.5个字符再发送下一组新命令
    i:=1 + ACom.DataBits + ACom.StopBits;   //1个字符包括1位起始位、8位数据位、1位停止位
    if ACom.Parity<>pNone then i:=i+1;      //1个校验位,pNone, pOdd, pEven, pMark, pSpace
    result:=((3.5*i)/ACom.Baud)*1000;       //波特率9600时,3.5个字符是4.0104167毫秒
end;

  评论这张
 
阅读(266)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017