PC+PLC通过Modbus协议构建工控系统
一、 概述
工业设备采用HMI+PLC控制是比较常见的方案,随着工业自动化的要求越来越高,现在很多设备都要求接入企业MES系统,MES系统一般为WEB系统,接口形式大部分为HTTP协议,这种传统方案和MES系统接口就比较麻烦。
本文提供一种简单的PC+PLC的工控方案,可以采用C#开发控制端人机交互页面,PLC做控制中心,两者通过Modbus协议通信交换数据。通过这个方案也可以对旧设备进行改造增加MES接口功能。
具体方案如下:
1、 试验下位机采用SIMENS S7-200 Smart,上位机应用程序采用C#开发,软件和PLC之间采用Modbus TCP协议进行通信。
2、 通信时,上位机避免访问PLC的IQ、AI、M等区域,只通过V区域进行数据交换:PLC实时将设备状态信息复制到指定位置,上位机每隔200ms去取一次状态数据,并根据设备状态和用户指令进行相关操作;
3、 上位机将PLC需要执行的动作指示传输到指定位置,PLC每次执行程序扫描时根据数据做出相应反应。PLC应对数据的有效性进行检验,如果检验不通过将拒绝执行动作,并报错。
4、 PLC还需要对一些安全方面的控制进行直接检查,不需要等待上位机指示。包括:急停响应、限位开关、过压等。
二、 方案说明
理论上,通过Modbus协议,上位机是可以直接访问I/O、A/D、D/A等端口的,也就是说可以直接读取输入状态,并控制输出。但我们不建议这种方案,主要有下面几个原因:
1、 PC向PLC询问的时间不可能很及时,我们设定为200ms,这个时间对控制系统来说响应时间有点长了,PLC扫码周期一般只几有个ms,响应较快;
2、 通讯过程存在不稳定性,当通讯异常时,PLC恰好处于一个不安全的状态就太危险了。
所以应保证PLC是具备控制能力的,当上位机向PLC发送命令时,如果出现异常,也应该保证PLC处于一个安全的状态。
三、 试验
我们做一个人简单的试验程序,它只有两个功能
1、 将输入(I0.0)的状态显示在程序界面上;
2、 通过上位机控制输出状态(Q0.0)
PLC部分程序:

一共有3行程序:
第1行:启动一个ModBus Server
说明:
1) MaxIQ:设置IQ的访问范围;
2)MaxAI设置AD的访问范围;
3)HoldStart:参数 HoldStart 为指向 V 存储器中保持寄存器起始位置的指针。通常将该值设置为 &VB0(VB0 地址);
4)MaxHold:参数 MaxHold 设置可用于 Modbus 地址 4xxxx 的 V 存储 器中的字保持寄存器数;
5)即使HoldStart不指向VB0,Modbus寻址仍是从0开始,范围为0~MaxHold,如果超出范围将报告非法数据地址的错误;
第2行:将输入状态映射到V0.0
第3行:将V2.0数据映射到输出状态
上位机界面:

程序通过一个方块的颜色显示PLC输入口的状态;Start和Stop按钮控制PLC输出端口状态。
客户端通过EasyModbusTCP库来实现基础通讯,首先通过Nuget下载依赖库。

