【精讲版】上位机C#/.NET与西门子PLC通信
618来啦
亲们,腾讯课堂101机构打榜了,快来助力《新阁教育》,《免费赠送课程》!
1.手机QQ(微信请也来一遍)扫下方二维码↓,找到《新阁教育》
2.点击“支持”,记得获得免费课程,还有红包相送。
3.助力成功后可以邀请亲朋好友,共同学习。
感谢支持
据某份数据不完全统计,目前中国市场十大国际PLC品牌如下(避免争议,排名不分先后):
西门子、施耐德、欧姆龙、三菱、罗克韦尔、松下、ABB、倍福、艾默生、GE
再盘点一下中国市场十大国内PLC品牌:
和利时、台达、汇川、信捷、永宏、丰炜、南大傲拓、厦门海为、黄石科威、上海正航
当代电气工程师之所以这么厉害(Ku Bi),一部分原因大概就是PLC品牌太多了,终其一生,可能都学不完!
以上均为有感而发,不作为今天的主题,今天的主题主要是跟大家介绍一下,如何站在电气工程师的角度上,实现C#/.NET与西门子PLC之间的通信。
N0.01 准备工作
如果想实现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实际硬件,当然非常方便,可以直接测试,但是对于如果没有PLC的同学来说,我们也给大家提前准备好了解决方案:戳↓
基于S7-PLCSIMAdvanced搭建S7通信仿真环境 搭建好仿真环境后,只需要注意以下几个地方:
一、PLC配置中,必须勾选允许来自远程对象的PUT/GET通信访问。
图表 1允许Put Get访问
二、如果需要访问DB块,必须将DB块属性中的优化的块访问勾选去除。
图表 2 DB块去优化访问
三、如果是通过PLCSIM-Advanced搭建的仿真环境,必须将整个解决方案的属性中,保护栏里的块编译时支持仿真勾选上。
图表 3块编译支持仿真
四、对于读取的地址,一定要是PLC中存在的地址:
以M存储区为例,一般M区最大字节是8192个,如果你读取MD9000,一定是读不到的。
以DB存储区为例,如果你尚未创建DB1,你读取DB1.DBD0,一定也是读不到的。
以DB存储区为例,如果你DB1只有200个字节范围,你读取DB1.DBD200,也是读不到的。
只要遵从以上四个原则,西门子PLC通信基本上就不存在硬件或者配置上的问题了。
N0.02 PLC基础通信
本节中提到的基础通信,主要是指针对PLC的地址进行单个或者多个连续的进行读取及写入,下面直接利用刚刚搭建好的仿真环境来做测试,当然,使用实际PLC也是完全没问题的。前提先将博途中的DB1.DBD0、DB1.DBD4、DB1.DBD8、DB1.DBD12分别改成1.2、3.4、5.6、7.8,并将DB.DBS344开始的100个字节字符串改成“今晚有上位机免费公开课”,用于测试读取:
图表 4 DB1变量数值
图表 5 DB1字符串数据
第一步:单个变量的读取
通过C#调用通信库xktComm.dll(Nuget搜索xktComm下载安装),实现对PLC单个变量的读取,结果如下图所示:
说明:西门子PLC通信只需要IP地址和CPU类型即可,不需要端口号,因为S7协议的端口号是固定值102,之所以要选择CPU类型,是因为不同型号的CPU,握手报文是不一样的,对于西门子PLC的报文抓取及剖析,之前也写过一篇专门的文章进行了说明:戳↓
图表 6 PLC单个读取
图表 7 PLC单个字符串读取
第二步:单个变量的写入
对于单个变量的写入,也非常方便,直接输入地址、类型及写入值即可,下面分别将这4个地址写入1.0、2.0、3.0、4.0,结果如下图所示:
图表 8 PLC单个写入
图表 9 PLC单个字符串写入
第三步:多个变量的读取
对于多个变量的读取,需要填写读取长度,下面通过将读取长度改成4,一次性将DB1.DB0-DB1.DBD12读取出来,结果如下图所示:
图表 10 PLC多个读取
第四步:多个变量的写入
对于多个变量的写入,则不需要填写读取长度,直接在写入数值中,用空格分隔,写入相应的数值,下面以将DB1.DBD0-DB1.DBD12改成1.2、3.4、5.6、7.8为例,将写入数值改成1.2 3.4 5.6 7.8,结果如下图所示:
图表 11 PLC多个写入
N0.03 PLC高级通信
如果PLC基础通信就能满足大家的项目需求的话,那么PLC高级通信一定可以让大家喜出望外。
PLC高级通信主要应用场合是对于多个不连续的存储区或者多个不连续的变量进行一次性读取和写入,这一点,似乎只有西门子S7协议支持,其他品牌PLC均不支持。第一步:多个不连续变量读取
在下图中,连接上PLC后,通过输入变量地址及变量类型,然后点击添加至读取区,会将想要读取的变量加载到右边的读取区中,读取区以JSON形式进行显示,右侧显示耗时时间,添加完成后,通过点击读取数据,会将想要读取的数据展示在日志框中,这些变量是可以不连续的变量。
下面以读取MD10、MD100、MD200、DB1.DBD0、DB1.DBD8为例,进行测试,测试结果如下图所示:
图表 12 PLC多变量同时读取
图表 13 PLC监控表
第二步:写入个不连续变量读取
在上一步读取的基础上,分别将MD10、MD100、MD200、DB1.DBD0、DB1.DBD8写入1.0、2.0、3.0、4.0、5.0,仍然采用同样的方式,填写变量地址、变量类型及写入值,点击添加至写入区,最后点击写入数据,判断是否可以将这些数据同时写入,测试结果如下图所示:
图表 14 PLC多变量同时写入
图表 15 PLC多变量写入结果对比
通过反馈结果及PLC数据对比,实测证明可以一次将多个变量同时写入PLC,并且通过判断耗时仅11ms,说明报文是一次性写入的。总而言之,PLC高级通信的合理应用会大大提高上位机的通信效率。
N0.04 整体总结
本文主要针对C#与西门子PLC通信做了较为详细的描述,相信对于很多电气工程师,尤其是以西门子PLC为主的电气工程师来说,会有很大帮助。近几年随着人工智能、物联网的流程,工控行业发生了很大的变化,每一位电气工程师都应该及时作出调整,至少学习一门高级编程语言,未雨绸缪,以更好的姿态来应对即将到来的智能制造2025。
今日直播课
课程内容:基于GDI+开发工业LED指示灯控件
课程时间:今天14:30
主讲人:付老师
长按扫码进入直播↓
● WinForm通用自动更新AutoUpdater项目实战
● 基于S7-PLCSIM Advanced搭建S7通信仿真环境
【精讲版】上位机C#/.NET与西门子PLC通信的更多相关文章
- 上位机开发之三菱FX3U以太网通信实践
上次跟大家介绍了一下上位机与三菱Q系列PLC通信的案例,大家可以通过点击这篇文章:上位机开发之三菱Q系列PLC通信实践(←戳这里) 今天以三菱FX3U PLC为例,跟大家介绍一下,如何实现上位机与其之 ...
- 上位机C#通过OPCUA和西门子PLC通信
写在前面: 很多人在学习OPCUA的时候,有个非常苦恼的问题,就是没有OPCUA服务器的环境,这时候,有些人可能会想到通过类似于KepServer这样的软件来实现.那么,有没有一种方式,实现快速搭建O ...
- 上位机与三菱FX3U通过FX-232-BD通信
PLC侧设置: 和校验+协议4 读D200单字: 05 30 30 46 46 57 52 30 44 30 32 30 30 30 31 返回“201”:02 30 30 46 46 30 ...
- 【安富莱原创开源应用第1期】花式玩转网络摄像头之TCP上位机软件实现,高端大气上档次,速度2MB/S,华丽丽的界面效果
说明:1.例子是两年前做的,一直没有顾上整理出来,今天特地整理出来,开源出来给大家玩.2.上位机是emWin模拟器开发的,大家估计很难猜到,所以你会emWin话的,就可以轻松制作上位机.做些通信和控制 ...
- 上位机开发之三菱Q系列PLC通信实践
经常关注我们公众号或者公开课的学员(如果还没有关注的话,左上角点击一波关注)应该知道,我们会经常使用西门子PLC,其实对于其他品牌的PLC,我们都会讲到,包括三菱.欧姆龙.基恩士.松下及国产台达.信捷 ...
- 上位机开发之西门子PLC-S7通信实践
写在前面: 就目前而言,在中国的工控市场上,西门子仍然占了很大的份额,因此对于上位机开发而言,经常会存在需要与西门子PLC进行通信的情况.然后对于西门子PLC来说,通信方式有很多,下面简单列举一下: ...
- WinUI(WASDK)项目实践——优雅的开发上位机应用(新)
摘要 这就是一个记录自己进行WinUI项目实践的博客,项目开源地址如下,觉得有帮助的可以去看看,因为项目都开源了,所以保姆级的讲解肯定不如直接看代码来的实在了. 电子脑壳项目地址 为什么叫新 因为之前 ...
- 家居环境监測系统设计(PC上位机版)(手机APP版待定)
下面是我的毕业设计:家居环境监測系统设计(PC上位机临时版.手机app版待定).本系统採用STC12C5A60S2单片机.结合传感器.分别对空气湿度.空气温度.气压.海拔.进水温度.出水温度.光照强度 ...
- 【CC2530入门教程-增强版】基础技能综合实训案例(基础版)-上位机源码
[CC2530入门教程-增强版]基础技能综合实训案例(基础版)-上位机源码 广东职业技术学院 欧浩源 一.需求分析 按照指定参数打开串口,与测控终端建立数据传输通道,并根据应用要求实现程序逻辑,具体 ...
随机推荐
- ExtJS动态改变字体颜色
为按钮设置文本属性,用标签包裹变色. //pButton为按钮IDExt.getCmp('pButton').setText('<span style="color:#FF0000;& ...
- MySQL常用控制台指令
MySQL服务的启用与停止 MySQL服务的启用: net start mysql80 MySQL服务的停止: net stop mysql80 MySQL的登入与退出 数据库的登入: mysql - ...
- Linux部分场景非常有用的命令集1_chattr&ldd&xargs&screen&ssh&磁盘&du
这里不做详细说明或截图,仅作为记录和简单说明.注:可能只针对某一命令部分功能,不包含整个功能,若要查看全部请自行查阅文档或help 1.chattr 当某一文件或目录,不想被无意修改或删除(即使roo ...
- HEARTBLEED 漏洞复现
漏洞分析的两篇文章 https://blog.csdn.net/javajiawei/article/details/82429886 https://xz.aliyun.com/t/1771 set ...
- PHP获取临时文件的目录路径
PHP获得临时文件的文件目录相对路径,能够 根据tempnam()和sys_get_temp_dir()函数来完成. 下边我们运用简单的代码实例,给大伙儿介绍PHP获得临时文件的文件目录相对路径的方式 ...
- 50个SQL语句(MySQL版) 问题十四
--------------------------表结构-------------------------- student(StuId,StuName,StuAge,StuSex) 学生表 tea ...
- vnc远程工具的使用,Windows系统下VNC远程工具的使用教程
服务器管理工具可以作为VNC的客户端进行VNC的相关操作,是一款功能强大的VNC客户端软件!同时,它也可以作为FTP的客户端,来进行FTP的相关操作!它能够连接Windows和Linux系统下的服务器 ...
- python数据类型 列表+元组
一:列表 二:元组 一:列表list: 1.列表中的每个元素都可变的,意味着可以对每个元素进行修改和删除: 2.列表是有序的,每个元素的位置是确定的,可以用索引去访问每个元素: 3.列表的所有元素放在 ...
- Rocket - tilelink - fastProperty
https://mp.weixin.qq.com/s/9nikweQUGG5FO3Z8t6feaw 介绍Parameters中定义的fastProperty的实现.(使用最近的新版本,差别不大) ...
- Java实现 LeetCode 494 目标和
494. 目标和 给定一个非负整数数组,a1, a2, -, an, 和一个目标数,S.现在你有两个符号 + 和 -.对于数组中的任意一个整数,你都可以从 + 或 -中选择一个符号添加在前面. 返回可 ...