加入收藏 在线留言 联系我们
关注微信
手机扫一扫 立刻联系商家
全国服务热线18475208684
公司新闻
三维上位机监控系统--前篇:西门子PLC与FactoryIO+C#实现生产线实时监控
发布时间: 2024-08-08 17:48 更新时间: 2024-11-06 08:00
观看三维上位机监控系统--前篇:西门子PLC与FactoryIO+C#实现生产线实时监控视频

  在当前的工业自动化领域,集成gaoji监控系统已成为提高生产效率和监控设备状态的重要手段。本文将详细介绍一个综合使用FactoryIO、西门子PLC、ESP32和ESP8266处理器、C#应用程序和MQTT服务器的监控系统的架构和功能。该系统利用西门子PLC与各种智能设备和软件相结合,实现对工厂生产线的高效管理和实时数据监控。

直观的界面,易于搭建虚拟工厂环境:
      FactoryIO是一款专为工业自动化设计的三维仿真软件,提供丰富的工业设备模型和直观的界面,易于搭建虚拟工厂。它兼容多种PLC和OPC服务器,支持S7协议,实现PLC与虚拟工厂的实时通信和控制,提升工业系统的可视化和调试效率。

系统架构
      该系统由多个部分组成,包括ESP32用于远程显示生产数据,ESP8266作为数据中转站,C#应用程序用于监控PC状态和FactoryIO的运行,MQTT服务器用于数据传输和通信,西门子PLC负责工业控制,所有这些部分共同构成一个完整的监控系统。


图片




一、C#应用程序:监控PC的系统状态和FactoryIO的运行状态,并通过MQTT发送数据。

      C#应用程序运行在PC上,负责监控PC的系统状态和FactoryIO的运行状态,并通过MQTT发送数据给ESP32。系统状态监控:C#应用程序使用PerformanceCounter类和ManagementObjectSearcher类获取PC的CPU、GPU、内存、网络等状态。这些状态数据包括CPU使用率、GPU使用率、内存使用情况、网络上传和下载速度等。FactoryIO运行状态检测:C#应用程序通过监控进程来检测FactoryIO的运行状态。如果FactoryIO正在运行,C#应用程序会将其状态发送给ESP32。MQTT通信:C#应用程序使用MQTTnet库连接MQTT服务器,发送系统状态和FactoryIO的运行状态数据。

部分程序解析:

图片

定义一个名为NetworkTrafficMonitor的类,用于监控网络流量。类的构造函数初始化了PerformanceCounter实例,用于监控每个网络接口的发送和接收字节数。GetNetworkTraffic方法返回当前的网络上传和下载速度,以KB/s为单位。


图片

定义了Program类,并导入了kernel32.dll和user32.dll中的两个函数,用于获取和显示/隐藏控制台窗口的句柄。常量SW_HIDE和SW_SHOW用于控制窗口的显示和隐藏。定义了一个静态变量messagePart,用于跟踪发送的消息部分。


图片

Main方法是程序的入口点。首先获取控制台窗口句柄并隐藏控制台窗口。然后创建并配置MQTT客户端,连接到MQTT服务器。在成功连接和断开连接时,输出相应的信息。创建一个NetworkTrafficMonitor实例来监控网络流量。设置一个定时器,每隔500毫秒发布系统状态。Zui后,通过Task.Delay保持程序运行。


图片

PublishSystemStatus方法分三部分构建系统状态的JSON消息,每次发送其中一部分。根据messagePart变量,轮流发送每部分消息。使用MQTTnet库的MqttApplicationMessageBuilder创建MQTT消息,并在MQTT客户端连接时发布这些消息。发布成功后输出日志并更新messagePart。


图片

IsFactoryIORunning方法检查名为"FactoryIO"的进程是否在运行,以确定FactoryIO的运行状态。

GetGPUInfo方法通过调用nvidia-smi命令行工具获取GPU信息,包括风扇速度、温度、功率消耗、功率限制、已使用内存、总内存和GPU利用率。

GetDynamicCPUFrequency方法通过WMI查询获取当前CPU频率。

GetCPUUsage方法使用PerformanceCounter获取CPU使用率。

GetUsedMemory方法通过WMI查询获取当前使用的内存大小。

GetDiskRead方法使用PerformanceCounter获取硬盘读取速率。

GetProcessCount和GetThreadCount方法分别获取当前系统中的进程数量和线程数量。

GetUptime方法通过PerformanceCounter获取系统的正常运行时间。


