今天是:  设为首页 | 加入收藏 | 联系我们 
||||||

技术文档
 
热电偶原理
热电阻原理
资料下载
 
站内搜索
 
关键字:
范 围:
 
热电阻技术文档
 
MODBUS通讯协议及编程

  ModBus通讯协议分为RTU协议和ASCII协议,我公司的多种仪表都采用ModBus RTU通讯协议,如:YD2000智能电力监测仪、巡检表、数显表、光柱数显表等。下面就ModBus RTU协议简要介绍如下:

一、通讯协议

(一)、通讯传送方式
   通讯传送分为独立的信息头,和发送的编码数据。以下的通讯传送方式定义也与MODBUS RTU通讯规约相兼容:

编 码

8位二进制

起始位

1位

数据位

8位

奇偶校验位

1位(偶校验位)

停止位

1位

错误校检

CRC(冗余循环码)

初始结构 = ≥4字节的时间
地址码 = 1 字节
功能码 = 1 字节
数据区 = N 字节
错误校检 = 16位CRC码
结束结构 = ≥4字节的时间


  地址码:地址码为通讯传送的第一个字节。这个字节表明由用户设定地址码的从机将接收由主机发送来的信息。并且每个从机都有具有唯一的地址码,并且响应回送均以各自的地址码开始。主机发送的地址码表明将发送到的从机地址,而从机发送的地址码表明回送的从机地址。

  功能码:通讯传送的第二个字节。ModBus通讯规约定义功能号为1到127。本仪表只利用其中的一部分功能码。作为主机请求发送,通过功能码告诉从机执行什么动作。作为从机响应,从机发送的功能码与从主机发送来的功能码一样,并表明从机已响应主机进行操作。如果从机发送的功能码的最高位为1(比如功能码大与此同时127),则表明从机没有响应操作或发送出错。

  数据区:数据区是根据不同的功能码而不同。数据区可以是实际数值、设置点、主机发送给从机或从机发送给主机的地址。

   CRC码:二字节的错误检测码。

(二)、通讯规约:

   当通讯命令发送至仪器时,符合相应地址码的设备接通讯命令,并除去地址码,读取信息,如果没有出错,则执行相应的任务;然后把执行结果返送给发送者。返送的信息中包括地址码、执行动作的功能码、执行动作后结果的数据以及错误校验码。如果出错就不发送任何信息。

1.信息帧结构

地址码

功能码

数据区

错误校验码

8位

8位

N × 8位

16位

  地址码:地址码是信息帧的第一字节(8位),从0到255。这个字节表明由用户设置地址的从机将接收由主机发送来的信息。每个从机都必须有唯一的地址码,并且只有符合地址码的从机才能响应回送。当从机回送信息时,相当的地址码表明该信息来自于何处。

   功能码:主机发送的功能码告诉从机执行什么任务。表1-1列出的功能码都有具体的含义及操作。

代码

含义

操作

03

读取数据

读取当前寄存器内一个或多个二进制值

06

重置单一寄存器

把设置的二进制值写入单一寄存器

  数据区:数据区包含需要从机执行什么动作或由从机采集的返送信息。这些信息可以是数值、参考地址等等。例如,功能码告诉从机读取寄存器的值,则数据区必需包含要读取寄存器的起始地址及读取长度。对于不同的从机,地址和数据信息都不相同。

  错误校验码:主机或从机可用校验码进行判别接收信息是否出错。有时,由于电子噪声或其它一些干扰,信息在传输过程中会发生细微的变化,错误校验码保证了主机或从机对在传送过程中出错的信息不起作用。这样增加了系统的安全和效率。错误校验采用CRC-16校验方法。

注:信息帧的格式都基本相同:地址码、功能码、数据区和错误校验码。

2.错误校验

   冗余循环码(CRC)包含2个字节,即16位二进制。CRC码由发送设备计算,放置于发送信息的尾部。接收信息的设备再重新计算接收到信息的 CRC码,比较计算得到的CRC码是否与接收到的相符,如果两者不相符,则表明出错。

  CRC码的计算方法是,先预置16位寄存器全为1。再逐步把每8位数据信息进行处理。在进行CRC码计算时只用8位数据位,起始位及停止位,如有奇偶校验位的话也包括奇偶校验位,都不参与CRC码计算。

   在计算CRC码时,8位数据与寄存器的数据相异或,得到的结果向低位移一字节,用0填补最高位。再检查最低位,如果最低位为1,把寄存器的内容与预置数相异或,如果最低位为0,不进行异或运算。

   这个过程一直重复8次。第8次移位后,下一个8位再与现在寄存器的内容相相异或,这个过程与以上一样重复8次。当所有的数据信息处理完后,最后寄存器的内容即为CRC码值。CRC码中的数据发送、接收时低字节在前。

   计算CRC码的步骤为:

  • 预置16位寄存器为十六进制FFFF(即全为1)。称此寄存器为CRC寄存器;

  • 把第一个8位数据与16位CRC寄存器的低位相异或,把结果放于CRC寄存器;

  • 把寄存器的内容右移一位(朝低位),用0填补最高位,检查最低位;

  • 如果最低位为0:重复第3步(再次移位); 如果最低位为1:CRC寄存器与多项式A001(1010 0000 0000 0001)进行异或;

  • 重复步骤3和4,直到右移8次,这样整个8位数据全部进行了处理;

  • 重复步骤2到步骤5,进行下一个8位数据的处理;

  • 最后得到的CRC寄存器即为CRC码。

