vlambda博客
学习文章列表

【精讲版】上位机C#/.NET与西门子PLC通信

据某份数据不完全统计,目前中国市场十大国际PLC品牌如下(避免争议,排名不分先后):

西门子、施耐德、欧姆龙、三菱、罗克韦尔、松下、ABB、倍福、艾默生、GE

再盘点一下中国市场十大国内PLC品牌:

和利时、台达、汇川、信捷、永宏、丰炜、南大傲拓、厦门海为、黄石科威、上海正航

当代电气工程师之所以这么厉害(Ku Bi),一部分原因大概就是PLC品牌太多了,终其一生,可能都学不完!

以上均为有感而发,不作为今天的主题,今天的主题主要是跟大家介绍一下,如何站在电气工程师的角度上,实现C#/.NET与西门子PLC之间的通信。




N0.01  准备工作



如果想实现C#/.NET与西门子PLC之间的通信,首先要对西门子PLC有一定的了解,西门子PLC目前市场上主要使用的PLC型号包括:S7-200S7-200SmartS7-300S7-400S7-1200S7-1500,西门子PLC的主要存储区包括V区(在通信协议里V区即DB1)、M区、I区、Q区、DB区,其他的C区和T区,由于用得比较少,而且可以通过程序中转,暂不涉及。

当然,如果我们手头有PLC实际硬件,当然非常方便,可以直接测试,但是对于如果没有PLC的同学来说,我们也给大家提前准备好了解决方案:戳↓

    搭建好仿真环境后,只需要注意以下几个地方:
       一、PLC 配置中,必须勾选允许来自远程对象的 PUT/GET 通信访问。

【精讲版】上位机C#/.NET与西门子PLC通信

图表 1允许Put Get访问

    二、如果需要访问DB块,必须将DB块属性中的优化的块访问勾选去除。

【精讲版】上位机C#/.NET与西门子PLC通信

图表 2 DB块去优化访问

三、如果是通过PLCSIM-Advanced搭建的仿真环境,必须将整个解决方案的属性中,保护栏里的块编译时支持仿真勾选上。

【精讲版】上位机C#/.NET与西门子PLC通信

图表 3块编译支持仿真

    以M存储区为例,一般M区最大字节是8192个,如果你读取MD9000,一定是读不到的。

    以DB存储区为例,如果你尚未创建DB1,你读取DB1.DBD0,一定也是读不到的。

    以DB存储区为例,如果你DB1只有200个字节范围,你读取DB1.DBD200,也是读不到的。

    只要遵从以上四个原则,西门子PLC通信基本上就不存在硬件或者配置上的问题了。


N0.02  PLC基础通信



【精讲版】上位机C#/.NET与西门子PLC通信

图表 4 DB1变量数值

【精讲版】上位机C#/.NET与西门子PLC通信

图表 5 DB1字符串数据

第一步:单个变量的读取

通过C#调用通信库xktComm.dllNuget搜索xktComm下载安装),实现对PLC单个变量的读取,结果如下图所示:

【精讲版】上位机C#/.NET与西门子PLC通信

图表 6 PLC单个读取

【精讲版】上位机C#/.NET与西门子PLC通信

图表 7 PLC单个字符串读取

第二步:单个变量的写入


【精讲版】上位机C#/.NET与西门子PLC通信

图表 8 PLC单个写入

【精讲版】上位机C#/.NET与西门子PLC通信

图表 9 PLC单个字符串写入

第三步:多个变量的读取

对于多个变量的读取,需要填写读取长度,下面通过将读取长度改成4,一次性将DB1.DB0-DB1.DBD12读取出来,结果如下图所示

【精讲版】上位机C#/.NET与西门子PLC通信

图表 10 PLC多个读取

第四步:多个变量的写入

对于多个变量的写入,则不需要填写读取长度,直接在写入数值中,用空格分隔,写入相应的数值,下面以将DB1.DBD0-DB1.DBD12改成1.23.45.67.8为例,将写入数值改成1.2  3.4  5.6  7.8,结果如下图所示:

【精讲版】上位机C#/.NET与西门子PLC通信

图表 11 PLC多个写入

【精讲版】上位机C#/.NET与西门子PLC通信



N0.03  PLC高级通信



如果PLC基础通信就能满足大家的项目需求的话,那么PLC高级通信一定可以让大家喜出望外。

PLC 高级通信主要应用场合是对于多个不连续的存储区或者多个不连续的变量进行一次性读取和写入,这一点,似乎只有西门子 S7 协议支持,其他品牌 PLC 均不支持。
第一步: 多个不连续变量读取

下面以读取MD10MD100MD200DB1.DBD0DB1.DBD8为例,进行测试,测试结果如下图所示:

【精讲版】上位机C#/.NET与西门子PLC通信

图表 12 PLC多变量同时读取

【精讲版】上位机C#/.NET与西门子PLC通信

图表 13 PLC监控表

第二步:写入个不连续变量读取

【精讲版】上位机C#/.NET与西门子PLC通信

图表 14 PLC多变量同时写入

【精讲版】上位机C#/.NET与西门子PLC通信

图表 15 PLC多变量写入结果对比

通过反馈结果及PLC数据对比,实测证明可以一次将多个变量同时写入PLC,并且通过判断耗时仅11ms,说明报文是一次性写入的。总而言之,PLC高级通信的合理应用会大大提高上位机的通信效率。


N0.04  整体总结



本文主要针对C#与西门子PLC通信做了较为详细的描述,相信对于很多电气工程师,尤其是以西门子PLC为主的电气工程师来说,会有很大帮助。近几年随着人工智能、物联网的流程,工控行业发生了很大的变化,每一位电气工程师都应该及时作出调整,至少学习一门高级编程语言,未雨绸缪,以更好的姿态来应对即将到来的智能制造2025

【精讲版】上位机C#/.NET与西门子PLC通信



 

谢谢您的阅读


END










课程内容:上位机C#/.NET与西门子PLC通信详解

课程时间:今晚20:00

主讲人:付老师

长按扫码进入直播↓


更多精彩内容:

(点击即可阅读)

点击左下角“阅读原文”,了解更多!