PC + PLC 通过 Modbus协议构建工控系统

0 阅读4分钟

一、概述

工业设备采用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[0] & 0x00FF);
bool IsEmergencyStop = (VB0 & 0x01) == 1;

说明

1、首先从地址0读取10个字(WORD),由于设置了HoldStart为VB0,所以会读取VB0~VB20,共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类型的实数也是可以的,这里就不详细介绍了。

项目地址

gitee.com/seabluescn/…)

关键词

PC、PLC、Modbus TCP、工控系统、C#、S7-200 Smart、MES系统、HMI、数据交互、安全控制、EasyModbusTCP、工业自动化、设备改造、上位机、下位机

最后

如果你觉得这篇文章对你有帮助,不妨点个赞支持一下!你的支持是我继续分享知识的动力。如果有任何疑问或需要进一步的帮助,欢迎随时留言。

也可以加入微信公众号 [DotNet技术匠] 社区,与其他热爱技术的同行一起交流心得,共同成长!

优秀是一种习惯,欢迎大家留言学习!

作者:seabluescn

出处:cnblogs.com/seabluescn/p/15331533.html

声明:网络内容,仅供学习,尊重版权,侵权速删,歉意致谢!