基于QtPy (PySide6) 的PLC-HMI工程项目(二)系统规划

曾多年使用wincc等专业软件进行组态,对HMI(人机交互界面)项目有一定的了解。与前面做过的AI项目demo不同的是,PLC的HMI项目是基于PLC通信的,大部分的操作和更新都是基于PLC变量的读写。

一、系统框架设计

项目的基本框架:

  • 项目主要由UI项目容器(QObject)和 PLC容器(QObject)以及PLC实体组成;
  • UI项目容器由画面管理、数据管理、用户管理组成;
  • PLC容器被定义为QObject类,使用信号槽机制与UI项目容器进行交互;
  • PLC容器与PLC实体的交互:PLC容器作为连接UI与实体PLC的桥梁,在PLC容器中定义了映射到PLC地址的变量,并通过变量的映射地址读写PLC的存储单元和I/O接口状态;
  • 画面的刷新:通过网络周期性地读取PLC实体的存储单元和IO状态,并刷新PLC容器内的变量,使用信号槽机制刷新画面,画面的刷新原则是:无变化不刷新,以节约系统资源。
  • 上行数据:PLC 上位机:周期发送,内容固定,长度固定。上位机解包以后对变量赋值,有变化就刷新UI。由于上行数据是周期发送的,所以不再设上行心跳。
  • 下行数据:上位机 PLC:有UI操作后把UI操作产生的数据立即发送给PLC,没有UI操作的时候,周期发送下行心跳,在PLC中保活。
  • 上下行报文均使用和校验作为帧校验,以确保不会因为粘包、干扰等因素造成数据错误。
  • 使用自定义socket协议通信,以保留不同品牌PLC的兼容能力。

二、数据的具体规划

简化数据交换过程,降低程序难度。上下行数据不关联,不回应,对于PLC而言,上行只读、下行只写。

  1. PLC 上位机(上行):单向读PLC操作,周期发送,固定长度、固定内容、按需更新上位UI。
    . 上位机中的准备工作:
    将西门子的变量表导出为excel文件,从文件中自动获取变量字典,字典的键是PLC内部的变量名,值是地址和数据类型,将字典保存为本地文件并导入UI项目使用。
    在UI项目中创建变量类(QObject),变量类拥有自定义的valueCharged信号,当变量值发生变化后发射valueCharged信号并将信号绑定到功能槽函数用以更新UI。
    依据变量字典的键创建变量库,变量库中的变量按名查找,变量名就是变量字典的键名,每个变量对应的变量地址是变量字典中的地址。
    . 发送数据:
    上行数据由PLC主动发起,周期发送,固定长度、固定内容。PLC中将所有用到的PLC变量打包后一次性发送。在上位中依据PLC打包顺序解包,解包后按址分配变量,变量发生变化发射valueCharged信号刷新UI。
    上行数据的开头是PLC地址,结尾是校验和。
    由于上行数据是周期发送的,可以将其作为心跳信号使用。
  2. 上位机 PLC(下行):单向写PLC操作,内容不确定,按需发送。
    上位机周期发送固定的心跳数据以保活连接,当上位机产生了需要对PLC进行写操作的数据,比如操作了UI按钮、设置了工艺数值,将数据增加到心跳内容后面并打破发送周期立即发送给PLC。
    下行数据的内容包含了需要写的PLC地址Area、偏移量、变量数据、校验和,每条下行数据只执行一次写操作。
    PLC地址Area用可以Area功能名称代替,比如:DI、DQ、M、DB等,不携带具体地址值(类似0x81这种),在PLC中编程解包后计算地址并按址写数据。也可以按照不同的PLC的具体地址在上位机中计算好实际地址,并在下行数据中携带地址指针,PLC根据指针按址写数据即可。
相关推荐
databook21 分钟前
面向数据工程师的正则表达式:从日志清洗到字段提取
python·正则表达式·数据分析
ss2731 小时前
AI全栈实战 | 3.2-01 Python 基础:四大数据容器怎么选,推导式为什么是 Pythonic 的灵魂
开发语言·人工智能·python
Mr_Macallon1 小时前
C++回顾(基础)(01)
c语言·开发语言·c++·学习
计算机毕业编程指导师1 小时前
【大数据毕设选题推荐】基于Spark的WTA职业网球赛事演变与竞技格局分析系统源码 毕业设计 选题推荐 毕设选题 数据分析 机器学习 深度学习
大数据·python·计算机·spark·毕业设计·课程设计·wta网球
言乐61 小时前
Python区分广度优先深度优先宽度优先的区别
python·算法·深度优先·广度优先·宽度优先
打工仔折腾 AI2 小时前
LLaMA 1 到 LLaMA 3 架构演进拆解:从 RoPE、GQA 到词表扩张
人工智能·后端·python·深度学习·langchain·llama
旋生万物2 小时前
螺旋角分布的功率谱分析:多窗谱 + FDR 校正
开发语言·python
sunoo-2292 小时前
【ARM嵌入式学习笔记第十天】i.MX6ULL eLCDIF控制器驱动RGB LCD全解析(硬件原理+寄存器配置+裸机代码)
arm开发·笔记·学习
时间的拾荒人2 小时前
Qt 窗口系统详解:从菜单栏到对话框的完整指南
开发语言·qt·面试
专业程序开发源2 小时前
SSM校园拍摄交流服务平台36936-计算机课程设计、毕业设计
java·spring boot·后端·python·elasticsearch·php·课程设计