简介:Intouch 是工业自动化领域广泛应用的 HMI 软件,与支持 Modbus TCP 协议的 PLC、仪表等设备进行数据交换时,必须借助 IO 驱动完成协议转换。这份资源正是 Wonderware DASMBTCP1.1 驱动相关文件包,面向需要搭建或维护 Intouch 与 Modbus TCP 设备通信的自动化工程师,可帮助解决设备连接、寄存器映射、实时读写与断线重连等典型问题。压缩包共 129 个文件,以 66 个 dll 动态库和 21 个 exe 可执行程序为核心,另含 chm 帮助文档、pdf 协议说明、hlp 辅助文件及 ini 配置模板等,覆盖安装、配置、日志查看与排错环节,整体约 10.9MB。目前已有 2629 人学习下载,适合在 Wonderware 环境下快速完成驱动部署。资料中既有驱动主体与配套管理工具,也有多份参考文档,可支撑用户理解 DASMBTCP 的驱动架构、数据映射与诊断方法,从而提升 Intouch 工程与 Modbus TCP 设备联调的效率。
1. DASMBTCP 1.1:为什么老驱动反而更省心
某产线改造项目里,上位机装着十年前的 Intouch,PLC 侧是标准的 Modbus TCP 从站。IT 部门建议换新驱动,结果一测,几百个标记名的地址映射规则全变了,迁移代价比换 PLC 还大。最后退回去用 DASMBTCP 1.1,半小时把通信跑通。DASMBTCP 1.1 是 Intouch 体系里专门走 Modbus TCP 协议的 DAServer 系列驱动,负责把 PLC 侧保持寄存器、线圈、输入寄存器搬进组态软件的实时库。它的价值不在新,而在稳:老版本 Intouch 对它的兼容性最好,地址换算有一套固定的偏移规则,适合存量项目维护和最初级的 Modbus TCP 接入。这篇笔记适合两类人:一类是把老 Intouch 项目接手下来的工程师,想搞清楚驱动怎么装、怎么配;另一类是刚接触 DAServer 的新手,需要一个能照抄的端口、设备、寄存器三步配置流程。下文所有参数都是我在类似项目里常用的起点值,不是官方唯一解。
2. 装对驱动只是开始:DASMBTCP 1.1 的部署前提与运行边界
2.1 授权、版本与协议端口的三个前提
DASMBTCP 1.1 只是 DAServer 家族里的一个协议子驱动。真正跑起来需要三样东西同时满足:Intouch 主版本与驱动构建版本兼容、驱动授权可以被读取、Modbus TCP 的 502 端口能通。
先说版本。1.1 这个构建号对应的 Intouch 一般在 7.x 到 10.x 这个区间,越老的 Intouch 配合 1.1 越少出毛病。新版驱动往往引入新的标记名绑定机制和设备项语法,老工程文件迁移时容易坏掉,表现为访问名里的设备项写法不兼容,或者标记名的数据类型映射对不上。这个不是驱动本身的 Bug,而是两代产品的数据模型变了。接手老项目时,我的第一动作永远是查 Intouch 的版本号,再对照驱动包说明里的兼容矩阵。版本对不上时,宁可用老驱动也不要硬升。
再说授权。DASMBTCP 的授权一般以文件形式存在,安装驱动后可以在 DAServer 管理器里看到 License 状态。常见做法是先装 Intouch,再装驱动,最后导入授权。顺序反了会出现驱动识别不到授权的情况,后面避坑章会专门讲。授权文件里通常绑定了机器信息,换电脑后需要重新生成,这点在迁移虚拟机时尤其容易踩。
最后是端口。Modbus TCP 固定走 502,装驱动不会自动配置防火墙规则。如果现场和 PLC 之间隔了隔离网闸或防火墙,需要在防火墙上放行 502 端口的 TCP 入站和出站。调试初期很多人忽略这点,导致驱动装好了、端口也建了、设备也加了,日志里却一直报 Connect timeout。给自己提个醒:先用简单的 TCP 工具从工作站侧测一下到 PLC 的 502 端口通不通,再往后走。
2.2 装到哪个目录、服务名与日志怎么看
安装包勾选组件后,驱动默认装到系统公共目录下的 DAServer 子目录。装完先别急着建端口,先用命令行确认驱动进程起来了。我一般用下面这段检查:
@echo off rem 检查 DASMBTCP 相关服务是否在运行 sc query DASMBTCP | findstr STATE tasklist | findstr /i "das"逻辑说明:sc query用来查 Windows 服务状态,服务名在不同安装包版本里可能有差异,所以再用tasklist按进程名模糊匹配一次。只要进程列表里出现 DAS 开头的进程,说明驱动管理器已经加载。参数说明:这里的服务名是常见的默认名称,如果机器上装过多个 DAS 驱动,建议逐个sc query确认,避免看错对象。
日志是排障的第一入口。日志目录通常在安装目录下的 Logs 子目录,DASMBTCP 启动后会在里面生成当天的文本日志。看日志时不用逐行读,重点抓三类信息:授权校验是否通过、端口是否进入监听状态、设备是否连上从站。
@echo off rem 查看当天日志中含 License 和 timeout 的行 findstr /i "license timeout connect" "%DASROOT%\Logs\DASMBTCP_*.log"逻辑说明:findstr直接过滤关键词,能快速判断当前是授权问题还是网络问题。参数说明:%DASROOT%是环境变量,指向 DAServer 的安装根目录。如果机器上没设这个变量,就手动把命令里的路径换成实际日志路径。
日志里如果出现大量 timeout,先查网络;如果出现 No License,就先处理授权;如果日志干净但 Intouch 端还是读不到值,问题大概率出在寄存器映射上。这一条判断顺序我每次调试都按它走,能省下不少查错时间。
另外有一个不太起眼的坑:升级 Intouch 后忘记卸载老版本驱动,新老两个驱动文件同时存在于磁盘上,启动时可能出现协议栈加载冲突。日志里能看到异常重复加载的记录,但不好定位。所以装新版之前,我习惯先把旧驱动彻底卸载,再清理安装目录残留,最后装新的。
3. 端口、设备到寄存器:DAServer 里的三步配置流水线
3.1 新建端口:IP、端口号和超时参数
打开 DAServer 管理器,在左侧树里找到 DASMBTCP 实例,右击选择新建端口。这里说的端口不是物理网口,而是一条指向某台 PLC 的逻辑通信链路。一个端口只能填一个目标 IP,如果现场有多台 PLC,就建多个端口。
建端口时要填的参数,我按经验列了一张起点值表:
| 参数项 | 推荐起点值 | 说明 |
|---|---|---|
| IP 地址 | 与 PLC 同网段地址 | 先 ping 通再配置 |
| 端口号 | 502 | Modbus TCP 固定服务端口 |
| 连接超时 | 1000 ms | 网络跳数多时放宽到 3000 |
| 轮询间隔 | 1000 ms | 点位少可以降到 500,不建议低于 200 |
| 持久连接 | 开启 | 避免频繁建连占满 PLC 侧连接表 |
逻辑说明:这些参数决定 DAServer 与 PLC 之间的会话行为。超时太短会把正常慢响应误判为故障,太长会让故障感知滞后。我一般先把超时拉到 3000 完成初调,再收紧到 1000,数字根据实际网络抖动情况调整。轮询间隔同理,先跑 1 秒观察稳定,再逐步缩短到目标值。参数说明:轮询间隔指对同一设备发起周期读的最小时间间隔,小数点位每秒一次就够;持久连接打开后,DAServer 会复用 TCP 连接而不是每次轮询重新建连。
这里有一个值得注意的选型点:如果 PLC 是老旧型号,对 Modbus TCP 并发连接数有限制,尤其不要把多个上位机软件同时指向同一台 PLC。DASMBTCP 本身也支持多个端口指向同一台 PLC,但不建议这么做,因为同一时刻两个端口同时轮询会造成重复读,日志里会多出大量正常但无意义的报文。
3.2 从站设备与设备组轮询
端口建好后,在端口下新建设备。设备的含义是挂在同一个端口下面的 Modbus 从站,关键配置项是设备 ID,必须等于 PLC 侧设定的 Modbus 从站地址。这里有个容易被忽略的约定:从站地址 0 是广播地址,正常通信不会响应;一般从 1 开始编号。如果 PLC 侧配置的是地址 1,驱动侧设备 ID 就填 1,不要受某些习惯性写法影响去填 0。
设备之下可以再建设备组。设备组用于把寄存器按业务区域拆分,不同组配不同轮询周期。例如温度区 500ms,状态区 200ms,统计区 5s。分组的另一个好处是降低单包报文长度,避免一次拉全量寄存器导致超时。配置界面里的关系可以理解为:端口对应一台 PLC,设备对应 PLC 内的一个从站地址,设备组对应从站上的一类寄存器集合。
设备组配置完成后,在 DAServer 管理器的配置树里能看到一个类似下面的分组示意:
[DeviceGroup:Group_Temp] PollInterval = 500 Items = 41001, 41002, 41005 [DeviceGroup:Group_Status] PollInterval = 200 Items = 00001, 00002, 00010逻辑说明:这个 ini 片段只是用来示意设备组的概念,不是 DASMBTCP 的实际配置格式,实际以管理器界面字段为准。PollInterval是该组的轮询周期,单位毫秒;Items是组内包含的寄存器地址清单。参数说明:把状态类开关量单独放到 200ms 组,可以快速感知设备启停信号;把温度等变化缓慢的量放到 500ms 或更慢的组,能减少无效报文,降低 PLC 侧通信模块的负载。我一般会按“信号变化速度”来划分设备组,而不是按寄存器地址是否连续来分,这样既省流量又不容易漏报快速变化的状态。
3.3 寄存器映射:地址偏移和功能码换算
DASMBTCP 里最容易被绕晕的是地址偏移。Modbus 协议习惯上把保持寄存器写成 40001 开头,但这个 40001 其实对应的是从站内部的寄存器地址 0。DASMBTCP 的配置项里很多地方直接使用内部地址 0 起始。所以 PLC 侧 40001 对应配置里的 0,PLC 侧 40010 对应配置里的 9。换算时不减 1,是最常见的翻车点。
线圈和输入寄存器同理:00001 对应内部地址 0,30001 对应内部地址 0。建立寄存器组时,先明确自己读的是哪一类数据,再换算地址,最后填进配置。下面是功能码与数据类型的对应关系:
| 数据类型 | 功能码 | 读写方向 | 说明 |
|---|---|---|---|
| 线圈 | 01 / 05 | 读 / 写 | 开关量输出 |
| 离散输入 | 02 | 只读 | 开关量输入 |
| 保持寄存器 | 03 / 06 / 16 | 读 / 写 | 模拟量、整型、浮点 |
| 输入寄存器 | 04 | 只读 | 仅从站上报 |
功能码不用手动填,DASMBTCP 会根据你选择的寄存器类型自动决定。但理解它有助于排错:例如选择了保持寄存器,驱动对从站发的是 03 功能码读请求;选了输入寄存器,发的是 04 功能码。如果 PLC 侧某地址只能按输入寄存器读,驱动侧却配成了保持寄存器,通信会有响应,但数值永远不对。
32 位数据要特别注意。一个浮点数或长整型占用两个相邻的保持寄存器,例如 40001 和 40002 组成一个浮点数。DASMBTCP 通常提供“交换字序”的选项,对应 PLC 内的高字节在前还是低字节在前。这个参数在不同 PLC 上表现不一致,统一建议的做法是:先用一组已知数值点去读,确认高低字顺序后,再批量映射。不要批量映射完才验证,否则几十个点全是乱码,回头查错会非常痛苦。
此外,写操作建议单独设置一个设备组,或者通过后面 Intouch 访问名里的“允许写”开关来控制。我习惯把批量写集中放到一个专用组里,避免运行人员误触发批量写。读组和写组分开,也方便单独调整轮询周期。
4. 避坑:DASMBTCP 高频问题的现象与根因
4.1 标记名显示坏质量:先在访问名上找问题
现象:Intouch 运行环境中标记名质量块显示 BAD,PLC 侧数据明明正常。
原因:八成是访问名里的设备项语法与实际寄存器配置不一致。比如配置里定义了保持寄存器从内部地址 0 开始,填访问名时写成 40001 却忘记换算成内部地址 0;或者把保持寄存器当输入寄存器读,功能码发错,数值自然不对。
解决:先核对 Intouch 侧访问名的设备项写法。常见 DASMBTCP 配置工具会自带一个设备项浏览功能,可以直接看到驱动侧已定义的寄存器清单,在那里选中对应项,再复制到访问名里,避免手写误差。同一地址分别用 03 功能和 04 功能各读一次,能通且数值符合预期的那一个,才是正确的寄存器类型。
4.2 端口显示未授权:授权文件和版本不匹配
现象:DAServer 管理器里端口图标带感叹号,提示内容里有 No License 或 Not Licensed 字样。
原因:授权文件是针对 DASMBTCP 1.0 生成的,1.1 驱动识别不了;或者授权导入发生在驱动安装之前,驱动读取授权时找不到对应条目。
解决:在 DAServer 管理器里查看驱动完整版本号,让授权文件与驱动版本保持一致,重新生成后再次导入。导入顺序固定为:先装驱动,再导授权,最后启动服务。改完授权后重启 DAServer 服务,确认日志里出现授权校验通过的记录再继续。
4.3 通信日志里全是超时:轮询周期和并发连接打架
现象:通信偶发超时,现场查看 PLC 通信模块的 TCP 连接表,发现大量 TIME_WAIT 状态的连接。
原因:轮询间隔设到 200ms 以下,且持久连接没开,DAServer 每次轮询都新建 TCP 连接,产生大量短连接;或者 PLC 侧 Modbus 最大连接数被设置为个位数,DAServer 与调试工具同时连接时超限。
解决:把轮询间隔调整到 500ms 以上,打开持久连接选项,让 TCP 连接保持复用。同时把 PLC 侧最大连接数调大,常见机型能支持 8 到 16 个连接。调试阶段,工具用完后及时断开,避免多个软件同时轮询同一台设备。
4.4 32 位浮点数读出来是乱码:字序没对上
现象:浮点数值在 Intouch 里显示成 1e-38 之类的怪值,或者正负号颠倒、小数位完全错位。
原因:PLC 数据存放在两个连续寄存器里的高低字顺序,与 DASMBTCP 默认解析顺序不同。低字在前叫 Little Endian,高字在前叫 Big Endian,各厂家实现并不统一。
解决:用一组已知值,例如 3.14,写入 PLC 或直接在 PLC 里预设好,然后通过驱动读出来看。读出乱码就切换端口或设备属性里的字序选项,直到显示正确。这个步骤必须先单点测试,再批量映射。我见过有人直接批量映射上百个浮点量,最后花了半天排查字序问题,原本几分钟就能确认。
4.5 改完寄存器不生效:缓存和重启机制
现象:在配置界面里删掉旧的寄存器组、加了新的组,但 Intouch 里读到的还是旧值,仿佛改动没发生。
原因:DAServer 管理器对配置做了缓存,修改后没有执行保存激活动作,或者驱动服务没有重新加载配置。
解决:每次修改配置后,执行管理器里的保存并激活,再重启驱动服务。命令行重启可以这样操作:
@echo off rem 重启 DASMBTCP 服务,使配置重新加载 net stop DASMBTCP net start DASMBTCP逻辑说明:net stop和net start是 Windows 下停止和启动服务的命令,服务名以实际安装名称为准。参数说明:如果服务名不对,会返回“服务名无效”的提示,这时回到 2.2 节里的sc query确认真实名称。注意重启会导致正在通信的标记名短暂变 BAD,所以这类操作要安排在生产停机窗口做,不要在正常生产时段直接执行。
5. 进阶:用诊断计数和分组轮询盯住链路质量
驱动跑通只是第一步,链路质量才是长期稳定的关键。DASMBTCP 随 DAServer 管理器自带诊断窗口,打开统计页后,重点看三个数:总轮询次数、累计超时次数、最近一次响应耗时。总轮询次数在持续增长没问题,但累计超时次数如果跟着一起涨,说明链路质量在恶化。只看当前值不看趋势,容易放过间歇性丢包。
配合分组轮询可以进一步压缩单包长度。Modbus TCP 报文长度限制大约在 260 字节左右,一个保持寄存器占 2 字节,读取 125 个寄存器时单包就接近上限。超过上限要么被对端丢弃,要么被拆包处理,都会引入不确定的延迟。分组时可以用一个简单估算来检查:
# 估算一次轮询的报文数据区长度 items = [0, 1, 2, 3, 4] # 组内寄存器个数 read_len = len(items) * 2 # 每个保持寄存器 16bit 占 2 字节 print(f"单包预计 {read_len} 字节") if read_len > 240: print("建议拆分设备组,避免单包接近 Modbus 报文长度上限")逻辑说明:这段伪代码用于粗略估算设备组拆分是否合理,不是驱动自带的工具。参数说明:read_len > 240是留出协议头余量的经验阈值,实际报文超过 260 字节就可能出问题。把高频点位拆进 200ms 的组,低频点位放进 5s 的组,拆完之后观察单包字节数下降,累计超时通常也会随之回落。
诊断窗口还有一个容易忽略的用途:验证修改效果。每次调整完字序或设备组后,盯着诊断计数跑 10 分钟,累计超时保持为 0,再继续下一步。不要改完立刻去 Intouch 里看数值,数值对不代表链路稳。从那以后,我每次给新 PLC 建立通信配置,都会强制先打开诊断计数器,跑满 10 分钟再开始绑定标记名,之后几乎没再被隐性超时坑过。希望这篇笔记帮到正在和 DASMBTCP 较劲的你。
本文还有配套的精品资源,点击获取