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

PLC资讯与技术信息收集

摘要

PLC资讯与技术信息收集

***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 接线决定



1.jpg

1.png


6392190041662321878275397.png



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

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编程

功能介绍

利用 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。



利用 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. 项目保存路径不要包含中文。








Top