
Hat400通信协议.doc
7页1・ModBus基本规则:•所有RS485/232通信回路都应遵照主、从方式依照这种方式,数据可以在一个主站(如:PC) 和32个子站之间传递•主站将初始化的模块在RS485/232通信冋路上传递的所有信息•任何一次通信都不能从子站开始•在RS485/232冋路上的所有通信都以“信息帧”方式传递•如果主站或子站接收到含有未知命令的信息帧,则不予响应2.数据帧格式:通信传输为异步方式,并以字节(数据帧)为单位在主站和子站之间传递的每一个数据帧都是以 10/11位的串行数据流通信波特率:2400,4800,9600,19200bps 数据帧格式:起始位1位数据位8位奇偶校验位无停止位1位/2位4.通信规约:当通信命令发送至模块时,符合相应的地址码的模块接收通信命令,并除去地址码,读収信息, 如果没有出错,则执行相应的任务,然后把执行结果返送给发送者返送的信息中包括地址码、执行动作的功能码、执行动作后的数据以及错误校验码(CRC)o如果出错就不发送任何信息 •信息帧格式:初始结构地址码功能码数据区错误校验结束结构延时(相当于4 个字节的时间)1字节8位1字节8位N字节N*8位2字节16位延时(相当于4个 字节的吋间)•地址码(ADDRESS):单个模块的地址范围是1-254 •功能码(FUNCTION CODE)功能码是每次通信传送的第二个数据。
如果子机返冋的功能码的最高位是1(功能码>127),贝峨 明子机响应或数据出鉛下表列出功能码具体的含义及操作功能码定义操作01H读开关量读収单个或多个开关量03H读寄存器读取一个或多个寄存器数据05H置单个开关量置单个开关量1. 01H读开关量主机可以利用功能码为01的通信命令,读取模块内的各种开关最2. 03H读寄存器主机利用功能码为03H的通信命令,读取模块内的数值寄存器从模块读収的寄存器值都是2 字节(16位)子机响应的命令格式是子机地址、功能码、数据区及CRC码数据区的数据都是每二 个字节为一组的双字节数,口高字节在前3. 05H置单个开关量主机利用这条命令把单个开关量数据保存到模块内的位存储器•数据区(DMA):数据区随功能码不Mifu不同o•鉛误校验码(CRC):鉛误校验码采用CRC-16校验方法铅误校验码为2个字节,发送时低字节在前,高字节在后CRC-16码的计算步骤为:1、 置16位CRC寄存器为十六进制FFFF;2、 把一个8位数据与CRC寄存器的低8位相异或,把结果放于CRC寄存器;3、 把CRC寄存器的内容右移一位,用0填补最高位,检查移出位4、 如果最低位为0:重复第3步(再次移位)。
如果最低位为1: CRC寄存器与十六进制数A001进行异或5、 重复步骤3和4,靑到右移8次,这样整个8位数据全部进行了处理6、 重复步骤2到5,进行下一个数据处理7、 最后得到的CRC寄存器值即为CRC码,传送时将低8位先发送,高8位最后发送 注:CRC码的计算从 < 子机地址〉开始,除VCRC码〉的所有字节•信息帧格式举例◎功能码01H子机地址为00,读取起始地址为0000H的20H(十进制32)个开关量主机发送字节数举例(十六进制)子机地址101 送至子机01功能码101 读収开关量起始地址200 起始地址为000000读取个数200 读収28个开关量1CCRC码23D 山主机计算得到的CRC码C3子机响应字节数举例(十六进制)子机地址101返回子机地址01功能码101读収开关量读取字节数104 返冋开关量数量:28个开关量(共4个字节)数据1130地址为07-00内的内容数据2100地址为0F-08内的内容数据3193地址为17-10内的内容数据410A地址为1C-18内的内容CRC码21826山子机计算得到的CRC码开关量07-00的值用十六进制表示为30H,用二进制表示为00110000, ff关量07是字节的高位, 00 是低位,开关量07-00的状态是:OFF—OFF—ON—ON—OFF —OFF—OFF—OFF。
◎功能码03H子机地址为01,起始地址为0026H的3个点此例中点数据地址为:地址数据(十六进制)0026001400280014002A0005主机发送字节数举例(十六进制)子机地址101送至子机01功能码103读収点寄存器起始地址20026起始地址为0026读取个数20003读収3个点(共6个字节)CRC码2E400山主机计算得到的CRC码子机响应字节数举例(十六进制)子机地址101返冋子机地址01功能码103读収点寄存器读取字节数1063个点(共&个字节)点1数据20014地址为0026内的内容点2数据20014地址为0028内的内容点3数据20005地址为002A内的内容CRC码29171山子机计算得到的CRC码◎功能码05H子机地址为01,起始地址为0002H的1个开关量,置0002单元为1 此例中开关量数据地址为:地址数据(十六进制)000000001100020说明:十六进制值FF00强制开关量为1, 0000H强制为0,其它值则为非法且不影响开关量的状态主机发送字节数举例(十六进制)子机地址101送子机地址01功能码105强制开关量起始地址20000起始地址为0000数据2FF00开关量置1CRC码2CDFB山主机计算得到的CRC码子机响应字节数举例(十六进制)子机地址101 返冋子机地址01功能码105 强制开关量起始地址200 起始地址为000000数据2FF00开关量置1CRC码2CDFB由主机计算得到的CRC码•岀鉛处理当模块检测到了除CRC码出错以外的错误吋,必须向主机返送信息,功能码的最高位置1,即 子机返送的功能码是在主机发送的功能码的基础丄加128。
从主机接收到的信息如有CRC错误,则 被模块忽略子机返送的错误码的格式如下(CRC错误除外):地址码1字节功能码1字节(最高位是1)错误码1字节CRC码2字节错误码定义为:错误码说明描述01非法的功能码接收到的功能码不支持02非法的数据地址指定的地址超出子机的范围03非法的数据值接收到主机发送的数据值超出相应地址的数 据范围附录:地址和数据表1:功能码01H所映射的开关量区开关量ilfeill: (Address)项目(Item)说明OOOOH1#开关合闸/分闸为1合闸,为0分闸0001H1#电压正常为1止常,为0异常0002H2#开关合闸/分闸为I合闸,为0分闸0003H2#电圧正常为1止常,为0异常0004H自动/手动为1自动,为0手动0005H1#主用/备用为1主用,为0备用0006H2#主用/备用为1主用,为0备用0007H油机起动输出1:开机输出 0:停机输出0008H严重故障勺为1故障,为0无故障0009H1#开关故障(过流或短路)为1故障,为0无故障分闸000AH2#开关故障(过流或短路)为1故障,为0无故障分闸000BH1#合闸失败为1有效000CH2#合闸失败为1有效000DH1#分闸失败为1有效000EH2#分闸失败为1有效000FH保留未定义00I0H激告警*3为1告警,为0无告警0011H1#电压过高为1过高,为0止常00I2H1#电压过低为1过低,为0正常0013H1#缺相为1缺相,为0不缺相00I4H2#电圧过高为1过高,为0止常0015H2#电圧过低为1过低,为0正常00I6H2#缺相为1缺相,为0不缺相0017H负载过流为I过流,为0止希’0018H1#过频为1过频,为0正常0019H1#欠频为1欠频,为0正常001AH2#过频为1过频,为0正常001BH2#欠频为1欠频,为0正常*1:严重故障包JS1#,2#开关合闸失败,开关分闸失败,开关故障。
2:当严重故障为1时,报警输出有效,输出延时可通过编程实现3: 一般告警包括1#,2#电压过高,电压过低,缺相,过频,欠频和负载过流农2:功能码03H所映射的数据区数据区(DATA)地址(Address)项目(Item)说明OO(X)HUabl1#AB相电压0002HUbcl1#BC相电压0004HUcal1#CA相电压0006HUab22# AB相电压0008HUbc22#BC相电压000AHUca22# CA相电压000CHUal1# A相电压000EHUbl1#B相电压0010HUcl1#C相电压0012HUa22# A相电压0014HUb22# B相电压0016HUc22# C相电压0018HlaA相负载电流001AHlbB相负载电流001CHIcC相负载电流001EHFl1#频率0020HF22#频率0022H保留保留0024HP视在功率(Kva)表2:功能码05H所映射的开关量区地址(Address)项目(Item)说明0000H遥控1#开关合闸置1合闸,置0无效0001H遥控1#开关分闸置1合闸,置0无效0002H遥控2#开关合闸置1合闸,置0无效0003H遥控2#开关分闸置1合闸,置0无效0004H自动/乎动设置1:白动0:手动0005H1#主用状态设置0:备用1:主用*0006H2#主用状态设置0:备用1:主用**:如果1#已设为主用状态,当2#设为主用状态时,自动将1#设为备用状态。
如果2#已设为主用状态,当1#设为主 用状态时.自动将2#设为备用状态注:用功能码1和3读值时,中间间隔应大于200ms即接收到功能码1的返冋值以后,延时大于200ms后,再用功能 码3读值。












