隧道亮度检测仪说明及MODBUS通讯设置.docx

上传人:b****4 文档编号:5461602 上传时间:2022-12-16 格式:DOCX 页数:17 大小:396.33KB
下载 相关 举报
隧道亮度检测仪说明及MODBUS通讯设置.docx_第1页
第1页 / 共17页
隧道亮度检测仪说明及MODBUS通讯设置.docx_第2页
第2页 / 共17页
隧道亮度检测仪说明及MODBUS通讯设置.docx_第3页
第3页 / 共17页
隧道亮度检测仪说明及MODBUS通讯设置.docx_第4页
第4页 / 共17页
隧道亮度检测仪说明及MODBUS通讯设置.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

隧道亮度检测仪说明及MODBUS通讯设置.docx

《隧道亮度检测仪说明及MODBUS通讯设置.docx》由会员分享,可在线阅读,更多相关《隧道亮度检测仪说明及MODBUS通讯设置.docx(17页珍藏版)》请在冰豆网上搜索。

隧道亮度检测仪说明及MODBUS通讯设置.docx

隧道亮度检测仪说明及MODBUS通讯设置

 

隧道亮度检测仪

TunnelBringhtnessDetector

 

1、安装示意图

隧道亮度为一体式传感器,无任何移动部件。

安装位置要求车行方向,离洞口一个行车视距(见下图)位置处,高度以一个洞门为宜,检测器探测方向应指向洞口外路面。

 

晴天≥3000cd/m2云天≥1500cd/m2阴天≥750cd/m2重阴天≥350cd/m2

 

 

 

5、面板组成

2、面板组成

 

(1)五位数码管显示数值;

(2)2个按键:

设定按键SET和调节按键REG,查看和设置报警点;

(3)电源接口:

220VAC,50Hz;

(4)电源指示灯:

指示电源是否正常;

(5)短路保护:

1A熔断保险

(6)电源开关:

打开/关闭仪器电源;

(7)信号接口:

两路报警开关量输出JD1和JD2,

一路RS485数字输出口

一路模拟量4-20mA输出。

3、设置报警值

(1)正常工作时,数码管实时测量值;

(2)按键用于查看和设置报警值;

(3)工作状态下,短按REG查看报警设定值,3秒后显示实测值;

(4)工作状态下,长按SET键(长按2秒以上,直至听到嘀音)进入报警值设定:

●数码管共有5位,从左至右依次为1、2、3、4、5,首先第5位数码管闪烁;如图最后个2不停闪烁;

●通过REG按键循环数值0-9;

●通过SET按键循环数码位5-1;

●设定好报警值后,长按SET键(长按2秒以上,直至听到嘀声音),保存报警值;

●每次按键均有声音提示,表示按键操作成功;

●设置的报警值,在下次开机后生效;

 

4、电流转换参数对照表

模拟量输出

隧道照度传感器模拟量输

出为4-20毫安电流,阻抗不超过

500欧姆,电流与照度呈线性关系

5、隧道亮度检测仪技术参数

型号

HY-CDP22

测试范围

0-7000cd/m2

测量角度

垂直≥20º水平≥20º

测试精度

1%-5%

环境温度

-40℃---65℃

环境湿度

0-100%RH(无冷凝)

数值显示

LCD实时显示

通信接口

一路4-20mA,最大阻抗500欧姆

一路数字量RS485输出

两路继电器输出:

故障报警、量程报警

供电电压

220V50HZ

功耗

≤5W

防护等级

IP66

安装方式

立柱安装

整机重量

3KG

MODBUS协议-RTU模式

一、通讯端口定义

起始位

1bit

数据位

8bit

奇偶校验位

EVEN

停止位

1bit

波特率

9600

二、通讯方式

仪器与外部设备通讯方式为RS485或RS232,默认通讯方式为RS485。

三、通讯协议

MODBUS协议-RTU模式。

四、协议简介

MODBUS是一个请求/应答协议,并且提供功能码规定的服务。

MODBUS功能码是MODBUS请求/应答PDU的元素。

它是一项应用层报文传输协议,用于在通过不同类型的总线或网络连接的设备之间的客户机/服务器通信。

图1

 

五、协议描述

MODBUS协议定义了一个与基础通信层无关的简单协议数据单元(PDU)。

特定总线或网络上的MODBUS协议映射能够在应用数据单元(ADU)上引入一些附加域。

图2.通用MODBUS帧

MODBUS有两种传输模式,RTU和ASCII。

