记录仪与上位机通讯协议Word文件下载.docx

上传人:b****5 文档编号:19246626 上传时间:2023-01-04 格式:DOCX 页数:11 大小:37.30KB
下载 相关 举报
记录仪与上位机通讯协议Word文件下载.docx_第1页
第1页 / 共11页
记录仪与上位机通讯协议Word文件下载.docx_第2页
第2页 / 共11页
记录仪与上位机通讯协议Word文件下载.docx_第3页
第3页 / 共11页
记录仪与上位机通讯协议Word文件下载.docx_第4页
第4页 / 共11页
记录仪与上位机通讯协议Word文件下载.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

记录仪与上位机通讯协议Word文件下载.docx

《记录仪与上位机通讯协议Word文件下载.docx》由会员分享,可在线阅读,更多相关《记录仪与上位机通讯协议Word文件下载.docx(11页珍藏版)》请在冰豆网上搜索。

记录仪与上位机通讯协议Word文件下载.docx

Length1

1011(0xb)

数据块正文的长度,分2个字节

Length2

数据块正文的长度

Data

1000(0x8)

数据块正文

CRC

1001(0x9)

CRC数据

EndCom

1111

通信命令结束

1110(0xe)

保留

1111(0xf)

 

地址划分表

节点

节点地址

广播节点

0000,0000

所有在线的节点都要接收

主机节点

0001,xxxx

可以存在16台主机节点

记录仪节点

01xx,xxxx

可以存在64台记录仪节点

参数解释:

1、Command为一个字节,以0b1010,xxxx或0b1101,xxxx表示。

高四位1010或0b1101为命令标志;

低四位xxxx(0000~1111)表示具体的命令。

2、EndCom以一个字节0b1010,1111表示。

3、Status为一个字节,以0b1011,xxxx表示。

高四位1011为状态标志;

低四位xxxx为具体的状态信息,其中0000表示操作成功,0001~1111为常见的通信出错信息。

具体的出错代码请参见错误代码表,并将在日后的程序开发中继续完善。

4、Source为源地址,即通信数据发送者的地址,为一个字节。

具体信息见地址划分表。

5、Dest为目的地址,即通信数据接收者的地址,为一个字节。

具体信息见地址划块表。

6、Length(L1、L2、L3、L4):

数据包正文的长度,拆分成四个字节,低字节在前,高字节在后,以0b1011,xxxx表示。

高四位1011为长度标志;

低四位xxxx(0000~1111)表示后面紧跟的数据长度。

例如当数据包正文长度为512字节时,Length=0x100,则L1=0xB0,L2=0xB0,L3=0xB1,L4=0xB0。

如果Status不为0xC0,即状态出错,则Length=0。

7、Data(Data1、Data2、…Datan):

以字节0b1000,xxxx表示。

高四位1000为数据信息标志;

低四位xxxx(0000~1110)表示具体的数据。

在此情况下,本协议要求将一个八位的数据拆分成两个八位的数据进行传输。

