【PLC 网络通信及 MODBUS TCP通信测试】

news2024/11/14 23:21:35

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言
  • 一、PLC的通信方式有?
  • 二、PLC网络通信
    • 1.MODBUS TCP
  • 三、安装虚拟软件
    • 2.测试
      • 2.1 测试程序
      • 2.2 对接虚拟软件
  • 总结


前言

提示:这里可以添加本文要记录的大概内容:

项目用到PLC 需要理解PLC的通信


提示:以下是本篇文章正文内容,下面案例可供参考

在这里插入图片描述

一、PLC的通信方式有?

PLC的通信方式主要有以下几种:

  1. 串行通信:这是PLC最常用的通信方式,通过串行口进行数据交换。PLC可以通过RS-232、RS-485、RS-422等标准串行口,或者USB接口与其他设备进行通信。
  2. 以太网通信:这是目前最常用的通信方式,通过以太网口进行数据交换。PLC可以通过以太网口与计算机、其他PLC、HMI等设备进行通信。
  3. 现场总线通信:这是一种特殊的通信方式,通过专用的现场总线网络进行数据交换。常见的现场总线协议包括Modbus、Profibus等。
  4. 无线通信:这是近年来开始流行的通信方式,通过无线网络进行数据交换。PLC可以通过WiFi、ZigBee、LoRa等技术与其他设备进行无线通信。

在选择PLC的通信方式时,需要根据具体的通信需求和应用场景来选择最合适的通信方式。例如,对于短距离、低速率的通信,可以选择串行通信或现场总线通信;对于长距离、高速率的通信,可以选择以太网通信或无线通信。

二、PLC网络通信

1.MODBUS TCP

PLC MODBUS TCP是一种基于以太网的通信协议,用于实现可编程逻辑控制器(PLC)之间的数据交换。它结合了以太网物理网络和网络标准TCP/IP,以及MODBUS作为应用协议标准的数据表示方法。

在PLC MODBUS TCP通信中,数据被封装在以太网TCP/IP数据包中,而不再带有数据校验和地址。通信双方通过服务器与客户机的通信方式进行数据交换,其中PLC作为服务器端等待来自客户端的请求,而客户端则通过读写操作与服务器进行数据交换。

在PLC MODBUS TCP中,地址分配和数据读写操作非常重要。地址分配包括对离散输入寄存器、线圈寄存器、保持寄存器、输入寄存器等的设置,以及对起始地址和数据长度的分配。在数据读写操作中,需要指定服务器IP地址、服务器端口、读写请求类型、起始地址、数据长度等参数。

需要注意的是,PLC MODBUS TCP不提供加密或安全性选项,这可能会在自动化系统中造成潜在的安全漏洞。因此,在实际应用中,需要采取额外的安全措施来保护通信过程和数据安全。

三、安装虚拟软件

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

https://zhuanlan.zhihu.com/p/529828725
破解

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

https://www.modbustools.com/

2.测试

2.1 测试程序

.pro 添加
QT += serialbus

cpp添加

#include "widget.h"
#include "ui_widget.h"
#include <QModbusTcpClient>
#include <QModbusDataUnit>
#include <QModbusReply>
#include <QMessageBox>
#include <QDebug>
Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);

    modbusClient = new QModbusTcpClient(this);
    modbusClient->setConnectionParameter(QModbusDevice::NetworkPortParameter, 503); // 设置Modbus端口
    modbusClient->setConnectionParameter(QModbusDevice::NetworkAddressParameter, "127.0.0.1"); // 设置Modbus服务器地址

    if (!modbusClient->connectDevice()) {
            qDebug() << "连接失败";
        }
}

Widget::~Widget()
{
    if(modbusClient->state() == QModbusTcpClient::ConnectedState)
    {
        modbusClient->disconnectDevice();
    }
    delete ui;
}


void Widget::on_ReadBtn_clicked()
{
    ReadValue();
}

void Widget::ReceiveData()
{
  QModbusReply* reply = (QModbusReply*)(sender());
  QModbusDataUnit unit = reply->result();
  reply->deleteLater();
  if(unit.valueCount() > 0)
  {
      ui->lb_templbtemp->setText(QString::number(unit.value(0)));
  }
}

