十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

S7-1200与MCGS标签导入:UDT与DB块变量映射实战

S7-1200与MCGS标签导入:UDT与DB块变量映射实战 简介聚焦MCGS昆仑通态触摸屏与西门子TIA博途S7-1200集成通信的实操文档面向工控现场调试人员、自动化工程师及初学HMI组态的读者。内容围绕博途中自定义数据类型UDT与DB块变量的导出以及MCGS侧添加Siemens 1200设备、标签导入与快速连接变量等环节展开全程以截图步骤说明可用于排查以太网通信配置中的变量映射问题。资源包为1个docx文件约3.81MB图文并茂、按操作顺序编排便于对照现场软件逐步执行也可作为项目配置的速查手册。目前已有2303人学习下载。读者可据此掌握数据类型文件与DB块文件的生成、导入流程理解设备属性设置与默认设备变量连接的作用减少通信调试中的反复试错并为进一步的HMI画面设计与系统集成打下基础。1. 变量表导进去变成一片空白问题往往不在 MCGS前段时间帮人排查一个 S7-1200 配昆仑通态触摸屏的项目现象很典型博途里 DB 块建好了变量几十个MCGS 那边点“标签导入”提示成功可变量列表里只有 DB 名称成员一个没出来画面上温度、压力全是问号。问题九成不在网线也不在 IP 地址而是博途导出的源文件跟 MCGS 的解析器对不上自定义数据类型和 DB 块没走“从块生成源”这条路或者 DB 块还开着“优化的块访问”。把 UDT 和 DB 块变量从博途导进 MCGS 的链路拆开无非四段——博途侧把符号结构固化成源文件、MCGS 侧挂好 Siemens 1200 驱动、按顺序导入两份文件、最后做变量连接。四段里任何一段偷懒后面都是白干。2. 博途侧把 UDT 和 DB 块固化成 MCGS 能读的源文件2.1 自定义数据类型的命名与成员选型自定义数据类型在博途里叫 PLC 数据类型UDT它的价值在于把一组语义相关的变量打包成一个结构比如一个储罐对象包含液位、温度、进出口阀状态。MCGS 触摸屏在导入时是按名字逐级展开这个结构的所以命名和成员类型直接决定后面能不能连上。命名上有几条硬约束类型名只能用字母、数字和下划线不要用中文不要用“-”“.”“空格”也不要跟博途内置类型重名比如叫REAL、INT就等着报错。成员名同样避开中文长度控制在 24 个字符以内MCGS 的设备变量名会带上设备前缀和结构层级太长会被截断。成员类型上常用的就是 Bool、Int、DInt、Real 这几种尽量别在 UDT 里嵌套Array of UDT嵌套两层还能解析三层往上 MCGS 展开出来的地址很容易错位。常见做法是每个 UDT 控制在 32 个成员以内超过就拆成两个类型。一个现场能直接用的储罐类型可以这么写TYPE UDT_Tank VERSION : 0.1 STRUCT Level : Real; // 液位0~100% Temp : Real; // 温度摄氏度 Press : Real; // 压力kPa InValve : Bool; // 进料阀状态 OutValve : Bool; // 出料阀状态 AlarmCode : Int; // 报警码 END_STRUCT; END_TYPE这段是博途导出后的文本形态。逻辑上要注意VERSION行不能手改改错了重新导入会报版本不匹配成员顺序就是绝对地址的排列顺序中间不要插注释块以外的空行某些版本的解析器对空行敏感。2.2 “从块生成源”导出的两份文件长什么样定义完类型回到项目树右键那个 PLC 数据类型选“从块生成源”→“仅所选块”弹窗里填文件名默认扩展名是.udt保存。DB 块同理右键 DB 选“从块生成源”→“仅所选块”扩展名是.db。导出的 DB 源文件内容大致是这样DATA_BLOCK DB_Tank { S7_Optimized_Access : FALSE } VERSION : 0.1 NON_RETAIN VAR Tank1 : UDT_Tank; Tank2 : UDT_Tank; END_VAR BEGIN END_DATA_BLOCK{ S7_Optimized_Access : FALSE }这一行是整件事的关键它表示这个 DB 关掉了优化访问所有成员都有确定的绝对地址MCGS 的 S7 驱动才认得出来。如果导出后这一行是TRUE说明你忘了在 DB 属性里取消勾选“优化的块访问”导回去也没用。非优化 DB 里Bool 按位打包Int、Real 按偶数字节对齐地址是这么排的成员路径类型绝对地址说明DB_Tank.Tank1.LevelRealDB1.DBD0起始偏移 0占 4 字节DB_Tank.Tank1.TempRealDB1.DBD4紧接上一项DB_Tank.Tank1.InValveBoolDB1.DBX8.0位地址后续 Bool 依次 0.1DB_Tank.Tank2UDT_TankDB1.DBD12 起整个实例再排一遍记住一个规律任何成员的地址一旦因为增删变量而改变MCGS 里已经连好的画面变量就会全部对不上号所以 DB 结构定型之后再动必须重新走一遍导出和导入。2.3 关掉优化块访问并放开 PUT/GET 通信这一步经常被跳过然后就卡在“MCGS 提示导入成功、通信却是叉”的状态。第一件事在 DB 块的属性里取消勾选“优化的块访问”编译并下载到 PLC。S7-1200 从固件 V4.0 起默认开启这个选项它的本意是让寻址走符号名、提高访问效率但代价是没有稳定的绝对地址第三方 HMI 靠地址读写的驱动就抓瞎。第二件事在 PLC 的设备组态里双击 CPU进“防护与安全”→“连接机制”勾选“允许来自远方伙伴的 PUT/GET 通信访问”。不勾这个MCGS 发出的读请求会被 CPU 直接拒绝现象是设备调试窗口里通信状态一直不归零。注意这两项改动都要下载到 PLC 才生效改完顺手在博途里在线看一眼确认 DB 块上不再显示优化访问的小图标。3. MCGS 侧通用 TCP/IP 父设备下挂 Siemens 1200 驱动3.1 设备工具箱添加驱动与设备命名打开 MCGS 触摸屏组态软件进“设备窗口”。默认情况下这里只有一个“通用 TCP/IP 父设备”所有以太网设备都得挂在它下面。在父设备上右键选“设备工具箱”在弹出窗口里找“Siemens 1200”双击或者按住拖进父设备此时会多出一个子设备默认名字是“设备0”。选中这个子设备右键“属性”进设备编辑窗口第一件事是改名字。改成PLC2这类有意义的名字原因是 MCGS 的变量连接会在变量名前挂上设备名做前缀名叫“设备0”时后期在几百个变量里翻找会很痛苦。改名之后父设备下的层级关系是“通用 TCP/IP 父设备 → PLC2”子设备的通信参数单独配父设备只管网络通道。3.2 父设备与子设备的网络参数对照参数分两层填很多人只填了一层就点“标签导入”结果一个变量也连不上。参数项所在位置典型值备注本地 IP通用 TCP/IP 父设备属性192.168.0.10触摸屏实际网口的 IP远程 IPPLC2 子设备属性192.168.0.1S7-1200 的 IP端口号父设备102S7 通信固定端口机架号子设备0S7-1200 固定为 0槽号子设备1S7-1200 通常填 1S7-300 是 2本地 IP 一定要跟触摸屏硬件网口在同一个网段否则通信状态字一直是非零值。远程 IP 必须和博途里 CPU 的 PROFINET 接口地址一字不差改过 PLC 的 IP 但没同步改 MCGS是最常见的低级错误。3.3 设备参数的校验与常见误填配完参数先别急着导变量花两分钟做一次网络层预检。用一台跟触摸屏同网段的电脑ping 一下 PLC# Windows 下确认 PLC 是否可达-n 指定次数-w 指定单次超时毫秒 ping -n 4 -w 1000 192.168.0.1四个包全通说明链路没问题丢包或超时就要先查网线、交换机端口和 IP 冲突别往 MCGS 上找原因。-n 4是发四个包-w 1000是每包等 1 秒车间网络抖动大的时候可以放宽到 2000。另一个校验点是机架槽号。S7-1200 只有一个机架机架号填 0 没问题如果槽号填错了通信能建立但读不到任何数据调试窗口里表现为“已连接、无数据”。遇到这种情况先试 1再试 0两个值都不行再回头查 PUT/GET 那个勾。4. 标签导入UDT 文件与 DB 块文件的导入顺序和变量映射4.1 导入数据类型文件在 PLC2 的设备编辑窗口里找到“标签导入”区域点旁边的按钮设置弹出窗口里第一项就是“导入数据类型文件”。选中第 2 章导出的那个.udt文件点打开界面上会提示“xxxx 导入成功”。这一步的作用是把 UDT 的成员结构注册到 MCGS 的类型库里让后面解析 DB 块文件时知道UDT_Tank里面有什么。顺序不能反先导 DB 文件的话遇到自定义类型成员会直接报解析失败。如果提示导入成功但类型列表里找不到检查文件名是否带了中文或空格MCGS 读文件路径对非 ASCII 字符处理得不太干净把文件放到纯英文目录下再试。4.2 浏览导入 DB 块文件类型文件就位后点“浏览”选中第 2 章导出的.db文件。这一步是把 DB 块里的变量实例展开成 MCGS 的标签展开的依据就是上一步注册的 UDT 结构。确认文件无误后点“标签导入”界面上会列出解析出来的变量条目。判断导入是否真的成功不看提示框看列表现象含义处理方向列表里只有 DB 名称无成员DB 仍为优化访问回博途取消勾选并重新导出成员齐全但地址列为空UDT 类型未注册退回 4.1 先导类型文件部分成员缺失UDT 嵌套过深或命名非法精简结构后重新导出地址齐全但类型标错成员类型不被驱动支持改用 Int/Real/Bool 基础类型4.3 快速连接变量与运行策略里的脚本调用标签导入完成点“快速连接变量”勾选“默认设备变量连接”确认。这一步把刚才解析出来的标签批量映射成 MCGS 的实时数据库变量命名规则一般是“设备名_结构路径”比如PLC2_Tank1_Level。确认之后画面上的输入框、显示框就可以直接从实时数据库里挑这些变量了。如果需要用脚本做联动比如温度越限触发一个内部标志可以在运行策略里写 运行策略循环脚本读取 PLC 温度越限置位报警标志 IF PLC2_Tank1_Temp 80 THEN Alarm_Flag 1 ELSE Alarm_Flag 0 ENDIFPLC2_Tank1_Temp就是快速连接变量时生成的实时数据库变量名前缀PLC2来自 3.1 里改的设备名Alarm_Flag是内部中间变量需要提前在实时数据库里建好类型选开关型。脚本放在循环策略里周期设成 200ms 就够设太小会占用触摸屏 CPU画面刷新反而变卡。设备启动命令也常写在启动策略里 启动策略启动 PLC2 设备命令号 6 为启动设备 !SetDevice(PLC2, 6, 0)!SetDevice的三个参数分别是设备名、设备命令号、附加参数命令号 6 对应启动、7 对应停止具体以所用版本的驱动帮助为准。5. 导入成功但变量错位几个定位手法和边界最隐蔽的一类问题是“能通信但数值全错”。画面显示液位 12000实际才 65。这基本是地址偏移错位UDT 中间加过一个成员、或者某个 Real 被改成了 Int导致后面所有成员的偏移整体挪动而 MCGS 里还是老地址。定位办法是回博途打开 DB 块把鼠标悬停在成员上看状态栏给出的绝对地址跟 MCGS 变量表里的地址逐条对第一个对不上的地方就是改动点。改完重新走一遍第 2 章的导出和第 4 章的导入不要试图在 MCGS 里手工改地址结构一多根本改不干净。第二类问题是通信状态位。MCGS 每个设备都有一个通信状态寄存器名字形如PLC2_通信状态值 0 表示正常。把它拖到调试画面上显示出来比盯着画面猜快得多。长期非 0 先查 PUT/GET 勾选和机架槽号间歇性非 0 就查网线屏蔽和交换机负载。一个能省很多时间的习惯在 DB 块里给变量加统一前缀比如全部叫T1_Level、T1_Temp导入后在 MCGS 变量表里搜前缀就能批量定位比按结构层级一层层点开快得多。UDT 嵌套层级别超过两层每多一层导入失败时排查的工作量翻一倍不止。本文还有配套的精品资源点击获取
返回列表