红相Mk6E电能表Command Line通信协议.doc_第1页
红相Mk6E电能表Command Line通信协议.doc_第2页
红相Mk6E电能表Command Line通信协议.doc_第3页
红相Mk6E电能表Command Line通信协议.doc_第4页
红相Mk6E电能表Command Line通信协议.doc_第5页
已阅读5页,还剩24页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

红相Mk6E电能表Command Line通信协议Command Line 是红相Mk6E系列电能表与外部终端进行通信所用的协议。对于设计者,本规约提供了一整套与电能表直接通信的可行的方法。 Command Line为设计者提供详细读取红相MK6E系列电能表数据的方法。它是以命令行的格式发送一系列固定的指令。以下将详细表述了通过RS485或RS232通信口进行通信的方法。命令的结构所有命令均以字符“STX”开始,以字符“ETX”结束,并符合以下通用格式: 的内容是要被发送的命令信息是按CCITT标准定义的16位的CRC16多项校验码。该CRC是通过对整个信息进行计算的。(含“STX”,但不含“CRC”本身及“ETX”字符,如果在之间没有命令,那么将不需要CRC校验) 电能表对发送过来的命令产生应答,应答命令格式如下所示: 的内容可能是: (16进制的“6”)-指令操作成功 (16进制的“18”)-CRC校验正确,但指令有误 或是含有数据的应答信息:、的内容都是以二进制发送,因此,一些特殊控制字符有可能出现在传输的数据中,该字符与发送的真正的起始和结束字符混淆。为了避免这样的问题,采用填充字符的方式处理。特殊控制字符由一个DLE(16进制的“10”)字符跟第六位置1的原字符组成,以双控制字符发送。在接收端,截下并除去所有的“DLE”字符,而对跟在“DLE”后面的字符的第六位清零。下述字符以这种方式处理: (hex02) 发送为:(hex10)(hex42) (hex03) 发送为:(hex10)(hex43) (hex11) 发送为:(hex10)(hex51) (hex13) 发送为:(hex10)(hex53) (hex10) 发送为:(hex10)(hex50)命令行的响应命令行的格式定义如下:“test”表示一个以0为结束符的字符串。(“”字符不发送)5表示一个8位的整数。10 表示一个16位的整数。(1000) 表示一个32位的整数。表示一个32位的浮点数。注意:所有多字节数(包括整数和浮点数),首先传送高位(Motorola格式)。接收成功时,应答码为接收失败时,应答码为跟上错误代码错误代码如下:代码解释1不能写入(如:序列号已被设置)2操作未完成3寄存器未找到4访问被拒绝(安全原因)5字节数错误(要求的字节数不正确)6无效的类型码(内部错误)7数据未准备好(处理中),稍候再试8超出范围,输入值超出了定义的范围9未登录表1命令行应答码命令行模式Command:Response:这个初始化消息用于启动访问命令行。由于命令主体为空,CRC被省略,收到信息后,终端进入命令行模式。登录命令Command:L“id, pw”Response:本命令用于登录系统。“id”、“pw”分别是用户名和密码,密码以0为结束符。注意:对用户ID和密码的保密以及字符串以0结束。退出命令Command:xResponse:本命令用于退出系统。注意:登陆电表进行数据通信后,请用该命令退出。信息命令Command:Ireg_numResponse: Ireg_num/data/本命令将返回所要查询的寄存器信息。/data/是以为0结束符的字符串: “”为寄存器的类型,以字母表示(见前面的有关类型的列表)。字母序列在未来若需要扩展的话,将使用小写字母。由信息命令返回的是外部类型。测量单位测量单位AAmpsD角度值HHz(赫兹)M分钟NNo UnitP百分比Q功率因素RVars(无功功率)SVA(视在功率)T秒U未定义VVolts(伏特)WWatts(瓦特)XWh(有功)YVarh(无功)ZVah(视在)表2信息命令单位结构组成:是具有高达16个字符并以0为结束符的格式的寄存器描述。当寄存器不能正常访问时(任何原因,包括安全原因),将返回一个“N”和数据类型“U”(说明该数据类型未知)。在这种情况下描述的内容将是“Register xxxx”。读寄存器命令Command:Rreg_numResponse:Rreg_num/data/这条命令返回寄存器存储的数据。所有寄存器将在后续章节寄存器列表中列出。32位寄存器地址码的前16位作为0处理。设置复费率电能量(TOU)的寄存器返回的是一个单精度浮点数,如果需要得到的是双精度浮点数可以在上面提到的读寄存器命令后增加一个大写字母D。它的命令的格式是:Rreg_numD注意:对于不支持双精度浮点数的寄存器,这个“D”将是无效。写寄存器命令Command:Wreg_num /data/Response: or 这条命令功能是将数据写入寄存器。/data/的数据类型必须与寄存器的类型相匹配。所有的寄存器将在后续章节寄存器列表中列出。当指令执行成功,终端应答是码,而若试图对只读寄存器进行写操作时,应答则是码。32位寄存器地址码的前16位作为0处理。读扩展寄存器命令Command:M(reg_num)Response Success:M(reg_num)/data/Response Failure:Response Code这条命令返回寄存器的数据。所有的寄存器将在后续章节中寄存器列表中列出。使用这条命令,设置复费率(TOU)的寄存器总是以双浮点数而非单浮点数返回。读多个寄存器命令 利用从特殊寄存器读的读扩展寄存器命令,就能读取多个地址不连续的寄存器,从而提高整个效率。除了可读取地址非连续的寄存器外,其它与普通的读寄存器命令相似。对应于读多个命令的两种不同类型,有两种特殊的寄存器。FFF0-对整块寄存器的读取,返回一个错误码。如果出现一个读出错误,整条命令将返回一个“CAN”码。FFF1-对每个寄存器的读取,均返回一个错误码。即使全部的读出都发生错误,整个应答仍返回操作成功信息。当一个读取错误时,结果代码n(“Result Code n”)将为非0值,并且/data/将被标准的错误提示字符串所代替。(1) 多个读,单个错误码Command: M . Response Success: M /Data1 /Data2/. /Data n/Response Failure: CAN Error code(2) 多个读,多个错误码Command: M . Response Success/Failure: M Result Code1/Datat1/ Result code2/Data2/. Result Code n/Data n/写扩展寄存器命令Command: N(reg_num)/data/Response: Response Code这条命令将数据写入寄存器(寄存器地址码为reg_num)。数据的类型必须与寄存器的类型匹配。所有的寄存器将在后继章节寄存器列表中列出。当命令执行成功,终端应答将是ACK码,而若试图对只读寄存器进行写操作时,应答则是CAN码。写多个寄存器命令利用从一个特殊寄存器读取的读扩展寄存器命令,就能读取多个地址不连续的寄存器,从而提高整个效率。除了可读取地址非连 不同类型,有两种特殊的寄存器。(1) 多个写,单个错误码Command: N /Data1/ /Data2. /Data n/Response Success: ACKResponse Failure: CAN Error code(2) 多个写,多个错误码Command: N /Data1/ /Data2. /Data n/Response Success/Failure: Result Code1 Result Code2.Result Code n只要有一个写入错误发生于任何一个寄存器,即使写入成功,仍将返回一个“CAN”码。数据的长度必须正确。如果一个应答码是非零的(如发生错误),则其后会跟随一个以0为结束符的错误码字符串。就整条信息而言,即使全部写入都错误,应答仍是成功的。注意:当写多个寄存器时应小心。一个写入错误就会使命令终止,会产生一些寄存器已写入数据,而一些却没有被写入的情况。扩展信息的命令Command: O(reg_num)Response: O(reg_num)/data/ or Response code if invalid command本命令返回寄存器的信息。/data/是一个以0为结束符的字符串,格式为:“”如果某个寄存器不能访问(由于任何原因,包括安全原因),将返回一个“N”和数据类型为“U”(类型未知)。在这种情况下的“描述”(Description)是“Register”。读多个扩展寄存器命令Command: A(reg_num)num_regResponse Success: A(reg_num)num_reg/data/Response Failure: Response Code 本命令返回从地址reg_num开始的num_reg个寄存器存储的数据。这里应注意读取的字符串的长度是可变的。对于设置复费率(TOU)的寄存器,此命令返回双浮点数而非单浮点数。写多个扩展寄存器命令Command: B(reg_num)num_reg/data/Response: Response Code-本命令功能将数据写入以地址reg_num开始的num_reg个寄存器中。/data/的类型必须与寄存器的类型匹配。注意字符串长度是可变的,并且“J”型寄存器不能用这种方式写入。所有的寄存器将在后继章节寄存器列表中列出。当命令执行成功时,终端将返回ACK,而如果寄存器不能写入时,终端将返回CAN。EziPort 数据命令 Command: none Response: S(reg_num)data type/data/本命令仅有应答形式。EziPort利用这种格式发送数据。发送的寄存器在电能表中已进行设置,并且在以上格式中,数据每次仅发送到一个寄存器中。如果某个寄存器读取错误的话,这个寄存器就根本不能用于发送。对于设置复费率(TOU)的寄存器,此命令返回双浮点数。文件访问负荷调研信息存储于结构化文件中,以下详细介绍了这些命令。文件访问-读命令Command: FR(reg_num) (start record) number of records record offsetrecord sizeResponse: FR (reg_num)(Actual start record)Actual number of recordsActual record offsetActual record size/data/Response fail: Response CodeStart Record-要读的起始记录。若太早,不在该文件记录范围之内,文件指针将向前跳到第一个记录上;若太新,不在该文件记录范围之内,文件指针将向后跳过最后记录,到达文件尾,则发送的文件将是零个记录的文件。number of records-读文件的记录数。若太大,默认减小为文件尾的值或缓冲区的大小。record offset-记录偏移量。若太大,默认为记录的长度。record size-记录长度。若太大,默认减小为实际记录长度或缓冲区长度的最大值。文件访问-写命令Command: FW(reg_num)(start record)record offsetrecord size/data/Response: Response Code写入文件的数据在长度设置上出现任何错误都会引起写操作无法进行。文件访问信息命令Command: FI(reg_num)Response: FI(reg_num)(start record)(number of records)record sizefile type“File Name”Response Fail: Response codeFile type:Bit0: 可用于查找时间文件访问-查找命令Command:FS(reg_num)(startrecord)datemonthyearhour minuteseconddir这里的“date/time”就是要查找的日期和时间。Response:FS(reg_num)(start record)datemonthyearhourminutesecondresult这里的“date/time”就是查找到的日期和时间。Response Fail: Response code查找指定的时间。Dir=0: 从起始记录开始往后查找,停在匹配的第一个记录,并给出该记录的入口地址。当文件指针移过指定的时间而未能找到匹配的记录时,指针将指向随后记录的入口地址。Dir=1: 从起始记录开始往前查找,停在匹配的第一个记录,并给出该记录的入口地址。当文件指针移过指定的时间而未能找到匹配的记录时,指针将指向指定时间的前一记录的入口地址。Result=0: 找到匹配记录。Result=1: 到达文件尾。Result=2: 找到相邻时间的记录。Result=3: 不能找到任何记录-负荷调研时无时间标记。Result=4: 负荷调研时无记录数据。扩展命令Command: E(Destinations#)(Sources#)Sequence/normal command/Response: E(Sources#)(Destinations#)Sequence/normal response/E命令是为扩展命令行协议而设计的,允许多点通信和消息的重发、广播。所有其它命令都能通过“E”命令执行。(Destinations#) 目标地址: 电能表的序列号就是命令的目标地址。实际应用中只要将红相MK6E系列电能表的序列号直接转换为四个字节的十六进制码。(Sources#)源地址:该地址是所需软件的序列号。Sequence帧号:帧号是一个从1到32767的数字,并且对每次请求应该互不相同。在应答中,源地址和目的地址相互交换,因此,所需软件的序列号此时在目的地址的位置上。广播消息序列号FFFFFFFF是一个广播地址,所有终端都能接收,不作出应答。序列号FFFFFFFE是一个广播地址,所有终端都能接收,并作出应答。序列号FFFFFFFD是一个广播地址(保留给RS485接口的站点使用),所有终端都能接收,且在随后的随机时间段内作出应答。最大的时间周期是由原来的命令来指定。返回的包将用终端地址替换广播地址。帧号每次发送都必须有一个帧号,这个帧号应不同于前一帧号。应答时带有相同的帧号,这样就可以以此校验这个应答是否对应于相应的请求。重发命令采用与原先相同的序号。通过这种方式,如果电能表没有收到原先的请求,那么将照常作出应答,否则,则将上次发送的应答重新发送,但是命令并没有重新执行。电能表上次发送的内容保存在缓冲区中,一旦需要重发,便可再次发送。帧号的最高有效位保留,并且通常情况下为0。特殊地,帧号65536从不重发。这可用于上次发送的帧号未知的情况。如果在扩展命令执行了一个普通命令,扩展命令的应答就不可能重发,而扩展命令将以一个新的帧号重新执行。命令行访问指南本节将详细、逐步地说明利用命令行模式访问电能表的例子,同时也涉及了IEEE浮点格式的细节。读电能表的例子本例为读取电能表的序列号。从本手册的寄存器列表中,可找到存储序列号的寄存器地址是F002。首先以一个STX开始,即十六进制的02,Hexadecimal: 02Decimal: 2接下来的内容由命令决定。读取寄存器的命令是“R”,即十进制的82。Hexadecimal: 02RDecimal: 2,82要读取的寄存器的地址跟在命令后,高字节在前面:Hexadecimal: 02RF002Decimal: 2,82,240,2然后在上面这4个数之后加上一个16位的CRC校验码。这个校验码在十六进制中是EE45,即十进制中的60997,分成两个8位的数,高字节在前。因此现在命令是: Hexadecimal: 02RF002EE45 Decimal: 2,82,240,2,238,69某些特殊字符一旦出现在信息中,必须采用以下方法进行替换处理。(不含电能表命令行的起始和结束标志符)这些特殊字符是2,3,16,17,19;处理方法是:如果其中的任何一个出现在信息体中,就将数字16插入它的前面,并将此数值加上64。例如:数字2出现在本例的第三个位置,它将被数字16和其后的数字66代替。这样的话,结果将是: Decimal: 2,82,240,16,66,238,69现在在末尾加上结束标志符,数字3(ETX)如下: Decimal: 2,82,240,16,66,238,69,3这就是发送给电能表的数据。电能表将以如下格式的数据应答: Hexadecimal:0252F01042393330303030 30001B104203Decimal: 2,82,240,16,66,57,51,48,48,48,48,48,0,27,16,66,3注意:命令行的起始和结尾是分别由数字2(STX)和数字3(ETX)标记的。对于经过特殊处理的字符在处理该数据时应该按以下方法给予恢复。方法是:在有数字16出现的位置,先把16去掉,并把后面跟着的数字减去64。这个例子中,有两个位置出现了这种情况:Hexadecimal: 0252F00239333030303030001B0203Decimal: 2,82,240,2,57,51,48,48,48,48,48,0,27,2,3倒数第2个和倒数第3个数字是16位的CRC校验和数据(高位在前面)。校验码是这样进行校验的:对CRC码前的所有数字算出16位CRC校验码(CRC数字例如2到0不计算在内)。若所得校验码是错的,将丢弃此条信息。校验码以及STX/ETX字符可以去掉了。Hexadecimal:52F0023933303030303000Decimal: 82,240,2,57,51,48,48,48,48,48,0第一个数字表示应答的类型。在本例中,第一个数字是82,即ASCII码的字母“R”,表示这是对一个读请求的应答。跟在后面的两个数字组成的F002是所读取的寄存器的地址,这些信息对于处理应答是十分有用的。没有应答类型时,数据如下:Hexadecimal: 3933303030303000Decimal: 57,51,48,48,48,48,48,0通过查询本手册的列表,寄存器F002是字符串类型。数据由一系列字符组成,在字符串末尾用数字0表示结束。我们可用ASCII码字符将这些数据表示为:Text: 9300000用数字0表示结束。“930000”就是从电能表读到的序列号。访问电能表的例子为了访问电能表,必须获得授权,登录电能表,进行一定量数据的读、写,然后退出电能表,我们将用如下例子说明。发送一个“Escape”字符,其后跟着只有起始和停止码的短信息。Hexadecimal: 1B0203Decimal: 27,2,3返回一个确认ACK。Hexadecimal: 020606A403Decimal: 2,6,6,164,3这是一个应答命令ACK,没有相关数据。注意:该方式仅适用于RS232的通信方式,用于唤醒电表使用。多点的RS485通信方式不能使用。使用登录命令“L”来登陆电能表。出厂的缺省的用户名和密码分别为“EDMI”“IMDEIMDE”。Hexadecimal: 024C45444D492C494D4445494D444500D96903Text: 02LEDMI,IMDEIMDE00D96903如果登录成功,将会发送一个ACK码。 Hexadecimal: 020606A403 Decimal: 2,6,6,164,3如果登录不成功,将会发送一个CAN码(十进制24)。 Hexadecimal: 0218F55B03 Decimal: 2,24,245,91,3登录成功后,就可以对寄存器进行读、写操作。如:读取序列号, Hexadecimal: 0252F01002EE4503 Decimal: 2,82,240,10,66,238,69,3则应答如下:Hexadecimal:0252F0104239333030303030001B104203 Decimal: 2,82,240,10,66,57,51,48,48,48,48,48,0,27,16,66,3当访问结束时,用“X”命令退出本次登录。 Hexadecimal: 0258BD9F03 Decimal: 2,88,189,159,3正常退出时将返回一个ACK码。 Hexadecimal: 020606A403 Decimal: 2,6,6,164,3注意:EDMI的应用程序REGTEST.EXE用于对电能表访问的测试。利用“-H”参数可以显示所有发送和接受到的字符。这对需求的测试是十分有用的。若有一字节是十进制的DLE,带有“-H”参数的Regtest程序将显示跟在DLE后的字符,此字符的第6位没有设置。例:REGTEST程序显示的0252100269462B03将是以0252104269462B03发送的。为了在简单系统中简化操作,可以对请求进行测试(包括校验码)和发送。在可靠媒介中,对接受到的CRC的校验可以跳过-省略任何计算CRC的操作,虽然这可能导致错误的数据被接受。附录红相MK6E系列电能表常用寄存器地址表正向有功总电量:0169正向有功峰电量:0160正向有功平电量:0161正向有功谷电量:0162正向有功尖峰电量:0163反向有功总电量:0069反向有功峰电量:0060反向有功平电量:0061反向有功谷电量:0062反向有功尖峰电量:0063 正向无功总电量:0369 正向无功峰电量:0360 正向无功平电量:0361正向无功谷电量:0362正向无功尖峰电量:0363 反向无功总电量:0269 反向无功峰电量:0260 反向无功平电量:0261反向无功谷电量:0262反向无功尖峰电量:0263 当前正向有功总电量:0109 当前正向有功峰电量:0100 当前正向有功平电量:0101当前正向有功谷电量:0102当前正向有功尖峰电量:0103 当前反向有功总电量:0009 当前反向有功峰电量:0000 当前反向有功平电量:0001 当前反向有功谷电量:0002当前反向有功尖峰电量:0003 当前正向无功总电量:0309 当前正向无功峰电量:0300 当前正向无功平电量:0301当前正向无功谷电量:0302当前正向无功尖峰电量:0303 当前反向无功总电量:0209 当前反向无功峰电量:0200 当前反向无功平电量:0201当前反向无功谷电量:0202当前反向无功尖峰电量:0203 上月正向有功总电量:0129 上月正向有功峰电量:0120 上月正向有功平电量:0121上月正向有功谷电量:0122上月正向有功尖峰电量:0123 上月反向有功总电量:0029上月反向有功峰电量:0020上月反向有功平电量:0021上月反向有功谷电量:0022上月反向有功尖峰电量:0023 上月正向无功总电量:0329 上月正向无功峰电量:0320 上月正向无功平电量:0321上月正向无功谷电量:0322上月正向无功尖峰电量:0323 上月反向无功总电量:0229 上月反向无功峰电量:0220 上月反向无功平电量:0221上月反向无功谷电量:0222上月反向无功尖峰电量:0223 A相电压:E000 B相电压:E001 C相电压:E002 A相电流:E010 B相电流:E011 C相电流:E012有功总功率:E033 有功A相功率:E030 有功B相功率:E031 有功C相功率:E032 无功总功率:E043无功A相功率:E040无功B相功率:E041无功C相功率:E042功率因数:E026频率:E060电表日期:F010 (MK3) 电表时间:F011 (MK3)电表时间/日期:F03D (MK6系列) 当前正向有功总最大需量:1109 当前正向有功峰最大需量:1100 当前正向有功平最大需量:1101 当前正向有功谷最大需量:1102 上月正向有功总最大需量:1129上月正向有功峰最大需量:1120上月正向有功平最大需量:1121上月正向有功谷最大需量:1122当前正向有功总最大需量出现时间:8109 当前正向有功峰最大需量出现时间:8100 当前正向有功平最大需量出现时间:8101 当前正向有功谷最大需量出现时间:8102 上月正向有功总最大需量出现时间:8129上月正向有功峰最大需量出现时间:8120上月正向有功平最大需量出现时间:8121上月正向有功谷最大需量出现时间:8122当前反向有功总最大需量:1009 当前反向有功峰最大需量:1000 当前反向有功平最大需量:1001 当前反向有功谷最大需量:1002 上月反向有功总最大需量:1029上月反向有功峰最大需量:1020上月反向有功平最大需量:1021上月反向有功谷最大需量:1022当前反向有功总最大需量出现时间:8009 当前反向有功峰最大需量出现时间:8000当前反向有功平最大需量出现时间:8001 当前反向有功谷最大需量出现时间:8002 上月反向有功总最大需量出现时间:8029上月反向有功峰最大需量出现时间:8020上月反向有功平最大需量出现时间:8021上月反向有功谷最大需量出现时间:8022 使用EDMI规约抄读电表命令结构:02 E(命令) 目标地址即表号(4字节)源地址(4字节)帧号(2字节)命令CRC校验(2字节)03FF:02 E(命令) 源地址(4字节)目标地址即表号(4字节)帧号(2字节)命令CRC校验(2字节)03流程:1. 登录;2. 读数据,可以发多个读数据命令;3. 退出。1.登录02 45 00 1E F7 B3 01 2B 16 68 FF FF 4C 45 44 4D 49 2C 49 4D 44 45 49 4D 44 45 00 A7 35 03 FF 02 45 01 2B 16 68 00 1E F7 B3 FF FF 06 DD 01 03 2.读数据02 45 00 1E F7 B3 01 2B 16 68 FF 18 52 00 69 AF 8B 03FF 02 45 01 2B 16 68 00 1E F7 B3 FF 18 52 00 69 44 9F 81 18 26 83 033.退出02 45 00 1E F7 B3 01 2B 16 68 FF FF 58 CRC 03FF 02 45 01 2B 16 68 00 1E F7 B3 FF FF 06 CRC 03以下描述都是以采集表号序列号203384629的反向总有功电能为例:规约执行过程:(以下数据都是16进制)1 进入命令模式:上位机(主站)发送:02 45 0C 1F 67 35 00 00 00 01 00 01 AA 7E 0302 头45 标志位:表示可以采集一对多方式(Rs485,Rs422)0C 1F 67 35字节的表地址( 四个就是表序列号203384629化成16进制的四个字节)00 00 00 01 四个字节的源地址(可以随便定义)00 01 重发序列号高字节,低字节(可以自由定义)如果下次所发报文重发序列号和本次重发序列号相同,那么电表就会把本次所发的报文再次发给主站。 AA 7E CRC(CCITT16 bit 校验)从头到校验之前的字节数据进行CRC校验,算法后面会附带03 结束符下位机(电表)发送:02 45 00 00 00 01 0C 1F 67 35 00 01 06 2E 4B 0302 头45标志位:表示可以采集一对多方式(Rs485,Rs422)00 00 00 01 四个字节的主站源地址0C 1F 67 35 四个字节的电表地址00 01 重发序列号06 确认OK。如果电表认为主站所发报文出错,此字节就是18。2E 4B CRC校验03 结束字符2 .登入命令:上位机发送(主站):02 45 0C 1F 67 35 00 00 00 01 00 00 4C 45 44 4D 49 2C 49 4D 44 45 49 4D 44 45 00 10 42 35 0302 头45标志位:表示可以采集一对多方式(Rs485,Rs422)0C 1F 67 35 四个字节的表地址00 00 00 01 四个字节的源地址00 00 重发序列号高字节,低字节(进入命令模式是00 01 ,现在是00 00)4C 表示是登入电表45 44 4D 49 用户名EDMIASCII玛2C ,的ASCII玛49 4D 44 45 49 4D 44 45 密码:IMDEIMDE的ASCII玛00 终止字节(表示前面用户名和密码到现在开始结束)10 42 35 (两个字节的CRC,那为什么是三个字节呢.解释如下)特别注意:在此规约中,上行报文在组织报文好后,再要对整个报文进行扫描一遍,如发现在除了02,尾03的其他报文中,有02,03,10,11,13,就把此报文变为两个字节10,40+此字节数据,这样做的目的是在数据体中区分一些特殊字符。02 10,4203 10,4310 10, 5011 10, 5113 10, 53所以CRC原来的报文应该是02 35,但是由于有02,所以把02分为10,42,CRC因此就变成10,42,35了。同样的,在主站接收从表计发来的报文中,如果有10,就把10去掉,10后面的那个字节数据减去42才是真正的数据,然后再报文进行各种数据判断和校验。下位机(电表)发送:02 45 00 00 00 01 0C 1F 67 35 00 00 06 1D 7A 0302 头45标志位:表示可以采集一对多方式(Rs485,Rs422)00 00 00 01 四个字节的主站源地址0C 1F 67 35 四个字节的电表地址00 00 重发序列号06 确认OK。如果电表认为主站所发报文出错,此字节就是18。1D 7A CRC校验03束字符3.对电表的读上位机发送(主站):读取有功反向总电能累计量(寄存器地址 0069)02 45 0C 1F 67 35 00 00 00 01 00 00 52 00 69 44 CA 24 0302 头45 标志位:表示可以采集一对多方式(Rs485,Rs422)0C 1F 67 35字节的表地址( 四个就是表序列号203384629化成16进制的四个字节)00 00 00 01 四个字节的源地址(可以随便定义)00 00 重发序列号52 功能玛:R的ASCII玛,说明是读00 69寄存器地址44 标志位(D)的ASCII玛,说明时读取Double型的数据CA 24 CRC校验下位机(电表)发送:02 45 00 00 00 01 0C 1F 67 35 00 00 52 00 69 40 55 5C E5 AB 16 80 00 3A 46 0302 头45标志位:表示可以采集一对多方式(Rs485,Rs422)00 00 00 01 四个字节的主站源地址0C 1F 67 35 四个字节的电表地址00 00 重发序列号52功能玛:R的ASCII玛,说明是读00 69寄存器地址40 55 5C E5 AB 16 80 00 数据内容根据IEEE float Point 算法来计算所得是85.4515,IEEE float point算法后面会附带3A 46 CRC校验03结束字节 4退出电表:上位机发送(主站):02 45 0C 1F 67 35 00 00 00 01 00 01 58 00 EA FA 0302 头45 标志位:表示可以采集一对多方式(Rs485,Rs422)0C 1F 67 35字节的表地址( 四个就是表序列号203384629化成16进制的四个字节)00 00 00 01 四个字节的源地址(可以随便定义)00 01 重发序列号58 功能玛 退出电表00 空终止符EA FA CRC校验03结束字节下位机(电表)发送:02 45 00 00 00 01 0C 1F 67 35 00 01 06 48 2E 03(解释如上)这样整个采集过程就此结束以上的红颜色部分要特别注意附件A CCITT16 bit CRC算法 (查表法)Const ccitt_16:array 0.255 of Word = ( $0000,$1021,$2042,$3063,$4084,$50A5,$60C6,$70E7, $8108,$9129,$A14A,$B16B,$C18C,$D1AD,$E1CE,$F1EF, $1231,$0210,$3273,$2252,$52B5,$4294,$72F7,$62D6, $9339,$8318,$B37B,$A35A,$D3BD,$C39C,$F3FF,$E3DE, $2462,$3443,$0420,$1401,$64E6,$74C7,$44A4,$5485, $A56A,$B54B,$8528,$9509,$E5EE,$F5CF,$C5AC,$D58D, $3653,$2672,$1611,$0630,$76D7,$66F6,$5695,$46B4, $B75B,$A77A,$9719,$8738,$F7DF,$E7FE,$D79D,$C7BC, $48C4,$58E5,$6886,$78A7,$0840,$1861,$2802,$3823, $C9CC,$D9ED,$E98E,$F9AF,$8948,$9969,$A90A,$B92B, $5AF5,$4AD4,$7AB7,$6A96,$1A71,$0A50,$3A33,$2A12, $DBFD,$CBDC,$FBBF,$EB9E,$9B79,$8B58,$BB3B,$AB1A, $6CA6,$7C87,$4CE4,$5CC5,$2C22,$3C03,$0C60,$1C41, $EDAE,$FD8F,$CDEC,$DDCD,$AD2A,$BD0B,$8D68,$9D49, $7E97,$6EB6,$5ED5,$4EF4,$3E13,$2E32,$1E51,$0E70, $FF9F,$EFBE,$DFDD,$CFFC,$BF1B,$AF3A,$9F59,$8F78, $9188,$81A9,$B1CA,$A1EB,$D10C,$C12D,$F14E,$E16F, $1080,$00A1,$30C2,$20E3,$5004,$4025,$7046,$6067, $83B9,$9398,$A3FB,$B3DA,$C33D,$D31C,$E37F,$F35E, $02B1,$1290,$22F3,$32D2,$4235,$5214,$6277,$7256, $B5EA,$A5CB,$95A8,$8589,$F56E,$E54F,$D52C,$C50D, $34E2,$24C3,$14A0,$0481,$7466,$6447,$5424,$4405, $A7DB,$B7FA,$8799,$97B8,$E75F,$F77E,$C71D,$D73C, $26D3,$36F2,$0691,$16B0,$6657,$7676,$4615,$5634, $D94C,$C96D,$F90E,$E92F,$99C8,$89E9,$B98A,$A9AB, $5844,$4865,$7806,$6827,$18C0,$08E1,$3882,$28A3, $CB7D,$DB5C,$EB3F,$FB1E,$8BF9,$9BD8,$ABBB,$BB9A, $4A75,$5A54,$6A37,$7A16,$0AF1,$1AD0,$2AB3,$3A92, $FD2E,$ED0F,$DD6C,$CD4D,$BDAA,$AD8B,$9DE8,$8DC9, $7C26,$6C07,$5C64,$4C45,$3CA2,$2C83,$1CE0,$0CC1, $EF1F,$FF3E,$CF5D,$DF7C,$AF9B,$BFBA,$8FD9,$9FF8, $6E17,$7E36,$4E55,$5E74,$2E93,$3EB2,$0ED1,$1EF0);function Edmi_Create_crc16(var ptx:array of Byte ;Const len:integer ):Word;Var Crc:Word; i:integer;begin crc := 0; for i:=0 to len-1 do begin crc

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论