本仪器采用RTU传输模式。

(一)RTU传输模式

当设备使用RTU(RemoteTerminalUnit)模式在Modbus串行链路通信,报文中每个8位字节含有两个4位十六进制字符。

这种模式的主要优点是较高的数据密度,在相同的波特率下比ASCII模式有更高的吞吐率。

每个报文必须以连续的字符流传送。

●RTU模式串行位系列

图3.RTU模式串行位序列

●ModbusRTU报文帧

图4.ASCII报文帧

●CRC校验

在RTU模式包含一个对全部报文内容执行的,基于循环冗余校验

(CRC-CyclicalRedundancyChecking)算法的错误检验域。

CRC域检验整个报文的内容。

不管报文有无奇偶校验,均执行此检验。

CRC包含由两个8位字节组成的一个16位值。

CRC域作为报文的最后的域附加在报文之后。

计算后,首先附加低字节,然后是高字节。

CRC高字节为报文发送的最后一个子节。

附加在报文后面的CRC的值由发送设备计算。

接收设备在接收报文时重新计算CRC的值,并将计算结果于实际接收到的CRC值相比较。

如果两个值不相等,则为错误。

附录含有CRC生成的详细示例。

(二)MODBUS通讯模型

图5.MODBUS事务处理(无差错)

图5中,此处的客户机指的就是要查询仪器信息的主机。

而服务器就是仪器。

图6.MODBUS事务处理(异常响应)

数据编码

MODBUS使用一个”big-Endian”表示地址和数据项。

这意味着当发射多个字节时,首先发送最高有效位。

例如:

寄存器大小值

16bit

0x1234

发送的第一字节为0x12然后0x34

注:

具体MODBUS协议,请参照MODBUS标准。

 

(三)本仪器协议支持

●支持的功能码

数据访问

字长

功能码

描述

16bit

03

内部寄存器读出

写单个线圈

16bit

05

雨刮继电器(仅照度仪)

●仪器内部寄存器描述

本仪器有一个量可供读取:

cd/lux(照度或亮度)。

内部用2个寄存器表示这个量。

寄存器

字长

值数据类型

值定义

值范围

寄存器1

16bit

32bit浮点型

CD/LUX

0至7000cd/㎡

0至20000Lux

寄存器2

16bit

●32bit浮点型存储方式

D3

D2

D1

D0

高字节

低字节

●寄存器中存储方式

数值定义

寄存器

Bit

字节位置

CD/LUX

寄存器1-高字节

8bit

D1

寄存器1-低字节

8bit

D0

寄存器2-高字节

8bit

D3

寄存器2-低字节

8bit

D2

●功能码(0x03)描述-读保持寄存器

在一个远程设备中,使用该功能码读取保持寄存器连续块的内容。

请求PDU说明了起始寄存器地址和寄存器数量。

从零地址开始寻址寄存器。

因此,寻址寄存器1-3对应地址为0-2。

将响应报文中的寄存器数据分成每个寄存器有两字节,在每个字节中直接地调整二进制内容。

对于每个寄存器,第一个字节包括高位比特,并且第二个字节包括低位比特。

请求

功能码

1个字节

0x03

起始地址

2个字节

0x0000至0x0002

寄存器数量

2个字节

1至3

响应

功能码

1个字节

0x03

字节数

1个字节

N*2

寄存器值

N*2个字节

注:

N表示寄存器个数

错误

差错码

1个字节

0x83

异常码

1个字节

01或02或03或04

 

例:

读取内部2个寄存器的实例

请求

响应

域名

(十六进制)

域名

(十六进制)

功能码

03

功能码

03

起始地址-高字节

00

字节数

04

起始地址-低字节

00

寄存器1值-高字节

EB

读取数量-高字节

00

寄存器1值-低字节

85

读取数量-低字节

02

寄存器2值-高字节

40

寄存器2值-低字节

51

如上,实际通讯系列为:

Ø请求系列:

(HEX)010300000002C40B

Ø应答系列:

(HEX)010304EB8540512E02

●浮点型解析

D3

D2

D1

D0

寄存器2高字节

寄存器2低字节

寄存器1高字节

寄存器1低字节

40

51

EB

85

高字节

低字节

转换为浮点数后,值为:

3.28

功能码(0x05)描述-写单个线圈(雨刮继电器)

内部雨刮器继电器操作:

地址为0x0000

0xff00打开继电器

