C#学习笔记9:winform上位机与西门子PLC网口通信_上篇

今日继续我的C#学习笔记,今日开始学习打开使用千兆网口来进行与西门子PLC的通信:

文章提供整体代码、解释、测试效果截图、整体测试工程下载:

主要包含的知识有:下载NuGet程序包、西门子PLC及通信协议、搭建虚拟的S7通信仿真环境、C#与西门子S7的六大通信库了解

其中搭建虚拟的S7通信仿真环境是本文最主要的部分

目录

1、NuGet程序包(xktComm类库):

2、xktComm类库了解:

 建立/断开连接的函数:

读写函数:

3、了解西门子PLC通信:

4、C#与西门子PLC的六大通信库:

5、软件搭建虚拟S7通信仿真环境:

SIEMENS官方软件下载网址:

 PC虚拟接口设置:

发现报错及解决:

 打开S7-PLCSIM Advanced V3.0报错NetGroup Packet Filter Driver (NPF)

 安装winpcap驱动:

安装授权工具Sim_EKB_Install:

虚拟配置设置:

 软件界面解释:

6、博图(TIA Portal)软件:

軟件介紹:

SIEMENS下载地址:

网盘地址(在哔哩哔哩刷到的):

(1)PLC配置中,必须勾选允许来自远程对象的PUT/GET通信访问:

(2)如果需要访问DB块,必须将DB块属性中的优化的块访问去除:

 (3)博途项目属性设置。在博途项目树中右键单击项目名称→属性,在弹出对话框的“保护”选项卡中,勾选“块编译时支持仿真”,如下图所示:

7、用到的授权软件下载网址:

8、查阅的文章资料网址贴出:


1、NuGet程序包(xktComm类库):

在‘项目’--->‘管理NuGet程序包’里搜素 xktComm库并下载 xktComm通信类库

这样就能使用西门子PLC相关的程序函数库了,以连接PLC及读取数据等

当然这只是我在此次学习的时候选择的库,能与PLC通信的库还有其余五个,这在下文会有提到

using xktComm;

xktComm通信库的主要特点如下:
1.跨平台支特:

xktComm可以在Vindows、Linux、macOS等多个平台上使用,使用简单方便。


2.支特TCP/UDP协议:

xktComm支持TCP和UDP通信协议,用户可以根据自己的需求选择合适的协议。


3.线程安全:xktComm:

采用线程安全的设计,可以在多线程环境下使用。


4.高性能:xktComm:

采用非阻塞IO模型,提供高性能的通信能力。


5.支特多种数据类型:

xktComm支持多种数据类型的传输,包括字符串、整型、浮点型、结构体等。


6.支持特自定义协议:

xktComm支持自定义通信协议,用户可以根据自己的需求定制通信协议。 

2、xktComm类库了解:

 如图选中后按F12可以直接导航到定义的方法:

 建立/断开连接的函数:

 主要需要四个参数传入:

// 摘要:建立与PLC的连接// 参数://   Ip:IP地址//   Cpu:CPU类型//   Rack:机架号//   Slot: 插槽号public bool Connect(string Ip, CPU_Type Cpu, int Rack, int Slot);
        // 摘要://     断开连接public void DisConnect();

而CPU的枚举类型按F12导航可知:

namespace xktComm.Common
{public enum CPU_Type{S7200 = 0,S7200SMART = 1,S7300 = 10,S7400 = 20,S71200 = 21,S71500 = 22}
}

读写函数:

       //读单个变量public object Read(StoreType StoreType, int DB, int StartByteAdr, VarType VarType, int VarCount);//读一大串字节数组public byte[] ReadBytes(StoreType StoreType, int DB, int StartByteAdr, int count);
        //单写public bool Write(string variable, object value);//数组写入public bool WriteBytes(StoreType StoreType, int DB, int StartByteAdr, byte[] value);

3、了解西门子PLC通信:

在现代工业自动化系统中,可编程逻辑控制器(PLC)扮演着核心角色,负责执行复杂的逻辑操作、过程控制、机器运动控制等任务。

作为全球领先的自动化解决方案供应商,西门子提供了一系列高性能PLC,特别是其通信能力,为实现复杂的自动化控制系统和工业4.0应用提供了坚实的基础。

如果想实现C#/.NET与西门子PLC之间的通信,首先要对西门子PLC有一定的了解:

西门子PLC目前市场上主要使用的PLC型号包括:S7-200、S7-200Smart、S7-300、S7-400、S7-1200、S7-1500,

