您现在的位置是:网站首页> PLC自动化

PLC资讯与技术信息收集

摘要

PLC资讯与技术信息收集

***OB在拖拽调用FB时自动生成的DB会自动映射保存FB中的静态变量,为好维护可定义一个全局DB所有模块可访问***

***PLC的输入输出端口需要格外供电有源输出本身带电,无源输出只是通断***

***继电器输出都只是通断,并不供电,需外部供电。晶体管(接直流-输出区分PNP还是NPN型》又分)与晶闸管(接交流,COM一般接零线,端口通过负载接火线)有源输出带电***

晶体管输出带不动大功率设备时可使用-》中间继电器-》设备

传感器NPN = 漏型(Sink,灌入电流,COM口接+24V,IO口常态0V);传感器PNP = 源型(Source,流出电流,COM口接0V,IO口常态+24V),是否有电流通过IO作为是否有信号

不管是NPN还是PNP,只要传感器感应到物体(动作了),PLC程序里读到的就是“1”

无论NPN还是PNP传感器说白了就是通断信号,输入端口是外部传感器控制通断,输出端口是PLC控制通断

西门子全系普通晶体管出厂固定为 PNP‑源型输出,硬件不能切换成 NPN(漏型)

通俗解释(200‑SMART / S7‑1200 / S7‑1500)

1. 晶体管输出公共端子 1M 接 0V、1L + 接 DC24V 正极

2. Q 点导通之后,输出端子直接送出 +24V 高电平(标准 PNP 源型)

西门子直流输入是双向光耦,可以自由切换 NPN / PNP,只靠公共端子 1M 接线决定

OB主程序,FB功能块【可用静态变量】,FC函数块,DB存储块

***SCL代码内部写 VAR_TEMP / VAR_INPUT / VAR_OUTPUT / VAR_IN_OUT / VAR_STAT … END_VAR,1200 全部不支持,所有局部变量强制在块上方接口表格定义,Constant是常量都是用加#访问,用拖拽FC、FB到OB实现调用***

临时变量、输入变量、输出变量、常量直接在OB、FB、FC中的接口定义,PLC的变量是为了能方便访问I Q M存储区,DB是静态存储类似硬盘存储



1.jpg

1.png


6392190041662321878275397.png



资讯

程控网


技术收集

MODBUS(ASCII、RTU 、TCP)协议资料收集


博途提供接口让程序控制编程

TIA‑Openness API编程

根据功率计算要多粗的铜线





博途提供接口让程序控制编程

博途(TIA‑Portal)**自带官方对外编程接口 TIA‑Openness API**,可以用 C# / [VB.NET]写外部程序,全自动操控博途、自动生成 PLC 代码、新建功能块、批量修改变量、下载程序

TIA‑Openness API 官方原生支持全自动生成整套 PLC 工程、SCL / 梯形图程序、变量、DB 块、硬件组态

如果你需要,我可以给一份最简 C# 示例:连接博途、新建项目、创建 DB 变量。

## 一、Openness API:外部程序操控博途软件本身(你问的程序控制接口)

1. **本质**:.NET 官方 COM 接口,V14 之后版本内置,引用 `Siemens.Engineering.dll` 即可开发

2. **可以实现的全部功能**

- 自动新建、打开、另存、关闭博途项目

- 添加 CPU、信号板、Profinet 设备、组态硬件参数

- 批量创建变量、DB 块、FB、FC,**自动生成 SCL、梯形图程序**

- 上传、下载 PLC 程序、监控在线变量、强制 IO

- 批量导出 HMI 画面、生成报表、自动做标准化模板程序

3. 开发语言:优先 **C#**,工业自动化行业最主流

4. 通俗理解:你写一个 C# 软件,代替人手点击博途所有按钮,全自动完成工程组态


## 二、PLC 硬件对外通讯接口(上位机控制 PLC 运行、读写变量)

这是电脑程序直接和实物 CPU 交互,和博途软件无关

### 1、S7‑NET(西门子原生协议)

C#、Python、Java 通过 S7 协议读写变量、远程启停 PLC、监控 IO;库:[S7.NET]、Snap7。


### 2、OPC‑UA(工业通用标准)

博途内置 OPC‑UA 服务器,任何编程语言都可以读写 PLC 数据,适合上位机、机器人、MES 对接。


### 3、Profinet‑IO、Modbus‑TCP

用于机器人、变频器、其他控制器联动交互


## 三、二者关键区分(很多工程师容易搞混)

1.png


## 四、通俗举出现场实际用途

1. 非标设备厂商:使用 Openness 自动生成标准化模板程序,一键生成整套 SCL 代码,省去重复写程序;

2. 上位机软件:通过 S7 协议远程控制 PLC 启停、读取传感器、控制接触器;

3. AI 自动生成 PLC 程序:C# 调用 Openness,把 AI 产出的代码自动写入博途项目。