二、MQTT服务器:位于云端,负责传输和中继各部分之间的数据。

       MQTT服务器负责中继各部分之间的数据。在本系统中,MQTT服务器位于云端,具有固定IP地址,所有设备通过MQTT协议连接到该服务器进行数据传输。

       数据传输和中继:MQTT服务器接收来自ESP8266、ESP32和C#应用程序的数据,并将其分发给订阅相应主题的设备。例如,ESP8266从PLC读取的数据通过MQTT服务器发送给ESP32和C#应用程序,C#应用程序发送的系统状态数据通过MQTT服务器发送给ESP32。

在云服务器上部署MQTT服务器的程序及方法:


工业数据从PLC经过MQTT协议到云端+AI的历程之一


三、西门子PLC:负责控制生产线设备,提供生产数据。

1.      MHJ-PLC-Lab-Function-S71200(FC): 这段代码展示了如何在西门子PLC1200上与FactoryIO进行通讯。

读取当前值并递增:

图片




PEEK函数用于读取特定存储区的值。area := 16#82表示读取的是输入(I区)数据。dbNumber := 0表示数据块编号。byteOffset := 511表示读取的字节偏移量。将读取的值存储在变量#Value中并递增1。

写入递增后的值:

图片

POKE函数用于向特定存储区写入值。向与上一步读取相同的存储区写入递增后的#Value。

向输出区写入新值:

图片

area := 16#81表示输出(Q区)数据。向指定的偏移量(1016和1020)写入值#Value_01_DW和#Value_02_DW。

重置特定位置的值:

图片

将偏移量为511的值重置为0。目的是为了进行状态复位或同步操作。

同步操作和循环:

图片

外层循环运行121次,内层循环运行11次,每次循环读写系统时间。RD_SYS_T和WR_SYS_T分别读取和写入系统时间,模拟同步操作。读取偏移量为511的值并存储在#SyncVal中。如果#SyncVal等于#CompVal,跳转到标签M_1。

标签M_1的操作:

图片

将偏移量为511的值重置为0。

这段PLC程序的功能是实现I区和Q区的读写操作以及控制逻辑。在I区(输入区),程序读取偏移量为511的当前值,将其递增后写回。随后在Q区(输出区),程序将特定值写入偏移量1016和1020处,同时将偏移量511处的值重置为0。接着程序进入一个嵌套循环,反复读写系统时间,并在每次外层循环结束时读取Q区偏移量511处的值。如果该值等于预设比较值,则跳转到标签M_1,重新将Q区偏移量511处的值重置为0。通过这种方式,程序实现了I区和Q区的数据读写及同步控制。

接着就只需要在PLC上实现功能即可:

图片


四、FactoryIO:一个3D工厂仿真软件,用于模拟工业自动化系统和分拣流水线。

设置西门子PLC的连接参数(使用仿真PLC的要选择PLCSIM):

图片


设置完后会自动连接:

图片


设备组件:

图片


以下是针对PLC程序组建的:

图片


五、ESP32模块:用于显示来自PLC和PC的数据,使用LVGL库创建图形界面。

系统启动(2.0寸显示屏):

图片


系统暂停(2.0寸显示屏):

图片


ESP32是一个强大的微控制器,内置Wi-Fi和蓝牙功能,非常适合物联网应用。在本系统中,ESP32使用LVGL库创建图形界面,显示生产数据和PC系统状态。

LVGL图形界面:LVGL(LightandVersatileGraphicsLibrary)是一个开源的图形库,支持各种显示屏和输入设备。它具有高效、灵活、易于使用等特点,非常适合嵌入式系统。在本系统中,LVGL用于显示来自PLC和PC的数据,包括生产线设备状态、生产数据、CPU使用率、GPU使用率、内存使用情况、网络流量等。

Wi-Fi连接和MQTT通信:ESP32通过Wi-Fi连接到MQTT服务器,从MQTT服务器接收来自ESP8266和C#应用程序的数据,并将其显示在图形界面上。

六、ESP8266模块:连接PLC,读取和写入数据,通过MQTT与ESP32和C#应用程序通信。


ESP8266是一个低成本的Wi-Fi微控制器,适合用作物联网设备。在本系统中,ESP8266连接到西门子PLC,读取和写入生产数据,通过MQTT与ESP32和C#应用程序通信。




联系方式

  • 电  话:13922889745
  • 经理:向小姐
  • 手  机:18475208684
  • 微  信:18475208684