西门子PLC的主要存储区包括V区(在通信协议里V区即DB1)、M区、I区、Q区、DB区,其他的C区和T区,由于用得比较少,而且可以通过程序中转。

西门子PLC通信只需要IP地址和CPU类型即可,不需要端口号,因为S7协议的端口号是固定值102,之所以要选择CPU类型,是因为不同型号的CPU,握手报文是不一样的。

4、C#与西门子PLC的六大通信库:

一、S7.NET
S7.NET是一款开源的S7协议通信库,支持西门子S7通信。
二、Sharp7
Sharp7与S7.NET一样,是一款.NET版本的S7通信库。
三、Snap7
Snap7是一个开源的C++通信库,支持西门子S7通信。
四、Prodave
Prodave是官方提供的通信库,支持西门子PLC各种方式通信。
五、HslCommunication
HslCommunication是一个商业通信库,涵盖各种不同设备的通信。
六、xktComm
xktComm是一个工业通信库,涵盖西门子、欧姆龙、三菱、基恩士等PLC,也支持Modbus及OPC通信。

5、软件搭建虚拟S7通信仿真环境:

SIEMENS官方软件下载网址:

S7-PLCSIM Advanced

 往下滑点这个:

没账户就点注册(QQ邮箱可以正常注册),街道名字什么都可以随便乱填,他不会管的:

之后他就会给你下载了:

然后正常安装就可以了:

由于我们貌似没有lincence,所以安装到最后一步需要选择skip lincence transfer:

最后安装成功后别忘了重启电脑:

这时打开设置,会发现多了俩虚拟网卡:

 PC虚拟接口设置:

打开控制面板,搜素PG/PC接口设置:

如图设置好程序访问点(找到了双击即可):

 再将本地网卡和虚拟网卡的IP地址获取设置为自动:

管理员模式启动软件:

发现报错及解决:

 打开S7-PLCSIM Advanced V3.0报错NetGroup Packet Filter Driver (NPF)

这个启动的报错在下面分俩部分解决:分别是驱动与密钥的问题:

 安装winpcap驱动:

以管理员模式打开cmd,输入net start npf开启npf的时候显示服务名无效,

原因是没有安装winpcap,这里需要我们自行在网络上获取这个驱动,但我这会在文章结尾打包贴出CSDN下载网址

在安装winpcap后再以管理员模式运行cmd,输入net start npf后成功打开npf。

安装授权工具Sim_EKB_Install

这会在文章结尾打包贴出CSDN下载网址,Automation License Manager需要这个进行授权

然后打开这个软件,根据软件版本安装需要的密钥:

先注意一下仿真软件版本:

 再安装密钥:

再打开Automation License Manager查看是否有密钥:

虚拟配置设置:

最后打开仿真设置好参数(以下为仿真已经开始正常运行的界面):

 同时会有提示:

 软件界面解释:

①设置仿真实例的在线访问方式,有两种:“PLCSIM”使用本地总线访问CPU实例(仅能在同一台电脑内部使用),“PLCSIM Virtual Eth. Adapter”是通过虚拟网卡,以TCP/IP协议的方式访问CPU实例。使用后者必须在安装软件时勾选NPCap(4.0版本使用,早期使用WinPCap);
②用来设置TCP/IP的通信方式,有本地和以太网两种。如果是在两台电脑之间实现仿真,需选择<以太网>;
③调整虚拟时间:通过调整该参数,可防止仿真实例因扫描周期超时而停机;
④严格的运动时间。当勾选时,将对运动控制组织块(Motion OB)缓冲区溢出进行检测,运动控制器伺服时钟与PLC周期同步,确保与硬件PLC类似的功能;若不勾选,则不检测缓冲区溢出。这种情况下仿真实例不会因缓冲区溢出而切换到停机状态,可提高仿真性能,但可能不精确;
⑤创建S7-1500仿真实例:包括实例的名称、IP地址、子网掩码、网关及CPU的型号(如下图)。当创建完成后,下次使用时,无需再次输入;
⑥PLC实例运行状态区;
⑦辅助功能区,其中“虚拟SMC卡”可打开文件夹,创建的仿真实例存放于此。若某个实例不需要时可直接删除;还可打开功能手册查看详细介绍;

6、博图(TIA Portal)软件:

軟件介紹:

[工业自动化-14]:西门子S7-15xxx编程 - 软件编程 - STEP7 TIA博途是全集成自动化软件TIA portal快速入门-CSDN博客

SIEMENS下载地址:

