开关量采集模块(DI)
- ✓ 搞懂开关量(数字量)是什么,和模拟量的区别
- ✓ 理解干接点 vs 湿接点输入的区别,知道展厅里哪种更常见
- ✓ 学会开关量采集模块的接线方法(传感器→模块→网络/485)
- ✓ 会用 Modbus 功能码 01 读 DI 线圈状态,拿到展厅场景联动所需的触发信号
- ✓ 拿到选型对比表和故障排查表
展厅联动逻辑的起点,90% 都是一个开关量:参观者按了按钮、走进了感应区、推开了展柜门……这些"发生了没有"的状态,对中控来说就是一个 0 或 1 的数字量(开关量)。
问题是,这些信号怎么进入中控?按钮的触点是物理触点,传感器输出的是干接点信号,中控软件走网络 Modbus TCP,两者中间那一环就是开关量采集模块(DI 模块)。它把物理世界的"开/关"信号收进来,转成 Modbus 可读的线圈状态,中控软件按地址读就能拿到。
这一篇把这一环讲透:原理、接线、Modbus 读法、展厅用法、选型和故障排查。
R2 内容,涉及工业模块接线和 Modbus 配置。电气参数(供电、隔离电压、防抖时间、寄存器地址)以你手上型号的官方说明书为准(文末来源);文中参数为说明性举例,以手册为准。
开关量是什么:展厅里无处不在的 0/1 信号
"开关量"就是只有两种状态的量——闭合/断开、高电平/低电平——在数字逻辑里就是 1 和 0。它和模拟量的区别一句话:模拟量是连续变化的(4-20mA 温度值),开关量只有两个值(按钮按/没按)。
展厅里的开关量输入来源:
- 按钮、触摸按键:参观者触发互动
- PIR 红外传感器(干接点输出型):人进入感应区
- 门磁:展柜门开/关状态
- 限位开关:机械展项的行程位置
- 光电传感器(NPN/PNP 开关量输出):物品检测
- 压力传感器(开关量型):踩踏/重量触发
- 各类传感器的报警触点输出
这些信号有的是"干接点",有的是"湿接点",接法不同——先搞清楚这个区别。
干接点 vs 湿接点:搞清楚这个接线才不乱
干接点(Dry Contact)
干接点就是一对触点,本身不提供电源。触点闭合 = 通路,断开 = 断路。它只告诉你"接通了没有",没有电压极性,没有高低电平之分。
典型的干接点输出设备:
- 门磁(磁吸闭合断开)
- 按钮开关(常开/常闭)
- 继电器输出触点
- 大多数 PIR 传感器的报警输出
DI 模块接干接点时,模块内部会提供一个检测电压(通常 5V 或 12V,以手册为准),触点闭合时电流流过,模块读到"ON";触点断开,模块读到"OFF"。
湿接点(Wet Contact)
湿接点是指信号端已经带有电压——外部设备把触点接通的同时,线上已经有源端电压(如 12V、24V DC)。DI 模块的湿接点输入是直接接受这个有源电压信号的。
湿接点要注意:
- 确认外部信号电压和 DI 模块的湿接点输入范围匹配(以手册为准,常见 5V~30V DC)
- 注意极性(正负端别接反)
- 不同通道的公共端(COM)是否独立,有些模块各通道公共地,有些隔离
展厅里干接点更常见,也更安全——接触点只是通断,没有电压风险,接反了也不会损坏设备。湿接点适用于那种传感器本身就输出有源信号(如带电源的 NPN 传感器拉低信号,或控制面板输出 24V 状态信号)的场合。不确定就用干接点接法,先让模块提供检测电压。
隔离:为什么 DI 模块需要隔离
展厅里不同展项的传感器,可能接在不同的电源(展柜有自己的 12V、控制柜有 24V),各自有各自的地(GND)。如果多个通道共享同一个 GND,不同设备之间的地位差会引起地环路电流,让 DI 读数出现误触发或通道相互干扰。
通道间隔离的 DI 模块:每个通道有独立的光耦隔离(或磁耦),通道之间电气完全隔开,不共 GND。这样哪怕各通道信号源的地电位差了几伏,也不会互相影响。
| 维度 | 通道共 GND(非隔离) | 通道间光耦隔离 |
|---|---|---|
| 抗地环路干扰 | 差 | 好 |
| 连接来自不同电源的传感器 | 可能有干扰/误触发 | 安全 |
| 长距离传感器接线 | 风险高 | 推荐 |
| 成本 | 低 | 略高 |
| 展厅建议 | 同一电源同一接地的短距离传感器 | 多区域、多电源的展厅优先选 |
防抖:为什么按钮会抖动、怎么消除
机械按钮触点闭合时,不是瞬间稳定到位的,而是会在几毫秒内来回弹跳几次(bounce)。没有防抖处理的 DI 模块,一次按钮按下可能被读到 3~5 次触发。在展厅联动里,这会造成一次按钮动作触发多次场景——明明按了一次,投影场景切了两遍。
DI 模块的防抖分两种:
- 硬件防抖:RC 电路平滑触点抖动,不需要软件处理
- 软件防抖(模块内置):模块固件在内部设定采样延时(如 10ms、20ms),超过延时仍稳定才确认状态变化
如何查和设置:参考你手上型号的说明书,部分科星 IO 模块支持通过 Modbus 写配置寄存器来设置防抖时间(以手册寄存器说明为准)。
接线方法
干接点接法(最常见)
传感器/按钮(干接点,两端无极性)
├── 一端 ──→ DI 模块的 DI+ 输入端(或 DI 端,以模块标注为准)
└── 另一端 ─→ DI 模块的 COM 端(公共端/检测地)
模块内部从 COM 端输出检测电压,经过触点回到 DI+ 端,触点闭合时回路形成,模块读 ON。
按钮的常开(NO)和常闭(NC)触点要选对:大多数展厅触发用常开(NO),平时断开、按下闭合;门磁报警类场合有时用常闭(NC),门打开时触点断开触发报警。接线前先用万用表量一下,确认是哪对触点。
湿接点(有源信号)接法
外部有源信号(如传感器输出端,带 12V/24V DC)
├── 信号正端 ─→ DI 模块的 DI+ 端
└── 信号负端/GND ──→ DI 模块的 GND 或 DI- 端(以模块手册为准)
注意:确认外部信号电压在模块的湿接点输入范围内(以手册为准),防止过压损坏模块。
RS485 总线挂多台模块
科星 DI 模块(RS485 型)可以多台挂在同一条 RS485 总线上:
工控机/串口服务器(RS485 口)
│ 485 总线(两芯,A 和 B,加公共地)
├──→ DI 模块 1(地址 1)──→ 传感器组 1
├──→ DI 模块 2(地址 2)──→ 传感器组 2
└──→ DI 模块 3(地址 3)──→ 传感器组 3
│
终端电阻(总线末端 120Ω,以手册建议为准)
每台模块配置唯一从机地址,中控轮询时按地址区分。总线末端两端接 120Ω 终端电阻(以手册建议的匹配方式为准,某些短距离场合可省,以实测为准)。
Modbus 读 DI 状态:功能码 01(读线圈)
开关量输入在 Modbus 里叫"线圈"(Coils),用功能码 01 读。
读线圈请求帧格式(Modbus RTU,以 Modbus 规范为准):
[从机地址 1B][功能码 01][起始线圈地址 2B][线圈数量 2B][CRC 2B]
举例:读地址为 1 的 DI 模块,从线圈地址 0x0000 开始读 8 路 DI,请求帧:
01 01 00 00 00 08 3D CC
└─┘ └─┘ └──┬──┘ └──┬──┘ └──┬──┘
地址 功能 起始 数量 CRC16
1 01 0000 8 (按规范计算)
模块应答(8 个线圈状态压缩进 1 字节,每位对应 1 路 DI,LSB 对应第 1 路):
01 01 01 [状态字节] [CRC]
状态字节示例:0x03 = 0000 0011 = 第 1、2 路 DI 为 ON
Python + pymodbus 读 DI 示例(Modbus TCP 版):
from pymodbus.client import ModbusTcpClient
# 替换为你的 DI 模块 IP(走网口型)或串口服务器 IP
client = ModbusTcpClient('192.168.1.60', port=502)
client.connect()
# 功能码 01 读线圈:从地址 0 开始读 8 路 DI(地址以手册为准)
result = client.read_coils(address=0, count=8, slave=1)
if not result.isError():
di_states = result.bits[:8]
for i, state in enumerate(di_states):
print(f"DI {i+1}: {'ON (闭合)' if state else 'OFF (断开)'}")
else:
print("读取失败:", result)
client.close()
你应该看到什么
- 未触发时:所有通道输出
OFF (断开) - 短接某路 DI 端子(模拟按钮按下)后再读:对应通道变
ON (闭合) - 如果按了以后读数不变:先查接线(端子是否紧固),再查 slave ID 和线圈地址是否对应这台模块的这个通道
- 同一总线多台模块时,每台 slave ID 必须唯一,否则会应答冲突
DI 模块和网络继电器 IO 的关系
DI 模块(只采集输入)和科星网络继电器/IO 控制器(同时有 DI 输入 + DO 输出 + 继电器)常被混淆。
| 维度 | DI 模块(纯输入) | 网络继电器/IO 控制器(含 DI+DO) |
|---|---|---|
| 功能 | 只读开关量输入 | 既读 DI、又控 DO(继电器通断) |
| 适用场景 | 集中采集大量传感器/按钮状态 | 既要采集输入、又要控制设备的综合 IO 点 |
| 通道配置 | 全部 DI | 混合 DI + DO,比例因型号而异 |
| 推荐用法 | 大量纯触发型传感器集中接入 | 展项既要感应输入又要控制灯光/电机的位置 |
展厅里两者常配合:纯 DI 模块负责把各展区的触发传感器全部采集进来,网络继电器 IO 负责执行联动动作(开继电器、控电源)。中控软件同时 Modbus 读 DI 模块和读写 IO 控制器。
展厅典型应用
互动展项触发采集
展厅互动区有 12 块展板,每块各有一个按钮(干接点)触发展项视频。用一台 16 路 DI 模块集中接入(留 4 路备用),Modbus TCP 上报中控,中控读到哪路 DI 闭合,就触发对应展板的播控指令。
大型展馆分布式采集
展馆面积大,传感器分布在 5 个展区,走一根 RS485 总线,每区挂一台 8 路 DI 模块,5 台共 40 路 DI 信号全部汇到 RS485 主线,串口服务器接局域网,中控软件轮询 5 个从机地址。
沙盘机械展项限位检测
沙盘上的机械运动展项,每个运动轴的两端各有一个限位开关(常闭,撞到限位触点断开)。DI 模块采集限位状态,中控读到限位触发立刻停止驱动信号,防止机械过行程。
选型对比表
| 维度 | 选项 | 怎么选 |
|---|---|---|
| 通道数 | 4/8/16/32 路 | 按展厅传感器总量选,留 10%~20% 余量;分布式可多台 |
| 输入类型 | 干接点 / 湿接点 / 两者 | 优先选两者兼容型,灵活应对不同传感器 |
| 隔离 | 通道间光耦隔离 / 公共 GND | 多区域、多电源场合选光耦隔离,减少干扰 |
| 防抖 | 硬件防抖 / 软件防抖(可配置) | 有按钮输入的场合要确认有防抖,无防抖会多触发 |
| 通信接口 | RS485 Modbus RTU / 网口 Modbus TCP | 网口更简单(直接进交换机);多模块挂总线选 RS485 |
| 供电 | 12V DC / 24V DC 宽压 | 和机柜统一供电规格(展厅常见 24V DC) |
| 安装方式 | 导轨安装 / 板卡 | 机柜内优先导轨型,整洁且易拆换 |
| 检测电压(干接点) | 5V / 12V | 以模块手册为准;12V 检测在干扰大的环境更可靠 |
故障排查表
| 现象 | 最可能的原因 | 怎么查 |
|---|---|---|
| 某路 DI 一直显示 ON(始终闭合) | 接线短路 / 按钮卡住 / 传感器输出异常 | 断开传感器端接线,看 DI 是否恢复 OFF;检查传感器本身 |
| 某路 DI 一直 OFF(按了也不动) | 端子接触不良 / 公共端 COM 没接 / 地址/通道对应错 | 用万用表测 DI 端子间阻值,闭合时应近 0Ω;检查 COM 端接线 |
| 按一次触发多次(抖动) | 模块无防抖或防抖时间太短 | 查模块防抖配置;中控软件侧加防抖逻辑(读到 ON 后 50ms 内不重复触发) |
| Modbus 读返回错误 | slave ID 错 / 功能码/地址超出范围 | 用 Modbus Poll 手动读确认从机地址和线圈地址 |
| RS485 总线上部分模块无响应 | 地址冲突 / 终端电阻缺失 / 某台模块 A-B 接反 | 逐一断开其他模块,单台测通;检查 A/B 极性一致;查终端电阻 |
| 两路 DI 相互干扰(一路动另一路跳) | 公共地(非隔离)地环路 | 换通道间隔离型模块;或把信号源共地 |
| 多台模块轮询时某台偶尔漏读 | RS485 总线通信质量差 / 中控轮询间隔太短 | 检查接线质量;延长轮询间隔(如从 50ms 改 100ms) |
| 模块上电后 DI 状态不稳(随机跳) | 信号线受干扰 / 信号线和强电线共管 | 换屏蔽线;信号线远离强电;确认检测电压在模块范围内 |
动手挑战
- 取一台 DI 模块(或网络 IO 控制器),用短跳线短接一路 DI 端子,用 Modbus Poll 或 Python 读线圈状态,确认读到 ON——这是最简接线测试。
- 接一个真实按钮(常开干接点),按下再读,确认触发正常且无抖动(连读 5 次,每次按下后应该稳定显示 1 次 ON,而不是连续多次 ON)。
- 如果你有 2 台以上模块,配不同从机地址挂上 RS485 总线,确认分别能读到各自通道——这是分布式部署的验证。
本节学到的知识
- 开关量 = 只有 0/1 两个状态的信号(闭合/断开),和模拟量(4-20mA 连续值)本质不同;展厅里按钮、门磁、PIR、限位、光电、压力开关全是这类触点信号。
- 干接点 = 触点本身不带电、无极性,模块内部提供检测电压(常见 5V 或 12V,以手册为准);湿接点 = 信号端已带源电压(常见 5V~30V DC),接线要认极性、别接反。
- 展厅里干接点更常见也更安全(只是通断、接反不烧设备);拿不准就用干接点接法让模块自己供检测电压。
- 多区域、多电源的展厅优先选通道间光耦隔离型——各通道不共 GND,避免地环路电流造成误触发和通道串扰。
- 机械按钮闭合会弹跳几毫秒(bounce),无防抖时一次按下可能被读成 3~5 次触发;靠硬件 RC 防抖或**模块内置软件防抖(如 10ms/20ms 采样延时)**消除。
- 接线口诀:干接点两端一端进 DI+、一端进 COM;按钮触点分常开 NO / 常闭 NC,展厅触发多用 NO,门磁报警有时用 NC,接前先用万用表量清楚哪对触点。
- RS485 型模块可多台挂同一条总线(A/B 两芯加公共地),每台配唯一从机地址,总线末端接 120Ω 终端电阻(以手册建议为准,短距离有时可省)。
- Modbus 读 DI 用功能码 01(读线圈 Coils);应答把 8 路状态压进 1 字节、每位 1 路、LSB 对应第 1 路(如
0x03= 第 1、2 路 ON);线圈起始地址以手册为准。 - DI 模块只采集输入,网络继电器/IO 控制器同时有 DI 输入 + DO 输出;展厅里常搭配:DI 模块集中收触发,IO 控制器执行联动(开继电器、控电源)。
- 选型看这几项:通道数留 10%~20% 余量、输入类型优先干湿兼容、隔离方式、有按钮就确认带防抖、接口 RS485(TCP走网口更简单)、供电对齐机柜(展厅常见 24V DC)。
小结 · 你掌握了什么
- 你搞清楚了开关量(数字量)是展厅里所有"有/没有"触发状态的底层信号,干接点 vs 湿接点的区别和展厅哪种更常用。
- 你理解了隔离(光耦隔离)和防抖的意义,知道多区域多电源展厅为什么要选隔离型模块。
- 你学会了干接点接线方法,会用 Modbus 功能码 01 读线圈状态,能写代码验证链路。
- 你拿到了选型对比表和故障排查表,也理解了 DI 模块和网络继电器 IO 控制器的分工。
采集到触发信号后,中控需要控制执行端(继电器开灯、电源通断),参考 网络继电器/IO 控制器图鉴;展厅中控整体架构参考 中控主机图鉴。