1、Length11011(0xb)数据块正文的长度,分2个字节Length2数据块正文的长度Data1000(0x8)数据块正文CRC1001(0x9)CRC数据EndCom1111通信命令结束1110(0xe)保留1111(0xf)地址划分表节点节点地址广播节点0000,0000所有在线的节点都要接收主机节点0001,xxxx可以存在16台主机节点记录仪节点01xx,xxxx可以存在64台记录仪节点参数解释:1、 Command为一个字节,以0b1010,xxxx或0b1101,xxxx表示。高四位1010或0b1101为命令标志;低四位xxxx(00001111)表示具体的命令。2、 End
2、Com以一个字节0b1010,1111表示。3、 Status为 一个字节,以0b1011,xxxx表示。高四位1011为状态标志;低四位xxxx 为具体的状态信息,其中0000表示操作成功,00011111为常见的通信出错信息。具体的出错代码请参见错误代码表,并将在日后的程序开发中继续完善。4、 Source为源地址,即通信数据发送者的地址,为一个字节。具体信息见地址划分表。5、 Dest为目的地址,即通信数据接收者的地址,为一个字节。具体信息见地址划块表。6、 Length(L1、L2、L3、L4):数据包正文的长度,拆分成四个字节,低字节在前,高字节在后,以0b1011,xxxx表示。高
3、四位1011为长度标志;低四位xxxx(00001111)表示后面紧跟的数据长度。例如当数据包正文长度为512字节时,Length=0x100,则L1=0xB0,L2=0xB0,L3=0xB1,L4=0xB0。如果Status不为0xC0,即状态出错,则Length = 0。7、 Data(Data1、Data2 、Datan):以字节0b1000,xxxx表示。高四位1000为数据信息标志;低四位xxxx(00001110)表示具体的数据。在此情况下,本协议要求将一个八位的数据拆分成两个八位的数据进行传输。例如当有发送数据为0x34f8时,则实际发送的数据流为Data(m)=0xC8,Dat
4、a(m+1)=0xCF,Data(m+2)=0xC4,Data(m+3)=0xC3。因此数据的长度肯定为偶数。8、 CRC以字节0b1001,xxxx表示,共两个字节。本协议采用标准CRC16计算,计算方法见附录二,发送时,需要拆分成两个部分进行传输,具体见Data的拆分方法。 错误代码表错误代码代码含义1通信延时到退出2在地址匹配后,通信校验出错3通道组态失败4通道没有累积5仪表无累积功能6不是PID输出通道7超过系统通道数89101112131415二、 通讯的具体命令以下都是在通讯正常的情况,即Status=0xC0,如果Status=0xC10xCF,则Length=0。2.0 PC机
5、从记录仪读取通道历史数据DGIVE(0xA4)PC机记录仪: Command = 0xA4 Length = 1 Data = 通道号记录仪PC机: Status = 0xC0 Length = 114 Data = 通道号+历史数据长度+起始时间+终止时间+历史数据注:PC机从记录仪读取通道历史数据,记录仪每次向上发送100字节数据,待PC机继续发送CONTINUE命令时,再发送下100字节数据,直至发送终止时间=当前时间后,记录仪向上发送如下信息,告诉上位机数据发送完毕:其中历史数据长度 = 02.1 PC机从记录仪读取通道实时数据NDGIVE(0xA5) Command = 0xA5 L
6、ength = 9 Data =通道号 + 当前时间 + 实时数据2.2 PC机中止记录仪的数据传送STOP(0xA6) Command = 0xA6 Length = 02.3 PC机继续从记录仪读取通道历史数据CONTINUE(0xA7) Command = 0xA72.4 PC机从记录仪读取某一时间段历史数据TDGIVE(0xAB) Command = 0xAB Length = 13 Data = 通道号 + 起始时间 + 终止时间 Status = 0xC0 Length = 114 Data = 通道号+历史数据长度+起始时间+终止时间+历史数据 PC机从记录仪读取通道历史数据,记
7、录仪向上发送100字节数据。2.5 PC机向记录仪重新读取上一组历史数据DAGAIN(0xAE) Command = 0xAE Length = 1 Data = 通道号 附录一 数据格式 1、实时数据: 每个通道 2字节 2、历史数据: 每个通道 (512*m/n)K字节,其中m为闪存数,n为记录点数。3、报警记录: 报警年份 1字节 报警月份 1字节 报警日期 1字节 报警时 1字节 报警分 1字节 报警秒 1字节 报警类型 1字节 0:上上限 1:上限 2:下限 3:下下限 总计: 7字节 附录二 CRC计算方法下面是C源程序。首先采用标准CRC16计算方法得到两个字节的CRC(CRC0
8、、CRC1)后,然后对CRC0和CRC1进行异或计算,所得到的结果再按照通讯格式中CRC段的字节拆分方式拆分成两个字节。void CalculateCRC(unsigned char Buff,unsigned char CRC,int BuffLength) unsigned char A,B,C; CRC0 = 0; CRC1 = 0; for(int i = 0;i 4; CRC1= CRC1| 0x90;= 单字节的 CRC-16 循环冗余校验码表 =static int BCCTAB1= 0x00, 0x6F, 0x0DE, 0x0B1, 0x0BC, 0x0D3, 0x62, 0x
9、0D, 0x78, 0x17, 0x0A6, 0x0C9, 0x0C4, 0x0AB, 0x1A, 0x75, 0x0F0, 0x9F, 0x2E, 0x41, 0x4C, 0x23, 0x92, 0x0FD, 0x88, 0x0E7,0x56, 0x39, 0x34, 0x5B, 0x0EA, 0x85, 0x0E0, 0x8F, 0x3E, 0x51, 0x5C, 0x33, 0x82, 0x0ED, 0x98, 0x0F7,0x46, 0x29, 0x24, 0x4B, 0x0FA, 0x95, 0x10, 0x7F, 0x0CE, 0x0A1, 0x0AC, 0x0C3, 0x72,
10、0x1D, 0x68, 0x07, 0x0B6, 0x0D9, 0x0D4, 0x0BB, 0x0A, 0x65, 0x0C0, 0x0AF,0x1E, 0x71, 0x7C, 0x13, 0x0A2, 0x0CD, 0x0B8, 0x0D7,0x66, 0x09, 0x04, 0x6B, 0x0DA, 0x0B5, 0x30, 0x5F, 0x0EE, 0x81, 0x8C, 0x0E3, 0x52, 0x3D, 0x48, 0x27, 0x96, 0x0F9, 0x0F4, 0x9B, 0x2A, 0x45, 0x20, 0x4F, 0x0FE, 0x91, 0x9C, 0x0F3, 0x
11、42, 0x2D, 0x58, 0x37, 0x86, 0x0E9, 0x0E4, 0x8B, 0x3A, 0x55, 0x0D0, 0x0BF, 0x0E, 0x61, 0x6C, 0x03, 0x0B2, 0x0DD, 0x0A8, 0x0C7, 0x76, 0x19, 0x14, 0x7B, 0x0CA, 0x0A5, 0x80, 0x0EF, 0x5E, 0x31, 0x3C, 0x53, 0x0E2, 0x8D, 0x0F8, 0x97, 0x26, 0x49, 0x44, 0x2B, 0x9A, 0x0F5, 0x70, 0x1F, 0x0AE, 0x0C1, 0x0CC, 0x0
12、A3, 0x12, 0x7D, 0x08, 0x67, 0x0D6, 0x0B9, 0x0B4, 0x0DB, 0x6A, 0x05, 0x60, 0x0F, 0x0BE, 0x0D1, 0x0DC, 0x0B3, 0x02, 0x6D, 0x18, 0x77, 0x0C6, 0x0A9, 0x0A4, 0x0CB, 0x7A, 0x15, 0x90, 0x0FF, 0x4E, 0x21, 0x2C, 0x43, 0x0F2, 0x9D, 0x0E8, 0x87, 0x36, 0x59, 0x54, 0x3B, 0x8A, 0x0E5, 0x40, 0x2F, 0x9E, 0x0F1, 0x0
13、FC, 0x93, 0x22, 0x4D, 0x38, 0x57, 0x0E6, 0x89, 0x84, 0x0EB, 0x5A, 0x35, 0x0B0, 0x0DF, 0x6E, 0x01, 0x0C, 0x63, 0x0D2, 0x0BD, 0x0C8, 0x0A7, 0x16, 0x79, 0x74, 0x1B, 0x0AA, 0x0C5, 0x0A0, 0x0CF, 0x7E, 0x11, 0x1C, 0x73, 0x0C2, 0x0AD, 0x0D8, 0x0B7, 0x06, 0x69, 0x64, 0x0B, 0x0BA, 0x0D5, 0x50, 0x3F, 0x8E, 0x
14、0E1, 0x0EC, 0x083, 0x32, 0x5D, 0x28, 0x47, 0x0F6, 0x99, 0x94, 0x0FB, 0x4A, 0x25;static int BCCTAB2= 0x00, 0x01, 0x02, 0x03, 0x05, 0x04, 0x07, 0x06, 0x0B, 0x0A1, 0x09, 0x08, 0x0E, 0x0F, 0x0C, 0x0D, 0x16, 0x17, 0x14, 0x14, 0x13, 0x12, 0x11, 0x10, 0x1D, 0x1C, 0x1F, 0x1E, 0x18, 0x19, 0x1A, 0x1B, 0x2D, 0
15、x2C, 0x2F, 0x2E, 0x28, 0x29, 0x2A, 0x2B, 0x26, 0x27, 0x24, 0x24, 0x23, 0x22, 0x21, 0x20, 0x3B, 0x31, 0x39, 0x38, 0x3E, 0x3F, 0x3C, 0x3D, 0x30, 0x31, 0x32, 0x33, 0x35, 0x34, 0x37, 0x36, 0x5B, 0x51, 0x59, 0x58, 0x5E, 0x5F, 0x5C, 0x5D, 0x50, 0x51, 0x52, 0x53, 0x55, 0x54, 0x57, 0x56, 0x4B, 0x41, 0x49, 0
16、x48, 0x4E, 0x4F, 0x4C, 0x4D, 0x46, 0x47, 0x44, 0x44, 0x43, 0x42, 0x41, 0x40, 0x76, 0x77, 0x74, 0x74, 0x73, 0x72, 0x71, 0x70, 0x7D, 0x7C, 0x7F, 0x7E, 0x78, 0x79, 0x7A, 0x7B, 0x60, 0x61, 0x62, 0x63, 0x65, 0x64, 0x67, 0x66, 0x6B, 0x61, 0x69, 0x68, 0x6E, 0x6F, 0x6C, 0x6D, 0x0B7, 0x0B6, 0x0B5, 0x0B4, 0x0
17、B2, 0x0B3, 0x0B0, 0x0B1, 0x0BC, 0x0BD, 0x0BE, 0x0BF, 0x0B9, 0x0B8, 0x0BB, 0x0BA, 0x0A1, 0x0A0, 0x0A3, 0x0A2, 0x0A4, 0x0A5, 0x0A6, 0x0A7, 0x0AA, 0x0AB, 0x0A8, 0x0A9, 0x0AF, 0x0AE, 0x0AD, 0x0AC, 0x9A, 0x9B, 0x98, 0x99, 0x9F, 0x9E, 0x9D, 0x9C, 0x91, 0x90, 0x93, 0x92, 0x94, 0x95, 0x96, 0x97, 0x8C, 0x8D,
18、 0x8E, 0x8F, 0x89, 0x88, 0x8B, 0x8A, 0x87, 0x86, 0x85, 0x84, 0x82, 0x83, 0x80, 0x81, 0x0EC, 0x0ED, 0x0EE, 0x0EF, 0x0E9, 0x0E8, 0x0EB, 0x0EA, 0x0E7, 0x0E6, 0x0E5, 0x0E4, 0x0E2, 0x0E3, 0x0E0, 0x0E1, 0x0FA, 0x0FB, 0x0F8, 0x0F9, 0x0FF, 0x0FE, 0x0FD, 0x0FC, 0x0F1, 0x0F0, 0x0F3, 0x0F2, 0x0F4, 0x0F5, 0x0F6
19、, 0x0F7, 0x0C1, 0x0C0, 0x0C3, 0x0C2, 0x0C4, 0x0C5, 0x0C6, 0x0C7, 0x0CA, 0x0CB, 0x0C8, 0x0C9, 0x0CF, 0x0CE, 0x0CD, 0x0CC, 0x0D7, 0x0D6, 0x0D5, 0x0D4, 0x0D2, 0x0D3, 0x0D0, 0x0D1, 0x0DC, 0x0DD, 0x0DE, 0x0DF, 0x0D9, 0x0D8, 0x0DB, 0x0DA;附录三 3字节浮点数表示法二进制浮点操作数:用三个字节表示,第一个字节的最高位为数符,其余七位为阶码(补码形式),第二字节为尾数的高字节
20、,第三字节为尾数的低字节,尾数用双字节纯小数(原码)来表示。当尾数的最高位为时,便称为规格化浮点数,简称操作数。在程序说明中,也用R0或R1来表示R0或R1指示的浮点操作数,例如:当R0=-6.000时,则二进制浮点数表示为83C000H。若(R0)=30H,则(30H)=83H,(31H)=0C0H,(32H)=00H。示例:十进制小数 二进制浮点数0.134 7E 89 3827.84 05 DE B83528.0 10 89 D0-6.157 83 C5 07读系统参数:0xA0 0x10 0x45 0xB0 0xB0 0xB0 0xB0 0x9C 0x9F 0xAF 0xC0 0x45
21、 0x10 0xBF 0xB0 0xB0 0xB0 0x88 0x80 0x82 0x83 0x84 0x81 0x85 0x80 0x87 0x80 0x83 0x81 0x80 0x80 0x80 0x80 0x80 0x80 0x86 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x9F 0x92 0xAF 写系统参数:0xA1 0x10 0x45 0xBF 0xB0 0xB0 0xB0 0x88 0x80 0x82 0x83 0x88 0x80 0x85 0x80 0x87 0x80 0x83 0x81 0x80 0x8
22、0 0x80 0x80 0x80 0x80 0x86 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x99 0x99 0xAF 读通道参数:0xA2 0x10 0x45 0xB1 0xB0 0xB0 0xB0 0x80 0x80 0x94 0x92 0xAF 0xC0 0x45 0x10 0xB8 0xB1 0xB0 0xB0 0x80 0x80 0x8A 0x80 0x84 0x81 0x85 0x80 0x80 0x80 0x8B 0x8F 0x8F 0x8F 0x85 0x80 0x80 0x80 0x85 0x80 0x
23、80 0x80 0x8B 0x8F 0x8F 0x8F 0x8B 0x8F 0x8F 0x8F 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x81 0x80 0x81 0x80 0x80 0x80 0x80 0x80 0x84 0x80 0x96 0x90 0xAF 写通道参数:0xA3 0x10 0x45 0xB8 0xB1 0xB0 0xB0 0x82 0x80 0x82 0x80 0x84 0x81 0x84 0x80 0x80 0x8B 0x8F 0x8F 0x8C 0x86 0x84 0x80 0x80 0x8B 0x84 0x80 0x80 0
24、x8B 0x8F 0x8F 0x8C 0x86 0x8F 0x8F 0x8C 0x86 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x81 0x80 0x80 0x80 0x80 0x80 0x84 0x80 0x95 0x94 0xAF 0xC0 0x45 0x10 0xB1 0xB0 0xB0 0xB0 0x82 0x80 0x9E 0x9C 0xAF发送:A5 10 41 B1 B0 B0 B0 81 80 96 9C AF接收:C0 41 10 B9 B0 B0 B0 81 80 85 80 87 80 8A 81 88 80 83 80 83 80 8E 83 81 85 9E 92 AF 测量值按这个计算 如:3E51 (15953)除以65536 *(上限-下限)+下限
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1