多彩编程 多彩编程MZPH · CODE BLOG
ARTICLE DETAIL

文章详情

深耕前端与后端开发技术的一线实战笔记与踩坑复盘。

DASSIDirect 3.0驱动配置指南:打通HMI到数据库的数据采集链路

DASSIDirect 3.0驱动配置指南:打通HMI到数据库的数据采集链路 简介西门子S7 PLC与Wonderware Intouch之间的通信依赖DASSIDirect驱动这是DASSIDirect 3.0驱动程序的完整安装包面向工业自动化工程师、上位机组态与PLC联网调试人员。该驱动覆盖S7-200、300、400、1200、1500及400H等系列适用于需要将Intouch作为SCADA人机界面与西门子控制器建立OPC/DAServer通道的场景。包内共159个文件以dll运行库和exe安装/服务程序为主另有chm帮助手册、PDF说明、xml配置文件、ini/msi安装组件等整体28.39MB便于快速部署与按需查阅配置方法。现已吸引1575人学习下载。压缩包内除核心驱动程序外还包含DAServer ManagerIntouch DAServer管理器、安装与配置帮助文档以及aacfg/aarul等协议配置文件可协助用户完成从驱动注册、通道建立到设备地址映射的完整设置尤其适合刚接触Intouch与西门子PLC通信的工程师作为排错和部署参考。1. DASSIDirect3.0驱动程序装好驱动连不上库问题多半不在驱动很多人以为 DASSIDirect3.0驱动程序 装完就能把 HMI 里的实时数据搬进数据库实际上真正把它跑稳的人都折在了服务名、连接串和身份验证上。这套驱动是工业 HMI 组态环境里最常见的关系数据库采集通道之一它把实时标签、报警和趋势数据按周期写入数据表也把外部系统计算好的结果读回画面。解决的痛点很具体机理数据入库慢、采集进程假死、数据对不上账。适合做数据采集和 SCADA 集成的工程师——新手可以照着下面的流程把服务配起来熟手也能在边界参数和排错顺序上避开几个我踩过的坑。2. 驱动选型与安装DASSIDirect 3.0 在数据采集链路里的位置以及装之前要确认的四个细节2.1 数据链路拆解HMI 标签是怎么走到数据库的典型的场景是HMI 里的实时标签比如罐区液位、泵状态、电流值需要每几秒写入关系数据库一张表或者从数据库读配方参数。初学者喜欢直接在画面脚本里写 SQL用组态软件内置的查询函数去操作库。这个做法在标签很少的时候看似能跑但有两个硬伤第一画面进程和数据库操作耦合在一起数据库稍微慢一点画面刷新就卡第二查询失败会直接影响实时性操作员看到的是整张画面假死分不清到底是数据库问题还是现场设备问题。DASSIDirect 3.0 这类 DAS 驱动的思路是在中间加一个独立的数据采集服务。HMI 标签通过驱动客户端把数据推给服务服务再按批量方式写库反过来数据库里的数据由服务定时轮询转换成 HMI 能识别的标签值。这样做的好处是把界面刷新和数据库读写拆到了两条线程上画面脚本不再直接持有数据库连接驱动服务还能在断线时把数据缓存在本地网络恢复后再补写。选型时如果只是单机几十个标签、写入频率很低直接用组态软件自带的 SQL 功能确实省事。但项目里只要超过几百个标签或者写入频率高于每秒一条我会优先选 DAS 驱动否则后期生产中光排查“到底是画面卡还是库卡”就能耗掉半天。2.2 装驱动前要确认的四件事安装前不要急着双击安装包先确认以下四项不然装完大概率翻车。第一是版本匹配。DASSIDirect 3.0 的客户端组件必须和 HMI 组态环境位数一致HMI 是 32 位就装 32 位驱动HMI 是 64 位才考虑 64 位版本。服务端倒不需要和客户端同目录但版本主版本号要对上否则服务管理器能看到驱动图标实际通信时却一直报协议不匹配。第二是数据库实例的写法。数据库有默认实例、命名实例、端口实例三种连接方式。DASSIDirect 3.0 的配置界面里如果只填了主机名驱动会先去解析默认实例如果实际数据库装在命名实例上服务能启动但连接日志里全是超时。建议在安装前先用数据库客户端工具测试目标实例的连接字符串把实例名、端口、是否允许 TCP/IP 确认一遍。第三是权限设计。不要用系统管理员账号作为驱动的登录账号。更常见的做法是单独建一个专用账号只给它连接目标数据库、读写映射表的权限角色最少给 db_datareader 和 db_datawriter。用太高权限的账号跑驱动一旦配置界面被误操作风险面很大。第四是协议和防火墙。现在很多服务器默认只开了共享内存DAS 驱动走的是 TCP/IP需要确认数据库服务启用了 TCP/IP 协议并监听固定端口。改了默认端口后驱动配置里要填“IP,端口”而不是实例名。这个细节我在一个模拟项目X里吃过亏数据库端口从 1433 改成 14330 后驱动服务怎么配都超时最后才反应过来实例名解析只对默认端口有效。检查项常见错误正确做法位数匹配64 位系统想当然装 64 位客户端以 HMI 组态环境位数为准实例名只填主机 IP不填实例命名实例写 IP\实例名登录账号直接用数据库超级管理员建专用账号只授读写权限协议只开共享内存/命名管道开启 TCP/IP 并放行防火墙端口2.3 安装步骤与安装后的服务检查安装本身不复杂但容易忽略“安装完成不等于服务可用”。我一般按下面的顺序走第一步关闭 HMI 运行环境和历史数据服务避免文件被占用。第二步以管理员身份运行安装包组件选择里同时勾选“采集服务”和“客户端组件”。如果只装了采集服务HMI 侧的标记绑定会找不到驱动接口。第三步全部保持默认路径安装。这里提醒一下安装目录不要改成带空格和中文的路径DAS 服务在按路径读取配置时对空格很敏感出现过启动后加载不到驱动的案例。第四步打开 Windows 服务管理器找到对应的 DAS 服务先把启动类型改成“自动”再手动启动一次。Get-Service -Name *DAS*, *DASSIDirect* | Select-Object Name, Status, StartType这段命令的作用是检查安装后生成了哪些服务以及它们的启动状态。参数说明Name 支持通配符如果驱动安装后服务名不完整可以用Get-Service | Where-Object { $_.DisplayName -like *DAS* }按显示名再筛一遍。看到 Status 为 Running 不等于驱动配置好了只表示服务进程能活着。如果 StartType 是 Disabled要改成 Automatic否则机器重启后采集服务不会自动拉起来数据出现断档。安装完驱动并不会自动创建任何数据库连接还需要到 DAS Server Manager 里新建服务这部分放到下一章讲。3. 配置 DAS Server把 DASSIDirect 3.0 从黑匣子变成看得见的连接3.1 在服务管理器里新建采集服务安装完成后桌面或开始菜单会出现 DAS Server Manager。打开管理器左侧树形目录里能看到刚装好的 DASSIDirect 3.0 驱动右键选择“新建服务”。这一步是整个配置的起点很多新手在这里直接改默认名称导致多个环境共用一台机器时服务名冲突。服务名称我习惯按“驱动名_业务库名”的规则命名例如DASSIDirect3.0_PlantDB。命名规则里避免用中文和空格因为后续日志文件、缓存目录都会以服务名作为目录名中文路径在部分系统编码下会乱掉。服务创建出来后双击进入配置面板重点配置以下几项数据库服务器地址填 IP 还是主机名要看现场网络。如果数据库和驱动服务在同一机房主机名可以跨网段时必须用 IP否则 DNS 解析延迟会让连接超时更加随机。实例名默认实例留空命名实例填IP\实例名或IP,端口。认证方式推荐 SQL 账号认证配置简单且便于排查Windows 集成认证在域环境下使用但需要保证运行 DAS 服务的系统账号对数据库有访问权。默认数据库指定驱动读写操作落地到哪个库不要留空。连接池和线程参数也不能忽略。我一般把最小会话池设为 5最大会话池设为 10。这里有一个边界不是连接数越多越好如果数据库服务器性能一般连接池开太大会把数据库连接数打满驱动服务自身 CPU 反而不高数据库线程却全部卡在等待上。轮询间隔默认 500ms读取型标签会按这个周期扫描数据库表如果采集周期要求 1 秒以上建议改到 1000ms 或更大降低无效查询。日志级别先设成 Warn等全部调通后再改成 Error避免调试阶段日志量太大把磁盘写满。配置项建议值说明服务名称DASSIDirect3.0_PlantDB不同业务库分开建服务认证方式SQL 账号便于排查和隔离权限最小会话池5保证基础并发最大会话池10避免打满数据库连接轮询间隔1000ms读取型标签扫描周期日志级别Warn调试完成后改 Error3.2 配置表映射与标签映射不建好这两张表写进去的数据就是乱的驱动服务建好之后要告诉它“哪个标签写到哪张表的哪一列”。这一步大多数驱动都是通过外部配置文件完成的DASSIDirect 3.0 也不例外。我在实际项目的做法是用一个 JSON 文件维护映射关系方便版本管理也方便在配置界面里导入。常见做法是准备一个“标签映射配置”文件内容结构类似下面这样{ service: DASSIDirect3.0_PlantDB, pollIntervalMs: 1000, tables: [ { table: dbo.realtime_data, timestampColumn: ts, tags: [ { tagName: TankLevel, column: level, direction: write }, { tagName: PumpState, column: pump_state, direction: write }, { tagName: RecipeValue, column: recipe_value, direction: read } ] } ] }这段 JSON 的含义是HMI 里的TankLevel标签会写到dbo.realtime_data表的level列PumpState写到pump_state列RecipeValue从recipe_value列读取。参数说明里最关键的是direction字段。write 方向由 HMI 侧变化触发服务收到新值后批量写入read 方向则是由服务按pollIntervalMs定时扫描表把数据库字段的最新值拉回 HMI 标签。如果你只需要从数据库读一个参数给画面显示千万不要配成 write否则会把画面值反向写进生产表。timestampColumn的作用是给驱动提供一个排序和去重的依据。没有时间列的表在读取时只能按主键乱序扫描数据一多就会读到旧值。如果原表确实没有时间列建议在驱动外建一张带自增 ID 的视图把主键转换成单调递增列再映射给驱动。3.3 在 HMI 上做最小连通性测试配置完成不要直接挂几百个真实标签先做一个最小连通性测试。我在 HMI 环境里建一个内存标签名字随意比如TestTag1类型设为整型然后在画面脚本里写一行赋值TestTag1 100;这里没有 SQL没有复杂逻辑就是把 100 写到 HMI 标签上。正常情况下DASSIDirect 3.0 服务会捕获到这个标签的写变化并按映射配置写入数据库表。验证方式很简单在数据库客户端里查表SELECT TOP 10 ts, level FROM dbo.realtime_data ORDER BY ts DESC;如果level列出现了 100说明链路通了HMI 标签 → 驱动客户端 → 服务 → 数据库。如果几秒后表里没有数据先不要怀疑 HMI 脚本直接看驱动的 Warn 日志日志里通常会有两条线索一条是“连接成功但登录失败”说明账号密码或权限问题一条是“SQL 语句执行失败”说明映射表里的列名错了。最小测试通过后再把真实标签批量加进映射配置。这里我又要强调一次批量上线时不要一次性改动超过 20 个标签改完一个批次就观察十分钟。驱动的映射文件是热加载还是冷加载取决于具体版本如果遇到“改了配置但值不变”多半是需要重启服务才能重新加载映射所以批次越小定位问题越快。4. 常见问题排查服务起来了但连不上库先按这四处查4.1 服务启动后立刻停止事件日志里报“登录失败”现象Windows 服务管理器里服务状态从 Running 变成 Stopped启动时间只有一两秒操作系统事件日志里能查到数据库登录失败的记录。原因绝大多数情况是数据库登录账号密码错误或者密码里带了特殊字符在驱动配置界面保存时被转义过滤掉了。另一种情况是账号本身能在数据库客户端登录但没有映射到目标数据库的用户驱动连接时会收到“无法打开数据库”的报错。解决先用数据库客户端工具手动登录验证账号和默认数据库。把驱动配置里的密码临时改成纯数字组合比如12345678重新保存后启动服务。如果纯数字密码能启动成功就说明特殊字符在配置界面里没有被正确保留。常见做法是在配置界面里把密码用明文填入后再在文件里检查是否出现#x之类被转义的字符。改回原密码时建议用数据库客户端先重置一次密码再粘贴到配置界面避免手打时带入不可见空格。4.2 服务正常但 HMI 标签写不进去日志里出现“超时”现象驱动服务和数据库服务通过网络连接ping 能通数据库客户端也能连但驱动日志里出现连接超时写入型标签全部失败。原因这种看起来是“网络通但数据库不通”的问题通常是防火墙只放行了 ICMP没放行数据库端口。另一个隐蔽原因是驱动配置里填的服务器名是主机名DNS 解析到了其他网卡地址导致请求走了错误网关。解决先在数据库服务器上做一次端口连通性测试。在运行 DAS 服务的 Windows 机器上执行Test-NetConnection 192.0.2.10 -Port 1433参数说明IP 换成数据库服务器实际地址端口换成数据库监听端口。如果TcpTestSucceeded为 False检查防火墙入站规则是否只放行了ping没有放行 TCP 1433 端口。如果端口测试通过但驱动仍然超时把驱动配置里的服务器名改成IP,端口的形式不要让驱动做实例名解析。我在模拟项目X里遇到过一次明明用 SSMS 客户端能连驱动客户端连不上查了两小时才发现数据库服务器有两个网卡驱动配置里的主机名被解析到了内网管理网段。4.3 标签值读到了旧数据一直不刷新现象画面显示的值是开机时的数值数据库表里的字段已经更新过但 HMI 标签始终不变。原因读取方向标签配了但服务没有按预期周期轮询。最常见的是修改了pollIntervalMs后没有重启服务驱动进程里仍保存着旧的配置。还有种情况是读取型标签被 HMI 侧设置成了“只在启动时读取一次”导致后面数据库更新值不会主动推到画面。解决先在服务管理器里确认读取型标签的配置把轮询间隔改成一个较小的值用于测试比如 500ms。重启服务后再观察画面。测试通过后改回合适周期。另外要提醒的是驱动读取本身有缓存数据库里改了值不会立即在画面里变中间隔着至少一个轮询周期。用“秒改秒看”的方式判断驱动坏掉是不科学的。正确做法是先看驱动日志里有没有读取记录有记录但值不对那是映射列选错没有记录那才轮询配置问题。4.4 映射了多张表只有第一张能写入后面的表报“无效列名”现象映射配置里有十几张表启动服务时第一张表正常后面的表全部失败日志里报“无效的列名”。原因配置文件里的列名和实际数据库列名不一致。很多工程师在复制映射时把实际生产表列名level_before写成了level驱动在初始化阶段会对所有映射做元数据校验第一张表通过后后续表只要报一次错整个表批次就会被标记为不可用。解决不要手工维护列名列表直接从数据库系统视图里生成配置。执行下面的 SQL 取出目标表的所有列名SELECT TABLE_NAME, COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA dbo ORDER BY TABLE_NAME;拿到真实列名后再检查映射文件里column字段是否完全一致。如果列名带了特殊字符比如空格或保留字驱动生成的 SQL 会要求用方括号包起来这一点也要在配置里体现。从那以后我在每次上线前都会先做一次“配置列名与数据库列名一致性”对比宁可多花十分钟也不让它带着错误映射进生产。4.5 系统补丁升级后驱动服务丢失或无法启动现象Windows 自动安装更新补丁后DAS 服务启动失败服务管理器里找不到原先配置好的服务或者驱动的安装目录被系统改名成.old后缀。原因某些安全补丁会把不兼容的第三方驱动组件标记为拦截项服务对应的执行路径被重命名Windows 服务注册项失效。这个我在一个现场遇到过补丁装完第二天所有采集服务全部停掉数据库里缺了好几个小时的数据。解决不要在新系统环境下强行改回原路径。正确做法是卸载驱动后再重装重启后打开 DAS Server Manager选择“导入服务”把之前备份的配置文件导入。注意导入时服务名要一致如果服务名不匹配导入后会生成一个全新的服务实例原来的标签绑定全部断掉。因此驱动安装目录和服务配置文件要在补丁升级前先手动备份。从那以后我每次给运行驱动的服务器打补丁前都会先停服务、备份配置目录、导出服务注册信息再让系统更新。5. 进阶用连接字符串模板做批量验证把驱动边界一次试清楚配置能跑通后还需要验证驱动在整个网络边界、并发边界和故障恢复边界下的表现。我习惯先建立一套“连接字符串模板”把驱动在数据库侧的四种连接方式固化下来方便排查时快速切换。连接方式示例写法适合场景默认实例Server192.0.2.10;Databaseplant;User Iddas_user;Password***单实例数据库命名实例Server192.0.2.10\plantdb;Databaseplant;User Iddas_user;Password***多实例数据库非默认端口Server192.0.2.10,14330;Databaseplant;User Iddas_user;Password***修改过监听端口Windows 集成认证Server192.0.2.10;Databaseplant;Integrated Securitytrue;域环境内网部署批量验证时我把驱动服务的日志级别临时调成 Verbose然后在 HMI 里同时触发一百个写入型标签的变更观察服务日志里每次写入的耗时和失败数。如果服务 CPU 超过 30% 或者写入延迟超过 500ms说明会话池太小或者数据库表索引不完整相反如果服务 CPU 很低但写入延迟高问题往往出在数据库表本身比如表上有大量碎片或阻塞。断线恢复验证是最后一步也是最容易被跳过的一步。我会手动停掉数据库服务保持 HMI 画面继续运行让标签的变化值先积压在驱动缓存里等大约五分钟后再启动数据库服务。恢复后观察驱动日志中缓存队列是否成功吐到数据库表再检查数据行数和积压期间的变化次数是否对得上。这一步能直接暴露驱动在这套环境下的缓冲策略尤其是在数据库重启期间HMI 侧已经产生了几百条记录如果驱动缓存设计不好恢复后可能只写入最后一条其余全部丢弃。有一次我在做模拟项目X的性能测试时就是因为跳过了断线恢复验证上线后数据库例行重启积压的报警数据全部丢掉操作员看到的历史曲线缺了一大块。从那以后我每次换驱动版本或改服务参数都会强制走一遍“断开数据库 → 持续写入标签 → 恢复数据库 → 核对行数”的流程把驱动的真实边界试清楚再放它进生产环境。希望这条习惯也能帮到你。本文还有配套的精品资源点击获取
返回列表