本控制器软件通讯协议:Ver 32009-07-07 更新一、通讯数据格式说明: 启动通讯电平6字节(AAH、55H、AAH、55H、AAH、55H) + 通讯同步头6字节(EBH、90H、EBH、90H、EBH、90H) + 控制器ID(5字节,类型字符串+编号) + 命令 (1字节)(具体参见第三部分:命令说明) + 数据包长度(1字节,数据内容的字节数,最大不超过200字节) + 数据内容 + CRC循环冗余校验码(2字节,高字节在前) + 7FH(结束码)例如:计算机对 ID = ‘I01’0016H的I01系列控制器发送实时监测命令串AA 55 AA 55 AA 55 EB 90 EB 90 EB 90 ‘I01’ 00 16 A0 00 xx xx 7F 注:校验范围:发送端校验前清零校验码,然后对‘数据包长度’+9个字节(即从ID的第一个字节开始,到‘结束码’前的一个字节为止)的数据进行运算,将结果写入校验字,然后将组装好的数据串发送出去;接收端对去掉同步头包含校验码的全部接收数据(不包括结束码)进行校验,结果为0正常数据包,不为零则数据包异常;上例中即对‘I01’ 00 16 A0 00 00 00 共9个字节进行校验,然后用校验结果替换掉最后2字节的00 00例如对上例的回应如下:AA 55 AA 55 AA 55 EB 90 EB 90 EB 90 12字节启动同步头‘I01’ 00 16 A0 2D ID、命令、数据长度15 2B 15 1F 15 1F 15 2B 00 00 00 00 15 1F 00 00 00 00 9个2字节参数00 00 00 00 00 00 00 00 00 0E 00 00 07 B0 00 56 00 02 9个2字节参数00 00 00 00 00 00 20 80 00 9个单字节参数71 C7 7F 2字节校验码 1字节结束码 二、预说明如下:1、 控制器对启动通讯电平AA 55 AA 55 AA 55不识别;为了节省有些设备也不发送,因此上位机软件对此6字节也不敏感2、 6字节启动通讯电平 + 6字节通讯启动同步头12个字节 以下简写为“同步头”;3、 电压、电流等浮点数据均表示为实际数值100倍的2字节整型数,如12.5V,表示为1250à0x04E2(16进制2字节整形数),请自行转换显示;4、 2字节以上整型数均为高字节在前,低字节在后的顺序传递;5、 以下提到的时间数据—年月日时分秒,均为数值的十进制BCD码,年数据仅为最后2位数,如08H 11H 20H21H38H40H 表示08年11月20日21时38分40秒;6、 ID为5字节数据,前3个字节为类型代码字符串,后2个字节为编号的16进制数7、 后续增加的命令遵循以上原则;8、 设备的显示数据误差±2%以内。
三、命令字节定义如下: 1、 命令 A0H(读取即时采集数据):用于实时监测具体发送格式及响应格式:主机发送:同步头+ ID + A0H + 00H + CRCH + CRCL + 7FH从机回送:同步头+ ID + A0H + 0DH + 采集数据串 + CRCH + CRCL + 7FH采集数据串内容及顺序:(除标记注明的外,参数均为2字节)阵列电流+阵列电压+ 蓄电池电压 +负载电流 + 蓄电池温度+剩余电量百分比+ 3字节状态标志串;² 光电池阵列电压、蓄电池电压、光电池阵列电流、负载电流、蓄电池温度(1字节)、剩余电量百分比(2字节),共6个参数,10字节;² 状态标志串: 3字节,按顺序分别说明如下: Bit7Bit6Bit5Bit4Bit3Bit2Bit1Bit0光电池00连接/断开不存在防反失效开关失效蓄电池01超压过放欠压过充负载10连接/断开失控短路过载 Bit7、Bit6区分光电池、蓄电池、负载; Bit4 =1表示工作连接;=0表示没有连接; Bit3~ Bit0表示状态标志:=1:表示相应的状态出现;=0:表示该状态未出现; 未注明的位为保留位,通常为0; 2、 命令 A1H(读取控制参数数据):具体发送格式及响应格式:主机发送:同步头 + ID + A1H + 00H + CRCH + CRCL + 7FH从机回送:同步头 + ID + A1H + 0FH + 控制参数串 + CRCH + CRCL + 7FH控制参数数据串内容及顺序(除标记注明的外,参数均为2字节):额定电压(1字节)+ 蓄电池总容量 +提升充电压 + 浮充电压 + 恢复提升电压 + 过放恢复电压+过放电压 + 温度补偿系数(1字节)+ 额定负载电流(1字节)² 额定电压:1字节,取值仅限于1、2、4,对应12、24、48V系统² 蓄电池总容量:相应额定电压等级下的等效总Ah数 = 单体Ah * 并联组数;修改范围100~9999;² 提升电压~过放电压:设备理论控制点电压值;此参数的表示方式参见“预说明”的第3条;额定电压提升电压浮充电压直充恢复欠压过放电压过放恢复12V上限15.0013.8013.5012.4011.1012.80下限13.8013.2012.7011.6010.2012.20默认14.4013.6012.8012.0011.4012.4024V上限30.0027.6027.0024.8022.2025.60下限27.6026.4025.4023.2020.4024.40默认28.8027.2025.6024.0022.8024.8048V上限60.0055.2054.0049.6044.4051.20下限55.2052.8050.8046.4040.8048.80默认57.6054.4051.2048.0045.6049.60² 温度补偿系数:默认5mV/℃/2V,可调整的范围0~9;² 额定负载电流:默认30A,调整范围:仅限于20、30、40、50A(出厂设定,用户不可调整)3、 命令 A2H(写入控制参数数据):具体发送格式及响应格式:主机发送:同步头 + ID + A2H + 0FH + 控制参数串 + CRCH + CRCL + 7FH从机回送:同步头 + ID + A2H + 10H + 控制参数串 + 写入标志 +CRCH + CRCL + 7FH控制参数串内容及顺序同命令A1的控制参数串内容,写入标志字节为成功标志,=1:成功;=0:不成功,重发;4、 命令 A3H(读取控制器时钟):具体发送格式及响应格式:主机发送:同步头 + ID + A3H + 00H + CRCH + CRCL + 7FH从机回送:同步头 + ID + A3H + 07H + 时间 + CRCH + CRCL + 7FH时间:按顺序为年、月、星期、日、时、分、秒,共7个字节 5、 命令 A4H(时间写入控制器):具体发送格式及响应格式:主机发送:同步头 + ID + A4H + 07H + 时钟+ + CRCH + CRCL + 7FH从机回送:同步头 + ID + A4H + 08H + 时钟+ 写入标志 + CRCH + CRCL + 7FH回送本机设置后日历时钟数值,可以让上位机判断是否成功地正确设置。
发送、回送时钟的内容均为:年、月、星期、日、时、分、秒数值写入标志字节,=1表示已经写入时钟芯片, = 0 表示写入不成功6、 命令 A6H(读取历史数据记录)发送格式及响应格式:主机发送:同步头 + ID + A6H + 00H + CRCH + CRCL + 7FH从机回送:同步头 + ID + A6H + xxH + 1~4条记录数据 + CRCH + CRCL + 7FH记录数据格式:负载电流+充电电流+蓄电池电压+光电池电压+机内温度+蓄电池温度+年月日时分(各1字节)+状态(单字节)状态字节定义:Bit7Bit6Bit5Bit4Bit3Bit2Bit1Bit0未使用=1RTC异常=0正常=1温度传感器异常=0正常=1开路/超压=0正常=1过载=0未过载=1短路=0未短路=1过放=0未过放=1充电=0未充7、 AAH(读取下位机ID)(未完善,暂使用ID掩码 = ’I01’01,广播方式)发送格式及响应格式:主机发送:同步头 + ID掩码 + AAH + 00H + CRCH + CRCL + 7FH从机回送:同步头 + ID + AAH + 05H + 5字节ID + CRCH + CRCL + 7FH8、 命令 ABH(修改下位机ID)(未完善)发送格式及响应格式:主机发送:同步头 + 旧ID + ABH + 02H + 新ID编号 + CRCH + CRCL + 7FH从机回送:同步头 + 新ID + ABH + 02H + 新ID编号 + CRCH + CRCL + 7FH此命令回应后,上位机判断返回的ID编号与发送的一致,同时修改站点资料相应ID编号,从下一次通讯开始使用新ID;不一致则重发该命令;以上所列为控制器所能响应的命令; 附本控制器软件所用CRC校验源代码如下://--------------------------------------------------------------------------------------------------------------------------////功 能:CRC循环冗余校验 ////参 数:2个,CRC_Buff,无符号字符指针,被校验的数据首址; crc_len,被 //// 校验数据长度,包括两个字节的CRC码 ////返 回:无符号双字节整数,CRC循环冗余校验码 ////-------------------------------------------------------------------------------------------------------------------------//WORD CRC(BYTE *CRC_Buff,BYTE crc_len){ BYTE crc_i,crc_j,r1。