/********************************************************************************** RS485协议(9600bps,无奇偶校验位,1位停止位),格式如下: Address | Function | Data | CRC(H,L) | 8bits | 8bits | N x 8bits| 16bits | 地址为一个字节(范围为1~256),此地址表示本机在网络上的地址,由PC配置 功能号为一个字节(数据为1,2,3,4,5,6,15,16) Data(H,L) 实际数据,长度为0~N CRC使用了2个字节)数据使用大端模式,高位字节在前,和标准CRC16相同,FUNCTION=1有一个数据包有CRC实际值,你可用你的PC软件计算后测试一下。 以下示例Address = 1,以后这个地址可由PC软件设定读取或写入那个机的地址 ------------------------------------------------------------------------------------ FUNCTION = 1:读取风机状态和加热状态制冷状态标志 可以读取部分或全部状态标志位的的数据,为简化PC的开发,PC软件可一次读取全部状态标志位的数据) PC发出数据格式: 0x01,0x01,0x00,0x00,0x00,0x10, CRCH,CRCL,共8个字节 Address | Function | Register Address(H,L) | Length(H,L) | CRC(H,L) | 0x01 0x01 0x00,0x00 0x00,0x10 | 0x3D,0xC6 | 表示读取01地址的主机,功能号是01,位地址为00,共16个位的长度数据 返回数据格式: 1.当读取数据成功时返回数据: Address | Function | Length(H,L) | Data(H,L) | CRC(H,L) | 0x01 0x01 | 0x00,0x02 | A,B |CRC_H,CRC_L | 返回二个字节数据A,B: A.0:FAN1RunFlag 内风机1运行标志,为1表示运行 A.1:FAN2RunFlag 内风机2运行标志, 为1表示运行 A.2:FAN3RunFlag 外风机1运行标志, 为1表示运行 A.3:FAN4RunFlag 外风机2运行标志, 为1表示运行 A.4:FAN5RunFlag 外风机3运行标志, 为1表示运行 A.5:HFANRunFlag 排氢风机运行标志, 为1表示运行 A.6:加热开启标志 A.7:制冷开启标志 B.0:报警继电器吸合标志 B.1: 系统运行或停机标志 为1表示运行 B.2: 外风机运行标志 ------------------------------------------------------------------------------------ ------------------------------------------------------------------------------------ FUNCTION = 2:读取风机故障和温度故障等报警标志 可以读取部分或全部状态标志位的的数据,为简化PC的开发,PC软件可一次读取全部状态标志位的数据) PC发出数据格式: 0x01,0x02,0x00,0x00,0x00,0x10, CRCH,CRCL,共8个字节 Address | Function | Register Address(H,L) | Length(H,L) | CRC(H,L) | 0x01 0x02 0x00,0x00 0x00,0x10 | CRC_H,CRC_L | 表示读取01地址的主机,功能号是02,位地址为00,共16个位的长度数据 返回数据格式: 1.当读取数据成功时返回数据: Address | Function | Length(H,L) | Data(H,L) | CRC(H,L) | 0x01 0x02 | 0x00,0x02 | A,B |CRC_H,CRC_L | 返回二个字节数据A,B: A.0:INTFAN1Alarm 内风机1故障 为1时表示有故障 A.1:INTFAN2Alarm 内风机2故障 A.2:EXTFAN1Alarm 外风机1故障 A.3:EXTFAN2Alarm 外风机2故障 A.4:EXTFAN2Alarm 外风机3故障 A.5:HFAN2Alarm 排氢风机故障 A.6:INTTEMPError 柜内温感故障 A.7:INT_TEMP_HI 柜内高温告警 B.0:INT_TEMP_LO 柜内低温告警 B.1:EXTTEMPError 为排风口温感故障 B.2:EXTTEMP_HI 为排风口高温告警 B.3:FLIT 更换滤网告警 B.4: HVoltAlarm 高电压告警 B.5: LVoltAlarm 低电压告警 B.6: HPAlarm 压缩机高压告警 B.7: I3TEMPError 柜内温感故障 ------------------------------------------------------------------------------------ ------------------------------------------------------------------------------------ FUNCTION = 3:读EEPROM中的设置参数 可以读取部分或全部数据,最大数据共46个字,84个字节,为简化PC的开发,PC软件可一次读取全部数据) PC发出数据格式: 0x01,0x03,0x00,0x00,0x00,0x32, CRCH,CRCL,共8个字节 Address | Function | Register Address(H,L) | Length(H,L) | CRC(H,L) | 0x01 0x03 0x00,0x00 0x00,0x2A | CRC_H,CRC_L | 表示读取01地址的主机,功能号是05,字开始地址为00,共42个字,84个字节的长度数据 返回数据格式: 1.当读取数据成功时返回数据: Address | Function | Length(H,L) | Data(H,L) | CRC(H,L) | 0x01 | 0x03 | 0x00,0x54 | 总共有42个字(H,L),82个字节数据 |CRC_H,CRC_L | ------------------------------------------------------------------------------------ ------------------------------------------------------------------------------------ FUNCTION = 4:读取温度转速等数据 可以读取部分或全部数据,为简化PC的开发,最大数据共9个字,18个字节,PC软件可一次读取全部数据实际只使用9个字) PC发出数据格式: 0x01,0x04,0x00,0x00,0x00,0x07, CRCH,CRCL,共8个字节 Address | Function | Register Address(H,L) | Length(H,L) | CRC(H,L) | 0x01 0x04 0x00,0x00 0x00,0x0B | CRC_H,CRC_L | 表示读取01地址的主机,功能号是04,字地址为00,共7个字,14个字节的长度数据 返回数据格式: 1.当读取数据成功时返回数据: Address | Function | Length(H,L) | Data(H,L) | CRC(H,L) | 0x01 0x04 | 12 | 总共有9个字(H,L),18个字节数据 |CRC_H,CRC_L | 返回7个字数据: 第0个字(H,L):内风机1转速 第1个字(H,L):内风机2转速 第2个字(H,L):外风机1转速 第3个字(H,L):外风机2转速 第4个字(H,L):外风机3转速 第5个字(H,L):排氢风机转速 第6个字(H,L):内部温度 第7个字(H,L):外机回风温度 第8个字(H,L):模拟温度 当PC设定模拟温度成功时,返回当前设定模拟温度值,模拟温度的范围为120~280表示设定模拟温度成功,否则表示不在模拟温度模式 第9个字(H,L):当前电压 当前系统电压值,为600时表示电压为60.0V 第10个字(H,L):柜内温度 ------------------------------------------------------------------------------------ ------------------------------------------------------------------------------------ FUNCTION = 5:启动关闭机组清除更换滤网提示功能 PC发出数据格式: 0x01,0x05,0x00,0x0C,0x00,0x1D, CRCH,CRCL,共8个字节 Address | Function | PARM0(H,L) | PARM1(H,L) | CRC(H,L) | 0x01 0x05 0x00,0x00 | 0X00,0X00 | CRC_H,CRC_L | 表示读取01地址的主机,功能号是05,二个参数数据 此数据有几种固定格式: 启动机组(加热器和风机)功能:0x01,0x05, 0x00,0x00, 0x00,0x01, CRC_H,CRC_L 关闭机组(加热器和风机)功能:0x01,0x05, 0x00,0x00, 0x00,0x00, CRC_H,CRC_L 清除滤网提示功能: 0x01,0x05, 0x00,0x01, 0x00,0x01, CRC_H,CRC_L 模拟温度功能: 0x01,0x05, 0x00,0x02, 0x00,0xC8, CRC_H,CRC_L 模拟温度的范围为120~280,对应的温度为-30到100度。超过此范围表示为取消模拟温度的功能 返回数据格式: 1.当读取数据成功时返回数据:和接收到数据相同 Address | Function | PARM0(H,L) | PARM1(H,L) | CRC(H,L) | 0x01 0x05 0x00,0x01 | 0X00,0X00 | CRC_H,CRC_L | ------------------------------------------------------------------------------------ ------------------------------------------------------------------------------------ FUNCTION = 6:写EEPROM中的设置参数(只能写一个字参数) 此功能和FUNCTION = 16基本相同,只是FUNCTION = 6只能写一个EEPROM参数,但FUNCTION = 16可以在一个基地址的基础上顺序写多个参数 Address | Function | Register Address(H,L) | PARM(H,L) | CRC(H,L) | 0x01 0x6 | 0x00,0x00 0x08,0xFC | CRC_H,CRC_L| 表示写参数到01地址的主机,功能号是6,要求将PARM写入寄存器,寄存器基地址为0x0000 参数详见附A 返回数据格式: 1.当读取数据成功时返回数据:和接收到数据相同 Address | Function | Register Address(H,L) | PARM(H,L) | CRC(H,L) | 0x01 | 0x06 | 和接收到的相同 | 和接收到的相同 | CRC_H,CRC_L | ------------------------------------------------------------------------------------ ------------------------------------------------------------------------------------ FUNCTION = 15:此功能没有实际意义,PC软件不用发送此数据包 ------------------------------------------------------------------------------------ ------------------------------------------------------------------------------------ FUNCTION = 16:写EEPROM中的设置参数 Address | Function | Register Address(H,L) | Length(H,L) | X | Data | CRC(H,L) | 0x01 0x10 | 0x00,0x00 0x00,0x01 | 0x2 | HL | CRC_H,CRC_L| 表示写参数到01地址的主机,功能号是16,要写入寄存器基地址,连续写几个字(为2个字节倍数),可以一次写一个参数,也可一次写多个参数 X表示字节数,为2*Length,X为一个字节,实际中没有使用,Data为字格式,长度由Length(H,L)定义 返回数据格式:详见附A 1.当读取数据成功时返回数据:和接收到数据相同 Address | Function | Register Address(H,L) | Length(H,L) | CRC(H,L) | 0x01 | 0x10 | 和接收到的相同 | 和接收到的相同 | CRC_H,CRC_L | ------------------------------------------------------------------------------------ 当数据错误时的返回 1.当接收PC数据包但CRC出错时返回数据格式: Address | Function | Data | CRC(H,L) | 0x01 | 0x80+ID | 0x0C |CRC_H,CRC_L | 2.当接收PC数据包CRC正常但寄存器地址超出范围时返回数据格式: Address | Function | Data | CRC(H,L) | 0x01 | 0x80+ID | 0x02 |CRC_H,CRC_L | 3.当接收PC数据包CRC正常但寻址超出范围时返回数据格式: Address | Function | Data | CRC(H,L) | 0x01 | 0x80+ID | 0x03 |CRC_H,CRC_L | 4.当接收PC数据包CRC正常但控制器忙时返回数据格式: Address | Function | Data | CRC(H,L) | 0x01 | 0x80+ID | 0x04 |CRC_H,CRC_L | 如果当前在手动设定参数模式,也就是用户通过按键在控制板上设定时,此时同时在PC上设定参数(不是读取参数) 此时控制会返回控制器忙的信息,控制板不会接受PC的设定, PC上应显示,控制器忙,当前控制板正在手动设定模式,请退出手动设定模式后再由PC设定参数。 ------------------------------------------------------------------------------------ 附A: 对于FUNCTION = 3,6,16主要是读取和写入EEPORM的设置参数,此部分参数每一个都有一个出厂设定值,和允许 最大值(只能小于)和最小值(允许大于或等于),如果我们通过PC设置或内部错误超过了他定义的最大最小值的话,他会将全部参数恢复到出厂值 地址 出厂值 最大值 最小值 功能 0 00E9 180+52*2 180+21*2 //温控上限 1 00C8 180+17*2 180+5*2 //温控下限 2 0100 180+57*2 温控上限+4 //报警上限温度 3 00BD 温控下限-4 180+1*2 //报警下限温度 4 00FD 温控上限+30*2 温控上限 //变频空调最高速度时的温度 5 1234 0x4444 0x0000 //用户密码 (每一个数的设定范围是0~4) 6 014D 180+90*2 180+38*2 //B 外温度探头(冷凝器)高温报警温度 7 00B4 180+10 180+0 //内温度探头修正值 8 00B4 180+10 180+0 //外温度探头修正值 9 00BC 180+12 180+1 //制冷灵敏度 10 00BC 180+12 180+1 //加热灵敏度 //内风机1的参数 11 08FC 0x0DAC 0x07D0 //内风机1最高转速设置 12 05DC 0x076C 0x0320 //内风机1最低转速设置 13 0003 0x0005 0X0001 //反馈脉冲个数 //内风机2的参数 14 08FC 0x0DAC 0x07D0 //内风机1最高转速设置 15 05DC 0x076C 0x0320 //内风机1最低转速设置 16 0003 0x0005 0X0001 //反馈脉冲个数 //外风机1的参数 17 08FC 0x0DAC 0x07D0 //外风机1最高转速设置 18 05DC 0x076C 0x0320 //外风机1最低转速设置 19 0003 0x0005 0X0001 //外馈脉冲个数 //外风机2的参数 20 08FC 0x0DAC 0x07D0 //外风机2最高转速设置 21 05DC 0x076C 0x0320 //外风机2最低转速设置 22 0003 0x0005 0X0001 //反馈脉冲个数 //外风机3的参数 23 08FC 0x0DAC 0x07D0 //外风机3最高转速设置 24 05DC 0x076C 0x0320 //外风机3最低转速设置 25 0003 0x0005 0X0001 //反馈脉冲个数 26 258 258 1EA //高电压告警电压值 27 190 1E0 190 //低电压告警电压值 28 0 //保留 29 0 //保留 30 1 1 0 //当前报警打开 31 1 1 0 //当有报警时响 32 1 1 0 //华氏摄氏单位选择 33 30*2 198 0 //滤网更换时间 34 1 255 1 //本机RS485通迅地址 35 7 7 0 //制冷间隔时间 36 0 7 0 //加热间隔时间 37 1 1 0 //允许使用内风机1 38 0 1 0 //允许使用内风机2 39 1 1 0 //允许使用外风机1 40 0 1 0 //允许使用外风机2 41 0 1 0 //允许使用外风机3 42 5 30 0 //排氢风机运行时间 43 24 48 1 //排氢风机间隔起动时间 44 00B4 180+10 180+0 //柜内温度探头修正值 关于对温度的解码算法: 当前读到的温度数据我们定义为正偏摄氏温度,单片机中全部读取或写入的都是正偏摄氏温度,当为0时显示---,表示温感错误 不为0时,显示实际温度为(正偏摄氏温度-180)/2,最后一位表示是否为.5摄氏度 例如:当读数值为180时,为0度,为100时,为-40度。显示.5的摄氏度,如果为181则为0.5度,为201时表示为10.5度。