ModBUS协议通讯的应用

时间:2012-06-09来源:网络

(2)回应 如果从设备产生一正常的回应,在回应消息中的功能代码是在查询消息中的功能代码的回应。数据段包括了从设备收集的数据:象寄存器值或状态。如果有错误发生,功能代码将被修改以用于指出回应消息是错误的,同时数据段包含了描述此错误信息的代码。错误检测域允许主设备确认消息内容是否可用。

二、通讯的实现:

1、PLC端设置:

07KT51在出厂时拥有默认设置:该中心单元为从设备,波特率为19200,1位停止位,8位数据位,无校验位。有关数据采集的端口、传输变量的物理地址的计算,功能代码的涵义,校验等等,在AC31说明书上已有了详尽的介绍,在此不复赘述。事实上,由于AC31对MODBUS的封装,使我们的通讯工作变的异常简单,有了通讯参数,调用通讯功能模块,无须进行通讯过程的代码描述。下面是一个取地址的例子:

定义一个输出量O 62.15和内存变量M 232.01的地址为:

O 62.15=4096+(16*62)+15=5103

M 232.01=8192+(16*232)+1=11905

当然,根据AC31提供的地址表进行推算,使过程显得更容易。

2、 工控机的设置:

(1)、进行端口的配置。端口采用MOXA公司生产的Transio 53智能型RS232与RS422/485双向转换器,充分利用其传输速率: 50 bps~ 921.6 Kps带宽,内建终端电阻的特性,保证长达1000米的通讯不受干扰。特别是当 2 个信号在 RS-422/485 端短接在一起时,具有电流过载保护功能;浪涌保护:(25 KV ESD ),光电隔离(2 KV)等特性,为系统长期可靠运行提供了硬件保障。软件利用VB 实现,在VB中通过Timer控件定时引用Mscomm控件实现串口通讯,利用窗体加载事件对其初始化:

Private Sub From_Load( )

Timer1.Enabled=True

Timer1.Interval=500 ‘定时传输间隔为500毫秒

Mscomm1.Commport=1 ‘通讯串口选择Com1

Mscomm1.Settings=”19200,n,8,1” ‘通讯参数设置

Mscomm1.OutBufferSize=0 ‘清除缓冲区

Mscomm1.InputMod=1 ‘采用二进制通讯

End Sub

(2)、Modbus的CRC校验:

使用RTU模式,消息包括了一基于CRC方法的错误检测域。 CRC域是两个字节,包含一16位的二进制值,它由传输设备计算后加入到消息中。接收设备重新计算收到消息的CRC,并与接收到的CRC域中的值比较,如果两值不同,则有误。

CRC校验运算需要对位操作,根据Modbus的相关介绍用VC++做一个动态连接库函数checkCRC。

CRC简单函数如下:

unsigned short CRC16(puchMsg, usDataLen)

unsigned char *puchMsg ; /* 要进行CRC校验的消息 */

unsigned short usDataLen ; /* 消息中字节数 */

unsigned char uchCRCHi = 0xFF ; /* 高CRC字节初始化 */

unsigned char uchCRCLo = 0xFF ; /* 低CRC 字节初始化 */

unsigned uIndex ; /* CRC循环中的索引 */

while (usDataLen——) /* 传输消息缓冲区 */

uIndex = uchCRCHi ︿ *puchMsg++ ; /* 计算CRC */

uchCRCHi = uchCRCLo ︿ auchCRCHi[uIndex} ;

uchCRCLo = auchCRCLo[uIndex] ;

return (uchCRCHi 8 | uchCRCLo) ;

/* CRC 高位字节值表 */

static unsigned char auchCRCHi[] = {

0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0,

0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,

0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0,

0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40,

0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1,

0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41,

0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1,

0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,

0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0,

0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40,

0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1,

0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40,

0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0,

0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40,

0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0,

0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40,

0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0,

0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,

0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0,

0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,

0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0,

0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40,

0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1,

0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,

0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0,

0x80, 0x41, 0x00, 0xC1, 0x81, 0x40

} ;

1 2 3

关键词: ModBUS协议 RTU模式 CRC校验

加入微信
获取电子行业最新资讯
搜索微信公众号:EEPW

或用微信扫描左侧二维码

相关文章

查看电脑版