SIOSicon-default.png?t=N7T8https://support.industry.siemens.com/cs/document/109807109/simatic-step-7-incl-safety-s7-plcsim-and-wincc-v18-trial-download?dti=0&lc=en-US

网盘地址(在哔哩哔哩刷到的):

(1)PLC配置中,必须勾选允许来自远程对象的PUT/GET通信访问:

(2)如果需要访问DB块,必须将DB块属性中的优化的块访问去除:

 (3)博途项目属性设置。在博途项目树中右键单击项目名称→属性,在弹出对话框的“保护”选项卡中,勾选“块编译时支持仿真”,如下图所示:

7、用到的授权软件下载网址:

https://download.csdn.net/download/qq_64257614/89093770

8、查阅的文章资料网址贴出:

六大通信库,围攻西门子-dotNet工控上位机-科易网技术创新

 2021-11-23 WPF上位机 97-了解西门子PLC_modbus tcp plc wpf界面-CSDN博客

西门子PLC系列连载|No.44 西门子PLC通信知识

 百度安全验证

C#与西门子PLC通信完整实例 

https://blog.51cto.com/u_4018548/6444585

解决打开S7-PLCSIM Advanced V3.0报错NetGroup Packet Filter Driver (NPF)-CSDN博客

仿真神器——S7-PLCSIM Advanced

基于S7-PLCSIM Advanced搭建S7通信仿真环境

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/806966.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

为了进阿里拿Offer,逼得我两个月吃透了这些Java高级面试题解析,终于上岸

JVM与调优 21 题及答案解析 JVM的内存结构。 JVM方法栈的工作过程&#xff0c;方法栈和本地方法栈有什么区别。 JVM的栈中引用如何和堆中的对象产生关联。 可以了解一下逃逸分析技术。 gc的常见算法 CMS以及G1的垃圾回收过程&#xff0c;CMS的各个阶段哪两个是Stop the wo…

前端解决跨域问题

什么是跨域&#xff1f; 跨域是浏览器行为&#xff0c;是浏览器的一种安全策略&#xff1b;由于浏览器 同源策略 导致浏览器访问服务器时被拦截 同源策略&#xff08;Sameoriginpolicy&#xff09;&#xff1a; 是一种约定&#xff0c;它是浏览器最核心也最基本的安全功能&am…

51.网络游戏逆向分析与漏洞攻防-角色管理功能通信分析-角色选择的模拟与截取

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 如果看不懂、不知道现在做的什么&#xff0c;那就跟着做完看效果 内容参考于&#xff1a;如果看不懂、不知道现在做的什么&#xff0c;那就跟着做完看效果&…

制造业、能源等传统行业进行数字化转型时要注意哪些问题?

制造业、能源等传统行业在进行数字化转型时需要注意以下几个关键问题&#xff1a; 1、明确转型目标和战略规划&#xff1a;企业需要根据自身的业务特点、市场需求和长远发展目标&#xff0c;制定清晰的数字化转型战略。包括确定转型的重点领域、预期成果、时间表和资源投入。 …

阿里云云效CI/CD配置

1.NODEJS项目流水线配置(vue举例) nodejs构建配置 官方教程 注意:下图的dist是vue项目打包目录名称,根据实际名称配置 # input your command here cnpm cache clean --force cnpm install cnpm run build 主机部署配置 rm -rf /home/vipcardmall/frontend/ mkdir -p /home/…

计算分数和-第12届蓝桥杯选拔赛Python真题精选

[导读]&#xff1a;超平老师的Scratch蓝桥杯真题解读系列在推出之后&#xff0c;受到了广大老师和家长的好评&#xff0c;非常感谢各位的认可和厚爱。作为回馈&#xff0c;超平老师计划推出《Python蓝桥杯真题解析100讲》&#xff0c;这是解读系列的第48讲。 计算分数和&#…

java并发体系-锁

ReentrantLock ReentrantLock是Java并发编程中的一种锁机制。它的基本流程如下&#xff1a; 创建ReentrantLock对象。在需要加锁的代码块前调用lock()方法&#xff0c;该方法会尝试获取锁&#xff0c;如果锁已被其他线程占用&#xff0c;则当前线程会被阻塞。执行需要加锁的代…

redis架构知识点

Redis 在规模如下&#xff1a; 机器内存总量约70TB&#xff0c;实际使用内存约40TB&#xff1b;平均每秒处理约1500万次请求&#xff0c;峰值每秒约2000万次请求&#xff1b;每天处理约1万亿余次请求&#xff1b;单集群每秒处理最高每秒约400万次请求&#xff1b;集群实例与单机…

