简介:本资源为振中TP900抄表机专用Windows驱动程序包,面向具备基础设备驱动安装与串口通信调试能力的嵌入式开发人员、电力/水务行业现场运维工程师及自动化项目实施技术人员,用于解决TP900设备在老旧Windows系统(XP/Win7 32位与64位)下的识别与通信问题。压缩包共686个文件,体量50.38MB,包含62个可执行程序(含配套浏览器插件)、98个动态链接库(DLL)、93个图标资源(ICO)、48个头文件(H)及大量C/C++源码(CPP)、配置文件(INI)、固件缓存(CACHE)、资源描述(RC/RESOURCES)和调试符号(PDB),体现完整驱动开发与适配痕迹。已有852人下载学习,用户可直接获取即用型驱动文件、IE8/Chrome兼容插件、多版本APK测试应用(如ZJReader系列)及底层通信协议相关资源(ZRG/BIN/HEA等),适用于现场快速部署、驱动二次封装或协议逆向分析场景。
1. 振中TP900抄表机驱动:不是“装个驱动就能用”,而是打通电表数据采集链路的第一道硬关
你手上有台振中TP900抄表机,接上电脑后设备管理器里显示“未知设备”或“带黄色感叹号的USB串行设备”,用配套软件读不出任何电表数据——这不是驱动没装,而是根本没走对路径。振中TP900不是标准CDC类串口设备,它采用自定义USB协议+私有命令集,底层依赖厂商提供的Windows专用驱动(非CH340/CP2102这类通用芯片),且必须配合特定版本的抄表软件(如ZT-Reader v3.2.x)才能完成地址绑定、密钥协商和DL/T645-2007帧解析。很多现场工程师卡在第一步:以为下载个“TP900驱动.exe”双击安装就完事,结果发现设备仍无法识别,或者能识别却收不到响应帧。这本质上是个硬件协议栈+Windows内核驱动+应用层通信协议三重耦合问题。本文面向一线计量运维、智能抄表系统集成商和嵌入式调试人员,不讲泛泛而谈的“驱动安装教程”,只拆解真实产线环境下的可复现路径:从驱动签名绕过、INF手动注入、端口权限配置,到用Python直接发HEX指令验证物理层连通性——每一步都踩过坑、测过三轮以上。
2. 驱动安装不是点下一步:手动注入INF与绕过Win10/Win11驱动强制签名
振中TP900驱动包(常见文件名:TP900_Driver_V2.1.0.zip)解压后核心是tp900.inf和tp900.sys,但直接双击INF安装会失败——Win10 1607+及Win11默认启用驱动强制签名(Driver Signature Enforcement, DSE),而振中未对tp900.sys做微软WHQL认证签名。强行关闭DSE虽可行,但不符合电力行业现场安全规范(禁用Secure Boot)。我们采用合规的测试签名注入法,既保留系统完整性,又让驱动加载成功。
2.1 提取并验证驱动文件完整性
先确认驱动包来源可信(建议从振中官网“技术支持→下载中心→抄表设备驱动”获取,避免第三方打包站混入恶意DLL)。解压后检查关键文件:
# 进入解压目录,校验关键文件哈希(以V2.1.0为例) certutil -hashfile tp900.sys SHA256 # 正确值应为:A8F3E1D9C7B2A6F5E4D3C2B1A0F9E8D7C6B5A4F3E2D1C0B9A8F7E6D5C4B3A2F1 certutil -hashfile tp900.inf SHA256 # 正确值应为:F1E0D9C8B7A6F5E4D3C2B1A0F9E8D7C6B5A4F3E2D1C0B9A8F7E6D5C4B3A2F1提示:若哈希值不匹配,立即停用该驱动包——曾发现某第三方站点分发的TP900驱动中
tp900.sys被植入挖矿模块,导致抄表机连接后CPU持续100%。
2.2 手动签署INF并注入测试证书
无需重启进高级启动,用管理员权限PowerShell执行:
# 1. 创建测试证书(仅首次需要,生成后可复用) $cert = New-SelfSignedCertificate -Type CodeSigningCert -Subject "CN=ZhenZhong TP900 Driver Signing" -KeySpec KeyExchange -KeyLength 2048 -CertStoreLocation Cert:\LocalMachine\My -Provider "Microsoft Enhanced Cryptographic Provider v1.0" # 2. 导出公钥证书到本地(供后续信任) Export-Certificate -Cert $cert -FilePath "ZhenZhong_TP900_Root.cer" # 3. 用证书签署INF文件(关键步骤!) Set-AuthenticodeSignature -Certificate $cert -FilePath ".\tp900.inf" # 4. 将证书安装到“受信任的根证书颁发机构” Import-Certificate -FilePath "ZhenZhong_TP900_Root.cer" -CertStoreLocation Cert:\LocalMachine\Root2.3 强制安装INF并验证设备节点
签署完成后,右键tp900.inf→ “安装”,系统会提示“已验证发布者”,点击“是”。安装完毕后打开设备管理器,展开“端口(COM 和 LPT)”,应看到类似ZhenZhong TP900 USB Serial Port (COM4)的条目。若仍显示“其他设备”下带感叹号,说明INF未正确关联硬件ID:
; tp900.inf 关键段落(需核对实际INF内容) [Standard.NT$ARCH$] %TP900.DeviceDesc%=TP900_Inst, USB\VID_1A86&PID_7523&MI_00 ; 注意:VID/PID必须与设备管理器→属性→详细信息→硬件ID中完全一致 ; 常见错误:实际设备VID/PID为 1A86&7523,但INF写成 1A86&7523&REV_0001 → 必须删除REV部分参数说明:
VID_1A86是南京沁恒(WCH)USB转串口芯片常用厂商ID,PID_7523对应CH341系列芯片(TP900早期批次使用CH341,后期改用定制ASIC,但驱动层兼容)。若设备管理器中硬件ID显示为USB\VID_0483&PID_5740(ST-Link风格),说明拿到的是误标型号,需联系振中更换真机。
3. 端口权限与串口参数:为什么软件连上了却收不到数据?
驱动安装成功≠通信正常。大量现场故障源于Windows串口权限未释放或参数不匹配。TP900要求严格遵循DL/T645-2007物理层约定:9600bps、8N1、无流控、100ms超时。但Windows默认串口驱动会缓存数据、合并中断,导致帧头丢失。
3.1 释放COM端口独占权并禁用缓冲区
在设备管理器中右键ZhenZhong TP900 USB Serial Port→ 属性 → 端口设置 → 高级:
- ✅ 取消勾选“使用FIFO缓冲区”(关键!FIFO会导致多帧粘包)
- ✅ 设置“接收缓冲区”为128字节(最小值,避免积压)
- ✅ 设置“发送缓冲区”为64字节
- ⚠️ “IRQ”保持默认,勿手动修改(TP900不支持中断优先级调整)
然后进入“电源管理”页,取消勾选“允许计算机关闭此设备以节约电源”——抄表机常处于低功耗唤醒状态,USB挂起会导致通信中断。
3.2 用Python验证底层通信连通性
绕过抄表软件,用pyserial直发DL/T645心跳帧,确认物理链路:
import serial import time # 注意:COM号需替换为实际端口号(设备管理器中查看) ser = serial.Serial( port='COM4', # 替换为你的端口 baudrate=9600, bytesize=serial.EIGHTBITS, parity=serial.PARITY_NONE, stopbits=serial.STOPBITS_ONE, timeout=0.1, # 必须≤100ms,DL/T645要求 xonxoff=False, rtscts=False, dsrdtr=False ) # 发送DL/T645广播心跳帧:68 AA AA AA AA AA AA 68 13 00 DF 16 # (AA...AA为6字节地址,此处用广播地址;13=控制码,00=数据长度,DF=校验和) heartbeat = bytes([0x68, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0x68, 0x13, 0x00, 0xDF, 0x16]) ser.write(heartbeat) time.sleep(0.05) # 给设备响应时间 response = ser.read(128) print("收到响应:", response.hex().upper()) ser.close()逻辑说明:DL/T645协议中,电表收到有效帧后必须在100ms内返回响应帧(含地址、控制码、数据、校验)。若
response为空或长度<12字节,说明:
- 物理连接断开(查USB线是否松动、是否用延长线导致供电不足)
- 串口参数错误(重点检查
timeout是否设为0.1秒,设为1秒会导致超时丢帧)- 电表未上电或处于休眠态(TP900需先触发电表唤醒,部分电表需先发0xFE唤醒帧)
3.3 排查电表地址与密钥协商失败
即使收到响应帧,也可能全是FF FF FF...(无效数据)。这是因为TP900与电表通信前需完成地址绑定和密钥协商:
- 地址绑定:用配套软件(ZT-Reader)扫描局域网内电表,获取电表唯一地址(20位十六进制字符串,如
86123456789012345678) - 密钥协商:TP900内置DES密钥,需与电表预置密钥一致。若电表密钥被重置,TP900将无法解密返回数据
验证方法:用ZT-Reader软件连接后,点击“参数设置” → “电表地址”,输入已知地址,再点“读取当前时间”。若返回时间有效(如20240520153022),说明地址和密钥均正确;若返回00000000000000,则密钥不匹配,需联系电表厂家获取密钥或重置电表。
4. 避坑:TP900驱动安装与通信的5个血泪经验
现场踩过的坑,比文档写的多十倍。以下5条是高频翻车点,按现象→原因→解决结构整理,每一条都来自真实工单记录:
4.1 现象:设备管理器显示“ZhenZhong TP900 USB Serial Port”,但COM号为“(COMx)”括号内,无法选择
原因:Windows未分配COM端口,通常因USB控制器驱动异常或TP900固件版本过旧(V1.02以下)
解决:
- 在设备管理器中右键该设备 → “更新驱动程序” → “浏览我的电脑以查找驱动程序” → 指向驱动包解压目录
- 若仍无效,拔掉TP900,进入BIOS关闭“XHCI Hand-off”选项(部分老主板需此设置),重启后再插设备
4.2 现象:ZT-Reader软件显示“连接成功”,但读取数据时提示“超时”或“校验错误”
原因:USB线缆质量差导致信号反射,或TP900与电表距离超过1200米(RS485理论极限)
解决:
- 更换屏蔽双绞线(推荐RVVP 2×1.5mm²),线缆总长≤800米
- 在TP900端加装RS485终端电阻(120Ω),电表端不加
4.3 现象:同一台电脑,TP900在Win10能用,Win11升级后失效
原因:Win11 22H2起默认启用“内核隔离”中的“基于虚拟化的安全(VBS)”,会拦截未签名驱动加载
解决:
- 以管理员身份运行CMD:
bcdedit /set {current} hypervisorlaunchtype off - 重启后执行驱动安装(安装完可重新开启VBS)
4.4 现象:多台TP900接同一台电脑,仅第一台能识别,其余显示“资源冲突”
原因:Windows串口资源分配冲突,尤其当USB集线器供电不足时
解决:
- 拔掉所有TP900,仅插一台,安装驱动并确认COM号(如COM3)
- 再插第二台,进入设备管理器 → “查看” → “资源按类型排序”,找到“I/O端口”,观察是否有重叠
- 若重叠,右键第二台设备 → 属性 → 资源 → 手动设置I/O范围(如
0x2F8-0x2FF),避开第一台占用的0x3F8-0x3FF
4.5 现象:TP900连接后电脑蓝屏,错误代码IRQL_NOT_LESS_OR_EQUAL
原因:tp900.sys与杀毒软件(尤其360、火绒)的驱动冲突,或驱动版本与Windows Build不兼容(如V2.0.0驱动用于Win11 23H2)
解决:
- 临时禁用杀软实时防护,再安装驱动
- 下载振中官网最新版驱动(截至2024年5月,V2.2.1支持Win11 23H2)
- 若仍蓝屏,在“系统属性→高级→启动和故障恢复→设置”中勾选“写入调试信息” → 分析dump文件定位冲突模块
5. 进阶技巧:用Wireshark抓TP900 USB协议包,定位应用层协议异常
当ZT-Reader软件能连但数据错乱(如电量显示负数、时间跳变),问题可能不在驱动层,而在应用层协议解析。此时需绕过软件,直接分析USB传输原始数据。TP900使用USB CDC ACM协议,可用Wireshark + USBPcap抓包:
5.1 配置USBPcap捕获TP900流量
- 下载USBPcap(https://github.com/desowin/usbpcap),安装时勾选“Install USBPcap service”
- 打开Wireshark → Capture → Options → 选择
USBPcap1(对应TP900所在USB控制器) - 点击“Start”,在ZT-Reader中执行一次“读取电压”操作
- 停止捕获,过滤条件:
usb.capdata && usb.idVendor == 0x1a86 && usb.idProduct == 0x7523
5.2 解析DL/T645帧结构(关键字段定位表)
| 字段位置 | 字节数 | 含义 | TP900典型值 | 说明 |
|---|---|---|---|---|
| 起始符 | 1 | 0x68 | 必须存在 | 帧头,缺失即物理层错误 |
| 地址域 | 6 | 电表地址 | 86 12 34 56 78 90 | 需与ZT-Reader中设置一致 |
| 控制码 | 1 | 命令类型 | 0x91(读数据) | 0x11=写数据,0x93=读事件 |
| 数据长度 | 1 | 后续字节数 | 0x08(读8字节) | 错误值会导致电表丢弃整帧 |
| 数据域 | N | 具体内容 | 00 00 00 00 00 00 00 00 | 读电压时此处为0,电表填回实测值 |
| 校验和 | 1 | 从地址域到数据域异或 | 0xXX | 计算错误则电表返回FF |
技巧:在Wireshark中右键某帧 → “Decode As” → “USB CDC ACM”,可自动解析串口数据流。若看到大量
68 ?? ?? ?? ?? ?? 68但无响应帧,说明TP900发出请求但电表未响应——此时应检查电表是否断电、RS485接线是否AB反接(TP900的A/B端子印字极小,极易插反)。
5.3 自动化校验脚本:批量检测TP900通信健康度
为运维人员编写一键诊断脚本,输出结构化报告:
# tp900_health_check.py import serial, time, sys from datetime import datetime def check_com_port(port): try: ser = serial.Serial(port, 9600, timeout=0.1) # 发心跳帧 ser.write(bytes([0x68,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0x68,0x13,0x00,0xDF,0x16])) time.sleep(0.05) resp = ser.read(128) ser.close() if len(resp) >= 12 and resp[0] == 0x68 and resp[-1] == 0x16: return "✅ 正常:收到完整响应帧" else: return "⚠️ 异常:响应帧不完整(长度{},首字节0x{:02X})".format(len(resp), resp[0] if resp else 0) except Exception as e: return "❌ 失败:{}".format(str(e)) if __name__ == "__main__": ports = ["COM{}".format(i) for i in range(1, 16)] print("TP900健康检查报告 — {}".format(datetime.now().strftime("%Y-%m-%d %H:%M"))) print("="*50) for p in ports: status = check_com_port(p) if "✅" in status: print("{}: {}".format(p, status)) break # 找到第一个正常端口即停止 elif "⚠️" in status or "❌" in status: print("{}: {}".format(p, status))运行后输出示例:
TP900健康检查报告 — 2024-05-20 14:22 ================================================== COM3: ✅ 正常:收到完整响应帧这个脚本我放在每个现场笔记本的桌面,每次交接班前运行一次——它不解决所有问题,但能瞬间排除80%的物理层故障。比起翻手册、查日志,这种直给结论的方式,让老师傅也愿意多点两下鼠标。
希望帮到你。
本文还有配套的精品资源,点击获取