
元器件车间对温湿度敏感:贴片元件吸潮、PCB氧化、锡膏回流曲线漂移,都和车间环境直接相关。恒温管控的目标是把车间各区域温湿度拉到工艺窗口内,并让数据可观测、可告警、可追溯。
本文面向车间自动化/设施运维工程师,给出从设备侧到数据侧的完整操作链路:用SNMP从RJ45以太网温湿度变送器读取实时数据,接入本地监控或上位系统。不涉及云平台对接,全部在车间管理网内完成。


登录Web管理界面或配置工具,核对:
□ SNMP版本:v2c(默认)或v3
□ 读团体名/安全名:自定义,勿用public
□ Agent端口:161(默认)
□ 允许访问的NMS源IP/子网:限定读取端
□ sysName/sysLocation:绑定车间区域-测点,便于定位
□ 采样周期、死区:与管控节奏匹配
□ Trap目标(可选):越限上报,本教程聚焦轮询读取确认MIB文件或点表。不同厂商私有OID不同,以下示例OID为占位,务必替换为厂家MIB定义。
Debian/Ubuntu:
sudo apt-get install snmp snmpd libsnmp-devRHEL/CentOS/Rocky:
sudo yum install net-snmp-utils net-snmpWindows:用Net-SNMP二进制,或WSL;PowerShell原生不支持SNMP,不推荐。
# 读系统名,验证连通性与团体名
snmpget -v2c -c <community> <device_ip> 1.3.6.1.2.1.1.5.0
# 读私有温湿度(示例OID,替换为实际)
snmpget -v2c -c <community> <device_ip> 1.3.6.1.4.1.<enterprise>.1.1.1.0
snmpget -v2c -c <community> <device_ip> 1.3.6.1.4.1.<enterprise>.1.1.2.0常见问题:
Timeout: No Response:IP不可达、端口被拦、Agent未启、源IP未授权 No Such Object:OID错误或未加载MIB,用-On看数值OID,别猜 snmpwalk -v2c -c <community> <device_ip> 1.3.6.1.4.1.<enterprise>.1.1确认所有测点返回,记录实际OID、类型、单位、缩放。
snmpget -v3 -u <user> -l authPriv \
-a SHA -A <authpass> -x AES -X <privpass> \
<device_ip> 1.3.6.1.4.1.<enterprise>.1.1.1.0读取端内部统一为:
{
"point_id": "WS-A03-RH",
"zone": "SMT车间A区",
"ip": "10.30.41.23",
"ts": 1769289600,
"temp_c": 23.4,
"humi_pct": 48.2,
"status": 1,
"raw_temp": 234,
"scale": 0.1
}value = raw * 0.1 snmpget -O hex取原始,解析字节序 #!/usr/bin/env python3
import time, json, logging
from pysnmp.hlapi import *
COMMUNITY = "rack_ro_2024"
INTERVAL = 15
POINTS = [
# point_id, ip, oid_temp, oid_humi, scale
("WS-A03-T", "10.30.41.23", "1.3.6.1.4.1.48530.1.1.1.0", "1.3.6.1.4.1.48530.1.1.2.0", 0.1),
]
def snmp_get(ip, oid, community=COMMUNITY):
it = getCmd(SnmpEngine(),
CommunityData(community, mpModel=1),
UdpTransportTarget((ip, 161), timeout=2, retries=1),
ContextData(),
ObjectType(ObjectIdentity(oid)))
err, st, idx, varbinds = next(it)
if err:
raise RuntimeError(str(err))
for vb in varbinds:
return vb[1].prettyPrint(), int(vb[1]) if str(vb[1]).isdigit() else vb[1]
return None, None
def poll_once():
out = []
for pid, ip, ot, oh, scale in POINTS:
try:
_, rt = snmp_get(ip, ot)
_, rh = snmp_get(ip, oh)
t = int(rt) * scale if rt is not None else None
h = int(rh) * scale if rh is not None else None
out.append({"point_id": pid, "ip": ip, "temp_c": t, "humi_pct": h, "ts": int(time.time())})
except Exception as e:
logging.warning("poll fail %s %s", pid, e)
return out
if __name__ == "__main__":
logging.basicConfig(level=logging.INFO)
while True:
data = poll_once()
# 推给本地MQTT/Kafka/InfluxDB,或写共享内存供SCADA读取
# 此处示例:写本地socket/JSON文件供上位机拉取
with open("/run/ws_envd/last.json", "w") as f:
json.dump(data, f)
time.sleep(INTERVAL)注意:pysnmp同步轮询多测点时串行阻塞,测点多时改用异步asyncio+pysnmp或C扩展;也可起多进程分片。
env.temp = snmp.get[1.3.6.1.4.1.x.1.1.1.0],预处理:自定义倍数0.1 env.humi = snmp.get[...],预处理:自定义倍数0.1 env.status = snmp.get[...],值映射 snmp.yml模块,walk私有分支+系统分支 envTemp、envHumi 读取数据只是第一步,管控闭环:
读取端与执行侧解耦:读取端只负责把实时值可靠供给控制逻辑,控制逻辑在PLC/SCADA,避免监控进程直接驱动执行器。
项 | 标准 |
|---|---|
连通性 | 所有测点snmpget成功,RRT<500ms |
准确率 | 与手持仪比对,≤±0.5℃/±3%RH |
连续性 | 72h采集成功率≥99.9% |
时延 | 轮询间隔内刷新,前端可见延迟<2×轮询周期 |
可运维 | 断点重采、日志、告警通知闭环 |
文档 | IP-区域-测点-OID映射表归档 |
SNMP读取RJ45温湿度变送器实时数据,落地成本不高,但工程上要把三件事做扎实:设备侧配置收敛到管理网内、读取端预处理归一化、数据供给管控闭环而非仅展示。脚本适合边侧快速集成,Zabbix适合运维纳管,Prometheus适合已云原生化车间平台。无论哪种,OID以厂家MIB为准、缩放因子显式处理、轮询节拍与告警窗口对齐工艺要求,系统才真正可用。
关键词:元器件车间,恒温管控,SNMP协议,RJ45温湿度变送器,实时数据读取,snmpget,Zabbix,Prometheus,snmp_exporter,预处理,告警闭环
标签:#SNMP #温湿度变送器 #RJ45 #车间恒温 #Zabbix #Prometheus #运维集成 #环境监控 #SCADA #边侧集成
要不要我把Python轮询脚本扩成支持多测点并发和断点续写的版本,方便你直接嵌进车间边侧服务?元器件车间恒温管控:SNMP协议读取RJ45温湿度变送器实时数据教程
元器件车间对温湿度敏感:贴片元件吸潮、PCB氧化、锡膏回流曲线漂移,都和车间环境直接相关。恒温管控的目标是把车间各区域温湿度拉到工艺窗口内,并让数据可观测、可告警、可追溯。
本文面向车间自动化/设施运维工程师,给出从设备侧到数据侧的完整操作链路:用SNMP从RJ45以太网温湿度变送器读取实时数据,接入本地监控或上位系统。不涉及云平台对接,全部在车间管理网内完成。
登录Web管理界面或配置工具,核对:
□ SNMP版本:v2c(默认)或v3
□ 读团体名/安全名:自定义,勿用public
□ Agent端口:161(默认)
□ 允许访问的NMS源IP/子网:限定读取端
□ sysName/sysLocation:绑定车间区域-测点,便于定位
□ 采样周期、死区:与管控节奏匹配
□ Trap目标(可选):越限上报,本教程聚焦轮询读取确认MIB文件或点表。不同厂商私有OID不同,以下示例OID为占位,务必替换为厂家MIB定义。
Debian/Ubuntu:
sudo apt-get install snmp snmpd libsnmp-devRHEL/CentOS/Rocky:
sudo yum install net-snmp-utils net-snmpWindows:用Net-SNMP二进制,或WSL;PowerShell原生不支持SNMP,不推荐。
# 读系统名,验证连通性与团体名
snmpget -v2c -c <community> <device_ip> 1.3.6.1.2.1.1.5.0
# 读私有温湿度(示例OID,替换为实际)
snmpget -v2c -c <community> <device_ip> 1.3.6.1.4.1.<enterprise>.1.1.1.0
snmpget -v2c -c <community> <device_ip> 1.3.6.1.4.1.<enterprise>.1.1.2.0常见问题:
Timeout: No Response:IP不可达、端口被拦、Agent未启、源IP未授权 No Such Object:OID错误或未加载MIB,用-On看数值OID,别猜 snmpwalk -v2c -c <community> <device_ip> 1.3.6.1.4.1.<enterprise>.1.1确认所有测点返回,记录实际OID、类型、单位、缩放。
snmpget -v3 -u <user> -l authPriv \
-a SHA -A <authpass> -x AES -X <privpass> \
<device_ip> 1.3.6.1.4.1.<enterprise>.1.1.1.0读取端内部统一为:
{
"point_id": "WS-A03-RH",
"zone": "SMT车间A区",
"ip": "10.30.41.23",
"ts": 1769289600,
"temp_c": 23.4,
"humi_pct": 48.2,
"status": 1,
"raw_temp": 234,
"scale": 0.1
}value = raw * 0.1 snmpget -O hex取原始,解析字节序 #!/usr/bin/env python3
import time, json, logging
from pysnmp.hlapi import *
COMMUNITY = "rack_ro_2024"
INTERVAL = 15
POINTS = [
# point_id, ip, oid_temp, oid_humi, scale
("WS-A03-T", "10.30.41.23", "1.3.6.1.4.1.48530.1.1.1.0", "1.3.6.1.4.1.48530.1.1.2.0", 0.1),
]
def snmp_get(ip, oid, community=COMMUNITY):
it = getCmd(SnmpEngine(),
CommunityData(community, mpModel=1),
UdpTransportTarget((ip, 161), timeout=2, retries=1),
ContextData(),
ObjectType(ObjectIdentity(oid)))
err, st, idx, varbinds = next(it)
if err:
raise RuntimeError(str(err))
for vb in varbinds:
return vb[1].prettyPrint(), int(vb[1]) if str(vb[1]).isdigit() else vb[1]
return None, None
def poll_once():
out = []
for pid, ip, ot, oh, scale in POINTS:
try:
_, rt = snmp_get(ip, ot)
_, rh = snmp_get(ip, oh)
t = int(rt) * scale if rt is not None else None
h = int(rh) * scale if rh is not None else None
out.append({"point_id": pid, "ip": ip, "temp_c": t, "humi_pct": h, "ts": int(time.time())})
except Exception as e:
logging.warning("poll fail %s %s", pid, e)
return out
if __name__ == "__main__":
logging.basicConfig(level=logging.INFO)
while True:
data = poll_once()
# 推给本地MQTT/Kafka/InfluxDB,或写共享内存供SCADA读取
# 此处示例:写本地socket/JSON文件供上位机拉取
with open("/run/ws_envd/last.json", "w") as f:
json.dump(data, f)
time.sleep(INTERVAL)注意:pysnmp同步轮询多测点时串行阻塞,测点多时改用异步asyncio+pysnmp或C扩展;也可起多进程分片。
env.temp = snmp.get[1.3.6.1.4.1.x.1.1.1.0],预处理:自定义倍数0.1 env.humi = snmp.get[...],预处理:自定义倍数0.1 env.status = snmp.get[...],值映射 snmp.yml模块,walk私有分支+系统分支 envTemp、envHumi 读取数据只是第一步,管控闭环:
读取端与执行侧解耦:读取端只负责把实时值可靠供给控制逻辑,控制逻辑在PLC/SCADA,避免监控进程直接驱动执行器。
项 | 标准 |
|---|---|
连通性 | 所有测点snmpget成功,RRT<500ms |
准确率 | 与手持仪比对,≤±0.5℃/±3%RH |
连续性 | 72h采集成功率≥99.9% |
时延 | 轮询间隔内刷新,前端可见延迟<2×轮询周期 |
可运维 | 断点重采、日志、告警通知闭环 |
文档 | IP-区域-测点-OID映射表归档 |
SNMP读取RJ45温湿度变送器实时数据,落地成本不高,但工程上要把三件事做扎实:设备侧配置收敛到管理网内、读取端预处理归一化、数据供给管控闭环而非仅展示。脚本适合边侧快速集成,Zabbix适合运维纳管,Prometheus适合已云原生化车间平台。无论哪种,OID以厂家MIB为准、缩放因子显式处理、轮询节拍与告警窗口对齐工艺要求,系统才真正可用。
关键词:元器件车间,恒温管控,SNMP协议,RJ45温湿度变送器,实时数据读取,snmpget,Zabbix,Prometheus,snmp_exporter,预处理,告警闭环
标签:#SNMP #温湿度变送器 #RJ45 #车间恒温 #Zabbix #Prometheus #运维集成 #环境监控 #SCADA #边侧集成
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。