3 突破编程_前端_SVG(rect 矩形)

1 rect 元素的基本属性和用法 在SVG中&#xff0c;<rect> 元素用于创建矩形。 <rect> 元素有一些基本的属性&#xff0c;可以用来定义矩形的形状、位置、颜色等。以下是这些属性的详细解释&#xff1a; x 和 y &#xff1a;这两个属性定义矩形左上角的位置。 x …

[dvwa] sql injection(Blind)

blind 0x01 low 1’ and length(version()) 6 # syntax: substr(string , from<start from 1>, cut length) 1’ and substr(version(),1,1) ‘5’ # 1’ and substr(version(),2,1) ‘.’ # 1’ and substr(version(),3,1) ‘7’ # 1’ and substr(version(),4,…

leetcode 322

leetcode 322 题目 例子 思路 记忆化搜索&#xff0c;使用数组&#xff0c;记录val的最少硬币数量&#xff1b; 递归加bfs; 代码实现 #include <vector> #include <climits> // For INT_MAX #include <algorithm> // For minclass Solution { public:int…

C#下Httpclient post请求获取令牌

1.postman测试ok 2.C#代码 public static async Task<string> testGetToken(string URL, string param){string responseBody "eee";//using (var clientHandler new HttpClientHandler()){ var handler new HttpClientHandler();handler.ServerCertificat…

响应实践!赛宁网安亮相第二届全国先进技术成果转化大会

4月8日&#xff0c;第二届全国先进技术成果转化大会&#xff08;以下简称“大会”&#xff09;在苏州隆重举行。大会由江苏省国防科学技术工业办公室、苏州市人民政府、先进技术成果长三角转化中心主办。赛宁网安作为全球一流数字孪生靶场服务商&#xff0c;携数字孪生靶场、网…

软件测试面试准备—综合面

技术面试过了之后&#xff0c;HR约综合面&#xff0c;其实面之前我不太确定是不是HR面&#xff0c;以及会有哪些人&#xff0c;所以还是整理了下问题。有些问题附上答案&#xff0c;有些问题需要结合自己的工作场景来发挥。我参与的这家公司的综合面是HR来面的&#xff0c;其实…

python学习——re库的常用函数

参考资料&#xff1a;python网络爬虫技术与应用【邓维】 1、match() 从字符串头部开始匹配字符。 import re content"The123456ismyonephonenumber." # 字符串长度 print(len(content)) # 使用match匹配&#xff0c;第一个参数为正则表达式&#xff0c;第二个参数…

未来驾驶的革命:自动驾驶技术与智能交通系统的崛起

虽然自动驾驶技术和智能交通系统的开发似乎是资本密集型且技术要求高的领域&#xff0c;主要由大型企业主导&#xff0c;但普通创业者仍有机会从多个角度切入这一领域。以下是一些创业机会的思路&#xff1a; 1. 软件解决方案和应用开发 数据分析和处理工具 在自动驾驶技术领域…

element-ui的按需引入报错解决:MoudleBuildFailed,完整引入和按需引入

官网&#xff1a; Element - The worlds most popular Vue UI framework 1.完整引入 &#xff08;1&#xff09;下载&#xff1a; npm i element-ui -S &#xff08;2&#xff09;引入&#xff1a; 在 main.js 中写入以下内容&#xff1a; import Vue from vue; impor…

MLT媒体程序框架02:源码剖析

以MLT自带的Melt命令行工具源码为例 去掉一些不重要的代码 melt.c int main(int argc, char **argv) {int i;mlt_consumer consumer NULL;FILE *store NULL;char *name NULL;mlt_profile profile NULL;int is_progress 0;int is_silent 0;int is_abort 0;int is_getc …

javascript中创建变量的方式 与 var和let有什么区别

一、创建变量的7种方式&#xff1a; 1、var 2、function 创建变量&#xff08;函数名是一个变量 3、let 4、const 创建常量 5、import 基于es6 的模块规范导出需要的信息 6、class 基于 es6 创建的类 7、Symbol 创建唯一值 二…

Linux进阶篇:centos7扩展root分区:LVM应用案例

centos7扩展root分区&#xff1a;LVM应用案例 当服务器根分区或者是root分区存储空间快用完的时候&#xff0c;并且重要的数据都在root分区下&#xff0c;当如何应对&#xff0c;没关系坐好&#xff0c;分分钟解决它&#xff0c;我们可以进行分区扩容。 一 添加一块新的硬盘 …