西门子PLC与上位机通信方案梳理
一、前言
大家好!我是付工。
西门子PLC是工控领域使用非常多的一种PLC品牌,对于上位机开发人员来说,对于西门子PLC的通信,我们一般可以采取哪些通信方式呢?
今天跟大家分享一下上位机实现与西门子PLC的通信方案。
二、串口通信
西门子PLC早期主要以S7-200、S7-300/400为主,后面逐步被S7-200Smart、S7-1200/1500所替代。
目前只有S7-200与S7-200Smart是自带串口,接口标准为RS485。
如果是其他型号,想要实现串口通信,需要增加相应的串口通信模块。
西门子PLC的串口通信协议主要有2种,一种是西门子的PPI协议,另一种是ModbusRTU协议。
- 西门子PPI协议是一个不开放的协议,可以通过抓包来进行报文分析,但是一般不推荐使用,因为PPI协议是一个需要二次确认的协议,使用时比较麻烦。
- 西门子PLC也支持ModbusRTU协议,提供Modbus库指令,直接调用即可,但是会涉及到一定的编程。
- 如果选择ModbusRTU协议,需要区分主站从站,一般来说,上位机与PLC通信,上位机作为主站,PLC作为从站。
三、以太网通信
以太网是西门子PLC主要的通信方式,目前主流的S7-200Smart、S7-1200/1500都内置以太网接口,上位机与西门子PLC实现以太网通信主要有S7通信、ModbusTCP通信、开放式TCP通信以及OPCUA通信。
- S7协议是西门子PLC的私有协议,虽然不开放,但是目前有很多开源免费的通信库可以使用,.Net框架下比较推荐使用s7netPlus、sharp7。如果想要实现标签通信,S7协议有个升级版叫做S7Plus协议,可以实现标签通信,目前尚未成熟,项目上使用较少。
- 西门子PLC同样支持ModbusTCP通信,会有对应的Server和Client库指令,一般来说,上位机与PLC通信,西门子PLC作为ModbusTCPServer,上位机作为ModbusTCPClient。
- 开放式TCP通信,就是我们常说的自由口通信,这个主要是针对一些自定义协议的情景,自由度较高,但是对开发人员的要求也较高。上位机与PLC之间进行开放式TCP,上位机可以作为TCPClient或者TCPServer,PLC需要编写对应的TCPServer和TCPClient程序。
- OPCUA通信,对于S7-1200、S7-1500的部分型号,可以支持OPCUA通信,一般来说,PLC作为OPCUA服务器,上位机作为OPCUA客户端,OPCUA也是一种基于标签名称的通信方式。
四、OPC通信
OPC通信是工业控制中常用的一种通信方式,OPC相当于是中间件,由OPC软件对接PLC,然后开放一个OPC接口给上位机进行使用。西门子PLC常用的OPC通信方案有以下几种:
- PC Access系列:西门子针对S7-200提供PC-Access软件,针对S7-200 Smart提供PC-Access Smart软件,可以直接通过这些软件实现OPC通信。
- Simatic Net系列:Simatic Net是西门子主推的OPC软件,支持西门子全系列,通过Simatic Net可以支持OPCUA和OPCDA通信接口。
- KepServer软件:KepServer同样作为一款商业OPC软件,在国内使用率非常高,同样也支持西门子全系列,通过KepServer也可以支持OPCUA和OPCDA通信接口。
五、如何选择
在以上众多的通信方式中,我们该如何选择?
如果我们要实现串口通信,优先选择ModbusRTU,其次考虑PPI,最后考虑OPC方式。
如果我们要实现以太网通信,优先选择S7协议,其次考虑ModbusTCP和开放式TCP,最后考虑OPC方式。
S7通信协议最大的优势在于不用编写PLC程序,且覆盖面较广,只要是西门子PLC,无论是S7-200/300/400,还是S7-200Smart/1200/1500,只要PLC具备以太网接口,均支持S7通信协议。
虽然S7通信协议不需要编写PLC程序,但仍然需要进行一定的配置,具体如下:
- 勾选允许Put/Get:PLC侧需要设置勾选允许来自远程对象的Put/Get通信访问
- DB块去除优化访问:如果要与DB块数据通信,需要要去除DB的优化的块访问
- 务必保证通信地址是有效地址:如果你要读取DB存储区,必须要提前创建好DB存储区,必须保证读取的必须是有效地址,其他存储区也不能超过范围。
- 调整通信负载:如果以上均没问题,可以适当调整一下通信负载参数。
西门子PLC与上位机通信方案梳理的更多相关文章
- 深度剖析西门子PLC的开放式TCP通信
对于自控或电气工程师来说,西门子PLC是每个人都非常熟悉的一款PLC品牌:而对于上位机开发工程师来说,Socket通信或TCP/IP协议也是必须要掌握的一种通信方式.刚好手头有一款西门子的200Sma ...
- UR机器人通信--上位机通信(python)
一.通信socket socket()函数 Python 中,我们用 socket()函数来创建套接字,语法格式如下: socket.socket([family[, type[, proto]]]) ...
- STM32与匿名上位机通信——使用串口DMA实现
背景:匿名上位机功能强大,这里想要采用匿名上位机输出一些调试信息,以波形的形式显示,方便观察和调试. 平台: 硬件:STM32F405RGT6 通信:2.4G zigbee无线串口收发模块 CC253 ...
- PLC与上位机的socket通讯——上位机C#程序(二)
C#的网口通信 一.命令行 客户端程序:using System;using System.Collections.Generic;using System.Linq;using System.Tex ...
- USB上位机通信:CyAPI
至今的工作中,有USB接口通信的需求,记录一下. 建立一个USB设备对象 CCyUSBDevice *USBDevice = new CCyUSBDev(Handle): 打开USB设备 一个USB设 ...
- PLC与上位机的socket通讯——ABB机器人程序(三)
源程序:https://github.com/935094505/ABB-socket-communication 程序范例 觉得有帮助,别忘了打赏下
- 上位机开发之三菱Q系列PLC通信实践
经常关注我们公众号或者公开课的学员(如果还没有关注的话,左上角点击一波关注)应该知道,我们会经常使用西门子PLC,其实对于其他品牌的PLC,我们都会讲到,包括三菱.欧姆龙.基恩士.松下及国产台达.信捷 ...
- 【精讲版】上位机C#/.NET与西门子PLC通信
618来啦 亲们,腾讯课堂101机构打榜了,快来助力<新阁教育>,<免费赠送课程>! 1.手机QQ(微信请也来一遍)扫下方二维码↓,找到<新阁教育> 2.点击“支持 ...
- 上位机开发之西门子PLC-S7通信实践
写在前面: 就目前而言,在中国的工控市场上,西门子仍然占了很大的份额,因此对于上位机开发而言,经常会存在需要与西门子PLC进行通信的情况.然后对于西门子PLC来说,通信方式有很多,下面简单列举一下: ...
- 上位机开发之三菱FX3U以太网通信实践
上次跟大家介绍了一下上位机与三菱Q系列PLC通信的案例,大家可以通过点击这篇文章:上位机开发之三菱Q系列PLC通信实践(←戳这里) 今天以三菱FX3U PLC为例,跟大家介绍一下,如何实现上位机与其之 ...
随机推荐
- HDK Include Header File (1.7)
Download 1.7 | 1.7.1 | 1.7.2 1.7.1 使用方法:编译选项->目录->C++包含文件->添加 [解压目录]\include 1.7.2 使用方法:编译选 ...
- python 属性装饰器和对应的setter方法,属性的封装和安全性控制
当我们在类中定义属性时,通常希望能够对属性的读取和写入进行控制,以确保数据的完整性和安全性.属性装饰器和对应的setter方法提供了一种实现属性封装和安全性控制的方法. 属性装饰器是Python的一种 ...
- Java项目笔记(四)
1.包装类判断是否相等时,建议用equals 而不是 == 号 2.+= 默认包含了强制类型转换,单纯的s = s+1;编译是无法通过的,因为1属于int类型,必须显示声明强制类型转换 short s ...
- Hadoop完全分布式搭建,基于乌班图系统
因为现在集成的工具很多,建议在接触这一块的过程中还是自己找几个主机,亲手搭一遍集群,更好的熟悉底层!本文只是搭建的过程没有理论!手搭集群时先将各节点网络.ssh配置好!然后在一台机子上操作配置文件,直 ...
- IP地址集中管控:从分配规划、现网管理到合规性监测、准入控制全周期监管
当前,网络已成为企业必不可少的资源,企业网络系统也在不断扩展,IP地址数量不断增长,随之而来的是IP地址管理问题凸显.如何高效集中地管理网络中的IP地址,IP如何有效划分,成为影响企业网络可用性和质量 ...
- 智慧医院IT运维方案,全局网络态势感知
随着医疗卫生体制改革不断深化,卫生行业信息化应用不断普及,大数据.AI.医疗物联网等技术的应用,快速推动"智慧医院"建设.以HIS(医院信息系统).EMRS(电子病历系统).PAC ...
- RTPS代理与转发服务
Proxy介绍 利用libevent实现网络连接和线程池.通过tcp连接的方式实现rtsp消息转发,再通过udp连接进行rtp与rtcp转发.报文解析使用到了Qt库.请尽量使用qmake进行编译.源码 ...
- placement new --特殊的内存分配
placement new 是 C++ 中的一种特殊的内存分配技术,用来在指定的内存地址上直接构造对象.与普通的 new 运算符不同,placement new 并不分配新的内存,而是在已经分配好的内 ...
- USB2.0设备的休眠挂起及远程唤醒
USB可见设备状态,分为连接(Attached),上电(Powered),默认(Default),地址(Address),配置(Configured)和挂起(Suspended)6个状态.所谓可见,即 ...
- es6有哪些新特性?
1. let 和 ocnst ,可以定义块级作用域 2. 新增了箭头函数,箭头函数简化了函数定义的定义 3.新增了promise解决回调地狱问题 ps:回调地狱是我们异步请求服务器数据时,通过then ...