简介:面向具备自动化设备安装调试基础、需要打通上位机与PLC通讯的工程技术人员,这份《Intouch2020R2SP1与西门子1500PLC通讯配置手册》聚焦实际项目中的联调环节,系统梳理从PLC侧到Intouch侧的完整配置流程。内容围绕博图软件设置、SMC配置、创建Intouch通讯程序、访问名与标记名配置以及动画链接建立等关键步骤展开,并穿插安全操作提醒与注意事项,便于读者理解各环节的衔接关系。资源包为1个PDF文件,大小约1.42MB,单文件结构适合随身查阅或打印成册,按目录顺序即可对照现场操作。该手册已有287人学习,适合在项目调试前快速熟悉通讯链路搭建思路,也可作为排查通讯异常、核对参数设置时的参考资料,帮助减少反复试错,提升配置效率与系统运行的稳定性。
1. Intouch 2020R2 SP1 连 S7-1500:八成的通讯故障,锅不在驱动上
现场最典型的一幕是这样的:Intouch 2020R2 SP1 的画面已经画完,西门子 S7-1500 也在正常跑,切到运行态,标记名全打成问号。工程师把 SMC 里的连接删了建、建了删,重装驱动、换网线、改 IP,一下午过去了还是问号。这类 Intouch 与 S7-1500 的通讯配置,真正决定成败的往往是三处静态设置:PLC 侧的 PUT/GET 授权与 DB 块访问方式、SMC 里 Legacy Connection 的机架槽号与 Topic 命名、Intouch 访问名与 Topic 的对应关系。这份《Intouch2020R2SP1 与西门子 1500PLC 通讯配置手册》走的就是这条主线——博图设置、SMC 配置、通讯程序、访问名、标记名、动画链接六段,从 PLC 内部的一个 DB 偏移量,一路拉到画面上跳动的数字。适合手上正有一套 1500 + Intouch 要联调、又不想在驱动层反复试错的自控工程师,也适合第一次独立做上位机对接、需要一份能照着抄的参数的同行。
2. 拆开这条链路:SIDIRECT 的四层结构与选型边界
2.1 一个模拟量从 DB 块到画面刷新的完整路径
把通讯拆开看,一个温度值要走完五跳。第一跳在 PLC 内部,DB100 里偏移 0 的 REAL 变量被程序每个扫描周期刷新;第二跳是以太网,S7 通讯跑在 ISO-on-TCP 上,默认端口 102,帧里带着“读 DB100 从第 0 字节开始的 4 个字节”这样的请求;第三跳是上位机上的 OI Server,也就是 SMC 树里那个Siemens - SIDIRECT节点,它负责把请求翻译成 S7 报文、把返回值还原成数值;第四跳是 Intouch 的访问名,它指向 OI Server 里的某个 Topic;第五跳才是标记名和动画链接,WindowViewer 按更新周期去取这个值,画到矩形填充或者数值显示上。
SMC 的树形结构和这条路径是一一对应的:Port是协议端口层,Legacy Connection是一台具体 PLC(IP + 机架槽号),Device Group/Topic 是这台 PLC 下面的一组数据,Item 才是最终的 DB 地址字符串。搞清这四层的归属,排错时就能判断问题出在哪一层——是端口没通、连接没激活、Topic 名字对不上,还是 Item 地址写错。很多人一上来就怀疑驱动,其实是第四层和第五层没对齐。
还要注意一个不写在界面上的事实:SIDIRECT 走的是绝对地址读取,它不认识你在博图里起的符号名,只认 DB 号加字节偏移。这意味着 PLC 程序里一次无心的变量插入,就可能让整张地址表错位,而画面上不会有任何报错,只会安静地显示错误的值。这种“静默错误”比通讯中断更难查,后面第 5 章会专门讲。
2.2 为什么这套组合优先 SIDIRECT,而不是 OPC UA 或 Modbus TCP
接线方式不止一种,选哪个取决于你在 PLC 侧愿意付出多少改动成本。SIDIRECT 的优势是改动最小:不用在 PLC 里加任何通讯程序块,不用额外授权,只要打开 PUT/GET 权限、把对应 DB 的“优化的块访问”取消掉,就能读写。它本质上就是让上位机扮演一个 S7 客户端,和博图在线监控用的是同一套服务。
OPC UA 看起来更现代,但在 1500 上要开服务器、配安全策略、处理证书,部分型号还要运行时许可,联调面一下子变大。它真正的价值在跨系统——给 MES、给数据平台、给多品牌混用的产线做统一入口,而不是一台 HMI 连一台 PLC 这种点对点场景。Modbus TCP 则是另一条路,需要在 PLC 侧写MB_SERVER之类的映射程序,把要通讯的数据搬进固定寄存器区,等于把地址表重编一遍,点多了维护成本很高。
| 方案 | PLC 侧改动 | 额外许可 | 寻址方式 | 更适合的场景 |
|---|---|---|---|---|
| SIDIRECT(S7 通讯) | 开 PUT/GET、DB 取消优化访问 | 无 | DB 号 + 绝对偏移 | 单台 HMI 对接单台 1500,点数几百到几千 |
| OPC UA | 开服务器、配安全策略与证书 | 视 CPU 型号与固件而定 | 节点/符号 | 跨系统集成、上层平台取数 |
| Modbus TCP | 写服务端映射程序、重建寄存器表 | 无 | 寄存器地址 | 多品牌设备混用、第三方仪表 |
选 SIDIRECT 的边界也要说清楚:它依赖非优化 DB,意味着你在博图里放弃了一部分 DB 结构灵活性;它只走 IPv4 的 102 端口,跨网段要提前在防火墙上放行;它的连接数是有限的,1500 对 PUT/GET 的并发连接有上限,多台上位机同时连同一台 PLC 时要算一算,别到现场才发现第三台连不上。这几点在项目前期定方案时就要想好,事后改的成本远高于一开始选对。
2.3 版本与组件清单:先对齐再动手
动手之前先把清单核对一遍,比配到一半发现驱动不认 1500 强得多。SIDIRECT 是很老的驱动产品线,早期版本只支持 S7-300/400,能连 1500 的版本需要确认过。判断方法很简单:打开 SMC,如果Operations Integration Supervisory Servers下面能看到Siemens - SIDIRECT这一项,说明驱动已注册成功;看不到就是没装或者装错版本,此时在 Intouch 里怎么配都不会通。
| 组件 | 在这条链路里的角色 | 核对点 |
|---|---|---|
| Intouch 2020R2 SP1 | HMI 组态与运行时 | Application Manager 能正常建应用 |
| SMC(System Platform Management Console) | 管理 OI Server 与连接配置 | 树里能看到 SIDIRECT 节点 |
| Siemens SIDIRECT DA Server | 实际发 S7 报文的服务 | Windows 服务列表里处于运行状态 |
| 博图 | PLC 硬件组态与 DB 定义 | 能在线监控、能看 DB 偏移量 |
| 上位机操作系统 | 承载上述软件 | 与 PLC 同网段、102 端口可达 |
安装顺序上,常见做法是先装 Intouch 再装驱动,装完重启一次,让服务注册生效。有些现场图省事,装完不重启就去开 SMC,结果树里空着一块,以为是版本问题,其实只是服务没起来。我一般会在装完后先看一眼服务列表,把 SIDIRECT 相关服务的启动类型设成自动,省得后面每次开机都要手动拉一次。
3. 博图侧四个开关:少勾一个,SMC 里怎么配都不通
3.1 CPU 选型与以太网参数
新建项目、添加 CPU(1511、1513、1515 按实际型号选),进设备组态,点开 CPU 的 PROFINET 接口 X1,设 IP 地址和子网掩码。示例里用192.168.0.10 / 255.255.255.0,上位机设成同网段的192.168.0.100之类。这一步没什么技巧,但有两个细节常被忽略:一是上位机如果是双网卡,接 PLC 的那块网卡必须和 PLC 同网段,而且不要让办公网的默认路由把它盖掉;二是改完 IP 一定要重新下载硬件组态,只在离线项目里改,PLC 里的实际地址不会变。
验证方法很直接:在上位机命令行里 ping 一下 PLC 的 IP。ping 通只说明三层可达,不代表 102 端口通,这两件事要分开测。有些交换机开了端口隔离或者 ACL,ping 得通但 S7 报文过不去,这种情况在集成度高的现场并不罕见。
3.2 保护等级与“允许来自远程对象的 PUT/GET 通信访问”
右键 CPU → 属性 → 防护与安全 → 访问级别,这里是决定“外部能不能读你”的总闸。调试阶段常把访问级别设为完全访问(无保护),但这只是省事,不是必须。真正关键的是下面那个勾选框:允许来自远程对象的 PUT/GET 通信访问。这个勾不勾,直接决定 SIDIRECT 能不能拿到数据——不勾的时候,连接能建、Activate 也能成功,但一读就是空值,非常容易误判成驱动问题。
| 设置项 | 调试期建议 | 投运后建议 |
|---|---|---|
| 访问级别 | 完全访问(无保护) | 按现场规范收紧,保留必要权限 |
| PUT/GET 通信访问 | 勾选 | 保持勾选,仅对受控网段开放 |
| 通讯端口 | 102 默认 | 不变,靠网络层隔离 |
投运后要不要把访问级别收回去,取决于现场的网络边界。如果上位机和 PLC 在同一个受控的自动化网段里,保持 PUT/GET 开启是常规做法;如果这条网络还要接办公网,那就该在交换机或路由层做隔离,而不是靠关权限来兜底。权限一关,通讯立刻断,这种“安全措施”最后往往被现场改回来。
3.3 DB 块必须取消“优化的块访问”
这是最容易翻车的一步。S7-1500 新建 DB 时默认勾选“优化的块访问”,这种 DB 内部按符号组织,没有固定的绝对偏移,博图里看到的偏移量列是空的。SIDIRECT 这类按绝对地址读的驱动面对优化 DB 完全无从下手——它能连上,但读不到任何东西,或者读出来是垃圾值。
操作是:右键目标 DB → 属性 → 取消勾选“优化的块访问” → 确定 → 编译整个 PLC → 下载。三步里“下载”这一步不能省,只编译不下载,PLC 里跑的还是旧结构,地址表对不上。取消优化之后,DB 编辑器里会多出“偏移量”列,这才是你要抄进 Intouch 的数字。
有个副作用要提前知道:取消优化会把该 DB 的布局重新排一遍,原来算好的偏移可能整体位移。如果这个 DB 已经被别的系统引用过,改之前先把旧偏移量导出来对比,别直接覆盖。项目里我一般要求所有要通讯的 DB 从建立第一天就取消优化,避免后期返工。
3.4 用偏移地址核对:别拿符号名当地址用
打开取消优化后的 DB,看偏移量列,把每个要通讯的变量记成“DB 号 + 偏移 + 类型”三件套。类型必须和 Intouch 里的标记名类型对上,Real 对应 4 字节、Int 对应 2 字节、Bool 对应位。下面这张表就是我从项目里随手摘的一段地址台账的样式,实际做项目时建议用表格维护,几百个点靠脑子记一定会错。
| 变量含义 | 数据类型 | DB 号 | 偏移量 | Item 写法参考 |
|---|---|---|---|---|
| 出口温度 | Real | 100 | 0 | DB100.DBD0 |
| 主管压力 | Real | 100 | 4 | DB100.DBD4 |
| 循环泵运行 | Bool | 100 | 8.0 | DB100.DBX8.0 |
| 启动次数 | Int | 100 | 10 | DB100.DBW10 |
位地址的偏移写法要格外小心:偏移量列显示的8.0表示第 8 字节的第 0 位,写 Item 时不能写成DB100.DBD8,那是把 4 个字节当一个浮点数读,得到的值毫无意义。同理,一个 Int 占 2 字节,紧跟其后的下一个变量偏移就是 12 而不是 11,逐条核对比凭经验推算可靠。
4. SMC 与访问名:连接参数、Topic 与标记名地址一次对齐
4.1 层级路径与 Legacy Connection
从开始菜单打开 AVEVA 的 System Platform Management Console,依次展开Operations Integration Server Manager > Default Group > Local > Operations Integration Supervisory Servers > Siemens - SIDIRECT > Configuration > Port。在Port上右键,选Add Legacy Connection,弹出的配置窗口里填连接名、PLC 的 IP、机架号、槽号。
连接名可以随意起,但建议用英文、不带空格和特殊字符,比如PLC1500_LINE1。中文名在部分版本的日志里会显示成乱码,排错时反而添乱。这个名字本身不参与通讯,只是给人看的标签,真正决定连哪台设备的是 IP 和机架槽号。
4.2 连接参数逐项对照
| 参数 | 填什么 | 说明 |
|---|---|---|
| Name | 自定义,如PLC1500_LINE1 | 仅作标识,建议英文 |
| IP Address | PLC 的实际 IP | 与博图硬件组态一致 |
| Rack | 0 | S7-1500 通常为 0 |
| Slot | 1 | CPU 在设备视图中的槽位,1500 一般为 1 |
| Port | 102 | S7 通讯标准端口,不要改 |
机架号和槽号是新人最容易填错的两个格子。找法是从博图里打开设备视图,看 CPU 所在的那一行对应的槽号;S7-1500 的 CPU 固定占槽 1,机架号 0。填成 0/2 或者 1/1 的后果是连接建得起来但读不到数据,日志里往往只有一句笼统的连接失败,看不出是槽号错了。血泪经验是:这两个数字不要凭记忆填,每次都在博图里现看一眼。
4.3 Device Group、保存与 Activate 的顺序
连接建好后,在Device Group上右键空白处选Add,输入组名,比如PLC。这个组名就是后面 Intouch 访问名里要填的 Topic Name,两处必须一模一样,大小写敏感度取决于版本,稳妥起见全用大写或全用小写。
顺序上有个坑:先保存再激活。点右上角的保存图标把配置落盘,然后在树上右键OI.SIDIR.1选Activate。反过来先 Activate 再改配置,改动不会生效;改完连接参数后,正确姿势是Deactivate→ 改 → 保存 →Activate,少一步都会出现“配置看起来是对的但就是不生效”的玄学现象。
激活成功后,节点图标状态会变,这时候可以顺手在 OI Server 的测试界面里读一个已知地址,验证链路是否真的通了。这一步能省掉后面在 Intouch 里反复怀疑自己的时间。
4.4 Intouch 访问名三要素:Application、Topic、Node
打开 Intouch 的 Application Manager,新建一个应用,选“独立型带符号库”的模板,命名后进入 WindowMaker。访问名在Special > Access Names里配置,三个字段决定一切。
| 字段 | 填什么 | 常见错误 |
|---|---|---|
| Name | 自定义,如ACC_PLC | 用了中文或空格 |
| Application Name | SIDIRECT(驱动注册名) | 填成了安装路径或 exe 名 |
| Topic Name | SMC 里建的 Device Group 名,如PLC | 与 SMC 里的名字大小写不一致 |
| Node Name | 留空(本机) | 双机部署时误留空 |
Application Name 填的是驱动在系统里注册的名字,不是文件路径。填错了运行时日志里会出现打开会话失败的记录,但画面上只是一片问号,不会告诉你原因。Node Name 在本机部署时留空即可,如果是远程 OI Server 部署,这里要填那台机器的机器名或 IP,这也是很多“单机好使、换到服务器就断”的根因。
4.5 标记名地址的四段结构与动画链接
标记名在 Tagname Dictionary 里新建,先选类型(I/O Discrete、I/O Integer、I/O Real),再挂上刚才建的访问名,最后在 Item 里填地址字符串。地址由“区域 + DB 号 + 偏移 + 类型前缀”几段拼成,常见写法就是 3.4 表格里那几种:DB100.DBD0(双字/浮点)、DB100.DBW10(字)、DB100.DBX8.0(位)。
不同版本的 SIDIRECT 对分隔符和类型前缀的容忍度不完全一样,权威定义在驱动安装目录的帮助文件里,搜索 Item Name Syntax 就能找到。拿不准的时候,最省事的做法是先只建一个标记名,切到运行态看它有没有值;一个点通了,剩下的复制改偏移就行。一个都不通,就别批量建了,问题在访问名或 SMC 那一层。
动画链接是最后一步:在窗口里放一个文本对象或矩形,双击打开动画,选“值显示”或“填充”,表达式里选刚才的标记名,设好范围和颜色,保存,切到 WindowViewer。数值开始跟着 PLC 变化,这条链路才算真正打通。如果数值显示的是?,说明取数失败;如果显示0但从头到尾不动,多半是地址对上了但 PLC 里那个变量本身没在刷新。
5. 排查记录:五个现象、五个原因,照着对
5.1 现象:SMC 里 Activate 成功,Intouch 全是问号
原因通常不在驱动,而在访问名和标记名的对应关系上:Application Name 写错、Topic Name 与 SMC 里的组名不一致、Item 地址格式不被当前驱动版本接受,三者占绝大多数。解决顺序是从下往上查——先在 SMC 的 OI Server 里直接读一个已知地址,这一层通了再回到 Intouch 查访问名,最后查 Item 字符串。
如果连端口都不确定通不通,别猜,直接测:
# 先确认 PLC 的 S7 通讯端口是否可达,102 不通就别在 Intouch 里折腾了 Test-NetConnection -ComputerName 192.168.0.10 -Port 102 -InformationLevel Detailed # 双网卡机器常见问题:确认去往 PLC 网段的路由走的是哪块网卡 Get-NetRoute -DestinationPrefix "192.168.0.0/24"Test-NetConnection看的是TcpTestSucceeded是否为 True,它比 ping 更接近真实情况,因为 ping 走的是 ICMP,和 S7 的 TCP 连接是两回事。Get-NetRoute用来确认InterfaceIndex是不是接 PLC 的那块网卡,双网卡机器上路由走错,表现就是时通时不通,非常折磨人。
5.2 现象:整数能读,浮点读出来是乱码,位读不到
原因是类型不匹配。PLC 里是 REAL,Intouch 里建了 I/O Integer,读回来的是把 4 个字节当 2 字节解释的结果;位变量用了DBD前缀,读的是一个双字而不是一个布尔。解决方法是回到 3.4 的地址台账,逐条核对类型和前缀:Real 用DBD,Int 用DBW,Bool 用DBX加位号,三者的字节宽度不能混。
还有一种情况是浮点值看起来“差不多但差得离谱”,那是字节序或者偏移差了 2 字节,常见于手工推算地址时把上一个变量的宽度算错。遇到这种,别改公式,直接回博图看偏移量列。
5.3 现象:今天配好能用,重启电脑后通讯全断
原因多半是服务没设成自动启动,或者 SMC 里的配置没有落到“开机自动激活”的状态。解决分两步:一是把 SIDIRECT 相关服务的启动类型改成自动;二是在 SMC 里确认配置已保存并处于激活状态,有些版本需要重新 Activate 一次才会在重启后恢复。
顺带提一句,PLC 侧如果改过 IP 或者换过 CPU,SMC 里那条 Legacy Connection 的 IP 也要同步改,改完按 4.3 的顺序 Deactivate → 改 → 保存 → Activate。现场换备件后通讯断,十有八九是这一步漏了。
5.4 现象:能读不能写,写进去的值下一秒就变回去
原因不在通讯,在 PLC 程序。写下去的值被程序里某个每个扫描周期都执行的赋值语句覆盖了,或者这个 DB 变量在程序里是输出结果而不是输入设定。解决方法是让写操作和程序逻辑错开:要么把设定值单独放一个 DB 区域,程序只读不写;要么在程序里加条件,避免无条件覆盖。
还有一种情况是 DB 属性里设了只读或者写保护,这种在下载时不会有提示,只有写的时候才发现。查的时候先看程序,再看 DB 属性,最后才怀疑驱动。
5.5 现象:偶发闪断,画面数值偶尔跳 0
这是最难复现的一类。常见原因有三个:一是 1500 对 PUT/GET 的并发连接数有限,多台上位机加上编程软件在线监控同时连,连接被挤掉;二是网络里有环或者交换机质量差,丢包导致的超时重连;三是更新周期设得太短,100ms 一个点乘以几百个点,负载压不住。
对应的处理:把不参与调试的在线监控断掉、把更新周期从 100ms 放宽到 500ms、把上位机和 PLC 单独划到一个交换机上。这几条改完还断,就该抓包看是哪个方向先断的,而不是继续在软件里调参数了。
6. 批量标记名与心跳位:让通讯状态自己说话
点位超过一百个,手工在 Tagname Dictionary 里一条条敲就是纯粹的体力活,而且必错。Intouch 自带 DBDump 和 DBLoad 两个工具,可以把整个标记名字典导出成 CSV,改完再导回去。我的做法是先手工建三五个通得过的点,用 DBDump 导出来看列结构,再按同样的列结构把地址台账批量填进去,DBLoad 一次导入。
自己维护的地址台账长这样,用一份 CSV 存着,既是导入源也是后期查错的对照表:
tagname,type,access_name,item,comment TEMP_DB100_0,IOReal,ACC_PLC,DB100.DBD0,1#加热器出口温度 PRESS_DB100_4,IOReal,ACC_PLC,DB100.DBD4,1#主管压力 RUN_DB100_8_0,IODiscrete,ACC_PLC,DB100.DBX8.0,1#循环泵运行 COUNT_DB100_10,IOInteger,ACC_PLC,DB100.DBW10,1#启动次数这四列里,item是唯一会随博图改动而变化的部分,其余三列基本固定。所以要重新下载 DB 时,只需要更新这一列再重新 DBLoad,工作量从半天压到十分钟。注意 BDDump 的原始列远比这多,导入前要按原始列结构对齐,别直接拿这份精简版去喂 DBLoad。
再往上走一步,是做通讯健康度自检。在 PLC 的 DB 里留一个 INT 变量,程序里每秒加一、溢出回绕,Intouch 侧用一个 I/O Integer 标记名读它,再配一段条件脚本:值超过五秒没变化就置一个离散报警位。这个心跳位比任何“通讯正常”的静态提示都可靠,因为它验证的是整条链路在动,而不只是连接存在。我把这个习惯带到了每一个项目里,画面上永远有一个不起眼的小方块在闪,它一停,值班的人比我先知道。
点位抽查也建议做成固定动作:新配完先抽三个点,一个 Real、一个 Int、一个 Bool,在 PLC 侧强制改值,看画面是否跟随;然后断电重启一次上位机,确认服务自启和配置持久化;最后拔一次网线,看恢复后数值能不能自己回来。这三步走完,才算真的收工。从那以后我每次交底前都强制走一遍这套验证,宁可多花二十分钟,也不想在半夜接到“画面全是问号”的电话。希望帮到你。
本文还有配套的精品资源,点击获取