上位机开发之西门子PLC-S7通信实践
写在前面:
就目前而言,在中国的工控市场上,西门子仍然占了很大的份额,因此对于上位机开发而言,经常会存在需要与西门子PLC进行通信的情况。然后对于西门子PLC来说,通信方式有很多,下面简单列举一下:
(1) S7通信:PLC作为服务器,上位机作为客户端
(2) 开放式TCP通信:PLC作为服务器,上位机作为客户端
(3) 开放式TCP通信:PLC作为客户端,上位机作为服务器
(4) ModbusTCP通信:PLC作为服务器,上位机作为客户端
(5) ModbusTCP通信:PLC作为客户端,上位机作为服务器
(6) ModbusRTU通信:PLC作为主站,上位机作为从站
(7) ModbusRTU通信:PLC作为从站,上位机作为主站
(8) Simatic Net OPCDA通信
(9) Simatic Net OPCUA通信
(10) KepServer OPCDA通信
(11) KepServer OPCUA通信
由于篇幅有限,这次仅以西门子S7通信为例,说明下如何基于S7通信协议实现与西门子PLC之间的通信。
1. PLC软件安装及配置
目前西门子PLC主要使用的软件包括STEP7-MicroWIN SMART、SIMATIC STEP7以及TIA Portal。TIA Portal已经完全兼容STEP 7,因此以后应该是STEP 7-MicroWIN SMART作为小型PLC的编程软件,TIA作为中大型PLC的编程软件,这里主要以博途为例进行说明:
如果大家需要软件的,可以关注左上方公众号,或者搜索微信公众号:dotNet工控上位机,关注后发送关键词:200SMART编程软件即可获取STEP 7-MicroWIN SMART V2.5软件,发送关键词:博图V15即可获取TIA V15.1编程软件。
软件安装完成后,PLC的配置也很简单,如果大家手头没有实际的PLC,也可以通过仿真的方式搭建PLC环境,具体可以参考文章:戳↓
基于S7-PLCSIM Advanced搭建S7通信仿真环境
无论使用何种方式,以下两个地方需要进行配置一下:
PLC配置一:需要将PLC的允许来自远程对象的PUT/GET通信访问勾选。
PLC配置二:对于DB块的访问,需要取消勾选优化访问。
2. 通信平台测试
(1)完成以上配置后,就可以通过自己开发的喜科堂通信测试平台软件进行测试,导航栏中选择西门子PLC,然后输入正确的IP地址,在CPU类型中选择自己的CPU类型:
图表 1新阁通信测试平台
(1)输入完成之后,点击建立连接,建立连接之后,日志栏会有连接成功提示。
(2)在读写测试中,输入相应的变量地址及变量类型,即可实现相关变量的通信读写及测试。
图表 2新阁通信测试平台测试
3. 项目级别应用
通信测试平台仅仅只是用于测试通信是否正常,实现正常的单变量数据读取和写入。但是如果是项目级别开发,还需要有一套更完善的通信架构,这里我采用的是自主开发的上位机通信配置一体化软件(简称CMS配置软件)。
(1)通过PLC设备右击选择西门子PLC,在打开的窗体中设置好相关参数:
设备名称:根据实际情况填写(无特殊字符即可)
设备备注:根据实际情况填写(无特殊字符即可)
IP地址:根据实际PLC的IP地址填写
机架号、插槽号:根据实际PLC的情况填写
PLC类型:根据实际PLC的情况填写
连接超时:PLC连接时的超时时间,默认是2000ms
容错次数:判断连接故障的容错次数,默认为1,即表示某次读取出错,即判断连接故障,根据实际情况可以适当放大
重连周期:通信过程中,出现断线时,重连的周期,默认是5000ms
图表 3创建PLC
(2)在PLC设备下,右击添加通信组,根据需要填写相应的存储区及起始地址及长度:
图表 4添加通信组
(3)通信组下面,根据实际情况配置相应的变量,输入开始地址及变量类型即可,变量地址会自动变换,这里可以输入比例系数及偏移量,用于做线性变换使用:
图表 5添加变量
(4)对于变量配置,左下角会有一个报警归档配置,主要用于配置该变量的报警类型、归档方式及设定限制:
图表 6报警归档配置
(5)完成上述配置后,可以点击保存配置,再点击启动运行,即可实现实时通信:
图表 7实时通信
(6)同时可以通过另存为,存储为一个配置文件的形式,再基于配置dll,可以通过快速方式实现配置解析及通信数据解析,这样整个项目的通信框架即可搭建完成。
4. 整体总结
本文主要针对西门子PLC的通信配置、通信配置及项目应用做了较为详细的描述,希望可以给一些想要去开发西门子PLC项目的同学一些帮助。这样的一套思路同样适用于其他品牌的PLC,我们旨在节约大家开发项目中在通信方面的时间,而将更多的精力投放在项目工艺开发中。
写在后面:
很多小伙伴想要CMSPro软件来进行学习,因此综合考虑,现提供CMSPro软件试用版供大家学习使用,试用版功能方面可能会存在部分删减,但是可以满足大部分小伙伴的学习需求,目前仅针对本公众号粉丝,具体获取方式,通过关注本公众号:dotNet工控上位机,发送关键词:CMSPro试用,即可获取。同时我们的通信库xktComm.dll也提供试用版,大家可以通过nuget搜索xktComm,安装使用,最后祝大家工作生活愉快。
更多精彩内容:
(点击即可阅读)
上位机开发之西门子PLC-S7通信实践的更多相关文章
- 上位机开发之三菱FX3U以太网通信实践
上次跟大家介绍了一下上位机与三菱Q系列PLC通信的案例,大家可以通过点击这篇文章:上位机开发之三菱Q系列PLC通信实践(←戳这里) 今天以三菱FX3U PLC为例,跟大家介绍一下,如何实现上位机与其之 ...
- 上位机开发之三菱Q系列PLC通信实践
经常关注我们公众号或者公开课的学员(如果还没有关注的话,左上角点击一波关注)应该知道,我们会经常使用西门子PLC,其实对于其他品牌的PLC,我们都会讲到,包括三菱.欧姆龙.基恩士.松下及国产台达.信捷 ...
- 【专题教程第8期】基于emWin模拟器的USB BULK上位机开发,仅需C即可,简单易实现
说明:1.如果你会emWin话的,就可以轻松制作上位机.做些通信和控制类上位机,比使用C#之类的方便程度一点不差,而且你仅会C语言就可以.2.并且成功将emWin人性化,可以做些Windows系统上的 ...
- Winform 快速开发框架,上位机开发,工控机程序开发,CS程序开发
1.当客户让你做个CS程序时,当你手上一穷二白,所有都要重复造轮,你是不是很烦. 2.但如果有一个通用的,快速开发框架,就可以把你从这些基础的工作解救出来,你专注做业务就好了. 3.本人其中一个项目的 ...
- USBCAN的使用和上位机开发(MFC)
USBCAN使用手册 参见:https://blog.51cto.com/12572800/2062839 1. USB CAN软件安装与硬件接线 USB CAN是常用的CAN测试工具.它的软件资料存 ...
- C#上位机开发(二)—— Hello,World
上一篇大致了解了一下单片机实际项目开发中上位机开发部分的内容以及VS下载与安装,按照编程惯例,接下来就是“Hello,World!” 1.新建C#项目工程 首先选择新建Windows窗体应用(.NET ...
- 医疗器械c#上位机开发指引教程
此教程面向的读者:对医疗器械上位机编程有兴趣,或者急需了解医疗器械(尿常规.血液分析.生化.心电.B超等医疗下位仪器)的编程流程.编程细节的程序员. 1.得到仪器协议 当我们需要与医疗器械等下位机数据 ...
- 周立功USBCAN-II 上位机开发(MFC)
使用的USB转CAN的设备是周立功的USBCAN-II,在购买的时候,会有上位机二次开发的库文件.例程和API文档等材料,可以参考. 1.库函数的调用 首先,把库函数文件都放在工作目录下.库函数文件总 ...
- C#上位机开发(一)—— 了解上位机
在单片机项目开发中,上位机也是一个很重要的部分,主要用于数据显示(波形.温度等).用户控制(LED,继电器等),下位机(单片机)与 上位机之间要进行数据通信的两种方式都是基于串口的: USB转串口 — ...
随机推荐
- IM聊天教程:发送图片/视频/语音/表情
经常有朋友问起,如何在IM即时通讯中实现发送图片.视频.语音和表情? 为此,小编特意写了一个vue版本的Demo,实现了图片视频文件和表情的的发送,参考这个Demo源代码,相信你就可以轻松的用Unia ...
- GraphQL-- 使用Apollo Server搭建Node服务端
一.关于Apollo Server Apollo Server是一种使用JS创建GraphQL服务端的一个方案.它的兼容性比较好,可以很好地和GraphQL客户端进行兼容.同时它可以 独立作为服务端进 ...
- [Asp.Net Core] Blazor WebAssembly - 工程向 - 如何在欢迎页面里, 预先加载wasm所需的文件
前言, Blazor Assembly 需要最少 1.9M 的下载量. ( Blazor WebAssembly 船新项目下载量测试 , 仅供参考. ) 随着程序越来越复杂, 引用的东西越来越多, ...
- 对比Memcached和Redis,谁才是适合你的缓存?
Memcached vs Redis 近期公司采购软件,评估时,某软件谈到使用了 Memcached 和 Redis 缓存.在本文中,将研究这两个流行的缓存的异同,方便理解和记忆. 1. Memcac ...
- 查找最大元素(hdu2025)
输入方式:直接循环输入不带空格的未知长度的字符串. 思考:直接循环输入未知长度的字符串,用while(gets_s()),循环内外不用getchar().(注意,每次字符串都是以整体输入) #incl ...
- Python之日志处理(logging模块二实战)
实战篇 import logging import logging.handlers LOG_PATH = r'./' def logConfig_1(): ''' 配置 log 输出到文件 : fi ...
- Python - 常用的PyCharm的快捷键和使用场景介绍
关于PyCharm的快捷键,由于数量众多,差不多有100个,相信几乎没有人会记住所有,每个人都会有自己顺手的几个,这里我将自己用着顺手,不别扭的快捷键分享出来,同时分享在哪里可以找到所有的快捷键. 一 ...
- Java——删除Map集合中key-value值
通过迭代器删除Map集合中的key-value值 Iterator<String> iter = map.keySet().iterator(); while(iter.hasNext() ...
- opencv3学习1:opencv3.4.10与vs2017环境配置
原教程网址:https://jingyan.baidu.com/article/dca1fa6f13bd55f1a44052b9.html 具体教程网上很多,我也相信大家的搜素能力,作为一个初入C++ ...
- 0511Object类和异常
Object类和异常 [要点] toString方法:将类中要打印的信息转换为自定义格式的打印内容 [返回的是当前对象对应的完整包名.类名@当前对象在内存空间首地址(十六进制)] equals方法 p ...