七天学会plc加机器视觉之AI 接入 外设模块开发全详细操作文档(全程配套视频按文档实操)
本文分为三部份,
第一部份,什么是模块,模块在西门子的软件梯形图和硬 件处设
第二部份,本地plc 源码模型训练,让ai更正常可工程化代码
第三部分,怎么调用ai 功能快速参与模块开发,提高个人开发能力
以下详细流程
西门子模块与 Openness 上位机开发完整文档
第一部分:西门子模块基础
1. 什么是西门子模块?
模块是 PLC 系统的硬件功能单元,通过标准化接口与 CPU 或背板总线连接,扩展 PLC 的输入输出、通信、工艺等能力。例如 S7-1200 的信号板、ET200SP 的分布式模块等。
2. 为什么需要模块?(三大核心原因)
- 弥补 CPU 原生功能不足:CPU 通常集成 TTL 电平的数字量接口,但无法直接驱动远距离通信。RS485 模块通过差分信号转换(将单端信号转为两根线的电压差),抗干扰能力提升,支持 1000 米以上通信,解决了 CPU 原生接口的距离限制。
- 支持多样化协议与场景:工业通信需适配 Modbus、Profinet 等协议,Modbus 模块封装了协议解析逻辑(如 CRC 校验、数据帧格式),用户无需手动编写串口通信代码,直接通过梯形图调用模块功能块即可实现数据交互。
- 扩展系统容量与灵活性:当 CPU 自带 I/O 点数不足(如 S7-1214C 仅 14DI/10DO),可通过数字量 / 模拟量扩展模块(如 SM 1223)增加输入输出通道;或通过通信模块(如 CM 1241 RS485)扩展多协议通信接口。
3. 常用模块功能与梯形图使用
- RS485 通信模块(如 CM 1241 RS485):功能:支持 Modbus RTU/ASCII、自由口通信,实现 PLC 与变频器、仪表等设备的双向数据传输。梯形图使用:直接拖拽模块对应的功能块(如 MB_COMM_LOAD、MB_MASTER),配置波特率、奇偶校验等参数,通过数据缓冲区(如 DB 块)读写数据。
- Modbus TCP 模块(如 CM 1243-1):功能:支持 Modbus TCP 协议,通过以太网实现高速通信(100Mbps),适用于工业以太网组网。梯形图使用:调用 MB_CLIENT 功能块,填写 PLC IP、端口号、从站地址,实现与 Modbus TCP 从站的数据交互。
第二部份 如何利cursor 训练公司老代码,
首先我们要有针对这个plc的老代码,最好有有几个文件,有基础功能的,类似如下
然后安装cursor ,选择 你喜欢的,你觉得好用的大模型,让他学习一下自己项目的源码
![]()
最后提需求,生成工程源码,最后导到工程
![]()
第一步:准备外部 SCL 源码文件
1. 编写 SCL 代码(假设以下代为为ai 生成)
新建文本文档,写入测试代码(简单加减运算),演示标准格式:
scl
// 外部SCL文件示例:加法运算功能块 FUNCTION FC_Add : Void VAR_INPUT IN1: Int; IN2: Int; END_VAR VAR_OUTPUT OUT_RESULT: Int; END_VAR // 逻辑体 OUT_RESULT := IN1 + IN2; END_FUNCTION2. 修改文件后缀
- 保存文本文件;
- 将后缀
.txt改为.scl,例如:FC_Add.scl。
注意:系统需显示文件扩展名,避免变成
FC_Add.scl.txt。
三、第二步:TIA Portal 导入外部 SCL 文件,生成程序块
场景前提
已打开 S7-1200 项目,CPU 设备已组态完成。
完整操作步骤
打开项目树 → 选中 PLC 程序块文件夹项目树 →PLC 变量 / 程序块→ 右键【程序块】文件夹。
右键菜单选择:导入 → 外部源文件
在弹窗中,浏览选中刚才准备的
FC_Add.scl文件,点击导入。导入规则说明(讲课重点)
- SCL 文件内第一行
FUNCTION / FUNCTION_BLOCK决定生成块类型:FUNCTION→ 生成FC 功能(无静态变量)FUNCTION_BLOCK→ 生成FB 功能块(带静态变量、有记忆)
- 块名称、IO 引脚、变量会自动解析生成,无需手动创建引脚。
- SCL 文件内第一行
导入完成校验回到【程序块】列表,能看到新生成的
FC_Add,双击可打开查看 SCL 源码。编译块(必做)选中该块 → 点击工具栏编译(灯泡图标),无报错代表导入成功。
四、第三步:在主程序 OB1 中调用该 SCL 块
OB1 是 S7-1200 主循环组织块,PLC 上电后循环执行,作为主函数。
方式 1:梯形图(LAD)调用(最常用,学员易理解)
- 双击打开OB1 (Main),切换到梯形图视图。
- 在指令库 →程序控制中,直接拖拽
FC_Add到网络段中。 - 分配变量 / 地址:
- IN1、IN2:填写常量(如 10、20)或 PLC 变量(M、DB、I、Q)
- OUT_RESULT:绑定输出变量(如
DB1.DBD0、MW0)
- 示例接线逻辑:
plaintext
IN1 := 10 IN2 := 20 调用 FC_Add OUT_RESULT = 30
方式 2:SCL 语言调用(如果 OB1 也用 SCL)
若 OB1 切换为 SCL 编辑,调用语法:
scl
// OB1 主程序内调用外部导入的FC FC_Add( IN1 := 10, IN2 := 20, OUT_RESULT => MW0 );五、第四步:下载程序到 PLC + 在线监控验证
- 编译整个项目(快捷键 Ctrl+B),确保无错误、无警告。
- 连接 PLC(以太网 / PN),点击在线 & 下载,将程序下载到 S7-1200。
- 进入在线监控:
- 查看引脚数值变化,验证 SCL 逻辑正常执行。
- 证明:外部 SCL 文件 → 导入成块 → 主程序调用 全流程生效。
六、补充:导入 FUNCTION_BLOCK(FB 块)示例
1. 外部 SCL 源码(FB 格式)
scl
FUNCTION_BLOCK FB_Count VAR Counter: Int; // 静态变量,断电保持状态 END_VAR VAR_INPUT Add_Pulse: Bool; END_VAR VAR_OUTPUT Count_Out: Int; END_VAR IF Add_Pulse THEN Counter := Counter + 1; END_IF; Count_Out := Counter; END_FUNCTION_BLOCK同样改后缀为.scl,按上面步骤导入,会自动生成FB 功能块,调用方式和 FC 完全一致。
第三部分:Openness 开发环境配置(C# 上位机)
1. 软硬件环境要求(视频部分根据粉丝需要讲c#还是python调整 )
- TIA Portal 版本:V17(推荐,稳定支持.NET 4.8)或 V18/V19(支持.NET 6+)。
- Visual Studio 版本:VS 2019(V17)或 VS 2022(V18/V19)。
- .NET 框架:.NET Framework 4.8(V17)或.NET 6+(V18/V19)。
- PLC 型号:西门子 S7-1200(需确保 CPU 固件版本与 TIA Portal 兼容)。
- cursor 千问等编程,利用ai 参与工程设计和开发,
2. TIA Portal 权限配置
- 以管理员身份启动 TIA Portal。
- 依次点击【选项】→【设置】→【常规】→【专家设置】。
- 勾选【通过外部程序启用 TIA Portal 的访问】,点击【确定】后重启 TIA Portal。
3. Visual Studio 项目配置
- 创建 C# 控制台应用(.NET Framework 4.8)。
- 引用 Openness 核心 DLL(路径示例:
C:\Program Files\Siemens\Automation\Portal V17\PublicAPI\V17):Siemens.Engineering.dll(核心 API)Siemens.Engineering.HW.dll(硬件组态)Siemens.Engineering.SW.dll(软件对象如程序块)
- 设置 DLL 属性:右键每个 DLL→【属性】→【复制到本地】设为
False。
4. 操作系统权限与防火墙配置
- 权限设置:
- 开发时,Visual Studio 需以管理员身份运行(右键 VS 图标→【以管理员身份运行】)。
- 编译后的 EXE 文件,右键→【属性】→【兼容性】→勾选【以管理员身份运行此程序】。
- 防火墙配置:
- 允许 TIA Portal 通过防火墙:控制面板→【Windows Defender 防火墙】→【允许应用通过防火墙】→找到
Siemens.Automation.Portal.exe并勾选 “专用” 和 “公用” 网络。 - 允许上位机程序通过防火墙:同上步骤,添加编译后的 EXE 文件。
- 允许 TIA Portal 通过防火墙:控制面板→【Windows Defender 防火墙】→【允许应用通过防火墙】→找到
第三部分:C# 上位机操作 S7-1200 示例(Openness)
功能:通过 Openness 连接 TIA Portal,读取 S7-1200 的程序块信息
csharp
using System; using Siemens.Engineering; using Siemens.Engineering.SW; class OpennessDemo { static void Main(string[] args) { // 1. 创建TIA Portal实例(无界面模式) using (var tiaPortal = new TiaPortal(TiaPortalMode.WithoutUserInterface)) { try { Console.WriteLine("正在连接TIA Portal..."); // 2. 打开现有项目(替换为你的TIA项目路径) var project = tiaPortal.LoadProject(@"C:\Siemens\Projects\S7-1200_Demo.ap17"); Console.WriteLine($"成功打开项目: {project.Name}"); // 3. 遍历项目中的设备,找到S7-1200 CPU foreach (var device in project.Devices) { if (device.Type.Contains("S7-1200")) { Console.WriteLine($"\n找到S7-1200 CPU: {device.Name}"); // 4. 获取CPU的程序块(OB、FB、FC等) var software = device.Software as PlcSoftware; if (software!= null) { Console.WriteLine("程序块列表:"); foreach (var block in software.Blocks) { Console.WriteLine($"类型: {block.GetType().Name}, 名称: {block.Name}"); } } break; } } } catch (Exception ex) { Console.WriteLine($"操作失败: {ex.Message}"); } } Console.WriteLine("\n按任意键退出..."); Console.ReadKey(); } }代码说明
- TIA Portal 连接:通过
TiaPortal类创建实例,支持有界面(WithUserInterface)或无界面模式。 - 项目操作:
LoadProject打开现有项目,SaveProject保存修改,CreateNewProject创建新项目。 - 硬件与软件访问:通过
Devices遍历设备,Software属性获取 PLC 程序块,支持读写变量、修改程序块逻辑等高级操作。
第四部分:常见问题与注意事项
- 版本兼容性:确保 TIA Portal 版本、.NET 框架、VS 版本严格匹配(参考本文第二部分第 1 点),否则会出现 DLL 加载失败。
- 权限问题:若提示 “无法访问 TIA Portal”,检查是否以管理员身份运行 TIA Portal 和 VS,以及 “专家设置” 中的外部访问权限是否开启。
- PLC 在线连接:若需通过 Openness 控制 PLC 在线(如下载程序、监控变量),需确保 TIA Portal 已通过以太网连接 S7-1200(IP 地址需在同一网段)。