状态读取:
int[] words = _modbusClient.ReadHoldingRegisters(0, 10);
byte VB0 = (byte)(words[0] >> 8);
byte VB1 = (byte)(words[00] & 0x00FF);
bool IsEmergencyStop = (VB0 & 0x01) == 1;
说明:
1) 首先从地址0读取10个字(WORD),由于设置了HoldStart为VB0,所以会读取VB0~VB10,共20个字节, words长度为10,每两个字节形成一个int数据,低位在前,高位在后;
2) 通过第一个int数据取得VB0和VB1,然后再取得VB0.0即可得到位信息。
控制输出:
public void StartTest()
{
//V2.0
_modbusClient.WriteSingleRegister(1, 0x0100);
}
public void StopTest()
{
//V2.0
_modbusClient.WriteSingleRegister(1, 0x0000);
}
WriteSingleRegister也是按照WORD来进行寻址的,例如:
WriteSingleRegister(10, 0x1234)
表示:VB20设置为0x12,VB21设置为0x34;
双方交换float类型的实时也是可以的,这里就不详细介绍了。
示例项目地址:https://gitee.com/seabluescn/plcsamples.git
PC+PLC通过Modbus协议构建工控系统的更多相关文章
- PLC模拟量采集模块在工控领域的应用
在工业现场中,往往需要对温度.电流.电压等模拟量进行控制采集,这可以使用PLC对这些数据进行采集,但是如今生产各种PLC模拟量采集模块的厂家非常多,不同类型的PLC都是有自己专属的模拟量采集模块的,不 ...
- 工控安全入门(一)—— Modbus协议
modbus基础知识 modbus协议最初是由Modicon公司在1971年推出的全球第一款真正意义上用于工业现场的总线协议,最初是为了实现串行通信,运用在串口(如RS232.RS485等)传输上的, ...
- 开源纯C#工控网关+组态软件(二)工控网关的实现
一. 工控网关是什么 网关是物联网和工控系统的核心组件.网关起的是承上启下的作用.上即上位机,电脑/触屏监控系统.MES这些:下即下位机,包括PLC.传感器.嵌入式芯片等. 不同厂家的下位机,往往 ...
- [物联网] 电气 & 工控
原理 一次回路和二次回路 一次回路:强电部分(380伏---22万伏),连接发电机.电动机.变压器.电网线路.电网开关.电网避雷器等等 二次回路:弱电部分,指的是控制线路.保护线路.测量线路.计量线路 ...
- 如何快速掌握plc或工控机与其他设备的modbus通讯协议?包括格式与实际过程 RT,本人从事工控行业多年,对于PLC与触摸屏也算比较熟悉,唯独对这个通讯协议比较难理解,请教高人指导,从什么地方开始下手,或者是说如何正确理解报文格式或正确写入
Modbus协议是OSI模型的第七层的应用层通讯协议,定义了不同类型设备间交换信息方式,以及信息的格式. Modbus的工作方式是请求/应答,每次通讯都是主站先发送指令,可以是广播,或是向特定从站的单 ...
- 构建虚拟工控环境系列 - 西门子虚拟PLC
一. 概述 跟随着工控安全一路走来,工控安全市场今年明显有相当大的改善,无论从政策还是客户需求,都在逐步扩大中.但是,搞工控安全研究的人员却寥寥无几.一方面工控安全是个跨学课的技术,需要了解多方面的知 ...
- 工控安全入门之Modbus(转载)
工控安全这个领域比较封闭,公开的资料很少.我在读<Hacking Exposed Industrial Control Systems>,一本16年的书,选了的部分章节进行翻译,以其抛砖引 ...
- Wireshark工控协议
Wireshark是一个强大开源流量与协议分析工具,除了传统网络协议解码外,还支持众多主流和标准工控协议的分析与解码. 序号 协议类型 源码下载 简介 1 Siemens S7 https://git ...
- 工控安全入门(五)—— plc逆向初探
之前我们学习了包括modbus.S7comm.DNP3等等工控领域的常用协议,从这篇开始,我们一步步开始,学习如何逆向真实的plc固件. 用到的固件为https://github.com/ameng9 ...
随机推荐
- Pikachu-XSS模块与3个案例演示
一.概述 XSS是一种发生在前端浏览器端的漏洞,所以其危害的对象也是前端用户. 形成XSS漏洞的主要原因是程序对输入和输出没有做合适的处理,导致"精心构造"的字符输出在前端时被浏览 ...
- MATLAB—信号与系统中的应用
文章目录 一. 理论知识 1.线性系统的响应 2.微分方程的解 Ⅰ.经典解 Ⅱ.完全响应 3.零输入响应 4.零状态响应 5.冲激响应 6.阶跃响应 7.卷积求零状态响应 二.连续信号的MATLAB描 ...
- ASP.NET Core教程:使用Supervisor做ASP.NET Core应用程序守护进程
一.前言 在上一篇文章中,我们讲解了如何在Linux服务器上面部署ASP.NET Core应用程序,并且使用Nginx作为反向代理.我们在Linux服务器上面,是通过ASP.NET Core自宿主的方 ...
- 辗转相除 求最大公约数!or 最小公倍数
求最大公约数和最小公倍数的经典算法--辗转相除法描述如下: 若要求a,b两数的最大公约数和最小公倍数,令a为a.b中较大数,b为较小数,算法进一步流程: while(b不为0) { temp=a%b: ...
- SSM:Mybatis中引入通用mapper
如果你是SSM项目引入通用mapper记得要引入hibernate中的一个hibernate-jpa-2.1-api-1.0.0.Final.jar包(注意必须要Mybatis整合Spring噢,其实 ...
- Spring第一课:核心API(三)
以上是Spring的核心部分,其中需要了解的是:BeanFactory.ApplicationContext[FileSystemXmlApplicationContext.ClassPathXmlA ...
- Consul 入门-运行
HashiCorp Consul 是由 HashiCorp 公司开发的,它是一家专注于 DevOps 工具链的公司,旗下的明星级产品包括 Vagrant.Terraform.Vault.Nomad 以 ...
- vue3.0入门(三)
前言 最近在b站上学习了飞哥的vue教程 学习案例已上传,下载地址 class绑定 对象绑定 :class='{active:isActive}' // 相当于class="active&q ...
- Golang gomail 发送邮件 --初使用
gomail是一个第三方库,可以发送邮件 安装:go get -u github.com/go-gomail/gomail 使用示例: m := gomail.NewMessage() m.SetHe ...
- 5M1E,软件质量管理最佳解决方案
- 如何做好一个产品? - 用户.需求.文化.价值.设计.流程,这些因素缺一不可.- 那么,如何做好产品的质量管理?- 人.机器.物料.方法.环境.测量,这些因素同样缺一不可.能够影响产品质量波动的因 ...