据某份数据不完全统计,目前中国市场十大国际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的报文抓取及剖析,之前也写过一篇专门的文章进行了说明:戳↓

西门子S7通信协议底层原理及抓包分析

                                                                                    图表 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。

扫码关注公众号↓

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

  1. 工业监测自动化上位机软件开发,支持PLC通信,以及与各类品牌 的电流表、频谱仪、电子负载、功率计等通信

    工业监测自动化上位机软件开发,支持PLC通信,以及与各类品牌 的电流表.频谱仪.电子负载.功率计等通信 本人拥有十多年工业项目.仪器仪表产品.教学产品开发以及培训经验,精通STM32.Msp430等各 ...

  2. plc 上位机编译算法_西门子PLC的开放式TCP通信

    对于自控或电气工程师来说,西门子PLC是每个人都非常熟悉的一款PLC品牌:而对于上位机开发工程师来说,Socket通信或TCP/IP协议也是必须要掌握的一种通信方式. 相比较而言,西门子PLC对Soc ...

  3. 信捷plc485通信上位机_上位机开发之三菱FX3U以太网通信实践

    上次跟大家介绍了一下上位机与三菱Q系列PLC通信的案例,大家可以通过点击这篇文章: dotNet工控上位机:上位机开发之三菱Q系列PLC通信实战​zhuanlan.zhihu.com 今天以三菱FX3 ...

  4. 服务器网页版上位机设计 - 03 - 上位机 (完结)

    服务器网页版上位机设计 03 上位机 (完结) 本设计主要涉及三个方面: 服务器,网页版,上位机. 书接上回,介绍完网页页面的设计,现在来说说上位机的功能设计. 也就是js文件的内容编写. 1.获取h ...

  5. stm32单片机 北斗GPS 定位 vb上位机显示。 蓝牙主从级通信

    stm32单片机 北斗GPS 定位 vb上位机显示. 蓝牙主从级通信. 主单片机获取GPS北斗模块定位信息后,通过蓝牙发送给从模块. 从蓝牙模块,从模块通过串口讲定位信息发送给vb上位机. 上位机实时 ...

  6. 信捷plc485通信上位机_基于Snap7实现与西门子PLC通信

    如果你对西门子PLC通信或者上位机开发稍微有一点研究的话,应该对Snap7有所耳闻. Snap7是一个基于以太网与西门子S7系列PLC通信的开源库,在世界领域应用很广.但也许是因为资料比较少,而且很多 ...

  7. C#上位机 西门子PLC通信 S7NET协议

    C#上位机 西门子PLC通信 S7NET协议 1,西门子PLC网口通信,可通信S7-200smart,S7-1200,S7-1500. 2,例子简单易懂,自己写的程序,可提供部分 3,现场实测有效. ...

  8. c#上位机开发(三)——串口通信上位机开发1

    今天主要做一个跟市面上差不多的稍微简单点的上位机软件,效果如下图所示 1.功能概述 (1)端口扫描,主要是扫描出可用的端口用来连接 (2)波特率的选择,使用一个下拉框进行选择相应的波特率数值 (3)发 ...

  9. 基于C#开发PLC上位机(一)—三菱PLC使用MX通信

    目录 一.开发工具选用 二.通讯示例 1.启动GX Works3和仿真功能 2.启动MX Component 3.启动VS工程 三.结语 PLC用着用着,就突然很好奇PLC是如何和上位机通信的.上位机 ...

  10. 基恩士上位机链路通讯_基恩士PLC通讯源码

    基恩士PLC KV7000,8000还是比较好用的,那如何和上位机通讯,我把源码写出来了.采用上位链路通讯,基恩士官方给我们留了8501端口,这个端口有意思刚好是我生日.基恩士的资料我觉得做的特别好, ...

最新文章

  1. (转载)把syslog接收的远程日志从/var/log/messages中分开
  2. jQuery的Validate插件
  3. 把骆驼命名法的变量,变为大写字母变小写且之前加下划线
  4. 紫书 例题8-10 UVa 714 (二分答案)
  5. 前端学习(1737):css3实现loading效果
  6. linux 15秒 搭建VSFTPD文件服务器
  7. ZBrush中的Clip剪切笔刷怎么快速运用
  8. 水仙花数c语言程序vb,VB编程:求水仙花数
  9. 【数据分析认知课(一):数据分析思维观】——读后感
  10. inode磁盘满了清理
  11. maven的pom文件引入依赖报错:提示无法处理 Cannot resolve...
  12. ArcEngine中的ICommand和ITool(转载)
  13. 怎么制作出一张证件照?分享几种好用的证件照制作方法
  14. html显示隐藏表格内外边框
  15. 学习HTML+CSS知识点
  16. LeetCode常用算法模式大厂面试题整理
  17. 计算机无法在安全模式下完成安装,最近我的电脑安装不了软件,总提示说Windows在安全模式下运行? 爱问知识人...
  18. 【网络时间同步】基于马尔科夫随机场最大后验估计和Gardner环的无线传感器网络时间同步算法matlab仿真
  19. MATLAB导入Excel时间格式
  20. CSS非布局样式和重点内容

热门文章

  1. matlab 读取 Microsoft Excel 电子表格文件不推荐使用 xlsread
  2. docker 容器备份mysql shell脚本
  3. 中望CAD工具栏消失不见的解决方案
  4. ClickHouse安装与引擎
  5. 【工具】(九):Mac工具整理
  6. 七上八下猜数字_猜数字教案
  7. VS2017社区版试用30天过期重新激活方法
  8. JAVA数据库宾馆住宿系统_基于Java的酒店入住管理系统的设计与实现(含源文件).doc...
  9. Python数据处理Tips数据预处理操作方法汇总
  10. linux下高性能服务器pdf,Linux高性能服务器编程(pdf+epub+mobi+txt+azw3)