简介:WW-DAS-MBTCP-3.0SP1.zip 是面向工业自动化现场调试与上位机集成人员的 DAS-MB 通讯驱动包,主要用于施耐德 Quantum 67160 系列 PLC 与 Wonderware InTouch 之间基于 Modbus TCP 的数据交换,帮助解决驱动缺失、软硬件兼容性不明以及通讯链路配置无从下手等问题,适合自动化工程师、系统集成商及工控现场维护人员部署前核对与调试参考。压缩包共 125 个文件、约 33.74MB,以 dll、exe、msi 等安装与运行组件为主,辅以 chm、pdf 等帮助文档和少量配置文件,既包含驱动部署所需的核心文件,也保留较完整的说明资料。目前已有 1671 人学习。对于需要搭建 PLC 与 InTouch 通讯环境的读者,可从中获得驱动安装组件、通讯参数配置参考、连接测试与故障排查思路,以及驱动管理、日志查看等配套文档,便于快速定位兼容性问题和通讯异常。
1. 一个补丁包装完点位全红:DAS-MB 3.0 SP1 难在哪
WW-DAS-MBTCP-3.0SP1.zip 这套包,名字读起来就很直白:DAS 是数据采集,MBTCP 是 Modbus TCP 通道,3.0 SP1 说明它是 3.0 主程序之上的第一个补丁包。现场最常见的画面是:解压、双击 setup、一路下一步,服务管理器里能看到进程在跑,采集界面一打开,几十个点位齐刷刷变红,日志里全是连接超时。装是装上了,数据一条没进来。
这类采集网关软件的麻烦不在安装向导,而在装之前的依赖、装之后的端口、配置里的字节序。装不好不会报错,只会安静地采不到数,等到对账的时候才发现历史库空了一大段。下面按我实际装这套包的顺序走一遍,从依赖清单、解压安装、通道配置,一直到怎么确认它真的在采数。
2. 装前对齐环境:DAS-MB 3.0 SP1 的依赖清单与 502 端口
Modbus TCP 采集听起来只是连个 IP 读寄存器,实际落地时卡住安装的往往是运行库缺一个、端口被占一个。DAS-MB 这套采集服务是常驻后台的 Windows 服务形态,装之前把系统、运行库、端口三件事确认完,后面能省掉一半返工。
2.1 操作系统与运行库:x86 那份别漏装
系统版本上,Server 2016 / 2019 / 2022 和 Windows 10 LTSC、Windows 11 专业版都能跑,家庭版不建议——服务账户权限、组策略、防火墙策略都受限,出问题很难查。工控机上我一般固定用 LTSC,不自动更新,少一类玄学。
运行库是第一个卡点。这套采集端主体是托管程序,依赖 .NET Framework,同时底层 Modbus 通信模块带原生 DLL,依赖 VC++ 运行库。两者的坑在于:即使系统是 64 位,采集服务进程也可能是 32 位,只装 x64 运行库不够。
先查 .NET Framework 实际版本,别信控制面板里那个名字:
# 读注册表 Release 值,比控制面板显示准确 Get-ItemProperty 'HKLM:\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full' | Select-Object Version, ReleaseRelease数值对照:394802 是 4.6.2,461808 是 4.7.2,528040 是 4.8,533320 是 4.8.1。常见做法是低于 4.6.2 就先补到 4.8,装完重启再动安装包,否则安装程序可能直接闪退,什么提示都没有。
再查 VC++ 运行库,注意 System32 和 SysWOW64 两个目录都要看:
# 两个路径分别对应 64 位和 32 位运行库,缺哪个补哪个 'C:\Windows\System32\vcruntime140.dll','C:\Windows\SysWOW64\vcruntime140.dll' | ForEach-Object { Get-Item $_ -ErrorAction SilentlyContinue | Select-Object FullName, @{n='Ver';e={$_.VersionInfo.FileVersion}} }vcruntime140.dll对应 2015-2022 运行库。两条路径只出来一条,说明另一半缺失,装 x86 和 x64 两个 redist 包补齐即可。这个细节看起来啰嗦,但采集服务启动瞬间报 0xc000007b 或者直接退出,八成就是这里。
2.2 端口与防火墙:502 被别人占了后面全白干
Modbus TCP 标准端口是 502。现场经常出现的情况是:机器上还跑着另一套采集软件或者一个 Modbus 从站模拟器,502 已经被监听,DAS-MB 起来后连不上对端设备,日志报的是“连接被拒绝”,看着像网络问题,其实是本机端口打架。
装之前先看一眼:
# 查 502 端口当前被谁监听 Get-NetTCPConnection -LocalPort 502 -ErrorAction SilentlyContinue | Select-Object LocalAddress, LocalPort, State, OwningProcess # 拿到 OwningProcess 后查进程名和路径 Get-Process -Id <上一步的PID> | Select-Object Id, ProcessName, PathState是Listen且有进程占用,就要先确认这个进程是不是必须的。是别的采集软件,停掉或改端口;是 DAS-MB 自己的残留进程,用Stop-Process清掉再装。LocalAddress显示0.0.0.0表示监听全部网卡,显示具体 IP 表示只绑了某块网卡,后者在多网卡工控机上很常见,配通道时目标 IP 要跟它对应。
防火墙这块,采集服务往外连设备是出站,一般不用管;但如果本机还要作为从站被上位机读,或者带了 Web 管理页面,入站规则必须放行。我一般直接按端口建规则,不按程序建,程序路径改版本时会变:
# 放行采集管理端口,502 按现场是否需要对外提供从站服务再决定 New-NetFirewallRule -DisplayName "DAS-MB-Manage-8080" -Direction Inbound ` -Protocol TCP -LocalPort 8080 -Action Allow -Profile Domain,Private-Profile只勾选 Domain 和 Private,别图省事把 Public 也放开,工控机接外网的机会不多,但一旦接上就是敞口。端口号按实际的来,示例里的 8080 只是占位。
2.3 时间同步和磁盘:两个被忽略的前置条件
采集数据带时间戳,工控机时间不准,历史库里同一时刻的数据会对不上,事后查故障根本没法对时间轴。装之前执行一次对时,并确认时间服务是自动启动:
# 立即对时并查看同步状态 w32tm /resync w32tm /query /statusSource一行显示当前时间源,Last Successful Sync Time是上次成功同步时间。工控机长期离线的话,至少保证几台机器之间时间一致,别一台快三分钟一台慢两分钟。
磁盘方面,采集日志和原始报文缓存默认写在安装目录下,日志量跟点位数、轮询频率直接相关,200 个点位 500ms 轮询,一天下来日志不留神就是几个 G。我的习惯是把日志目录挪到单独的数据盘,安装时就把路径改掉,别等 C 盘红了再迁。
3. 解压与安装:WW-DAS-MBTCP-3.0SP1.zip 的执行顺序
包拿到手,别急着双击。这个压缩包里是主程序加 SP1 补丁的合包,顺序搞反了会出现版本号对不上、服务注册失败的情况。
3.1 解压路径和包内结构
解压路径有两个要求:全英文、不带空格。老式安装器对中文路径和空格的处理一直不太靠谱,安装到一半报“找不到源文件”十有八九是这个原因。我一般固定解到D:\pkg\WW-DAS-MBTCP-3.0SP1。
解压完先看一眼目录,典型的合包结构是这样:
WW-DAS-MBTCP-3.0SP1/ ├─ setup.exe # 3.0 主程序安装入口 ├─ SP1/ # 3.0 SP1 补丁,覆盖式安装 ├─ redist/ # 附带运行库,缺依赖时用 ├─ tools/ # 诊断工具,后面验证要用 └─ docs/ # 版本说明和变更记录先读docs里的变更记录,确认 SP1 修了哪些问题、有没有要求主程序最低版本。这个习惯救过我一次:某个补丁明确写了必须先装 3.0.0.4 以上,现场机器还是 3.0.0.1,直接覆盖装完服务起不来。
解压后先校验压缩包完整性,传输过程中损坏的 zip 解压到一半才报错,很浪费时间:
# 对比发布方提供的哈希值,没有提供就至少确认能完整解压 Get-FileHash .\WW-DAS-MBTCP-3.0SP1.zip -Algorithm SHA256 | Format-List Algorithm, Hash, PathHash一行是实际算出来的值,跟拿到的校验值逐位对比。对不上就别装了,重新拷一份,硬装下去只会得到一堆莫名其妙的解压错误。
3.2 主程序与 SP1 的安装顺序
顺序是死的:先主程序,后补丁。
第一步跑根目录的setup.exe,安装类型选自定义,把安装目录从默认的C:\Program Files (x86)\...改到数据盘,比如D:\WW-DAS-MBTCP。路径短、无空格、无括号,后面配日志路径、备份配置都省事。
第二步进SP1目录跑补丁安装。补丁一般是覆盖式,会把主程序目录下的若干 DLL 和配置文件替换掉。这里有个细节:如果主程序目录下已经有手工改过的配置文件,补丁可能直接覆盖。我一般的做法是装补丁前把config目录整个复制一份出来,装完再逐项对比。
配置文件对比用系统自带工具就够:
# 装补丁前备份配置 Copy-Item 'D:\WW-DAS-MBTCP\config' 'D:\backup\config_before_sp1' -Recurse -Force # 装完补丁后对比差异,重点看通道和点位文件 Compare-Object (Get-Content 'D:\backup\config_before_sp1\channels.ini') ` (Get-Content 'D:\WW-DAS-MBTCP\config\channels.ini')Compare-Object输出里带=>的是新文件内容,带<=的是旧文件内容。通道配置文件被补丁改掉是常事,尤其新增了参数项,老配置里没有对应键值,服务读不到就用默认值,采不到数还不报错。
3.3 服务注册、账户与自启动类型
安装完,采集服务一般已经注册成 Windows 服务。先确认服务存在、能查状态:
# 查询服务状态和启动类型 sc.exe query DASMBService sc.exe qc DASMBService服务名按实际显示为准,qc会输出START_TYPE和SERVICE_START_NAME。START_TYPE常见值有AUTO_START、DEMAND_START、DELAYED_AUTO_START。
这里有个必须改的地方:默认如果是AUTO_START,改成延迟自动启动。
# 改为延迟自动启动,等网络栈就绪后再拉服务 sc.exe config DASMBService start= delayed-auto原因是开机时网卡和 TCP/IP 栈还没完全就绪,服务抢在前面启动,第一轮采集全部超时,日志开头一片红,重启后要等一个轮询周期才恢复。改成delayed-auto之后,系统会在基础服务起来约两分钟后再拉起它,现场重启无人值守也能自己恢复。这个改动看着小,是现场“重启后必须人工点一下”的主要来源。
账户方面,默认LocalSystem能跑,但如果采集数据要写到网络共享、或者要连数据库,就得换成专用账户。换账户别忘了给日志目录和配置目录授权,否则服务能启动但写不了日志,日志目录是空的,出问题时连黑匣子都没有。
4. 配置采集通道:Modbus TCP 从站与寄存器映射怎么写
安装只是把程序放上去,真正决定能不能采到数的是通道配置。DAS-MB 的配置分两层:通道层管连接(IP、端口、从站号、超时),点位层管寄存器(功能码、地址、数据类型、字节序)。两层任何一层错,现象都是点位红。
4.1 通道基础参数:IP、端口、从站号、超时
通道配置一般落在config\channels.ini,格式是标准 ini。一个通道对应一台设备或者一个网关下的一个从站:
[channel1] name=PLC_LINE1 protocol=MBTCP ip=192.168.10.21 port=502 slave_id=1 timeout_ms=1000 retry=2 poll_interval_ms=500 enabled=1逐项说清楚:
protocol固定MBTCP,如果设备是串口接网关,这里可能还有MBRTU之类的值,按实际填,填错服务加载通道时直接跳过。slave_id是最容易填错的一项。纯 TCP 设备常见是 1,也有填 255 的;走 TCP 转 RTU 网关的,这里要填网关后面挂的那台设备的实际站号,不是网关自己的。现场“通道显示已连接但点位全红”,一半是这个值。timeout_ms局域网内 500~1000 够用,跨网段或者走无线网桥的话给到 2000~3000,给太短会频繁误判超时。retry重试次数我一般给 2,给多了没意义——设备真挂了,重试三次和重试十次结果一样,只会把轮询队列堆起来,后面的点位跟着延迟。poll_interval_ms是整条通道的轮询间隔,不是单点位的。这个值直接决定设备压力,后面 4.3 细说。
改完配置不用重启整个服务,多数版本支持热加载,但热加载失败时不会明确报错。稳妥做法是改完重启服务,重启后立刻看日志前 20 行有没有通道加载记录。
4.2 点位表与字节序:三个最容易配错的字段
点位一般单独放一个 CSV,字段结构大致如下:
tag,func_code,addr,data_type,byte_order,scale,unit,enabled TEMP01,3,40001,float32,ABCD,1,℃,1 PRESS01,3,40003,float32,ABCD,0.1,kPa,1 RUN01,1,00001,bool,,1,,1 COUNT01,3,40010,uint32,CDAB,1,,1func_code决定读哪片区域:3 是保持寄存器,4 是输入寄存器,1 是线圈,2 是离散输入。这个填错,读出来的值要么恒为 0,要么直接异常码返回。
addr是地址,注意 40001 这种写法是“区域+偏移”的展示格式,实际下发报文里是偏移 0。有些设备手册给的是 0-based 偏移,有些给 1-based,配之前先确认手册用的是哪种,差一位整片数据全错位——这是最隐蔽的一类翻车,值看起来都正常,就是对不上。
byte_order是第二大类问题。32 位浮点跨两个 16 位寄存器,字节序和字序组合起来有 ABCD、CDAB、BADC、DCBA 四种常见排法,加上字序 AB/BA,一共好几种。判断方法很简单:配一个已知值的寄存器,比如设备上设定温度 25.0,读出来如果是 1.4E-41 或者 -1.2E+38 这种离谱数,就是字节序反了,换个组合试。
32 位整型也一样,COUNT01那种用CDAB的很常见。经验是:同一个厂家同系列设备,字节序基本一致,配通第一台之后把点位表复制改地址就行,不用每台重新试。
4.3 轮询周期与重试:性能与实时性的取舍
轮询间隔和点位数是一组乘法关系。Modbus TCP 单次请求能读的寄存器数量有上限,功能码 03 一次最多 125 个寄存器,功能码 01/02 一次最多 2000 个位。点位数超过这个数,采集服务必须拆成多次请求,一次轮询的实际耗时就是多次请求的累加。
算一笔账:一条通道 300 个保持寄存器点位,服务按 125 个一包拆成 3 次请求,单次往返按 20ms 算,一次完整轮询至少 60ms,再加上设备处理时间,poll_interval_ms设成 100 就是自找麻烦,请求会排队。常见做法是把间隔设在单次完整轮询耗时的 3~5 倍以上,300 点位就给到 500ms 左右。
点数特别多的时候,比起硬压轮询间隔,更合理的做法是拆通道:按设备拆、按数据重要程度拆。关键点位一条通道高频采,辅助点位另一条通道低频采,两条通道互不影响。这个思路在 DAS-MB 里就是配多个[channelN]段,每个段独立 IP、独立间隔。
[channel2] name=PLC_LINE1_SLOW protocol=MBTCP ip=192.168.10.21 port=502 slave_id=1 timeout_ms=1500 retry=1 poll_interval_ms=5000 enabled=1同一台设备开两条通道,一条 500ms 采关键点位,一条 5000ms 采电度、累计量这类不需要实时的数据。retry在低频通道上给 1 就够,反正下一个周期很快就到。
注意:同一台设备开两条通道时,两条通道的点位地址不能重叠,否则设备侧会看到重复读取,日志里会出现大量正常但有规律的重复请求,排查起来很费劲。
5. 常见问题排查:DAS-MB 装完连不上、点位全红的五条记录
这一节按“现象 → 原因 → 解决”写,都是我实际遇到过的,顺序按出现频率排。
第一条:服务显示运行中,所有点位红,日志报连接超时。
现象很统一,通道状态一直是“连接中”,日志里每隔一个轮询周期刷一条 timeout。原因通常是三层:IP 不通、端口不对、从站号错。排查顺序是先用Test-NetConnection确认网络层通不通,再用通用 Modbus 调试工具直连设备读一个已知寄存器,能读到就说明设备和网络没问题,问题在配置的从站号或寄存器地址上。如果调试工具也读不到,检查设备侧有没有开 Modbus TCP 服务、有没有 IP 白名单限制。
第二条:一部分点位正常,另一部分固定超时或返回异常码。
原因基本是单次请求的寄存器数量超限,或者点位地址超出了设备实际支持的寄存器范围。功能码 03 单次最多 125 个寄存器,点位数超了服务会拆包,但如果某个点位地址落在设备未实现的区域,那一次请求会整体返回异常码,连带着同包里的正常点位一起变红。解决方式是看日志里异常码的具体值,02 是非法数据地址,03 是非法数据值,按异常码去核对手册的寄存器表。
第三条:数值能读到,但明显不对,浮点数读出来是天文数字。
字节序配反了。这类问题最迷惑人,因为通道状态是绿的,点位也是绿的,就是不报警——温度显示 1.4E-41 这种值,业务侧还以为设备坏了。处理办法是找一个可以人为设定的寄存器(比如设定值),改成已知数,然后四种字节序挨个试,试到读数对上为止。试完把结论记下来,同厂设备后面直接复用。
第四条:跑几个小时内存持续上涨,最后服务无响应。
多半是诊断日志级别开成了 DEBUG 或者 TRACE,加上日志没有按大小滚动。采集服务每个轮询周期都往里写报文,量上来之后磁盘和内存都吃不消。解决是把日志级别改回 INFO,日志按天或者按大小滚动,保留 7~15 天。这个改动在配置文件里,改完重启服务生效。
第五条:手动启动服务一切正常,重启机器后不采集,得人工点一下。
前面提过的启动类型问题。服务是AUTO_START,开机时网络栈没就绪,第一轮采集全超时,有些版本超时后不会自动重连,就一直挂着。改成delayed-auto,同时确认服务账户对配置目录有读权限——账户权限不足时服务会以受限模式启动,看起来在跑,实际通道一个都没加载。
6. 验证跑通:三步确认 DAS-MB 3.0 SP1 真的在采数
装完不等于跑通。我判断这套采集是否真的在工作,固定走三步,每一步都有明确的期望结果,不靠“看起来正常”。
第一步,服务层确认:
# 服务状态 + 端口监听,两项都得对 Get-Service DASMBService | Select-Object Name, Status, StartType Get-NetTCPConnection -State Listen | Where-Object { $_.LocalPort -in 502, 8080 } | Select-Object LocalAddress, LocalPort, OwningProcessStatus是Running,StartType是Automatic (Delayed Start),端口监听里有采集服务进程,才算服务层过了。只有Running但端口没监听,说明服务起来了但业务模块没加载,回配置里查通道段有没有语法错误。
第二步,数据层确认。打开自带诊断工具或者通用 Modbus 调试工具,读一个已知值的寄存器,和业务侧显示值对照。这一步的关键是读数要变——静态值说明不了问题,把设备侧设定值改一下,看采集端是否在一个轮询周期内跟着变。不变的话,看日志里那一轮请求是成功了还是超时了。
第三步,跑一段时间再看。采集类软件最怕的是“刚装完正常,跑一夜崩了”。我的习惯是装完观察至少半小时,重点看三件事:
| 验证项 | 看什么 | 期望结果 |
|---|---|---|
| 日志重连频率 | 日志里 timeout / reconnect 关键字 | 偶发个位数,不是每周期都有 |
| 进程内存 | 任务管理器或Get-Process的 WorkingSet | 稳定在某个区间,不持续爬升 |
| 历史数据连续性 | 数据库按时间查最近半小时 | 无大段空缺,时间戳间隔均匀 |
这三项任何一项不达标,都别急着交付。日志重连频繁是网络或从站号问题,内存爬升是日志级别或连接泄漏,历史数据有空缺则是轮询间隔和点位数不匹配——都能在正式投运前改掉。
# 快速看进程内存和句柄数,隔几分钟跑一次对比 Get-Process DASMBService | Select-Object Id, ProcessName, @{n='MemMB';e={[math]::Round($_.WorkingSet64/1MB,1)}}, HandleCountMemMB两次采样相差几十兆以内算正常,翻倍就要查原因;HandleCount持续上涨通常是连接没释放,每个轮询周期开一个连接不关,句柄数会一直涨。
从那以后,我每次装这套包,都会在交付前把这三步完整走一遍,尤其是半小时观察那一步,哪怕现场催得再紧也不跳。装得快不算本事,跑一周不用人管才算。希望帮到你。
本文还有配套的精品资源,点击获取