void Widget::on_WriteBtn_clicked()
{
    if(ui->tb_Line->text() == "")
    {
        QMessageBox::warning(this,"提示","请输入设定值!");
        return;
    }
    if(modbusClient->state() == QModbusDevice::ConnectedState)
    {
        QModbusDataUnit writeUnit(QModbusDataUnit::HoldingRegisters, 0, 1); // 写入一个寄存器
        writeUnit.setValue(0,ui->tb_Line->text().toUInt());
        if (auto *reply = modbusClient->sendWriteRequest(writeUnit, 1))
        {
          reply->deleteLater();
          //ReadValue();
        }
    }
}

void Widget::ReadValue()
{
    if(modbusClient->state() == QModbusDevice::ConnectedState)
    {
        QModbusDataUnit readUnit(QModbusDataUnit::HoldingRegisters, 0, 1); // 读取一个寄存器
        if (auto *reply = modbusClient->sendReadRequest(readUnit, 1))
        {
           if (!reply->isFinished())
           {
          // connect(reply,QModbusReply::finished,this,ReceiveData);
           connect(reply, &QModbusReply::finished, this, &Widget::ReceiveData);
           return;
           }
          reply->deleteLater();
        }
        else {
               // qDebug()<< "提前退出";
            qDebug() <<"提前推出";
            }
    }
}


2.2 对接虚拟软件

配置软件
在这里插入图片描述
测试自己的软件
在这里插入图片描述
实现读写
在这里插入图片描述

总结

测试MODBUS TCP

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1414748.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2024年人工智能产业十大发展趋势

2024年人工智能产业十大发展趋势 技术变革1. 多模态预训练大模型将是人工智能产业的标配2. 高质量数据愈发稀缺将倒逼数据智能飞跃3. 智能算力无处不在的计算新范式加速实现 应用创新4. 人工智能生成内容&#xff08;AIGC&#xff09;应用向全场景渗透5. 人工智能驱动科学研究&…

第8章 异常

第8章 异常 学习目标 能够辨别程序中异常和错误 说出异常的分类 说出虚拟机处理异常的方式 列出常见的5个运行时异常 列出常见的5个编译时异常 能够使用try…catch关键字处理异常 能够使用throw抛出异常对象 能够使用throws关键字处理异常 能够自定义异常类 能够处理自定义异常…

【精选推荐】3款强大的API渗透测试工具

1免责声明 请勿利用文章内的相关技术从事非法测试&#xff0c;由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失&#xff0c;均由使用者本人负责&#xff0c;作者不为此承担任何责任。工具来自网络&#xff0c;安全性自测。 2前言 给大家介绍三款优秀的…

单片机学习笔记---独立按键控制LED显示二进制

这节我们来实现独立按键的第三个功能&#xff0c;独立按键控制LED显示二进制 新创建一个工程文件&#xff0c;然后上来我们就要把基本框架写好&#xff0c;这是基本的习惯 老规矩&#xff0c;然后把Delay 1ms的代码复制过来 复制过来后改造一下&#xff1a; 把1ms删掉&#x…

类和对象 第四部分:友元

在程序里&#xff0c;有些私有属性&#xff0c;也想让类外特殊的一些函数或者类进行访问&#xff0c;就需要用到友元的技术 友元的目的就是让一个函数或者类&#xff0c;访问另一个类私有成员 友元的关键字为friend 一.友元的三种实现 &#xff08;一&#xff09;全局函数友元 …

【Mybatis的一二级缓存】

缓存是什么&#xff1f; 缓存其实就是存储在内存中的临时数据&#xff0c;这里的数据量会比较小&#xff0c;一般来说&#xff0c;服务器的内存也是有限的&#xff0c;不可能将所有的数据都放到服务器的内存里面&#xff0c;所以&#xff0c; 只会把关键数据放到缓存中&#x…

解决:‘chromedriver’ executable needs to be in PATH

解决&#xff1a;chromedriver’ executable needs to be in PATH 文章目录 解决&#xff1a;chromedriver’ executable needs to be in PATH背景报错问题报错翻译报错位置代码报错原因解决方法方法一&#xff1a;检查python安装路径有没有添加到环境变量里面方法二&#xff1…

C# 命名管道NamedPipeServerStream使用

NamedPipeServerStream 是 .NET Framework 和 .NET Core 中提供的一个类&#xff0c;用于创建和操作命名管道的服务器端。命名管道是一种在同一台计算机上或不同计算机之间进行进程间通信的机制。 命名管道允许两个或多个进程通过共享的管道进行通信。其中一个进程充当服务器&…

JavaSE基础面试题-线程池原理

线程池原理 线程池做的主要工作是控制线程运行的数量&#xff0c;处理过程中将任务放入队列&#xff0c;然后在线程创建后&#xff0c;启动这些任务如果线程数量超过了最大数量&#xff0c;超出数量的线程排队等候&#xff0c;等其它线程执行完成&#xff0c;再从队列中取出执…