3.功能码03,读取点和返回值:

  仪表采用Modbus RTU通讯规约,利用通讯命令,可以进行读取点(“保持寄存器”) 或返回值(“输入寄存器” )的操作。保持和输入寄存器都是16位(2字节)值,并且高位在前。这样用于仪表的读取点和返回值都是2字节。一次最多可读取寄存器数是60。由于一些可编程控制器不用功能码03,所以功能码03被用作读取点和返回值。从机响应的命令格式是从机地址、功能码、数据区及CRC码。数据区中的寄存器数据都是每两个字节高字节在前。

4.功能码06,单点保存

  主机利用这条命令把单点数据保存到仪表的存储器。从机也用这个功能码向主机返送信息。

二、编程举例

  下面是一个用VC编写的ModBus RTU通讯的例子

(一)、通讯口设置

DCB dcb;
hCom=CreateFile("COM1",
     GENERIC_READ|GENERIC_WRITE,
     0,
     NULL,
     OPEN_EXISTING,
     0,
     NULL);
if(hCom==INVALID_HANDLE_VALUE)
{
  MessageBox("createfile error,error");
}
BOOL error=SetupComm(hCom,1024,1024);
if(!error)
  MessageBox("setupcomm error");
error=GetCommState(hCom,&dcb);
if(!error)
  MessageBox("getcommstate,error");
dcb.BaudRate=2400;
dcb.ByteSize=8;

dcb.Parity=EVENPARITY;//NOPARITY;
dcb.StopBits=ONESTOPBIT;

error=SetCommState(hCom,&dcb);

(二)、CRC校验码计算

UINT crc
void calccrc(BYTE crcbuf)
{
BYTE i;

crc=crc ^ crcbuf;
for(i=0;i<8;i++)
{
BYTE TT;
TT=crc&1;
crc=crc>>1;
crc=crc&0x7fff;
if (TT==1)
crc=crc^0xa001;
crc=crc&0xffff;
}
}

(三)、数据发送

zxaddr=11;//读取地址为11的巡检表数据
zxnum=10;//读取十个通道的数据

writebuf2[0]=zxaddr;
writebuf2[1]=3;
writebuf2[2]=0;
writebuf2[3]=0;
writebuf2[4]=0;
writebuf2[5]=zxnum;
crc=0xffff;
calccrc(writebuf2[0]);
calccrc(writebuf2[1]);
calccrc(writebuf2[2]);
calccrc(writebuf2[3]);
calccrc(writebuf2[4]);
calccrc(writebuf2[5]);

writebuf2[6]=crc & 0xff;
writebuf2[7]=crc/0x100;
WriteFile(hCom,writebuf2,8,&comnum,NULL);

(四)、数据读取

ReadFile(hCom,writebuf,5+zxnum*2,&comnum,NULL);//读取zxnum个通道数据
可增加错误处理程序,如地址码错误、CRC码错误判断、通讯故障处理等。


 

 
 
相关文档:
4热风炉热电偶和铠装热电偶有什么不同
4热电偶的计算修正法是什么
4热风炉用热电偶和铠装热电偶的区别
4热电偶温度补偿原理及方法
4热风炉专用热电偶和铠装热电偶的区别
4通用热电偶冷端补偿方法
4铠装式热电偶和铠装热电偶的区别是什么
4温度变送器热电偶冷端补偿原理
4多点铠装热电偶和铠装热电偶的区别
4常见热电偶的种类
4单芯铠装热电偶和铠装热电偶的区别
4热电偶的冷端补偿原理是什么
4电热偶和铠装热电偶的区别
4热电偶的种类和工作原理
4电偶和铠装热电偶的区别
4PT100铠装铂电阻和铠装热电阻的区别
4热电偶接线的时候必须使用冷端补偿吗
4热电偶和铠装热电偶的区别
4热电偶的冷端补偿
4铂热电阻和铠装热电阻两种温度仪表的区别是什么
4工业热电阻的性能
4PT100热电阻和铠装热电阻两种温度仪表的区别是什么
4pt100热电阻和ek热电偶的区别
4铂电阻和铠装热电阻两种温度仪表的区别是什么
4金属热电阻传感器是什么
4热电阻温度计和铠装热电阻的区别是什么
4热电阻导线在使用中的故障分析
4铠装热电阻和热电阻温度传感器两种温度仪表的区别
4温度传感器热电阻与热电偶的区别
4工业铂铜热电阻和铠装热电阻的区别
4热电阻的引出线方式是什么
4工业热电阻和铠装热电阻的区别
4热电阻的安装要求和热电阻的安装注意事项是什么
4热电阻的误差
4铠装铂电阻和铠装热电阻两种温度仪表的区别分别是什么
4热电阻的主要种类有哪几种
4隔爆铂电阻和铠装热电阻两种温度仪表的区别是什么
4热电偶和热电阻的之间区别是什么
 
||||||
版权所有:重庆欧德仪表有限公司  地址:重庆市北碚区缙云大道10号   电话:023-68288698, 68280988  
传真:023-86026189  E-mail:kuangyn@163.com 技术支持:网站优化 

渝ICP备09008174号-2