您现在的位置是:网站首页> PLC自动化
PLC资讯与技术信息收集
- PLC自动化
- 2026-08-09
- 16人已阅读
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 接线决定



博途(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. 非标设备厂商:使用 Openness 自动生成标准化模板程序,一键生成整套 SCL 代码,省去重复写程序;
2. 上位机软件:通过 S7 协议远程控制 PLC 启停、读取传感器、控制接触器;
3. AI 自动生成 PLC 程序:C# 调用 Openness,把 AI 产出的代码自动写入博途项目。
## 五、开发门槛
1. Openness 必须安装对应版本的博途,DLL 版本和软件版本严格匹配;
2. 需要.NET 基础,熟悉博途项目对象层级(项目‑设备‑PLC‑程序块‑变量);
3. 仅离线状态适合大规模自动生成代码;在线下载、监控需要开启 PLC 权限。
利用 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. 项目保存路径不要包含中文。
上一篇:PLC外设相关信息收集