ARTICLE DETAIL

资讯详情

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

西门子TIA V15.1中S7-1200的LGF_LIB库导入与实战避坑指南

西门子TIA V15.1中S7-1200的LGF_LIB库导入与实战避坑指南 简介LGFLibrary for Generic Functionality是西门子 TIA Portal V15.1 环境中的重要通用功能库此压缩包面向使用 S120 驱动系统的自动化工程师与 PLC 程序员集中整理了 LGF 源码与配套手册既适合初学者理解库结构也方便中高级开发者直接查阅函数块实现。资源共 257 个文件以 248 份 PDF 文档为主体覆盖时钟同步、斜坡发生器、变化率限制、箱线图统计等功能块的说明与代码解析另有少量 XML 配置、工程库文件al15_1和索引文件整体约 22.84MB。目前已有 873 人学习浏览具备一定参考热度。结合源码和手册可掌握 TIA Portal 与 S120 建立 PROFINET/MPI 通信链路的方法理解速度/位置控制算法及用户自定义功能块的开发方式同时学习其中的错误处理机制与西门子编程规范为实际项目的驱动调试、性能优化和功能扩展提供直接参考与模板复用。1. LGF_LIB 是什么TIAV15.1 里那包能直接看的 S7-1200 源代码109479728 这个编号对应的是 siemens 支持站上的 LGF_LIB_V5_0_0 库包标题里的 S120 就是 S7-1200TIAV15_1 指 TIA Portal V15.1。它不是一个封装好的黑匣子而是一份带 manual、带完整源码的通用功能库统计、校验、日期时间这类高频逻辑解压后能直接拖进项目里改。想把 PLC 程序里散落的算法收拢成统一函数库的人或者刚接手 S7-1200 项目、不想从零写 CRC 和均值滤波的工程师都适合先花半天把这包跑通。2. 解包并导入 TIAV15.1从 109479728 到项目库的完整路径这包最常见的翻车点不是编译报错而是解压后找错了工程。V5.0.0 明确绑定 TIAV15_1也就是 V15.1所以先别急着双击 .ap15_1 文件先看压缩包结构再决定用哪一层目录导入。2.1 解压前先看压缩包内部结构PowerShell 列目录拿到手先列一下 ZIP 顶层目录。很多同事右键解压完发现“怎么没有工程”其实只是把第一层打包目录当成了所有内容。用 PowerShell 按顶层目录分组几秒钟就能看清包内有什么。# 指定下载好的压缩包只读打开不改任何内容 $zipPath C:\Downloads\109479728_LGF_LIB_TIAV15_1_V5_0_0_manual_S120_siemens.zip Add-Type -AssemblyName System.IO.Compression.FileSystem $zip [System.IO.Compression.ZipFile]::OpenRead($zipPath) $zip.Entries | Where-Object { $_.FullName -notmatch /$ } | Group-Object { ($_.FullName -split /)[0] } | Select-Object Name, Count | Sort-Object Name $zip.Dispose()OpenRead 是只读打开不会改压缩包Group-Object 按第一个路径段统计能立刻看出是不是有一个顶层文件夹包着所有内容。如果 Count 只有 1说明解压前还要多剥一层如果 manual、source、library 各占一块就直接整目录解压。接下来把包解到工作目录。# 解压到无中文、无空格的工作目录避免 TIA 打开工程时路径异常 Expand-Archive -LiteralPath $zipPath -DestinationPath D:\LGF\src -Force Get-ChildItem -LiteralPath D:\LGF\src -Recurse -Depth 2 | Select-Object FullNameExpand-Archive 的 -Force 会覆盖同名文件适合在干净目录里重新解压-Recurse -Depth 2 只列两层防止把 XML 和诊断日志刷屏。到这一步目录里应该能看到 PDF 手册和带 .ap15_1 后缀的源工程文件夹。2.2 在 TIA Portal V15.1 里打开源工程路径和版本核对先用 V15.1 的 TIA Portal 打开菜单不要在 Windows 里双击工程文件。常见做法是TIA Portal 启动后选“项目 → 打开 → 浏览”定位到刚才解压出的 .ap15_1 文件。打开后先做两件事看项目树里的 CPU 型号再看库面板里是不是显示 LGF_LIB_V5_0_0。如果弹出的提示是版本低或版本高就停在导入这一步别点“继续”。TIA 的工程格式只能向上迁移不能向下兼容V15.0 的安装目录打不开 V15.1 的库V16 打开后也不一定能原样保存回 V15.1。碰到这种情况最稳的做法是装一个独立的 V15.1或者在同一台机器上装 V15.1 的库编辑环境。提示工程路径不要带中文和空格常见报错是“路径无效”或“无法加载项目”。D:\LGF\src 这种最省事。2.3 把库挂进 S7-1200 项目全局库与项目库两种挂法源工程打开后LGF_LIB 一般出现在左侧最下方的“库”面板里。如果你只想在一个产线项目里用把它拖到当前项目的“项目库”节点生成项目库副本如果多个项目都要用就把它发布/保存成全局库文件以后从“全局库 → 打开”加载。两种挂法我都会做先用项目库把当前项目跑通验证没问题后再导出全局库。直接挂全局库有一个隐藏风险全局库文件版本变了旧项目里的调用不会自动升级这点在第五章避坑记录里会展开。挂好库之后对照 manual 里的版本兼容表确认你手里的 CPU 型号和固件在支持列表内。S7-1200 的 DB 和 FC 数量是有限的库里的块不会都用到建议按需复制别图省事把整个 LGF_LIB 都拖进去。3. 源码阅读顺序先从 manual 和接口定义入手再动手改LGF_LIB 的价值不只是给你一个轮子它把轮子的图纸也给了。读源码的最终目的有三个确认接口名、确认算法边界、确认升级 diff。顺序错了会变成在 source 文件夹里乱翻。3.1 从 manual 倒着看版本兼容表和块清单先拍板manual 我从来不从头读。PDF 正文讲的是通用概念对你当前这个库包最有用的信息在最后几章版本兼容表、块清单、版本历史。先把这三块看了再去翻具体块说明。manual 里的位置要确认的点不确认的后果版本兼容表V5.0.0 对应的 TIAV15_1 和 S7-1200 固件导入后 CPU 编译报错或固件不一致块清单每个块的名称、IN/OUT 参数名和数据类型自己猜参数名SCL 编译过不去版本历史V4.x 到 V5.0.0 改过哪些接口老项目移植后统计结果和原来不一样如果你手里的 manual 是英文或者德文版先看表格和块名就行不用等翻译。块清单里的参数表比正文重要得多因为 LGF 库的接口在几个小版本里改过名照着旧版本的调用方式写编译器的报错会非常难懂。3.2 用 SCL 调用 LGF 功能块接口、实例 DB 与返回值把块从库面板拖进程序以后TIA 会顺手生成实例 DB。功能块带实例 DB 时调用参数里不带 DB 号只写变量名不带实例 DB 的 FC 才需要显式管参数。下面这段 SCL 是统计类功能块的调用习惯参数名以你实际库版本为准。// 调用统计功能块把原始采样值送进去得平均值、最小值和最大值 #inst_LGF_Statistic_1( value : #raw_temp, // 每个扫描周期送入的原始采样 reset : #reset_cmd, // TRUE 时清空统计缓冲 buffer : #temp_buf[0], // 指向数据缓冲区首地址 samples : UDInt#60, // 缓冲区长度统计窗口大小 mean #temp_mean, // 输出平均值 min #temp_min, // 输出最小值 max #temp_max // 输出最大值 );value 是每次扫描喂进去的原始值samples 决定窗口大小比如 60 表示最近 60 次扫描做统计reset 是脉冲不能一直置位否则每次扫描都清空缓冲。mean、min、max 这些输出写在 后面表示从功能块里取出来写到自己的变量。如果你手里的块参数名不一样双击块打开属性把 Input/Output 表里的名字替换进去就行不用改逻辑。不要把这个块当黑匣子。LGF_LIB 的源码里能看到统计算法是循环累加还是滑动窗口这直接影响你选 samples。滑动窗口类的实现samples 越大内存占用越高普通累加实现遇到复位信号会丢历史两者不是同一个用法。3.3 数组与 Variant 指针S7-1200 的寻址边界在哪里LGF 里不少块用 Variant 或指针接数组是为了传大块数据时不复制内存。S7-1200 支持 Variant但和 S7-1500 相比有边界数组元素个数、DB 块大小和访问速度都更敏感。调用时如果传的是数组优先传首元素比如 #temp_buf[0]让块内部按指针去取不要传整个数组变量名个别编译器版本会把它当成结构体处理。如果你遇到“数据块不可访问”或者“参数类型不匹配”大概率不是 SCL 语法问题而是数组定义不完整。在 PLC 数据类型里把数组长度固定下来比如 Arrays[0..59] of Int别写可变长度LGF 源码内部是按固定长度做循环的它不负责帮你动态扩容。还有一个常见边界统计结果后续要传给 HMIHMI 连接的是外部 DB而不是功能块的实例 DB。把 mean、min、max 再转存到你自己的接口 DB 里这样扫库版本时 HMI 变量不会跟着库内部结构漂移。4. 把 LGF_LIB 改造成自己的库备份、复制块、版本标记源码在手很多人第一反应是直接改。我劝你先忍一忍。LGF_LIB 是一整套功能块块和块之间会互相调用直接改原块下一次从官网更新库版本时你的改动会消失连 diff 的入口都找不到。4.1 改源码前先做整树备份命令行快照三步TIA 里的“复制工程”不一定能保住库源码的完整状态尤其是带版本注释、带 XML 管理信息的库面板。我一般会用文件系统整树复制一份同时在备份目录里写一个版本说明文件这样至少给自己留了后悔药。# 快照 LGF 库源工程并在备份目录里写入版本说明 $srcLib D:\LGF\src\LGF_LIB_V5_0_0 $backupRoot D:\LGF\Backup $stamp Get-Date -Format yyyyMMdd_HHmmss $target Join-Path $backupRoot LGF_LIB_$stamp Copy-Item -Path $srcLib -Destination $target -Recurse -Force Set-Content -LiteralPath (Join-Path $target 版本说明.txt) -Value 基于109479728 V5.0.0改动前快照 -Encoding UTF8Copy-Item 的 -Recurse 保证子目录都带进来-Force 是为了应对只读文件版本说明文件名我故意用中文防止和 TIA 工程文件混淆。这里不指定具体块整树快照的意思就是就算改坏了库面板也能整包退回。4.2 复制功能块再改名不让库更新把你改成的东西冲掉官方块名不要改要改就复制一份。在库面板里右击目标块选复制粘贴到你的自定义库或者项目库然后改成 MY_ 开头的新名字比如 MY_Statistic、MY_CRC。复制品里的 SCL 代码可以随便改官方原块保持不动。这一步有两个原因。第一后续官方库升级时LGF_LIB 源码面板会整体更新保持官方块原样升级 diff 才看得清第二你的项目里如果同时存在 LGF 官方块和 MY 块编译器不会因为同名冲突而报错。实例 DB 也要跟着复制块改名后 DB 自动改名别想省这一步。4.3 用 XML 批量更新版本号导出导入时的可追溯做法功能块在 TIA 里导出后是 XML版本号就写在 XML 文本里。我不建议你直接去改工程根目录里的内部 XML那个容易把工程结构弄坏安全做法是导出一份块 XML 到工作目录在导出版本上做批量版本标记用来做代码评审和归档。# 把导出的块 XML 里 V5.0.0 批量替换成带自定义后缀的版本号 $xmlDir D:\LGF\export Get-ChildItem -Path $xmlDir -Filter *.xml -File | ForEach-Object { $file $_.FullName $text Get-Content -LiteralPath $file -Raw -Encoding UTF8 $text $text -replace V5\.0\.0, V5.0.0-20250601 [System.IO.File]::WriteAllText($file, $text, [System.Text.UTF8Encoding]::new($false)) }-replace 的匹配文本把点号转义成 .避免把 V5 0 0 这种不存在的结构也替换掉WriteAllText 指定 UTF8 编码是为了让 TIA 重新导入 XML 时中文注释不乱码。这个脚本执行完再用 TIA 的导入功能把块导回库版本号就带上了你的标记。如果你用 git归档目录放到版本库后每个功能块的改动记录都能 diff。很多工程师在这步偷懒结果库升级一次改动就找不回来了。5. TIAV15.1 导入 LGF_LIB 的五个避坑记录现象、原因、解决下面是这包在导入和运行阶段最容易翻车的五个场景都是血泪经验。每一条都按现象、原因、解决来写照着排查能省半天。5.1 版本对不上V5.0.0 库拖不进 TIAV15.0 项目现象库面板里能看到 LGF_LIB但拖到程序编辑器时块显示灰色不可用或者提示“库版本高于当前项目版本”。原因V5_0_0 的包是按 TIAV15_1 打出来的V15.0 的编辑器不认识 V15.1 的块格式。解决不要用 V15.0 硬扛装一个 V15.1 的库打开工程如果项目已经做到一半先把旧工程整体升到 V15.1再拖库。5.2 CPU 型号对不上打开源工程提示找不到 S7-1200现象打开解压后的源工程TIA 弹“目标 CPU 不存在”或 CPU 面板变成感叹号。原因库的示例工程里带的 S7-1200 型号和固件是默认的不是你的实际 CPU比如示例是 1214C DC/DC/DC你的现场是 1215C。解决不要直接下载到 PLC先在项目树里把 CPU 替换成你实际型号再编译替换后功能块的实例 DB 不会丢但地址分配要重新做一遍。5.3 PLCSIM 下 LGF 块偶发失效别清空 %temp%\siemens\plcsim\现象第一次仿真下载正常改了一行源码再编译下载功能块输入输出全 0 或者直接报“块不存在”。原因PLCSIM 会把一部分编译缓存写到系统临时目录典型路径是 %temp%\siemens\plcsim\ 和 %localappdata%\siemens\plcsim\清理软件把这两个目录一清PLCSIM 就找不到块缓存。解决在杀毒和清理软件里把这两个目录排除然后重启 PLCSIM重新编译整个项目并下载一次。别只在窗口里点“重新下载”有时候 PLCSIM 还没释放旧进程。5.4 全局库更新后实例不刷新版本号不升等于没改现象你改了全局库里某个块保存后回到调用项目发现旧功能块实例还是老行为甚至参数列表都没变化。原因TIA 全局库和项目库之间的实例不是自动同步已经拖进项目的块默认按当时的快照使用。解决保存全局库后回到项目库把旧块删掉重新从全局库拖入如果块不多更稳的是把库版本号在块说明里升一版再让程序组刷新。5.5 功能块被保护know-how 保护导致的灰色块现象源码包里有个别块带锁图标双击打不开 SCL 代码只能看到接口。原因发布者在块上启用了 know-how protection源码版不等于每个块都开放给你看。解决在块属性里找保护设置如果没有密码就看 manual 的公开接口调用逻辑和正常块一样想改内部逻辑就得联系发布方解除保护。这一点在选型时就要知道省得改造做到一半才发现打不开。6. 最后一步用 LGF 源码做回归验证把库当测试夹具而不是黑匣子库改完不能直接上产线。我现在的习惯是拿 LGF 源码搭一个最小验证环境用固定的三组数组输入做回归测试。6.1 最小验证环境怎么搭新建一个空白 S7-1200 项目只放一个循环中断 OB、一个 LGF 块和一个调用 FB。CPU 型号和你目标项目一致别偷懒用库示例工程的 CPU。验证环境越小变量越少问题越好定位。6.2 三组输入和期望值我一般固定测三组连续递增数据、全 0、中间插入负值。统计类块期望值直接用 Excel 算好再在 watch table 里对照。输入期望结果重点10,20,30,40,50mean30, min10, max50基本统计0,0,0,0,0mean0, min0, max0空样本边界-10,20,0,-5,30mean7, min-10, max30负值和零值混入6.3 更新库后的固定动作每次从官网下新版本或者改了 MY_ 块我都重复同一套动作重新编译、下载到 PLCSIM、跑上面三组输入、对比 Excel 期望值。数值不变才允许替换到产线项目数值变了就打开源码 diff看是算法调整还是我改坏了。这个习惯是从一次有惊无险的翻车里养成的当时升级了一个排序块没跑回归就部署结果数组长度改了一位排序结果错了一下午。所以现在不管是什么库我都会先把它当测试夹具而不是当黑匣子直接用。希望帮到你。本文还有配套的精品资源点击获取
返回列表