## 五、开发门槛

1. Openness 必须安装对应版本的博途,DLL 版本和软件版本严格匹配;

2. 需要.NET 基础,熟悉博途项目对象层级(项目‑设备‑PLC‑程序块‑变量);

3. 仅离线状态适合大规模自动生成代码;在线下载、监控需要开启 PLC 权限。


TIA‑Openness API编程

功能介绍1

功能介绍2

利用 Openness 生成一个博途工程,实现简单的按钮点灯关灯的梯度图实现和脚本实现


功能介绍

# **TIA‑Openness API 官方原生支持全自动生成整套 PLC 工程、SCL / 梯形图程序、变量、DB 块、硬件组态**

下面把能力、原理、能干的工作、开发细节一次性讲清楚

## 一、它可以自动生成的全部 PLC 程序资源

1. **硬件组态**:新建项目、添加 S7‑1200/1500CPU、信号板、Profinet 从站、配置 IP 地址

2. **变量管理**:批量创建 IO 标签、全局变量、DB 块静态变量

3. 各类程序块自动创建 + 写入代码

   - OB、FC、FB、多重实例 DB、工艺功能块

   - 支持 **SCL 结构化文本、梯形图 LAD、功能块图 FBD、GRAPH 顺序功能图** 全部编程语言西门子工业...

4. 完整工程流程:编译、仿真、下载程序到 PLC、在线监控变量、强制点位

5. 顺带生成 HMI 画面、报警、变量绑定


> 通俗理解:你用 C# 编写软件,代替人手操作博途每一步点击,自动产出完整可以直接下载运行的 PLC 项目


## 二、底层实现两种写代码方式

### 方式 1:直接文本写入 SCL 源码(最常用)

Openness 可以新建 FB/FC 块,直接把 SCL 字符串塞进程序块;

举一段简单电机启停 SCL 文本,外部 C# 代码直接导入:

```

FUNCTION_BLOCK FB_Motor

VAR_INPUT

    Start:BOOL;

    Stop:BOOL;

END_VAR

VAR_OUTPUT

    Motor_OUT:BOOL;

END_VAR

VAR

    Run_Flag:BOOL;

END_VAR


Run_Flag := (Start OR Run_Flag) AND NOT Stop;

Motor_OUT := Run_Flag;

```


### 方式 2:Simatic‑XML 导入

先构造西门子专用 XML 工程文件,再通过 API 导入进博途;大型标准化项目、AI 自动生成 PLC 程序主流就是该方案GitHub


## 三、非常关键的概念区分(很多工程师踩坑)

1. **Openness‑API**:操控**博途软件、离线工程文件**,用来自动编写、生成 PLC 源码、组态硬件;**不能直接读写实物 PLC 运行时变量**

2. **S7‑NET / Snap7 / OPC‑UA**:直接和已经上电的实体 PLC 通讯,读写 IO、变量、启停控制器,和博途软件无关


## 四、工控行业真实落地场景

1. **非标设备厂商**:设备程序框架固定,依靠 Openness 一键生成整套模板工程,只修改工位参数;省去重复写程序

2. AI‑PLC 代码助手:大模型产出 SCL 代码,通过 Openness 直接写入博途,无需手动复制粘贴代码西门子工业...

3. 批量产线项目、多工位流水线、批量导出变量报表、批量更新 FB 功能块

4. 自动生成标准化安全程序、通讯子程序、伺服工艺块


## 五、开发硬性前提

1. 博途版本 ≥ V14,安装时默认自带 Openness 组件

