多彩编程 多彩编程MZPH · CODE BLOG
ARTICLE DETAIL

文章详情

深耕前端与后端开发技术的一线实战笔记与踩坑复盘。

中央空调集控网关实战:Modbus协议统一18个品牌

中央空调集控网关实战:Modbus协议统一18个品牌 简介这份PDF资料聚焦Modbus通讯协议在中央空调控制中的落地应用面向暖通空调行业技术人员、智能家居集成商及楼宇自控开发者帮助解决多品牌空调设备接入集控网关时的协议选型、地址配置与调试难题。资源包内含1个PDF文件大小约2.32MB内容围绕RS485、ASCII、RTU、TCP四类协议展开并逐一梳理大金、日立、东芝、格力、美的、海尔、三菱、松下等18个知名品牌的识别码、接线方式与集控地址设置方法。资料还给出模拟器调试流程说明在无空调设备时如何借助USB转485工具完成波特率、数据位、停止位与校验位配置并通过串口助手进行控制与状态查询。目前已有3482人学习下载适合需要快速掌握品牌兼容性差异、提升系统集成效率的读者参考。1. 拆开一台中央空调集控网关Modbus 协议怎么把 18 个品牌拉到同一张网上手里拿到一台浅灰色金属壳的集控网关DC9~24V 供电推荐 12V/1A功耗标 1W尺寸 105×87×58mm工作温度 -40℃~85℃。第一反应不是看说明书而是翻到接口协议那一页——RS485 标配协议自定义和 MODBUS 自适应UART 标配固定自定义协议网络接口选配自定义和 MODBUS-TCP 自适应KNX 选配标准协议。所有品牌空调的对接协议都是相同的这句话是整个方案的核心卖点。中央空调多联机系统里大金、格力、美的、日立、东芝、三菱重工、三菱电机、海尔、松下、特灵、麦克维尔、三星、富士通、奥克斯、乐金、志高、博世、威能这些品牌各自跑着私有总线协议想把它们统一接入楼宇自控或智能家居平台传统做法是每个品牌配一套原厂网关成本高、协议杂、维护烦。这台网关的思路是用一颗 MCU 同时适配 18 种品牌的内外机通信协议对外只暴露一个 Modbus 接口。对做暖通集控、智能家居集成、楼宇节能改造的工程师来说这意味着你只需要会 Modbus 就能控制所有品牌的内机不用去啃每家原厂的协议文档。2. Modbus 自适应与品牌识别码网关设置里的三个关键参数2.1 上电后的三步设置地址、品牌、协议网关上电后屏幕默认显示设备地址为 0。通过上下键修改 ADR 后的数字来改地址按 OK 确定支持范围 0~15。这个地址仅对 485 接口有效其他接口固定为 1。为了统一建议直接设为 1。地址设完紧接着设空调品牌。上电默认品牌为 0用上下键切换按 OK 确定。品牌码表如下编码品牌编码品牌0模拟器(MN)7美的/博世/威能(MD)1大金(DK)8海尔(HE)2日立/海信/约克(HT)9广州松下(PS)3东芝(TS)10大连松下(SX)4三菱重工(MH)11特灵/志高(TR)5三菱电机(ME)12富士通(FJ)6格力(GE)——品牌设完再设对接协议。默认协议为 0即自定义 MODBUS 自适应协议(DMR)。其他选项包括面板协议(DMM)和若干定制协议(TYW、TYZ、ZHH、IRC、DKN、HTC)。所有设置断电记忆只需设置一次。长按返回键 5 秒可恢复出厂设置重新配置地址和品牌。注意品牌码和协议码是两套独立参数先设品牌再设协议顺序不能反。设错品牌会导致网关搜不到内机设错协议会导致上位机收不到正确数据。2.2 RS485 物理层与 Modbus RTU 帧格式网关的 RS485 接口是标配A 接 A、B 接 B。上位机通过 USB 转 485 工具连接时串口参数固定为波特率 9600bps数据位 8停止位 1校验位 None。这是 Modbus RTU 的标准配置。Modbus RTU 帧结构在网关场景下的典型格式[设备地址 1字节] [功能码 1字节] [寄存器地址 2字节] [数据 2字节] [CRC16 2字节]设备地址就是前面设置的 ADR 值范围 0~15。功能码常用 03读保持寄存器和 06写单个寄存器。寄存器地址映射的是内机的开关、模式、温度、风速等状态。CRC16 校验是 Modbus RTU 的标配低字节在前。用 Python 发一帧读内机状态的请求import serial import struct def crc16_modbus(data): 计算 Modbus RTU 的 CRC16 校验 crc 0xFFFF for byte in data: crc ^ byte for _ in range(8): if crc 0x0001: crc (crc 1) ^ 0xA001 else: crc 1 return struct.pack(H, crc) # 低字节在前 # 配置串口9600, 8N1 ser serial.Serial( portCOM3, # 替换为实际 COM 口 baudrate9600, bytesizeserial.EIGHTBITS, parityserial.PARITY_NONE, stopbitsserial.STOPBITS_ONE, timeout1 ) # 构造读保持寄存器请求地址1功能码03起始寄存器0x0000读2个寄存器 frame struct.pack(BBHH, 0x01, 0x03, 0x0000, 0x0002) frame crc16_modbus(frame) ser.write(frame) # 读响应 response ser.read(9) # 1地址 1功能码 1字节数 4数据 2CRC if len(response) 9: addr, func, byte_count response[0], response[1], response[2] data struct.unpack(HH, response[3:7]) print(f设备地址: {addr}, 功能码: {func}, 数据: {data}) else: print(响应长度异常检查接线和串口参数)这段代码的逻辑先算 CRC16再拼帧发送最后解析响应。参数说明——port换成实际 COM 口0x01是网关地址0x0000是寄存器起始地址具体映射关系需要参考网关的寄存器表。如果响应为空先查 A/B 是否接反再查波特率是否匹配。2.3 模拟器模式没有空调也能调通链路模拟器(MN)是品牌码 0专门用于无空调情况下的对接调试。网关模拟识别到 8 台内机室温固定无故障。接线方式空调线不接USB 转 485 工具连网关 485A 接 A、B 接 B网关插 DC12V 电源。调试时在 PC 端打开串口助手配置 9600、8、1、None选对应 COM 口打开。通过屏显状态判断控制结果每次控制后查询状态来判断控制成功与否。这个模式的价值在于你可以先把上位机软件和 Modbus 通信链路全部调通再去现场接空调。现场调试时间能压缩一半以上。3. 品牌接线与集控地址设置从大金到乐金的实操差异3.1 大金与日立F1F2 总线与地址设置时机大金(DK)的接线网关 F1F2 接内外机 F1F2两芯线不分正负。RS485 接用户设备网口接路由器或用户设备UART 接无线模组焊在内部 P5A 插针上。功能限制方面原厂面板和遥控可拆可留支持跨外机最多 64 台内机。功能点支持开关、模式、温度、风速、室内温度、故障代码。大金的集控地址设置有个硬性时序必须先接入集控网关网关上电 30 秒后才可以设置地址。不设置集控地址无法搜索到任何内机。120 翻盖面板长按 TEST 4 秒显示 00等待 GROUP 闪烁点上下时间按钮改地址点确认完成。如果无法显示 00对空调内外机重新上电在显示 01 的时候设置地址无效。跨外机系统时接线需要连接外机上的外外 F1F2。日立/海信/约克(HT)的接线类似网关 F1F2 接内外机 1 2。单外机不跨系统时内外机系统地址用默认 0室内机内机地址推荐自动分配。手动指定则在每个室内机板拨码DSW6 设十位RSW1 设个位。同时按住温度上下键 3 秒以上查看地址显示 01 00 即为 0-1。多外机跨系统时室外机系统地址设冷媒系统 6 位拨码4 拨到 ON 为 4室内机系统地址用 DSW5 设十位、RSW2 设个位。跨系统需要拨码增加终端电阻将任意一台外机上的 DSW5 的 1 拨到 ON。注意日立空调不接原厂面板网关也可使用但没有原厂面板时空调重新上电不会保存上次断电状态。3.2 东芝与三菱系拨码细节与面板操作东芝/开利(TS)接线网关 F1F2 接内外机 U1U2。120 面板设置集控地址的步骤同时按住检测(TEST)设置(SET)清除(CL) 四秒进入设置用温度调节(TEMP)将项目编码(ITEM CODE)改到 03默认集控地址 99用定时调试(TIME)将 99 改为目标地址推荐从 1 开始递推按设置(SET)确定按检测(TEST)退出。86 面板则是线控器背面 6 拨到 on关闭状态下同时按住菜单和向下按键 10s 进入设置按时间键进入编辑模式按上下键到 03 选项按菜单键切换到 0099 闪烁按上下键修改地址范围从 0001 依次递增按时间键确定按开关退出。东芝必须设置集控地址才能搜索到内机设置完后原厂面板可以拆掉不影响集控控制。三菱重工/三菱重工海尔(MH)接线网关 G1G2 接内外机 A1B1。单外机推荐自动分配地址。手动指定时室内机系统地址用 SW3 设十位、SW4 设个位需要与外机系统地址相同推荐拨 00内机地址用 SW1 设十位、SW2 设个位每个内机地址不同。室外机系统地址用 SW1 设十位、SW2 设个位需要与内机系统地址相同。多外机跨系统时系统地址依次拨码为 00、01、02……三菱重工连接外机 A2B2 也可以使用但三菱重工和三菱重工海尔部分空调型号无法通用。三菱电机(ME)接线网关 F1F2 接内外机 TB3 的 M1M2。最多 50 台内机不支持室内温度和故障代码。单外机推荐自动分配。手动指定则在室内机拨码SW12 为十位地址SW11 为个位地址注意不要拨 SW14拨码缺口露出的数字为选择的数字默认为 0。内机关机状态下连按两次线控器右下角 check 进入自检显示 00过几秒显示地址按 onoff 退出。多外机需要将外机板上 CN41 跳帽改插到 CN40 上。三菱电机部分型号没有集控接口只能使用线控网关控制且必须保留原厂面板否则状态无法同步。3.3 格力、美的、海尔极性、拨码与遥控设置格力(GE)接线网关 H1H2 接内外机端子网关 H1 接 D1网关 H2 接 D2。格力两芯线需要区分极性。如果连接外机 G1G2 端子则网关 H1 接外机 G1网关 H2 接外机 G2。部分机型 D1D2G1G2 是反的接线需要颠倒。连接 D 口还是 G 口对应的内机地址可能不同网关会自动判断无需设置。集控地址可自动分配也可面板设置长按功能键 5 秒显示 C00四位数字即为集控地址按模式进入设置状态数值闪烁按上下键修改按确认键退出闪烁。美的/博世/威能(MD)接线网关 G1G2 接内外机端子网关 G1 接 P网关 G2 接 Q。如果连接外机 XY 端子则网关 G1 接外机 X网关 G2 接外机 Y。集控地址采用自动分配时确认室外机板上拨码为自动寻址模式自动寻址模式下集控地址可能会不连续。通过遥控设置按住遥控器锁定键 5 秒遥控器显示 00按温度上下键修改地址按开关键确定按复位键退出。美的部分原厂面板没有内机状态反馈内机状态和故障代码通过红外显示板查看。内机上报状态不定时偶尔会遇到同步不及时。只有在空调开启后才可修改模式温度风速且只有在控制指令跟当前状态不同时内机才会响应并发出蜂鸣。海尔(HE)接线网关 F1F2 接内外机 PQ。自动获取地址不需设置。线控面板在空调开启状态下长按功能按键 10 秒直到右上角显示功能码通过上下按键切换功能码为 F此时后面显示的数值为内机集控地址短按功能键退出。海尔协议有两种不同波特率网关会自适应无需设置。3.4 松下、特灵、麦克维尔及其他品牌广州松下(PS)接线网关 F1F2 接内外机 U1U2。仅支持产地为广州的型号。网关必须与内外机同时上电否则内机无法控制。可通过面板显示“共用”判断网关进入允许集控状态。集控地址可自动分配、拨码设置或面板设置。120 翻盖面板长按试运转显示 00按选择键右下角变为 01再次按选择键数字闪烁进入修改模式按定时上下键调整范围支持 001~063。大连松下(SX)接线相同自动分配无需设置设置完地址后原厂面板可以拆掉不影响集控控制。特灵/志高(TR)接线网关 F1F2 接内外机 F1F2。特灵空调总线为 485 接口可以不使用网关直接适配厂家 485 协议协议可联系技术支持索要。麦克维尔(MQ)、三星(SS)、富士通(FJ)、奥克斯(AU)、乐金(LG)的接线方式均为网关 F1F2 接内外机 F1F2总线为 485 接口可以不使用网关直接适配厂家 485 协议。这些品牌的功能点均支持开关、模式、温度、风速不支持室内温度和故障代码。4. 避坑排查集控网关现场调试的五个血泪教训4.1 搜不到内机地址没设或时序不对现象网关接线正确、供电正常但上位机读不到任何内机。原因大金和东芝必须设置集控地址才能搜索到内机。大金还有时序要求——必须先接入网关网关上电 30 秒后才能设地址。如果在显示 01 的时候设置地址无效。解决大金先等网关 30 秒确认面板显示 00 再设地址。东芝按面板操作步骤设完集控地址再搜索。如果大金无法显示 00对空调内外机重新上电。4.2 状态不同步原厂面板被拆或品牌特性现象控制指令发出后内机响应但上位机显示的状态和实际不一致。原因三菱电机必须保留原厂面板否则状态无法同步。美的内机上报状态不定时偶尔同步不及时。美的只有在控制指令跟当前状态不同时内机才会响应相同指令不响应也不发蜂鸣。解决三菱电机保留原厂面板。美的接受偶尔的同步延迟关键控制指令下发后主动查询一次状态确认。不要依赖内机蜂鸣判断指令是否生效。4.3 接线极性反了格力与美的的特殊情况现象网关供电正常但通信完全无响应。原因格力两芯线需要区分极性H1 接 D1、H2 接 D2。部分机型 D1D2G1G2 是反的。美的如果连接外机 XY 端子网关 G1 接 X、G2 接 Y。解决先用万用表确认端子定义再按对应关系接线。格力连接 D 口还是 G 口对应的内机地址可能不同网关会自动判断但接线不能错。如果通信仍不通尝试颠倒 H1/H2 或 G1/G2。4.4 松下网关上电顺序错误现象松下空调内机无法控制。原因松下网关必须与内外机同时上电否则内机无法控制。解决将网关和内外机接到同一路电源确保同时上电。可通过面板显示“共用”判断网关进入允许集控状态。4.5 跨系统跨外机拨码和终端电阻没设现象多外机系统只能搜到部分内机或通信不稳定。原因日立跨系统需要拨码不同的系统地址室内机和室外机都要设。三菱重工跨系统系统地址依次拨码为 00、01、02……三菱电机多外机需要将外机板上 CN41 跳帽改插到 CN40 上。日立跨系统还需要拨码增加终端电阻。解决按品牌要求逐一设置系统地址拨码确认终端电阻已启用。日立将任意一台外机上的 DSW5 的 1 拨到 ON。三菱电机确认 CN41 跳帽已改插到 CN40。5. 用 Python 封装一个跨品牌 Modbus 轮询脚本现场调试时我习惯先用脚本把 8 台模拟内机轮询一遍确认链路和寄存器映射没问题再切到真实品牌。下面这个脚本封装了连接、轮询、异常重试三个环节品牌码和寄存器地址按实际网关手册调整。import serial import struct import time from typing import Optional class ModbusGateway: def __init__(self, port: str, addr: int 1): self.ser serial.Serial( portport, baudrate9600, bytesizeserial.EIGHTBITS, parityserial.PARITY_NONE, stopbitsserial.STOPBITS_ONE, timeout0.5 ) self.addr addr staticmethod def _crc16(data: bytes) - bytes: crc 0xFFFF for b in data: crc ^ b for _ in range(8): crc (crc 1) ^ 0xA001 if crc 1 else crc 1 return struct.pack(H, crc) def _build_frame(self, func: int, reg: int, value: int 0) - bytes: 构造 Modbus RTU 帧func03 读func06 写 if func 0x03: frame struct.pack(BBHH, self.addr, func, reg, value) else: frame struct.pack(BBHH, self.addr, func, reg, value) return frame self._crc16(frame) def read_registers(self, reg: int, count: int 2) - Optional[tuple]: 读保持寄存器返回解析后的元组 frame self._build_frame(0x03, reg, count) self.ser.reset_input_buffer() self.ser.write(frame) resp self.ser.read(5 count * 2) if len(resp) 5: return None # 校验 CRC if self._crc16(resp[:-2]) ! resp[-2:]: return None data struct.unpack(f{count}H, resp[3:3 count * 2]) return data def poll_all(self, start_reg: int, count: int, interval: float 0.2): 轮询多个寄存器带重试 results {} for i in range(count): reg start_reg i * 2 for attempt in range(3): val self.read_registers(reg, 1) if val is not None: results[reg] val[0] break time.sleep(0.1) else: results[reg] None # 三次重试失败 time.sleep(interval) return results # 使用示例轮询 8 台内机的开关状态 gw ModbusGateway(portCOM3, addr1) status gw.poll_all(start_reg0x0000, count8, interval0.2) for reg, val in status.items(): print(f寄存器 0x{reg:04X}: {在线 if val is not None else 离线} 值{val})逻辑说明_build_frame根据功能码拼帧read_registers发请求后校验 CRC 再解析poll_all对每个寄存器重试三次失败标记为 None。参数说明——start_reg是起始寄存器地址count是轮询数量interval是轮询间隔。实际使用时寄存器地址映射需要对照网关手册不同品牌的寄存器偏移可能不同。验证方法先用模拟器模式跑一遍确认 8 台内机全部在线。再切到真实品牌对比网关屏显状态和脚本读取值是否一致。如果某个寄存器持续返回 None检查该内机的集控地址是否设置、接线是否松动。从那以后我每次上现场都先用模拟器把脚本跑通再切品牌码最后才接空调总线。这个顺序帮我省掉了至少三次返工。希望帮到你。本文还有配套的精品资源点击获取
返回列表