例如当有发送数据为0x34f8时,则实际发送的数据流为Data(m)=0xC8,Data(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

超过系统通道数

8

9

10

11

12

13

14

15

二、通讯的具体命令

以下都是在通讯正常的情况,即Status=0xC0,如果Status=0xC1~0xCF,则Length=0。

2.0PC机从记录仪读取通道历史数据DGIVE(0xA4)

PC机→记录仪:

Command=0xA4

Length=1

Data=通道号

记录仪→PC机:

Status=0xC0

Length=114

Data=通道号+历史数据长度+起始时间+终止时间+历史数据

注:

PC机从记录仪读取通道历史数据,记录仪每次向上发送100字节数据,待PC机继续发送CONTINUE命令时,再发送下100字节数据,直至发送终止时间=当前时间后,记录仪向上发送如下信息,告诉上位机数据发送完毕:

其中历史数据长度=0

2.1PC机从记录仪读取通道实时数据NDGIVE(0xA5)

Command=0xA5

Length=9

Data=通道号+当前时间+实时数据

2.2PC机中止记录仪的数据传送STOP(0xA6)

Command=0xA6

Length=0

2.3PC机继续从记录仪读取通道历史数据CONTINUE(0xA7)

Command=0xA7

2.4PC机从记录仪读取某一时间段历史数据TDGIVE(0xAB)

Command=0xAB

Length=13

Data=通道号+起始时间+终止时间

Status=0xC0

Length=114

Data=通道号+历史数据长度+起始时间+终止时间+历史数据

PC机从记录仪读取通道历史数据,记录仪向上发送100字节数据。

2.5PC机向记录仪重新读取上一组历史数据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(CRC[0]、CRC[1])后,然后对CRC[0]和CRC[1]进行异或计算,所得到的结果再按照通讯格式中CRC段的字节拆分方式拆分成两个字节。

voidCalculateCRC(unsignedcharBuff[],unsignedcharCRC[],intBuffLength)

{unsignedcharA,B,C;

CRC[0]=0;

CRC[1]=0;

for(inti=0;

i<

BuffLength;

i++)

{

A=Buff[i];

A=A^CRC[0];

B=A;

CRC[0]=CRC[1];

A=BCCTAB1[A];

CRC[1]=A;

A=B;

A=BCCTAB2[A];

CRC[0]=CRC[0]^A;

}

C=CRC[0]^CRC[1];

CRC[0]=C&

0x0f;

CRC[0]=CRC[0]|0x90;

CRC[1]=C>

>

4;

CRC[1]=CRC[1]|0x90;

}

;

===============单字节的CRC-16循环冗余校验码表================

staticintBCCTAB1[]={

0x00,0x6F,0x0DE,0x0B1,0x0BC,0x0D3,0x62,0x0D,

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,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,0x42,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,0x0A3,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,0x0FC,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,0x0E1,0x0EC,0x083,0x32,0x5D,

0x28,0x47,0x0F6,0x99,0x94,0x0FB,0x4A,0x25};

staticintBCCTAB2[]={

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,0x2C,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,0x48,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,0x0B2,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,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,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字节浮点数表示法

二进制浮点操作数:

用三个字节表示,第一个字节的最高位为数符,其余七位为

阶码(补码形式),第二字节为尾数的高字节,第三字节为尾数的低字节,尾数用双字节纯小数(原码)来表示。

当尾数的最高位为1时,便称为规格化浮点数,简称操作数。

在程序说明中,也用[R0]或[R1]来表示R0或R1指示的浮点操作数,例如:

当[R0]=-6.000时,则二进制浮点数表示为83C000H。

若(R0)=30H,则(30H)=83H,(31H)=0C0H,(32H)=00H。

示例:

十进制小数->

二进制浮点数

0.1347E8938

27.8405DEB8

3528.01089D0

-6.15783C507

读系统参数:

0xA00x100x450xB00xB00xB00xB00x9C0x9F0xAF0xC00x450x100xBF0xB00xB00xB00x880x800x820x830x840x810x850x800x870x800x830x810x800x800x800x800x800x800x860x800x800x800x800x800x800x800x800x800x800x800x9F0x920xAF写系统参数:

0xA10x100x450xBF0xB00xB00xB00x880x800x820x830x880x800x850x800x870x800x830x810x800x800x800x800x800x800x860x800x800x800x800x800x800x800x800x800x800x800x990x990xAF读通道参数:

0xA20x100x450xB10xB00xB00xB00x800x800x940x920xAF0xC00x450x100xB80xB10xB00xB00x800x800x8A0x800x840x810x850x800x800x800x8B0x8F0x8F0x8F0x850x800x800x800x850x800x800x800x8B0x8F0x8F0x8F0x8B0x8F0x8F0x8F0x800x800x800x800x800x800x800x800x810x800x810x800x800x800x800x800x840x800x960x900xAF写通道参数:

0xA30x100x450xB80xB10xB00xB00x820x800x820x800x840x810x840x800x800x8B0x8F0x8F0x8C0x860x840x800x800x8B0x840x800x800x8B0x8F0x8F0x8C0x860x8F0x8F0x8C0x860x800x800x800x800x800x800x800x800x800x800x810x800x800x800x800x800x840x800x950x940xAF0xC00x450x100xB10xB00xB00xB00x820x800x9E0x9C0xAF发送:

A51041B1B0B0B08180969CAF

接收:

C04110B9B0B0B08180858087808A818880838083808E8381859E92AF

测量值按这个计算如:

3E51(15953)除以65536*(上限-下限)+下限

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

当前位置:首页 > 党团工作 > 入党转正申请

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

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