Beetle ESP32 C6测评与工业组态软件连接采集数据

2024-04-213434
AI 快速预览详细 收起
本文介绍了如何使用Beetle ESP32 C6迷你版通过组态软件进行工业数据采集。首先,在组态软件中新建设备并选择Modbus TCP作为通讯协议,设置ESP32的IP地址和端口号。然后,在图形界面中添加控件以展示从ESP32读取的数据。最后,使用Arduino编写代码并通过Modbus TCP协议将数据发送到组态王指定的寄存器地址中。这种方法可以实现低成本的数据标准化采集,适用于220v或24v的工业环境,并且可以直接对接MES、ERP系统。


上篇测试了Beetle ESP32 C6的基本用法,此篇研究使用Beetle ESP32 C6迷你版通过组态软件来采集工业数据。Beetle ESP32 C6测评与工业组态软件连接采集数据图6Beetle ESP32 C6测评与工业组态软件连接采集数据图7
组态王是工业数据采集软件,广泛用于工业控制领域,可以通过plc、智能主板来控制工业设备及采集工业数据,但plc、智能主板价格都比较高,而且在工业现场各类设备的plc型号都不一样,或者有些设备就没有plc、智能主板,增加了数据采集标准化的难度,所以可以考虑利用Beetle ESP32 C6迷你版强大的网络功能及端口较多的特性做低成本的统一数据标准化采集,然后给到mes、erp等管理系统使用。有工业环境很多是220v或24v的,所以需要用到一些220v或24v的继电器做信号的转换,要注意电压以免烧坏。然后在车间布设工业wifi来和ESP32 C6通讯

实现的步骤如下:
1.在组态软件中新建一个设备,选择Modbus TCP作为通讯协议,设置ESP32的IP地址和端口号2。
Beetle ESP32 C6测评与工业组态软件连接采集数据图1
选择莫迪康modbus-tcp
Beetle ESP32 C6测评与工业组态软件连接采集数据图2
地址输入192.168.1.100:6600 5/50建立好设备。192.168.1.100是esp32-c6的ip,6600是端口号
Beetle ESP32 C6测评与工业组态软件连接采集数据图3Beetle ESP32 C6测评与工业组态软件连接采集数据图4
2.在组态王的图形界面中添加相应的控件,比如数字显示、曲线图等,用于展示从ESP32-C读取的数据,连接上面建立的设备。
Beetle ESP32 C6测评与工业组态软件连接采集数据图5
3.使用Arduino编写ESP32-c的代码,安装一个适用于ESP32的Modbus库ModbusTCP
使用Modbus TCP协议将需要传递的数据发送到组态王指定的寄存器地址中:
#include <ModbusTCP.h>
#include <ESP8266WiFi.h>
#include <WiFiClient.h>

WiFiClient client;
IPAddress loIP(192,168,1,100);
IPAddress snIP(255, 255, 255, 0);
IPAddress gwIP(192,168,1,1);
IPAddress mbTCP(192,168,1,101);
WiFiServer server(6600);            // 服务器,server



// 初始化保持寄存器,用于存储要传递给组态王的数据
uint16_t holdingRegisters[10];

void setup() {
  Serial.begin(115200); // 初始化串口通信

  // 设置保持寄存器的初始值
  for (int i = 0; i < 10; i++) {
    holdingRegisters = i * 10; // 示例数据
  }

  // 启动Modbus TCP服务器
  if (!server.begin()) {
    Serial.println("Failed to start Modbus TCP server");
  } else {
    Serial.println("Modbus TCP server started");
  }
}

void loop() {
  // 处理Modbus请求
  server.task();




  delay(10);
}

// Modbus回调函数,用于处理读取保持寄存器的请求
void readHoldingRegisters(uint16_t slaveId, uint16_t startAddress, uint16_t registerCount) {

  if (slaveId != 1) return;

  // 读取并发送保持寄存器的值
  for (uint16_t i = 0; i < registerCount; i++) {
    server.sendRegister(startAddress + i, holdingRegisters[startAddress + i]);
  }
}

// Modbus回调函数,用于处理写入保持寄存器的请求
void writeHoldingRegisters(uint16_t slaveId, uint16_t startAddress, uint16_t registerCount, uint16_t* values) {

  if (slaveId != 1) return;

  // 更新保持寄存器的值
  for (uint16_t i = 0; i < registerCount; i++) {
    holdingRegisters[startAddress + i] = values;
  }


}





SunApril-202404215195..png (20.71 KB, 下载次数: 4012)

Beetle ESP32 C6 · 工业数据采集与组态软件连接_image_3.webp

创作许可协议

本项目采用 None(不开放任何权利,保留所有权利) 进行许可。

评论(0)
- 没有更多了 -