简介:这份PDF面向具备一定自动化设备安装调试能力的技术人员与工控工程师,针对Intouch 2020R2 SP1与西门子1500PLC建立稳定通讯这一实际工程需求,梳理从软件设置到画面联动的完整配置路径。内容围绕博图侧的CPU型号选择、上位机通讯IP配置、变量表与DB块权限开放,以及SMC中Siemens SIDIRECT驱动的Port配置、Intouch通讯程序创建、访问名与标记名定义,直到动画链接建立与最终验证,均给出分步说明与注意事项。资源包共1个PDF文件,约1.42MB,以图文步骤形式呈现,便于按章节顺序对照现场操作,也方便在调试阶段快速定位环节。目前已有288人学习,适合需要将Intouch与S7-1500打通数据通道、减少试错成本的工程师参考,并可作为项目交付前的自查清单使用。
1. 上位机读不到数,八成不是 Intouch 的锅:先把这条通讯链路拆成四段
现场最让人难受的时刻,不是画面做不出来,而是画面做完了,数值全挂问号。排查半天发现 PLC 好好的、网线也通,问题卡在中间某一层没有打开。这份 Intouch 2020R2 SP1 与西门子 1500PLC 的通讯配置手册,讲的就是把这条路彻底打通:走 SIDIRECT 驱动加 S7 的 PUT/GET,不经过 OPC UA,也不用第三方网关中转,属于最短路径,但每一步都必须对。
它适合三类人:手上有 S7-1500 且上位机装的是 Intouch 2020R2 SP1、需要在半天内把几十个点位读上来的调试人员;接手别人做了一半的工程、访问名和标记名一团乱的人;以及想把配置流程固化成内部规范的人。整条链路其实只有四段——博图侧放开权限、SMC 里建连接和组、Intouch 里建工程、访问名和标记名把地址串起来。下面按这个顺序拆,每段都给出能直接照抄的参数。
2. 博图侧的四个开关:S7-1500 凭什么允许外部读写
很多人第一步就走到岔路上:在 Intouch 里反复改访问名,结果 PLC 那头根本没开权限。S7-1500 对外部读写是默认收紧的,必须放行四个地方,缺一个都只能读到问号。
2.1 硬件组态与 IP:先保证 ping 得通、网段一致
在博图里新建项目,添加实际 CPU 型号(例如 CPU 1511-1 PN),进入设备视图,双击 PROFINET 接口设 IP 地址和子网掩码。上位机网卡设成同网段另一个地址,两边不要用同一个 IP,也不要把 PLC 挂在 DHCP 上——现场断电重启后地址一变,SMC 里配好的连接就全废了。
这一步的验收标准很朴素:在上位机命令行里 ping 通了再往下走。
ping 192.168.0.10 -n 4 arp -a | findstr 192.168.0.10-n 4是发四个包,主要看丢包率而不是看通不通;arp -a是确认 MAC 地址解析到的是 PLC 那块网口,而不是同网段里另一台设备。上位机如果有多块网卡(常见于同时接了办公网和工控网的笔记本),一定要确认走的是工控网那块,否则会出现“能 ping 通但驱动连不上”的情况。
参数按照现场习惯先固定下来,后面所有配置都按这张表填:
| 参数 | 取值示例 | 说明 |
|---|---|---|
| PLC IP | 192.168.0.10 | 与上位机同网段 |
| 子网掩码 | 255.255.255.0 | 两边必须一致 |
| 上位机 IP | 192.168.0.100 | 不要与 PLC 冲突 |
| 机架号 Rack | 0 | S7-1500 单 CPU 固定为 0 |
| 槽号 Slot | 1 | 无扩展模块时为 1 |
2.2 访问权限与 PUT/GET:无保护不等于允许远程读写
打开 CPU 属性,找到“防护与安全”,把访问级别设为完全访问(无密码)。这里有个常见误解:以为选了无保护就完事了。实际上 S7-1500 还有一道独立的开关,在“防护与安全 → 连接机制”里,必须勾上“允许来自远程对象的 PUT/GET 通信访问”。
原因在于 SIDIRECT 走的是 S7 通讯里的 PUT/GET 服务,属于非组态的服务器连接,跟 HMI 面板那种集成连接不是一回事。不勾这一项,用博图监视表能看到数据,Intouch 却一个字节都读不上来,而且报错信息往往很含糊,只提示连接失败。改完要重新编译并下载硬件组态,这个改动不是只下载程序块就能生效的,下载过程通常需要 CPU 停机重启,排计划时要留出时间窗口。
顺带说一句,DB 块本身也有访问属性。如果某个 DB 在属性里把“可从 HMI 访问”关掉了,即使 CPU 级别放开了,这个块依然读不到。新项目一般默认是开的,接手别人的项目就要逐个看。
2.3 取消优化块访问:地址必须是绝对地址
这是最容易遗漏的一条。打开要给上位机用的 DB 块,右键属性,把“优化的块访问”取消勾选,然后编译。不取消会怎样?PLC 自己按最优方式排布变量,不暴露稳定的字节偏移,上位机按DB100.DBD0去读,读回来的可能是另一个变量的值,甚至半个浮点数——数值看起来像乱码,排查起来特别费时间。
取消优化之后,每个变量都有确定的偏移量,可以在 DB 的偏移量列里直接看到。数据类型和字节占用要心里有数:
| PLC 类型 | 占用字节 | Intouch 里对应 | 地址写法示例 |
|---|---|---|---|
| Bool | 1 bit | Discrete | DB100.DBX8.0 |
| Byte / USInt | 1 | Integer | DB100.DBB9 |
| Int / Word | 2 | Integer | DB100.DBW10 |
| DInt / DWord | 4 | Integer(长整型) | DB100.DBD12 |
| Real | 4 | Real | DB100.DBD16 |
| String | 依长度 | Message | 按驱动文档写 |
血泪经验是:给上位机单独建一个 DB,比如统一用 DB100,从头到尾只用非优化块,按 4 字节对齐排布。这样偏移量好看、好算、好维护,后面批量生成标记名也方便。别把上位机的点分散在十几个工艺 DB 里,改一次工艺就要全表复核。
2.4 变量表与地址地图:先定表,再画图
到这一步不要急着打开 Intouch。我一般的做法是先出一张地址地图,用表格把位号、地址、类型、读写属性、量程、单位全部确定下来,多方确认后再动上位机。
| 位号 | 地址 | 类型 | 读写 | 说明 |
|---|---|---|---|---|
| TIC101_PV | DB100.DBD0 | Real | 只读 | 温度实测 |
| TIC101_SP | DB100.DBD4 | Real | 读写 | 温度设定 |
| P101_RUN | DB100.DBX8.0 | Bool | 读写 | 泵运行反馈 |
| P101_FLT | DB100.DBX8.1 | Bool | 只读 | 泵故障 |
| FQ201_TOTAL | DB100.DBD12 | DInt | 只读 | 累计流量 |
这张表的直接价值是:写标记名的时候不用来回切换窗口找地址,也不会出现两个位号指到同一个偏移的低级错误。间接价值更大——后面要做画面、做报警、做历史趋势,都从这张表派生。只读的点一定要标出来,配置标记名时就可以不勾“允许写”,减少不必要的写请求,对通讯负载有帮助。
3. SMC 里的三段配置:从 Port 到 Device Group 再到 Activate
博图改完了,转到上位机。Intouch 2020R2 SP1 这一代的西门子驱动不再在工程内部配置,而是放在 System Platform Management Console(SMC)里统一管理。第一次接触会觉得这个工具层级很深,其实只要认准一条路径走到底。
3.1 驱动装没装对,先看 Port 节点在不在
安装 Intouch 2020R2 SP1 时,安装向导里有一页是设备集成组件(Device Integration),Siemens SIDIRECT 必须在勾选列表里。如果当时没勾,SMC 里根本不会出现西门子节点,后面所有步骤都无从谈起——这是最容易被临时取消安装搞坏的地方。
确认方式:开始菜单里找到 AVEVA 程序组,打开 System Platform Management Console,在左侧依次展开:
Operations Integration Server Manager └ Default Group └ Local └ Operations Integration Supervisory Servers └ Siemens - SIDIRECT └ Configuration └ Port如果Local下面没有Siemens - SIDIRECT这一项,回去补装驱动组件,别在这个界面上反复折腾。装完驱动建议重启一次机器,驱动是以后台服务形式注册的,不重启有时节点出不来。
3.2 Add Legacy Connection:IP、机架号、槽号
在Port上右键,选择 Add Legacy Connection。弹出的对话框里三个字段最关键:PLC 的 IP 地址、机架号、槽号。连接名可以随便取,比如PLC1,但它只是这一层的标识,不参与 Intouch 的地址引用,别和后面 Device Group 的名字搞混。
机架号和槽号不要凭空猜测。回博图,在设备组态里选中 CPU 那一行,能直接看到机架和槽位编号。S7-1500 单 CPU 一般是机架 0、槽 1;如果是 S7-300 那种带电源和接口模块的,常见是机架 0、槽 2。填错的表现是连接一直处于重连状态,日志里反复出现连接超时,看不出“参数错了”这种明确提示。
几个参数的含义值得说清楚:
| 字段 | 填什么 | 填错的后果 |
|---|---|---|
| IP Address | PLC 的实际 IP | 连接超时、反复重连 |
| Rack | 0(S7-1500 常规) | 无法建立 S7 连接 |
| Slot | 1(单 CPU) | 同上,报连接被拒绝 |
| Port 号 | 默认 102 | 改过端口要同步改这里 |
3.3 Device Group:Topic 名就是 Intouch 的 Topic
连接建好后,在它下面找到 Device Group,右键空白处选择 Add,在 Name 里填一个组名,比如PLC。这个组名有一个硬性约束——它必须和后面 Intouch 访问名里的 Topic Name 完全一致,大小写敏感,不能有中文和空格。所以命名时就按“上位机侧要引用的标识”来考虑,别随手打成组1。
然后点右上角保存图标。这一步极其重要,很多人配置完发现 Activate 之后配置没了,就是因为没保存。保存之后,在OI.SIDIR.1上右键,选择 Activate,状态指示变成运行中,SMC 侧就算通了。
这里还有个隐性依赖:驱动本身是 Windows 服务,如果服务没设成自动启动,机器重启后 SMC 界面看着正常,实际通讯已经断了。我一般会在服务管理器里把与 DAServer 相关的服务改成自动,并确认当前是运行状态。另外现场如果有防火墙策略,S7 通讯用的 102 端口要放行,本机测试时可以先临时关掉防火墙验证一次,确认是端口问题再回头加规则,比对着现象猜快得多。
4. 上位机三件套:通讯程序、访问名、标记名怎么串起来
SMC 通了只是把路修好,还没通车。Intouch 侧要做三件事:建工程、建访问名、建标记名,顺序不能乱,因为后一步要引用前一步的名字。
4.1 新建 Intouch 应用:模板别选错
打开 Intouch HMI Application Manager,在空白处右键新建,模板选“独立型带符号库”。这个模板自带基础符号库,做常规工艺画面够用,也不用额外挂接系统平台。工程名可以叫通讯之类的业务名,但存储路径要注意——别放在桌面或者带中文的深层目录里,某些组件对路径字符敏感,出问题时很难定位。
建好之后双击打开,进入 WindowMaker。先新建一个窗口,命名成main之类,作为最小验证画面。此时不要急着画工艺图,先放两个控件:一个数值显示,一个输入框。目标只有一个——验证读写是否正常。
4.2 访问名:Application / Topic / Protocol 三个字段对准
在 WindowMaker 里打开访问名(Access Name)配置,新建一条。四个字段是核心:
| 字段 | 填什么 | 说明 |
|---|---|---|
| Node Name | 留空或本机计算机名 | 本机驱动时留空即可 |
| Application Name | DASIDIRECT | 西门子 SIDIRECT 驱动的应用名 |
| Topic Name | PLC | 必须与 SMC 里 Device Group 名一致 |
| Protocol | SuiteLink | 优先选它,DDE 已属淘汰路线 |
Application Name 这一项容易填错。有人把 SMC 里的连接名PLC1填到这里,结果怎么都不通。这里填的是驱动应用名,不是连接实例名。Protocol 选 DDE 在老系统里能凑合跑,但刷新慢、丢包多,点位一多就明显拖后腿,能选 SuiteLink 就选。
访问名不要用中文,也不要带空格。改完保存,重启一下 WindowMaker 让配置生效。
4.3 标记名:地址写法和数据类型必须对齐
新建标记名,类型选对,访问名选上面建的那条,Item Name 填 PLC 侧的绝对地址。地址写法按前面那张类型表来,几个典型例子:
DB100.DBD0 Real 温度实测 DB100.DBW10 Int 整型参数 DB100.DBX8.0 Bool 泵运行 M0.0 Bool 位存储器 I0.1 Bool 输入点 QW2 Int 输出字两个高频翻车点。第一,把 Real 建成 Integer 类型,运行后看到的是一个巨大的整数,看着像数据溢出,其实是解析方式错了,改类型就行。第二,Bool 写成DB100.DBW8.0,多打一个 W,地址非法,读回来一直是 0。写地址的时候慢一点,比事后查半天划算。
只读的点把“允许写”取消掉。这不只是规范问题,写入请求在 S7 的 PUT/GET 里是独立事务,无谓的写会挤占通讯带宽,点位多的时候能明显感觉到刷新变慢。
4.4 动画链接:先验证再美化
双击画面上的数值控件,打开动画,选“值显示”,表达式填标记名。再给输入框加一个“用户输入”,关联到设定值那个标记。运行起来,先在 PLC 侧用监视表改一个数,看画面上是否跟着变;再在画面上改设定值,回监视表看是否写进去了。
这一来一回跑通,整条链路才算真正闭环。开发态(WindowMaker 编辑界面)里标记名显示的是静态值,不会实时刷新,别在这里判断通讯好坏,一定要进运行态(WindowViewer)看。等最小验证窗口通了,再去批量做工艺画面和报警,效率高很多。
5. 避坑清单:五个让我返工的现场问题
下面这几条都是实际调试中遇到过、并且每一条都让人多花过半天以上的。按“现象 → 原因 → 解决”整理,遇到类似症状可以直接对照。
5.1 Activate 之后状态一直不运行
现象:SMC 里点 Activate,OI.SIDIR.1状态一直是停止或红色,Intouch 里所有标记名读回来是问号。
原因:Port 下只建了 Legacy Connection,没建 Device Group,或者建完忘了点保存。驱动激活时读不到完整的配置树,起不来。
解决:按“Connection → Device Group → 保存 → Activate”的顺序重新走一遍。养成习惯:每次改完配置先点保存图标,再激活。另外确认一下服务里驱动进程确实在跑,没跑就是注册问题,重装驱动组件。
5.2 读到的是乱码一样的大整数
现象:Real 类型的点位,画面上显示成一个上亿的整数,改成 Integer 也不对。
原因:DB 块还勾着“优化的块访问”,变量没有固定偏移,地址指到了别的数据中间;或者 Intouch 标记名类型选错,把 Real 建成了 Integer。
解决:先回博图取消优化访问、编译、下载;再核对标记名类型与 PLC 类型一一对应。两个都要查,只改一个可能还是错的。下载后偏移量可能整体变化,把标记名地址全表复核一遍,别只改出问题的那一个。
5.3 能读不能写,或者写完立刻被覆盖
现象:监视数值正常,画面上改设定值,PLC 侧看不到变化,或者一闪就回到原值。
原因:CPU 的“允许来自远程对象的 PUT/GET 通信访问”没勾;或者 DB 属性里“可从 HMI 访问”被关掉了;还有一种情况是 PLC 程序里有逻辑每个扫描周期把设定值重新赋值。
解决:前两条改配置重新下载。第三条要跟做程序的人对一下,确认这个地址到底是谁在写。这类问题在联调阶段最常见,两边都以为对方在改。
5.4 机架号槽号照默认填,始终连不上
现象:IP 能 ping 通,SMC 里连接状态反复重连,日志只有超时。
原因:机架号或槽号与博图里的实际组态不一致。不同 CPU 系列默认值不同,照搬网上教程的 0/2 就可能踩空。
解决:回博图设备组态,选中 CPU 查看机架与槽位编号,按实际值填。填完保存再激活一次,光改不激活不生效。
5.5 本机测试正常,换台机器或重启后断连
现象:调试时一切正常,交付后客户重启一次电脑,通讯全断,SMC 打开看配置还在。
原因:驱动服务被设成了手动启动,重启后没起来;或者新机器的防火墙拦了 102 端口。
解决:把相关服务改成自动启动并立即启动;在新机器上先临时关防火墙验证,确认后按端口加放行规则。交付前做一次冷启动测试,这个动作我一直坚持做,能省掉大量售后电话。
6. 进阶:用 CSV 批量生成标记名,再用心跳字判断通讯死活
点位上了五十个以后,逐个手敲标记名是不现实的,错一个地址就要查半天。我的做法是拿 Intouch 自带的 DB Dump 先导出一个空库,拿到官方表头,再用脚本按地址地图批量生成,最后走导入。表头的列名千万不要自己猜,不同版本列顺序和名称会有差异,照导出的样例来最稳。
import csv DUMP = "tag_dump.csv" # 从 Intouch DB Dump 导出的空库,只取表头 with open(DUMP, newline="", encoding="gbk") as f: header = next(csv.reader(f)) points = [ # 位号, Item Name, Intouch 类型 ("TIC101_PV", "DB100.DBD0", "Real"), ("TIC101_SP", "DB100.DBD4", "Real"), ("P101_RUN", "DB100.DBX8.0", "Discrete"), ("FQ201_TOTAL", "DB100.DBD12", "Integer"), ] rows = [] for tag, item, ttype in points: row = dict.fromkeys(header, "") # 其余列留空,避免导入报错 row["Tagname"] = tag row["Type"] = ttype row["AccessName"] = "S7_1500" # 与 Intouch 访问名严格一致 row["ItemName"] = item row["Comment"] = "auto" rows.append(row) with open("tag_import.csv", "w", newline="", encoding="gbk") as f: w = csv.DictWriter(f, fieldnames=header) w.writeheader() w.writerows(rows)编码用gbk是因为 DB Dump 默认跟随本地代码页,用 UTF-8 导进去中文注释会变乱码,这一点很容易被忽略。dict.fromkeys(header, "")保证所有列都填了空值,缺列会直接导入失败。
通讯是否真的在线,不能只看画面上数字有没有变化——工艺稳定时数值本来就不变。稳妥的办法是在 PLC 里做一个每秒自增的字,比如DB100.DBD60,上位机侧挂一个条件脚本比对两次采样:
IF hb_now <> hb_last THEN comm_ok = 1; hb_last = hb_now; ELSE comm_ok = 0; ENDIF;脚本里hb_now是那个自增字,hb_last是内部记忆标记,comm_ok挂到画面角落的一个小指示灯上。三行逻辑,比任何日志都直观,客户自己就能看出通讯断没断。
从那以后我每次交付前都强制走一遍“冷启动 + 心跳验证”:断电重启上位机,等服务起来,看心跳灯是否在十秒内变绿。这一步做与不做,后面的维护体验完全不一样。希望帮到你。
本文还有配套的精品资源,点击获取