EDMI Command Line 协议(红相电度表规约)mk6
更新时间:2024-04-06 10:26:01 阅读量: 综合文库 文档下载
- edmi推荐度:
- 相关推荐
EDMI Command Line 通信协议
Command Line 是EDMI电能表与外部终端进行通信所用的协议。对于设计者,本规约提供了一整套与电能表直接通信的可行的方法。 Command Line为设计者提供详细读取EDMI电能表数据的方法。它是以命令行的格式发送一系列固定的指令。以下将详细表述了通过RS485或RS232通信口进行通信的方法。
命令的结构
所有命令均以字符“STX”开始,以字符“ETX”结束,并符合以下通用格式:
电能表对发送过来的命令产生应答,应答命令格式如下所示:
(16进制的“6”)----指令操作成功
1
起始和结束字符混淆。为了避免这样的问题,采用填充字符的方式处理。特殊控制字符由一个DLE(16进制的“10”)字符跟第六位置1的原字符组成,以双控制字符发送。在接收端,截下并除去所有的“DLE”字符,而对跟在“DLE”后面的字符的第六位清零。下述字符以这种方式处理:
(hex10)(hex50) 命令行的响应 命令行的格式定义如下: “test” 表示一个以0为结束符的字符串。(“”字符不发送) {5} 表示一个8位的整数。 [10] 表示一个16位的整数。 (1000) 表示一个32位的整数。 <1.23> 表示一个32位的浮点数。 注意:所有多字节数(包括整数和浮点数),首先传送高位(Motorola格式)。 接收成功时,应答码为 接收失败时,应答码为 2 代码 1 2 3 4 5 6 7 8 9 解释 不能写入(如:序列号已被设置) 操作未完成 寄存器未找到 访问被拒绝(安全原因) 字节数错误(要求的字节数不正确) 无效的类型码(内部错误) 数据未准备好(处理中),稍候再试 超出范围,输入值超出了定义的范围 未登录 表1命令行应答码 命令行模式 Command: Response: 这个初始化消息用于启动访问命令行。由于命令主体为空,CRC被省略,收到 登录命令 Command:L“id, pw” Response: 本命令用于登录系统。“id”、“pw”分别是用户名和密码,密码以0为结束符。 注意:对用户ID和密码的保密以及字符串以0结束。 3 退出命令 Command:x Response: 本命令用于退出系统。 注意:登陆电表进行数据通信后,请用该命令退出。 信息命令 Command:I[reg_num] Response: I[reg_num]/data/ 本命令将返回所要查询的寄存器信息。 /data/是以0为结束符的字符串: “ 为寄存器的类型,以字母表示(见前面的有关类型的列表)。字母序列在未来若需要扩展的话,将使用小写字母。由信息命令返回的是外部类型。 〈测量单位〉 测量单位 A D H M N P Q Amps 角度值 Hz(赫兹) 分钟 No Unit 百分比 功率因素 4 R S T U V W X Y Z Vars(无功功率) VA(视在功率) 秒 未定义 Volts(伏特) Watts(瓦特) Wh(有功) Varh(无功) Vah(视在) 表2信息命令单位 当寄存器不能正常访问时(任何原因,包括安全原因),将返回一个“N”和数据类型“U”(说明该数据类型未知)。在这种情况下 读寄存器命令 Command:R[reg_num] Response:R[reg_num]/data/ 这条命令返回寄存器存储的数据。所有寄存器将在后续章节《寄存器列表》中列出。32位寄存器地址码的前16位置为0。读命令后可加一个大写字母“D”,使得设置复费率电能量(TOU)的寄存器返回的是一个单精度浮点数,如果需要得到的是双精度浮点数可以在上面提 5 到的读寄存器命令后增加一个大写字母D。它的命令的格式是: R[reg_num]D 注意:对于不支持双精度浮点数的寄存器,这个“D”将是无效。 写寄存器命令 Command:W[reg_num] /data/ Response: or 这条命令功能是将数据写入寄存器。/data/的数据类型必须与寄存器的类型相匹配。所有的寄存器将在后续章节《寄存器列表》中列出。当指令执行成功,终端应答是码,而若试图对只读寄存器进行写操作时,应答则是 读扩展寄存器命令 Command:M(reg_num) Response Success:M(reg_num)/data/ Response Failure:Response Code 这条命令返回寄存器的数据。所有的寄存器将在后续章节中《寄存器列表》中列出。 使用这条命令,设置复费率的寄存器(TOU)总是以双浮点数而非单浮点数返回。 读多个寄存器命令 利用从特殊寄存器读的读扩展寄存器命令,就能读取多个地址不连 续的寄存器,从而提高整个效率。除了可读取地址非连续的寄存器外,其它与普通的读寄存器命令相似。对应于读多个命令的两种不同类 6 型,有两种特殊的寄存器。 FFF0----对整块寄存器的读取,返回一个错误码。如果出现一个读出错误,整条命令将返回一个“CAN”码。 FFF1----对每个寄存器的读取,均返回一个错误码。即使全部的读出都发生错误,整个应答仍返回操作成功信息。当一个读取错误时,结果代码n(“Result Code n”)将为非0值,并且/data/将被标准的错误提示字符串所代替。 (1) 多个读,单个错误码 Command: M <0000FFF0> Response Success: M <0000FFF0> /Data1 /Data2/.… /Data n/ Response Failure: CAN {Error code} (2) 多个读,多个错误码 Command: M <0000FFF1> Response Success/Failure: M <0000FFF1> {Result Code1}/Datat1/ {Result code2}/Data2/…. {Result Code n}/Data n/ 写扩展寄存器命令 Command: N(reg_num)/data/ Response: Response Code 这条命令将数据写入寄存器(寄存器地址码为reg_num)。数据的类 7 型必须与寄存器的类型匹配。所有的寄存器将在后继章节《寄存器列表》中列出。当命令执行成功,终端应答将是〈ACK〉码,而若试图对只读寄存器进行写操作时,应答则是〈CAN〉码。 写多个寄存器命令 利用从一个特殊寄存器读取的读扩展寄存器命令,就能读取多个地址不连续的寄存器,从而提高整个效率。除了可读取地址非连续的寄存器外,其它与普通的读寄存器命令相似。对应于读多个命令的两种不同类型,有两种特殊的寄存器。 (1) 多个写,单个错误码 Command: N <0000FFF0> Response Failure: CAN {Error code} (2) 多个写,多个错误码 Command: N <0000FFF1> Response Success/Failure: {Result Code1} {Result Code2}….{Result Code n} 只要有一个写入错误发生于任何一个寄存器,即使写入成功,仍将返回一个“CAN”码。数据的长度必须正确。如果一个应答码是非零的(如发生错误),则其后会跟随一个以0为结束符的错误码字符串。就整条信息而言,即使全部写入都错误,应答仍是成功的。 8 注意:当写多个寄存器时应小心。一个写入错误就会使命令终止,会产生一些寄存器已写入数据,而一些却没有被写入的情况。 扩展信息的命令 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_reg} Response Success: A(reg_num){num_reg}/data/ Response Failure: Response Code 本命令返回从地址reg_num开始的数值寄存器存储的数据。这里应注意读取的字符串的长度是可变的。 对于TOU复费率电能量寄存器,此命令返回双浮点数而非单浮点数。 写多个扩展寄存器命令 Command: B(reg_num){num_reg}/data/ Response: Response Code 9 本命令功能将数据写入以地址reg_num开始的数值寄存器中。 /data/的类型必须与寄存器的类型匹配。注意字符串长度是可变的,并且“J”型寄存器不能用这种方式写入。所有的寄存器将在后继章节《寄存器列表》中列出。当命令执行成功时,终端将返回〈ACK〉,而如果寄存器不能写入时,终端将反回〈CAN〉。 EziPort 数据命令 Command: none Response: S(reg_num){data type}/data/ 本命令仅有应答形式。EziPort利用这种格式发送数据。发送的寄存器在电能表中已进行设置,并且在以上格式中,数据每次仅发送到一个寄存器中。如果某个寄存器读取错误的话,这个寄存器就根本不能用于发送。 对于TOU复费率电能量寄存器,此命令返回双浮点数。 文件访问 测量信息存储于结构化文件中,以下详细介绍了这些命令。 文件访问----读命令 Command: FR(reg_num) (startrecord) [numberofrecords] [record offset][record size] Response: FR (reg_num)(Actual start record)[Actual number of records][Actual record offset][Actual record size]/data/ Response fail: Response Code 起始记录若过早,文件指针将向前跳到第一个记录上;若太迟,文件 10 指针将跳到最后记录,发送的文件将是个空记录文件。如果记录数太大,将减小为文件尾的值或块长度限定值。如果记录簇过大,可设置为记录的长度。如果记录长度过长,可减小为实际记录长度或块长度最大值。 文件访问----写命令 Command: FW(reg_num)(start record)[record offset][record size]/data/ Response: Response Code 如写入文件的数据在长度设置上的出现错误会引起写操作无法进行。 文件访问信息命令 Command: FI(reg_num) Response: FI(reg_num)(start record)(number of records)[record size]{file type}“File Name” Response Fail: Response code File type: Bit0: 可用于查找时间 文件访问----查找命令 Command:FS(reg_num)(startrecord){date}{month}{year}{hour} {minute}{second}{dir} 这里的“date/time”就是要查找的日期和时间。Response:FS(reg_num)(start record){date}{month}{year}{hour}{minute}{second}{result} 这里的“date/time”就是所要查找的日期和时间。 11 Response Fail: Response code 查找指定的时间。 Dir=0: 从起始记录开始往后查找,停在匹配的第一个记录,并给 出该记录的入口地址。当文件指针移过指定的时间而未能找到匹配的记录时,指针将指向指定时间的后一记录的入口地址。 Dir=1: 从起始记录开始往前查找,停在匹配的第一个记录,并给出该记录的入口地址。当文件指针移过指定的时间而未能找到匹配的记录时,指针将指向指定时间的前一记录的入口地址。 Result=0: 找到匹配记录。 Result=1: 到达文件末尾。 Result=2: 找到相邻时间的记录。 Result=3: 不能找到任何记录----测量时无时间标记。 Result=4: 测量时无记录数据。 扩展命令 Command: E(Destination’s#)(Source’s#)[Sequence]/normal command/ Response: E(Source’s#)(Destination’s#)[Sequence]/normal response/ E命令是为扩展命令行协议而设计的,允许多点通信和消息的重发、广播。所有其它命令都能通过“E”命令执行。 (Destination’s#) 目标地址: 电能表的序列号就是命令的目标地址。实际应用中只要将EDMI电能表的序列号直接转换为四个字节的 12 十六进制码。 (Source’s#)源地址:该地址是所需软件的序列号。 [Sequence]帧号:帧号是一个从1到32767的数字,并且对每次请求应该互不相同。 在应答中,源序列号和目的序列号相互交换,因此,所需软件的序列号此时在目的地址的位置上。 广播消息 序列号FFFFFFFF是一个广播地址,所有终端都能接收,不作出应答。 序列号FFFFFFFE是一个广播地址,所有终端都能接收,并作出应答。 序列号FFFFFFFD是一个广播地址(保留给RS485接口的站点使用),所有终端都能接收,且在随后的随机时间段内作出应答。最大的时间周期是由原来的命令来指定。 返回的包将用终端地址替换广播地址。 帧号 每次发送都必须有一个帧号,这个帧号应不同于前一序号。应答时带有相同的帧号,这样就可以以此校验这个应答是否对应于相应的请求。 重发命令采用与原先相同的序号。通过这种方式,如果电能表没有收到原先的请求,那么将作出应答,否则,则将上次发送的应答重新发送,但是命令并没有重新执行。电能表上次发送的内容保存在缓冲区中,一旦需要重发,便可再次发送。 帧号的最高有效位保留,并且通常情况下为0。有个特殊是帧号 13 65536,它从不重发。这可用于上次发送的未知帧号的情况。 如果在扩展命令执行了一个普通命令,扩展命令的应答就不可能重发,而扩展命令将以一个新的帧号重新执行。 命令行访问指南 本节将详细、逐步地说明利用命令行模式访问电能表的例子,同时也涉及了IEEE浮点格式的细节。 读电能表的例子 本例为读取电能表的序列号。从本手册的寄存器列表中,可找到存储序列号的寄存器地址是F002。 首先以一个STX开始,即十六进制的02, Hexadecimal: [02] Decimal: 2 接下来的内容由命令决定。读取寄存器的命令是“R”,即十进制的82。 Hexadecimal: [02]R Decimal: 2,82 要读取的寄存器的地址跟在命令后,高字节在前面: Hexadecimal: [02]R[F0][02] Decimal: 2,82,240,2 然后为这4个数加一个16位的CRC校验码。这个校验码在十六进制中是EE45,即十进制中的60997,分成两个8位的数,高字节放在前面。因此现在命令是: 14 Hexadecimal: [02]R[F0][02][EE][45] 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(EXT) 如下: Decimal: 2,82,240,16,66,238,69,3 这就是发送给电能表的数据。电能表将以如下格式的数据应答: Hexadecimal:[02][52][F0][10][42][39][33][30][30][30][30] [30][00][1B][10][42][03] Decimal: 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: 15 [02][52][F0][02][39][33][30][30][30][30][30][00][1B][02][03] Decimal: 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:[52][F0][02][39][33][30][30][30][30][30][00] Decimal: 82,240,2,57,51,48,48,48,48,48,0 第一个数字表示应答的类型。在本例中,第一个数字是82,即ASCII码的字母“R”,表示这是对一个读请求的应答。跟在后面的两个数字组成的F002是所读取的寄存器的地址,这些信息对于处理应答是十分有用的。没有应答类型时,数据如下: Hexadecimal: [39][33][30][30][30][30][30][00] Decimal: 57,51,48,48,48,48,48,0 通过查询本手册的列表,寄存器F002是字符串类型。数据由一系列字符组成,在字符串末尾用数字0表示结束。 我们可用ASCII码字符将这些数据表示为: Text: 9300000 16 用数字0表示结束。“930000”就是从电能表读到的序列号。 访问电能表的例子 为了访问电能表,必须获得授权,登录电能表,进行一定量数据的读、写,然后退出电能表,我们将用如下例子说明。 发送一个“Escape”字符,其后跟着只有起始和停止码的短信息。 Hexadecimal: [1B][02][03] Decimal: 27,2,3 返回一个确认〈ACK〉。 Hexadecimal: [02][06][06][A4][03] Decimal: 2,6,164,3 这是一个应答命令〈ACK〉,没有相关数据。 注意:该方式仅适用于RS232的通信方式,用于唤醒电表使用。多点的RS485通信方式不能使用。 使用登录命令“L”来登录电能表。出厂的缺省的用户名和密码分别为“EDMI”“IMDEIMDE”。 Hexadecimal: [02][4C][45][44][4D][49][2C][49][4D][44][45][49][4D][44][45][00][D9][69][03] Text: [02]LEDMI,IMDEIMDE[00][D9][69][03] 如果登录成功,将会发送一个〈ACK〉码。 Hexadecimal: [02][06][06][A4][03] Decimal: 2,6,6,164,3 17 如果登录不成功,将会发送一个〈ACK〉码。 Hexadecimal: [02][18][F5][5B][03] Decimal: 2,24,245,91,3 登录成功后,就可以对寄存器进行读、写操作。 如:读取序列号, Hexadecimal: [02][52][F0][10][02][EE][45][03] Decimal: 2,82,240,10,66,238,69,3 则应答如下: Hexadecimal:[02][52][F0][10][42][39][33][30][30][30][30][30][00][1B][10][42][03] Decimal: 2,82,240,10,66,57,51,48,48,48,48,48,0,27,16,66,3 当访问结束时,用“X”命令退出本次登录。 Hexadecimal: [02][58][BD][9F][03] Decimal: 2,88,189,159,3 正常退出时将返回一个〈ACK〉码。 Hexadecimal: [02][06][06][A4][03] Decimal: 2,6,6,164,3 注意: EDMI的应用程序REGTEST.EXE用于对电能表访问的测试。利用“-H”参数可以显示所有发送和接受到的字符。这对需求的测试是十分有用的。 18 若有一字节是十进制的DLE,带有“-H”参数的Regtest程序将显示跟在DLE后的字符,此字符的第6位没有设置。 例:REGTEST程序显示的[02][52][10][02][69][46][2B][03]将以[02][52][10][02][69][46][2B][03]发送。 为了在简单系统中简化操作,可以对请求进行测试(包括校验码)和发送。在可靠媒介中,对接受到的CRC的校验可以跳过,以避免任何计算CRC的操作,虽然这可能导致错误的数据被接受。 19 (hex10)(hex51)
(hex10)(hex53)
正在阅读:
EDMI Command Line 协议(红相电度表规约)mk604-06
黑马集合知识测试(带解析)02-01
初三(上)期中考试质量分析会发言稿01-16
hp惠普笔记本电池修复方法12-15
山东省青岛市经济技术开发区育才初级中学七年级语文上册 文言文04-05
模拟联合国基础知识05-01
鞭子任务08-19
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 规约
- 电度表
- 协议
- Command
- EDMI
- Line
- mk6
- 改进目标和措施概述
- 南开大学722新闻传播学基础2010年考研专业课真题及答案
- 会计基础课中例题及课后练习
- 全国通用高考物理二轮复习专题15力学实验学案
- 三菱PLC练习题
- 血液循环系统的组成
- 重要《管理学》(罗宾斯 第7版)复习笔记
- 化学选修五第一章《认识有机化合物》单元测试题及详解答案
- 对照检查找差距 交心剖析促改进
- 国际企业价值评估师分析师
- 2016年四川自考1月统考人员素质测评理论与方法06090
- 信息技术学科核心素养描述20150303(李艺)
- 加强纪律作风建设 促进公正廉洁执法
- 中央民族大学美术类近3年考试题及录取分数线
- 船舶常用英语(二)
- 现磨豆浆方法
- 苏教版小学科学五年级下册单元测试题 全册
- 详细的公司年会方案(完整版)
- 数据结构迷宫课程设计
- 2012年感动中国十大人物