尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

DASSIDirect3.0详解:西门子PLC接入SCADA的通信配置与实战

DASSIDirect3.0详解:西门子PLC接入SCADA的通信配置与实战 简介这套软件由Intouch公司研发用于让数据访问服务器与西门子可编程逻辑控制器进行通信解决人机界面系统与下位机之间的数据交换问题。它采用专有的通信协议支持主流西门子控制器系列从小型到大型设备均有覆盖并满足高实时性数据传输需求。使用该驱动时使用者无需钻研复杂协议细节即可完成系统集成软件另带错误自动检测与报告能力能帮助运维人员快速定位通信故障减少停机时间与维护成本。在实际生产监控、设备数据采集等场景中可显著提升联调效率、优化生产流程。资源包约二十二点九兆字节内含安装向导、预装检查、主安装程序等配套文件可辅助完成部署与配置包内文件说明对安装步骤和常见问题也有指引作用。目前已有超过一千四百人浏览学习适合自动化现场工程师、系统集成商以及正在搭建监控与控制系统通信方案的开发者参考。 做SCADA和上位机的人迟早都会碰到一个头疼的问题西门子PLC的数据怎么才能干干净净、稳定地送到上层软件里来。很多人第一反应是OPC但真正在Wonderware/AVEVA System Platform里做项目的老工程师几乎绕不开一个名字——DAServer。这次要聊的DASSIDirect3.0就是专门用来让System Platform系列产品访问西门子S7系列PLC的通信驱动软件说白一点它负责把PLC里的DB块、M区、I/O区数据翻译成上层平台看得懂的东西。这篇东西写给正在做西门子PLC接入InTouch、System Platform或者ArchestrA项目的朋友也适合刚接触DAServer、被各种TSAP、机架号、DeviceGroup搞到头大的新手。我会把DASSIDirect3.0的选型原因、配置步骤、参数计算逻辑以及实际调试中踩过的坑都理一遍争取你看完能直接上手而不是拿着一堆手册慢慢啃。1. 搞明白DAServer为什么存在比学会点按钮更重要1.1 它是SCADA和PLC之间的“翻译官”DAServer的全称是Data Acquisition Server属于Wonderware/AVEVA的通信中间件体系。你可以把它理解成一条专用管道一头插进西门子PLC的以太网口另一头接InTouch或System Platform的标记名Tagname。管道内部做了大量的协议转换、数据缓冲、故障重连工作上层只管按名字读数据不用关心底层走的是ISO-on-TCP还是TCP/IP。DASSIDirect3.0是这条管道里针对西门子S7系列200/300/400/1200/1500的驱动版本。对比老一代SIDirect DAServer3.0版本对S7-1200/1500的支持更完整尤其在连接资源、TSAP处理和长连接稳定性上有明显改善。我自己的体会是新项目如果PLC是S7-1500直接上DASSIDirect3.0别犹豫如果是老的S7-300/4003.0也完全兼容。1.2 为什么不用西门子自己的软件也不直接用OPC这个问题几乎每次做方案评审都会被问到。我的回答是场景不同工具不同。西门子SIMATIC NET或者TIA Portal里的HMI连接解决的是西门子生态内部的人机交互DAServer则是站在SCADA平台侧解决数据采集它需要对接的是InTouch的标记名体系、System Platform的对象模型和Historian的实时数据库这是SIMATIC NET很难直接做到的事情。至于OPCOPC DA当然也能采但你在System Platform里用OPC等于多了一层“翻译”先让OPC服务器对接PLC再让DAServer或System Platform的OPC Client对接OPC服务器。链路一长出问题的点就多调试时你很难说清是OPC服务器没连上PLC还是DAServer没连上OPC。用DASSIDirect3.0直连中间少一层诊断日志也更直接。而且DAServer在System Platform里有原生的对象集成像Device Integration Object这种玩法OPC方案做起来要绕很多弯路。2. 安装配置前的准备工作版本、授权和PLC侧参数2.1 版本兼容性与授权问题DASSIDirect3.0不是独立安装包它是随System Platform或InTouch的DAServer套件一起分发的。装的时候要注意如果你用的是System Platform 2017/2023确认安装介质里带的DAServer版本是不是3.0系列。有些老项目里装的是SIDirect 2.x那个不支持S7-1200/1500。授权License按连接点数购买不在授权范围内的点数会变成启动不了或者只读。曾遇到客户说“我明明建了设备为什么数据是坏的”最后查出来是点的授权数量超了。建议开工前先把授权情况摸清楚。3.0驱动同时提供32位和64位版本但注意DAServer本身所在的运行环境要和System Platform一致。System Platform 2017之后大多跑64位DASSIDirect3.0的64位版本在性能和内存占用上更理想。2.2 PLC侧的“三件套”必须查清楚在装软件之前先确认PLC侧这几样东西PLC的以太网模块或CPU PN口IP地址必须和运行DAServer的电脑在同一个网段且能ping通。这个听起来像废话但实际项目里因为子网掩码、VLAN划分导致连不上的情况太多了。S7-1200/1500必须在TIA Portal的组态里启用“允许从远程对象PUT/GET通信访问”。这个选项没勾DAServer这边怎么折腾都没用。记住PLC的机架号Rack和槽号Slot。S7-300/400通常是Rack 0、Slot 2有些是Slot 4或Slot 5看具体配置S7-1200/1500走以太网时一般用Rack 0、Slot 1但以你在TIA里实际分配到的为准。我不止一次看到有人拿着S7-300的配置去连S7-1500结果数据一直是灰色Bad Quality。检查PLC组态里CPU的槽号这种低级错误排查起来反而最费时间。3. 实操从创建DeviceGroup到真正读到数据3.1 DAServer Manager界面里怎么一步步建DAServer管理工具一般在开始菜单里叫“ArchestrA DAServer Manager”或者“System Platform管理工具”下的DAServer Manager。启动后先右键添加一个DASSIDirect3.0实例这一步通常会花一两分钟等待服务注册。接着在实例下面建Channel。Channel本质上是一条物理通信链路配置核心就几项Interface选择电脑上实际连接PLC网段的网卡。多网卡的机器这里特别容易选错一选错就“能ping通但DAServer连不上”。通信超时时间默认值通常是3000ms现场总线负载高时我习惯调到5000ms避免误报超时。建好Channel后在下面建Device。Device就是具体的PLC关键参数是Network AddressPLC的IP以及Rack/Slot/TSAP。这些参数建议按下面的表格参照填PLC型号通信方式RackSlot连接TSAP本地/远程S7-300/400工业以太网ISO-on-TCP02按实际0x0200 / 0x0201S7-1200/1500TCP/IP01按实际3.0版本通常自动协商也能手动指定0x0301 / 0x0302S7-200 SmartTCP/IP01视固件版本而定部分需要特殊配置Device Group设备组这里要特别说明一下。DAServer不是直接暴露单个标记点给上层而是按组来轮询。你在Device Group里定义要采集的数据项比如DB1.DBD0、M0.0、IW64每个组有独立的扫描周期。所以建组前先规划好把实时性要求高的数据如设备运行状态、报警放一个500ms的组把电能、温度这类变化慢的数据放一个2~5秒的组这样能有效降低PLC和网络的负担。3.2 数据项地址的命名规范别再被这个绊倒DASSIDirect3.0对西门子PLC地址的命名有自己的规则和TIA里的绝对地址不完全一样。常见写法如下DB块变量DB1,REAL,DBD0表示DB1里的实数偏移0位变量DB10,X,DBX0.3表示DB10里的位M区M,WORD,MW10表示MW10这个字I区I,WORD,IW64表示输入字Q区Q,BYTE,QB8第一次用的时候容易犯的错是直接把TIA里的符号名填进去比如Tank_Level。DAServer默认不解析符号名除非你把Symbol文件导入3.0版本支持导入TIA导出的符号表否则老老实实按绝对地址映射。我的习惯是先在PLC程序里把所有要采集的变量整理成一个专门的DB块地址记得清清楚楚然后在这个DB块基础上做DAServer映射维护成本最低。3.3 用WWLogger和诊断视图定位问题建好Device Group后别急着去InTouch里建标记名先打开DAServer的诊断视图右键实例选Diagnostics看通信状态是不是“Running”。再配合Wonderware自带的WWLogger日志工具抓通信报文。实际操作中我一般分三步验证看Channel状态。如果Channel都连不上查网络、IP和端口102是否被占用。看Device的“Device State”。如果显示Connected只代表TCP连接建起来了不代表数据能正确读到。抓一条实际读取请求。在WWLogger里过滤出这个Device的报文能看到请求的地址和返回的数据内容。这里能直接判断出地址语法对不对。我记得调试一个S7-1500项目时Device一直显示Connected但数据全是坏质量日志里报的是“Access denied”。最后查出来是TIA组态里勾了“优化块访问”导致DB块的地址无法被外部直接按偏移访问。解决办法是取消勾选优化块访问或者用符号访问方式。这种问题不看日志真的很难想到。4. 常见问题与排查技巧实录照着操作能省一半时间4.1 连不上PLC先按这个顺序查很多现场问题并不复杂但排查顺序乱了就会走弯路。我一般按下面这个顺序来你也可以存下来当速查表现象排查方向高频原因Channel状态为Down物理链路、IP网卡选错、PC和PLC不在同一网段、防火墙拦截102端口Device连不上机架、槽号、TSAP槽号填错、TSAP格式不对、S7-1200/1500未开PUT/GET连上但数据Bad Quality地址映射、块访问属性优化块访问开启、地址语法错误、数据类型不匹配偶发性断连超时设置、网络负载通信超时太短、交换机端口协商异常、PLC循环时间过长防火墙这个事多说一句。Windows防火墙默认会拦掉DAServer的对外连接安装时如果没放行会出现“电脑能ping通PLC但DAServer一启动就超时”的现象。要么安装时勾选防火墙例外要么在防火墙入站规则里增加DAServer对应端口通常是102这个问题在Windows Server系统上尤其常见。4.2 数据类型匹配的坑一次给你讲透西门子PLC里一个很常见的坑是同样的DBD0地址CPU里的数据类型是REAL但DAServer这边配置成了DINT读出来的数据就是一团乱码。DASSIDirect3.0有地址类型和偏移长度绑定你用什么类型读它就以什么长度解析。我踩过一次最深的坑是S7-1500里一个REAL变量正好在DB块的非对齐偏移位置刚好跨了两个双字边界。DAServer按32位的方式是能正常读的但后来PLC程序升级变量前面多塞了一个BOOL偏移量整体错位数据全乱。从那以后我养成了一个习惯凡是DAServer要采集的PLC变量单独划一个DB块每个变量都强制对齐比如实数和整数统一用4字节对齐并在PLC程序里做固定声明。先花一点时间规划后面调试能省几天。4.3 通信负载过高导致丢包怎么办当PLC里被采集的点特别多比如上百个REAL还要500ms扫描一次DAServer的轮询机制会生成大量请求帧。有些CPU型号处理不过来就会出现间歇性Timeout。我的处理办法是分而治之把点数拆到多个Device Group里用不同扫描周期或者同一个Group里把连续地址合并成“数组块”来读而不是一个一个读。DAServer支持区域读取你可以定义起始地址和长度例如一次读DB1里的连续20个REAL相当于从DBD0读到DBD76这样网络报文数量会明显减少。这个方法特别适合读泵组、温度序列这类连续数组实测可以把通信负载降低到原来的五分之一。5. 用C#快速从DAServer取数给上层系统留一条“后门”5.1 为什么还要自己写代码有些项目里除了InTouch或System Platform要做界面还要把数据同步给上层MES、EMS或自研的看板系统。这时候DASSIDirect3.0采集到的数据如果只待在DAServer内部那它就是个“孤岛”。好在DAServer的数据可以通过System Platform的ArchestrA .NET API或者通过OPC DA接口暴露出来。如果你用的是System Platform我推荐走ArchestrA的“Device Integration Object”方式直接在IDE里引用DAServer的Device Group。但如果你只是临时读一下或者在做原型验证用C#写一个小工具接OPC DA更快捷。DAServer自带OPC DA接口注册好之后C#里通过Interop.OPCAutomation就能枚举到DAServer暴露的标记点。5.2 一段可以跑通的最小示例为了验证通信链路和地址我经常写这种几十行的小工具比反复开InTouch方便得多using OPCAutomation; OPCServer server new OPCServer(); server.Connect(OPC.DASSIDirect3.0); OPCGroup group server.OPCGroups.Add(ReadPLC); // 数组ItemID、值、质量、时间戳 object[] itemIDs new object[] { Device1.DB1,REAL,DBD0 }; object[] values new object[1]; object[] qualities new object[1]; object[] timestamps new object[1]; group.OPCItems.AddItems(1, ref itemIDs, out _, out _); group.SyncRead((short)OPCDataSource.OPCDevice, 1, out values, out qualities, out timestamps); Console.WriteLine($值: {values[0]}, 质量: {qualities[0]});这里OPC.DASSIDirect3.0是DAServer安装后自动注册的ProgIDDevice1.DB1,REAL,DBD0里的Device1是你在DAServer Manager里建的Device名称后面的地址格式和前面讲的完全一致。SyncRead走的是同步读取原型验证够用正式项目建议把采集放到后台线程里用异步回调或订阅方式避免阻塞UI。写这个工具时还会顺带验证一件事确认DAServer在无界面环境下是否正常运行。有些现场服务器是纯命令行没有交互式登录。如果DAServer没设为Windows服务或者没设置自动启动那界面一关数据采集就停了。用C#小工具连上去读一下能快速发现“DAServer程序开着但服务没起来”这种隐性故障。6. 一些我自己沉淀下来的心得项目里用DASSIDirect3.0这么多年最大的体会是通信驱动本身只是个工具真正决定项目顺不顺利的往往是PLC侧的变量规划。地址偏移乱、块访问属性开优化、类型不对齐这些问题在DAServer这边无论怎么调参都绕不过去。所以如果你还在PLC编程阶段就要想着上位机采集这件事在PLC里预留一个专用的、固定偏移的通信DB块和DAServer配置一起设计。后面无论调试、验收还是后续加测点都能从容很多。最后再分享一个不算秘密的小技巧每次改完DAServer配置重启DAServer服务之前记得把WWLogger打开先看一段启动日志再关闭。启动日志里会明确写配置加载是否成功、License是否有效、每个Device的初始化结果。这些日志是排错的第一手资料比去网上搜教程有用得多。这个习惯我保持了多年帮我避开了不少“改了不生效”的隐形坑。本文还有配套的精品资源点击获取
返回列表