Nodejs前端学习Day1_补档

我给day1搞没了&#xff0c;还是觉得该补一个&#xff0c;有用 文章目录 前言一、学习目标二、学习目录三、为什么JavaScript代码可以在浏览器中运行四、为什么JavaScript可以操作DOM和BOM五、浏览器中的JavaScript运行环境总结 前言 补档 一、学习目标 二、学习目录 三、为什…

二分算法模版

二分算法模版 实数二分算法模版实数二分模版题 整数二分算法模版向上取整二分模版向下取整二分模版二分模版的注意点二分模版中check函数的实现能够使用二分的条件 二分主要分两类&#xff0c; 一类是对实数进行二分&#xff0c;一类是对整数进行二分 对整数二分又分成2种&…

ubuntu20.04 安装ROS2 记录

主要参考B站古月居的ROS2入门21讲 和 以下链接&#xff08;基本和视频上一致&#xff09; ubuntu20.04安装ROS2 详细教程_ubuntu20.04 ros2-CSDN博客 但是中间有些需要注意的地方&#xff0c; 1&#xff0c;添加源 步骤中提到 sudo curl -sSL https://raw.githubuserconten…

移动Web——平面转换-旋转

1、平面转换-旋转 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title><style…

【JavaEE进阶】 数据库连接池与MySQL企业开发规范

文章目录 🌴数据库连接池🎋数据库连接池的使用🎄MySQL企业开发规范⭕总结🌴数据库连接池 数据库连接池负责分配、管理和释放数据库连接,它允许应⽤程序重复使⽤⼀个现有的数据库连接,⽽不是再重新建⽴⼀个. 没有使⽤数据库连接池的情况:每次执⾏SQL语句,要先创建⼀…

【JavaSE篇】——数组的定义与使用

目录 本章的目标&#xff1a; &#x1f388;数组的基本概念 &#x1f36d;创建数组 &#x1f36d;数组的初始化 &#x1f36d;数组的使用 &#x1f449;数组中元素访问 &#x1f449;遍历数组 &#x1f388;数组是引用类型 &#x1f36d;初始JVM的内存分布 &#x1f…

HarmonyOS自定义弹出对话框CustomDialog并传递变量

HarmonyOS定义了一系列弹窗反馈类的组件​ 和前端开发框架VUE3配套生态库element plus中的提供各种组件相比&#xff0c;还是要少一些。可能是手机端操作和PC端操作的差异导致的​ 如果内置的弹窗不满足要求&#xff0c;可以基于CustomDialog自定义出各种个性化的反馈组件。 首…

数据库:根据学校的业务规则画出E-R图以及数据库模型图,并构建一个简单的数据库

目录 序言 一、需求 二、E-R图 E-R图&#xff1a; 三、关系模式 数据库模型图&#xff1a; 四、在MYSQL中创建数据库 4.1 年级表的创建 4.2 科目表的创建 4.3 学生表的创建 4.4 成绩表的创建 结果如下&#xff1a; 序言 本篇文章我将通过一个具体的例子教会大家大家…

Ceph分布式存储自动化运维平台开发实践

文章目录 1. 背景介绍1.1 什么是Ceph&#xff1f;1.1.1 Ceph的核心组件1.1.2 Ceph的优势 1.2 自动化运维的需求目标 2. 平台架构设计和组件版本2.1 平台架构设计2.2 组件版本2.3 模块划分&#xff08;已经脱敏处理&#xff09;2.3.1 当前版本V1.0支持功能2.3.2 前后端代码结构t…

vivado 定义和配置I/O端口、

定义和配置I/O端口 您可以使用Vivado IDE导入、创建和配置I/O端口&#xff0c;如中所述以下部分。 导入I/O端口 根据项目类型&#xff0c;可以使用以下方法导入I/O端口&#xff1a; •I/O规划项目&#xff1a;您可以将XDC和CSV文件导入空的I/O规划项目当您使用文件导入功能…

Jmeter实现造10个账户、单元数据

今天简单介绍Jemeter的入门,Jmeter 的安装这边就跳过,直接讲述如何使用JMETER,如何运用Jmeter进行测试。Jmeter实现造10个账户、单元数据,之后大数据量批量造数据以此类推。 1.下载jmeter软件 2.安装jmeter软件 3.运行\bin\jmeter.bat批处理文件 4.选择脚本文件 5.…