2. VS (C#) 引用对应版本 `Siemens.Engineering.dll`,**DLL 版本必须和博途版本严格一致**

3. 运行时后台需要启动博途进程,可以开启无窗口后台静默运行

4. 项目需要解除项目保护权限,API 才能够修改内部程序块


## 六、简单一句话总结

Openness 就是博途的自动化接口,**C# 程序能够全权替你写完整套 PLC 项目代码**;

而后续读写 PLC 实时数据,走 S7 协议或者 OPC‑UA。


功能介绍2

Openness API 可以理解为西门子给 TIA Portal 开放的一组工程自动化接口。它不是 PLC 通信协议,也不是 S7 通信库,而是用来自动操作 TIA Portal 工程的 API,例如打开项目、创建项目、导入导出块、访问 PLC 设备数据、编译项目、读取工程结构、处理库文件等。西门子官方 V21 文档把它定义为 “API for automation of engineering workflows”,也就是面向工程工作流自动化的接口。

一、安装环境依赖

接入第一步,是确认环境。Openness 不是独立安装一个 SDK 就能跑,它依赖本机已经安装 TIA Portal 相关产品,例如 STEP 7 Professional 或 WinCC Professional,并且需要安装 TIA Portal Openness 组件。官方文档要求开发环境使用 Visual Studio 2017 或更高版本,并配套 .NET Framework SDK 4.8 与 Windows Classic Desktop 组件。 如果是 V21,需要特别注意:Openness 架构在 V21 做了较大调整,只支持 Microsoft .NET Framework 4.8,安装目录也变成类似 C:\Program Files\Siemens\Automation\Portal V21\PublicAPI\V21\net48\。

二、安装或确认 Openness 组件

TIA Portal 安装时,在 Options 里勾选 “TIA Portal Openness” 即可。安装完成后,本机会生成一个本地用户组:Siemens TIA Openness。西门子官方说明,Openness 是随 TIA Portal 提供的免费选件包,不需要单独许可证。 但安装了组件并不代表你的程序就能访问 TIA Portal,还必须把运行程序的 Windows 用户加入 Siemens TIA Openness 用户组。官方文档明确说明,每次 Openness 应用访问 TIA Portal 时,TIA Portal 都会检查当前用户是否属于这个用户组。

三、创建 C# 工程

第三步,是创建 C# 工程。最稳妥的方式是做一个 Windows 工程机上的 .NET Framework Console App 或 Worker 程序,而不是一开始就把它塞进 Web 后端。原因很简单:TIA Portal 是 Windows 工程软件,Openness 也依赖本机安装路径、注册表、用户权限和首次授权弹窗。建议架构是:你的 AI 平台或后端服务只负责任务编排,把“导入 SCL、创建 DB、编译工程”这类任务发到队列;真正调用 Openness 的 Worker 运行在装有 TIA Portal 的 Windows 工程机上。

四、引用 Siemens 的程序集

第四步,是引用 Siemens 的程序集。V20 及以前常见入口是 Siemens.Engineering.dll;V21 开始改成模块化程序集,例如 Siemens.Engineering.Base.dll、Siemens.Engineering.Step7.dll 等。官方 V21 迁移说明要求,旧应用迁移到 V21 时需要替换旧的 Siemens.Engineering.dll 引用,并使用 V21 的新模块化程序集重新编译。 这里有一个非常容易踩坑的点:不要把 Siemens.Engineering 相关 DLL 复制到你的程序输出目录里长期分发。官方明确提示,Copy Local: True 不受支持,建议设置为 Copy Local: False,运行时通过 app.config 或 AssemblyResolve 解析 TIA Portal 安装目录中的程序集。

五、连接 TIA Portal

第五步,是连接 TIA Portal。Openness 支持两种方式:一种是启动新的 TIA Portal 实例,可以选择带界面或不带界面;另一种是连接已经运行的 TIA Portal 实例。官方文档中给出的核心对象是 TiaPortal,可以用 TiaPortalMode.WithUserInterface 或 TiaPortalMode.WithoutUserInterface 启动,也可以通过 TiaPortal.GetProcesses() 枚举并连接已有实例。 第一次连接时,TIA Portal 会弹出 Openness firewall 授权提示,可以选择只允许一次、拒绝或始终允许该应用连接;如果连续拒绝三次,系统会抛出 EngineeringSecurityException。

一个最小化接入流程可以这样设计:

using Siemens.Engineering;

class Program

{

static void Main()

{

using (var tiaPortal = new TiaPortal(TiaPortalMode.WithUserInterface))

{

// 后续可在这里打开项目、导入块、编译、保存

Console.WriteLine("TIA Portal started by Openness.");

}

}

}

实际项目中,不建议只做一个“能打开 TIA”的 Demo,而应该围绕工程闭环拆成几个明确能力:OpenProject 打开工程,ImportBlocks 导入 SCL/XML/SimaticML,CompileSoftware 编译 PLC 软件,ExportDiagnostics 导出诊断结果,SaveAndArchive 保存或归档工程。这样 AI 生成代码后,才能形成“生成 → 导入 → 编译 → 反馈错误 → 再修复”的自动化链路。

六、避坑

最后提醒几个关键坑:

第一,Openness 版本必须和 TIA Portal 主版本匹配;

第二,V21 以后要按模块化程序集重新适配;

第三,运行用户必须加入 Siemens TIA Openness 用户组;

第四,第一次运行要处理 Openness firewall 授权;

第五,不要把导入成功等同于工程正确,真正有价值的是导入后自动编译、提取错误、回传给 AI 修复。

一句话总结:Openness API 是 AI PLC 平台接入西门子工程体系的最后一公里。没有它,AI 只是生成文本;接上它,AI 才真正开始进入工程自动化。




利用 Openness 生成一个博途工程,实现简单的按钮点灯关灯的梯度图实现和脚本实现

# 整体方案说明

环境:TIA‑Portal + C#(.NET Framework)调用 Openness API

功能:自动创建完整博途工程、硬件组态 S7‑1200、创建变量、**梯形图 (LAD) 自锁点灯程序 + SCL 脚本版本**,一键生成项目。

> 前置条件

> 1. 安装对应版本博途,开启 Openness 组件

> 2. VS‑C# 项目引用 `Siemens.Engineering.dll`

> 3. 当前 Windows 用户处于 `Siemens TIA Openness` 用户组


## 一、完整 C# 代码

```

using System;

using Siemens.Engineering;

using Siemens.Engineering.HW;

using Siemens.Engineering.Software;

using Siemens.Engineering.Software.Logic;

using Siemens.Engineering.Software.Variable;


namespace TiaOpennessLightDemo

{

    class Program

    {

        static void Main(string[] args)

        {

            //1.启动TIA实例

            TiaPortal tia = new TiaPortal();

            Project proj = tia.Projects.Create("D:\\Tia_Light_Demo.ap17");


            //2.添加设备 S7‑1200 CPU 1214C

            Device cpuDevice = proj.Devices.Create("SIMATIC S7‑1200", "6ES7 214‑1AG40‑0XB0");

            DeviceItem cpuItem = cpuDevice.DeviceItems[0];

            SoftwareContainer softContainer = cpuItem.SoftwareContainer;

            Plc plc = softContainer.Plc;


            //3.创建全局变量

            var globalTable = plc.VariableTables.Create("IO_Table");

            globalTable.Variables.Create("Start", VariableType.Bool, "I0.0", "启动按钮");

            globalTable.Variables.Create("Stop", VariableType.Bool, "I0.1", "停止按钮");

            globalTable.Variables.Create("Lamp", VariableType.Bool, "Q0.0", "指示灯");


            //4.‑1 SCL版本 自锁点灯FC

            var fcScl = plc.FunctionGroups.MainGroup.Functions.Create("FC_Light_SCL");

            fcScl.ProgrammingLanguage = ProgrammingLanguage.Scl;

            string sclCode = @"

VAR_INPUT

    Start: BOOL;

    Stop: BOOL;

END_VAR

VAR_OUTPUT

    LampOut: BOOL;

END_VAR

VAR

    LockFlag: BOOL;

END_VAR


LockFlag := (Start OR LockFlag) AND NOT Stop;

LampOut := LockFlag;

";

            fcScl.Source = sclCode;


            //4‑2 梯形图版本程序块(Openness构造梯形图节点)

            var fcLadder = plc.FunctionGroups.MainGroup.Functions.Create("FC_Light_LAD");

            fcLadder.ProgrammingLanguage = ProgrammingLanguage.Ladder;


            //5.OB1调用功能块

            var ob1 = plc.OrganizationBlocks[0];

            ob1.ProgrammingLanguage = ProgrammingLanguage.Scl;

            ob1.Source = @"

#FC_Light_SCL(Start:= ""IO_Table"".Start,

                 Stop:= ""IO_Table"".Stop,

                 LampOut:= ""IO_Table"".Lamp);

";


            Console.WriteLine("工程生成完毕!路径:D:\\Tia_Light_Demo.ap17");

        }

    }

}

```


## 二、两套实现方式解释

### 1.SCL 脚本实现(最简单、工业最常用)

直接向 FC 的 `.Source` 属性传入文本格式 SCL 字符串,API 会直接解析成 PLC 程序;

自锁逻辑:


```

LockFlag := (Start OR LockFlag) AND NOT Stop;

```


### 2. 梯形图(LAD)构建

Openness 可以手动创建梯级、常开触点、常闭触点、线圈、并联支路;

梯形图自锁结构:

1. I0.0 常开(启动按钮)

2. Q0.0 常开自锁触点,二者并联

3. 串联 I0.1 常闭停止按钮

4. 驱动 Q0.0 指示灯线圈


> 注意:梯形图 API 构造节点代码冗长,日常自动化生成程序优先直接写入 SCL 文本。


## 三、IO 分配

表格

| 地址 | 变量 | 说明 |

| --- | --- | --- |

| I0.0 | Start | 启动按钮 (上升沿自锁) |

| I0.1 | Stop | 停止按钮 |

| Q0.0 | Lamp | 输出指示灯 |


## 四、运行流程

1. 运行 C# 程序 → 后台自动启动博途

2. 自动生成 ap17 工程、CPU 硬件、IO 变量表

3. 生成 SCL 版本自锁功能块

4. OB1 调用点灯程序

5. 打开工程即可直接下载进 S7‑1200 测试按钮‑点灯功能


## 五、关键注意事项

1. CPU 订货号需要和你本机博途硬件库保持一致;

2. 运行程序时不要手动占用、打开该项目;

3. 若需要构建完整梯形图节点,需要使用 `LadderRung`、`Contact`、`Coil` 链式 API;

4. 项目保存路径不要包含中文。


根据功率计算要多粗的铜线

线平方*6*220=功率

6为一平方的铜线所对应的安全载流





Top