搜索
bottom↓
回复: 8

初学MODBUS的几点疑问,需要高手们给解决一下,不胜感激

[复制链接]

出0入0汤圆

发表于 2009-7-21 22:12:07 | 显示全部楼层 |阅读模式
几个基本的问题希望不要见笑:
1.MODBUS协议里强调的是至少大于3.5个字符时间停顿时间计算:(1/BPS)*(3.5*8)是这样算吧?另外在程序中如何实现?
2.在功能代码中的线圈和寄存器都是指的什么啊?继电器?

3.协议中RTU模式的数据结构是

    起始位          设备地址         功能码          数据区         错误校验          结束符

T1-T2-T3-T4        1 个字节        1 个字节       多个字节         2 个字节        T1-T2-T3-T4

这个起始位T1-T4就是3.5个字符时间停顿时间?而设备地址是第一个无数据即receBuf【0】;而receBuf【1】就是功能码,记如下程序所写?这样理解对吗?

//检查uart1数据
void checkComm1Modbus(void)
{
        uint16 crcData;
        uint16 tempData;
       
        if(receCount > 4)           
        {
                switch(receBuf[1])     //MODBUS功能代码第二个字节  ?//设备地址?

那么在程序中的receCount > 4这个4是如何计算的呢?

void uart1_rx_isr(void)     //receCount 在此出现======》串口接收中断

{
        uint8 status;
       
//uart has received a character in UDR
        status = UCSR1A;
    receBuf[receCount] = UDR1;     //receCount接受字节个数
       
    if(status & 0x1c)              //通信出错   查看UCSRA寄存器便知0x1c全是通信出错
             checkoutError = 2;               //偶校验出错

          //testRegister = status;                 
    receCount++;                             //接收地址偏移寄存器加1
    receCount &= 0x1f;                  //最多一次只能接收32个字节
    receTimeOut = 10;                   //通讯超时值
}

这个程序还有一个疑问就是   receTimeOut = 10;                   //通讯超时值这个10是如何得出的呢?根据波特率不同选择?

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

发表于 2009-7-21 22:37:48 | 显示全部楼层
1.3.5个字符是标准的要求间隔时间,可以用定时器来实现。
2.线圈通常是指开出,寄存器有输入寄存器,也有保持型寄存器,读输入寄存器 (0x04)  读保持寄存器 (0x03)  。
3.你的程序看不懂。

出0入0汤圆

发表于 2009-7-21 22:40:36 | 显示全部楼层
看看

出0入0汤圆

发表于 2009-7-22 09:22:37 | 显示全部楼层
一个线圈就是一个bit。寄存器就是类同mcu的寄存器,modbus所指的寄存器是16bit的

出0入0汤圆

 楼主| 发表于 2009-7-23 21:43:56 | 显示全部楼层
谢谢大家,最近一直在调试,但是还是很不明白,在modbus调试助手中我已经能读出数据,但是只能读出12位多了就是通信错误,写就是通信超时,这又是咋了呢?这个写数据位数和读数据位数都是怎么定义的呢?在在程序中?

出0入0汤圆

发表于 2010-5-1 20:42:21 | 显示全部楼层
新手 恳切 求助呀

出0入0汤圆

发表于 2013-3-13 16:05:31 | 显示全部楼层
很好的帖子,可惜没有高手回答,我也是有同样的疑惑呀!!

出0入0汤圆

发表于 2013-3-18 21:27:28 | 显示全部楼层
不懂,路过!!

出0入0汤圆

发表于 2013-4-11 19:13:32 | 显示全部楼层
MODBUS  协议有3中,RTU,是一种,主要跟PLC通讯的,读写指令有专门定义,如:03 ,06,10等。可以用CRC工具调试。我们公司的看板产品就是用标准的MODBUS-RTU协议。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-24 03:29

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表