0x0000关闭继电器(不支持,因为雨刮器有延时自动关闭功能。

请求

功能码

1个字节

0x05

输出地址

2个字节

0x0000至0x0000

输出值

2个字节

0xff00或0x0000

响应

功能码

1个字节

0x05

输出地址

2个字节

0x0000至0x0000

输出值

2个字节

0xff00或0x0000

错误

差错码

1个字节

0x85

异常码

1个字节

01或02或03或04

 

例:

请求

响应

域名

(十六进制)

域名

(十六进制)

功能码

05

功能码

05

输出地址-高字节

00

输出地址-高字节

00

输出地址-低字节

00

输出地址-低字节

00

输出值-高字节

FF

输出值-高字节

FF

输出值-低字节

00

输出值-低字节

00

如上,实际通讯系列为:

Ø请求系列:

(HEX)01050000FF008C3A

Ø应答系列:

(HEX)01050000FF008C3A

附录1.-CRC的生成

循环冗余校验(CRC)域为两个字节,包含一个二进制16位值。

附加在报文后面的CRC的值由发送设备计算。

接收设备在接收报文时重新计算CRC的值,并将计算结果于实际接收到的CRC值相比较。

如果两个值不相等,则为错误。

CRC的计算,开始对一个16位寄存器预装全1.然后将报文中的连续的8位子节对其进行后续的计算。

只有字符中的8个数据位参与生成CRC的运算,起始位,停止位和校验位不参与CRC计算。

CRC的生成过程中,每个8–位字符与寄存器中的值异或。

然后结果向最低有效位(LSB)方向移动(Shift)1位,而最高有效位(MSB)位置充零。

然后提取并检查LSB:

如果LSB为1,则寄存器中的值与一个固定的预置值异或;如果LSB为0,则不进行异或操作。

这个过程将重复直到执行完8次移位。

完成最后一次(第8次)移位及相关操作后,下一个8位字节与寄存器的当前值异或,然后又同上面描述过的一样重复8次。

当所有报文中子节都运算之后得到的寄存器中的最终值,就是CRC.

生成CRC的过程为:

1.将一个16位寄存器装入十六进制FFFF(全1).将之称作CRC寄存器.

2.将报文的第一个8位字节与16位CRC寄存器的低字节异或,结果置于CRC寄存器.

3.将CRC寄存器右移1位(向LSB方向),MSB充零.提取并检测LSB.

4.(如果LSB为0):

重复步骤3(另一次移位).

(如果LSB为1):

对CRC寄存器异或多项式值0xA001(1010000000000001).

5.重复步骤3和4,直到完成8次移位。

当做完此操作后,将完成对8位字节的完整操作。

6.对报文中的下一个字节重复步骤2到5,继续此操作直至所有报文被处理完毕。

7.CRC寄存器中的最终内容为CRC值.

8.当放置CRC值于报文时,如下面描述的那样,高低字节必须交换。

将CRC放置于报文

当16位CRC(2个8位字节)在报文中传送时,低位字节首先发送,然后是高位字节。

例如,如果CRC值为十六进制1241(0001001001000001):

执行CRC生成的C语言的函数在下面示出。

所有的可能的CRC值都被预装在两个数组中,当计算报文内容时可以简单的索引即可。

一个数组含有16位CRC域的所有256个可能的高位字节,另一个数组含有地位字节的值。

这种索引访问CRC的方式提供了比对报文缓冲区的每个新字符都计算新的CRC更快的方法。

注意:

此函数内部执行高/低CRC字节的交换。

此函数返回的是已经经过交换的CRC值。

也就是说,从该函数返回的CRC值可以直接放置于报文用于发送。

(低字节首先发送,接着发送高字节)

函数使用两个参数:

unsignedchar*puchMsg;指向含有用于生成CRC的二进制数据报文缓冲区的指针

unsignedshortusDataLen;报文缓冲区的字节数.

CRC生成函数

unsignedshortCRC16(puchMsg,usDataLen)/*函数以unsignedshort类型返回CRC*/

unsignedchar*puchMsg;/*用于计算CRC的报文*/

unsignedshortusDataLen;/*报文中的字节数*/

{

unsignedcharuchCRCHi=0xFF;/*CRC的高字节初始化*/

unsignedcharuchCRCLo=0xFF;/*CRC的低字节初始化*/

unsigneduIndex;/*CRC查询表索引*/

while(usDataLen--)/*完成整个报文缓冲区*/

{

uIndex=uchCRCLo^*puchMsg++;/*计算CRC*/

uchCRCLo=uchCRCHi^auchCRCHi[uIndex];

uchCRCHi=auchCRCLo[uIndex];

}

return(uchCRCHi<<8|uchCRCLo);

}

高字节表

/*高位字节的CRC值*/

staticunsignedcharauchCRCHi[]=

{

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

};

低字节表

/*低位字节的CRC值*/

staticcharauchCRCLo[]=

{

0x00,0xC0,0xC1,0x01,0xC3,0x03,0x02,0xC2,0xC6,0x06,0x07,0xC7,0x05,0xC5,0xC4,0x04,0xCC,0x0C,0x0D,0xCD,0x0F,0xCF,0xCE,0x0E,0x0A,0xCA,0xCB,0x0B,0xC9,0x09,0x08,0xC8,0xD8,0x18,0x19,0xD9,0x1B,0xDB,0xDA,0x1A,0x1E,0xDE,

0xDF,0x1F,0xDD,

0x1D,0x1C,0xDC,0x14,0xD4,0xD5,0x15,0xD7,0x17,0x16,0xD6,0xD2,0x12,0x13,0xD3,

0x11,0xD1,0xD0,0x10,0xF0,0x30,0x31,0xF1,0x33,0xF3,0xF2,0x32,0x36,0xF6,0xF7,

0x37,0xF5,0x35,0x34,0xF4,0x3C,0xFC,0xFD,0x3D,0xFF,0x3F,0x3E,0xFE,0xFA,0x3A,

0x3B,0xFB,0x39,0xF9,0xF8,0x38,0x28,0xE8,0xE9,0x29,0xEB,0x2B,0x2A,0xEA,0xEE,

0x2E,0x2F,0xEF,0x2D,0xED,0xEC,0x2C,0xE4,0x24,0x25,0xE5,0x27,0xE7,0xE6,0x26,

0x22,0xE2,0xE3,0x23,0xE1,0x21,0x20,0xE0,0xA0,0x60,0x61,0xA1,0x63,0xA3,0xA2,

0x62,0x66,0xA6,0xA7,0x67,0xA5,0x65,0x64,0xA4,0x6C,0xAC,0xAD,0x6D,0xAF,0x6F,

0x6E,0xAE,0xAA,0x6A,0x6B,0xAB,0x69,0xA9,0xA8,0x68,0x78,0xB8,0xB9,0x79,0xBB,

0x7B,0x7A,0xBA,0xBE,0x7E,0x7F,0xBF,0x7D,0xBD,0xBC,0x7C,0xB4,0x74,0x75,0xB5,

0x77,0xB7,0xB6,0x76,0x72,0xB2,0xB3,0x73,0xB1,0x71,0x70,0xB0,0x50,0x90,0x91,

0x51,0x93,0x53,0x52,0x92,0x96,0x56,0x57,0x97,0x55,0x95,0x94,0x54,0x9C,0x5C,

0x5D,0x9D,0x5F,0x9F,0x9E,0x5E,0x5A,0x9A,0x9B,0x5B,0x99,0x59,0x58,0x98,0x88,

0x48,0x49,0x89,0x4B,0x8B,0x8A,0x4A,0x4E,0x8E,0x8F,0x4F,0x8D,0x4D,0x4C,0x8C,

0x44,0x84,0x85,0x45,0x87,0x47,0x46,0x86,0x82,0x42,0x43,0x83,0x41,0x81,0x80,0x40

};

附录2.4个字节转换为浮点数。

(基于C语言)

union//共用体

{

floatTestData_Float;//浮点数(4个字节)

unsignedcharTestArray[4];//数值

}TData;

注:

在共用体中,上例中的浮点数和四个字节的字符数组共用一段存储空间。

解析:

D3

D2

D1

D0

寄存器2高字节

寄存器2低字节

寄存器1高字节

寄存器1低字节

40

AC

19

DF

高字节

中间字节1

中间字节2

低字节

转换为浮点数后,值为:

5.378

程序:

floatTempfloat;

TData.TestArray[3]=0x40;//输入高字节

TData.TestArray[2]=0xac;//

TData.TestArray[1]=0x19;//

TData.TestArray[0]=0xdf;//低字节

Tempfloat=TData.TestData_Float;//得到浮点数5.378

注:

以上实例在VC6.0测试通过,因PC是基于小端模式存储,故低地址字节存储数据低字节,高地址字节存储数据高字节。

在实际应用中,根据实际存储模式,决定存储浮点型高低字节的位置。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1