- 博客(409)
- 资源 (4)
- 收藏
- 关注
原创 Qt Designer的父子部件样式表设置学习
在Qt Designer中新建图像界面,放置两个QWidget,命名为widget_1和widget_2;单独改变了widget_2,但是隶属于widget_2的pushButton_1和pushButton_2并没有改变。需要注意的是,采用这种办法,如果被改变的小部件还有它的子部件,子部件并不跟随被改变的小部件的改变而改变。这里,将隶属于widget_1的类型为QPushButton的所有部件全部定义了新的显示特性。这个样式表的含义为:widget_1中,所有的QWidget都按照指定的样式表显示。
2024-07-27 00:13:29
1514
原创 基于QtPy (PySide6) 的PLC-HMI工程实战记录(八)创建适合项目的进度条
3、所有的行程和设置为以米为单位的实数,进度条的value数字为厘米单位的实数,显示值为以米为单位的实数。1、安全色为绿色,危险色为橙色,越界色为红色,随着行程控制点的接近,颜色由安全色向危险色过度。2、炉前减速为橙色。中限停车和前限停车位越界色。用于推焦和装煤的行程指示。
2026-08-29 19:14:29
23
原创 基于QtPy (PySide6) 的PLC-HMI工程实战记录(七)创建适合HMI项目的数字输入/显示类部件
HMI项目的输入/显示类部件,比如一个QSpinBox或者QLineEdit,用于设定电机转速,它的实时更新来自于下位机实体PLC的通信,设置完新的数值后,再把新数值通信传回下位机实体PLC,也就是上位机中常见的“读/写”双向操作。如果只是简单将实体PLC的变量与QSpinBox的设定显示值连接,那么有可能数字还没设完就可能被周期更新的下位数据刷新掉,或者是只设置了一半,半成品的设置值被传递到了下位PLC,这显然不符合工程的实际需求。3、只有按下回车键后,当前的设定值才刷新下位PLC。
2026-08-27 22:08:01
408
原创 基于QtPy (PySide6) 的PLC-HMI工程实战记录(六)继续改进实时动作监控画面类:NowDoForm
实时动作画面代理新增加了控制窗口开关的变量连接以及它将要显示所在的容器窗口。定义了代理之后,所有变量自动连接。
2026-08-26 18:21:56
20
原创 基于QtPy (PySide6) 的PLC-HMI工程实战记录(五)为当前动作画面的信号连接变量
进一步的,把每一个画面的now_signal信号绑定之前定义的PLC变量,就可以实现画面按照变量的的更新自动更新。之前在 NowDoForm类中定义了一个信号now_signal。就可以把变量绑定到画面并自动更新。同样的方法,绑定所有的动态画面。画面就会按照变量的分配更新。
2026-08-24 23:21:55
292
原创 基于QtPy (PySide6) 的PLC-HMI工程实战记录(四)组态当前动作的联锁关系画面
由于动作并不多,懒得建自动生成画面的脚本了,手动组态一下画面,并规律命名。
2026-08-24 12:26:37
29
原创 基于QtPy (PySide6) 的PLC-HMI工程实战记录(二)复制和应用PLC模板
本项目是一个小系统,为了简化设计,PLC的上行数据使用了固定周期发送,发送的内容也是固定地址范围的数据。根据需求确定上行数据的地址范围:IB0--IB31,QB0--QB10,DB15的 B0--B81,DB10的B0--B29,总共大约200字节。
2026-08-22 22:31:04
360
原创 基于QtPy (PySide6) 的PLC-HMI工程项目(十五)后续完善和改进:PLC端数据解析的防粘包、残包、废包、拆包
【代码】基于QtPy (PySide6) 的PLC-HMI工程项目(十五)后续完善和改进:PLC端数据解析的防粘包、残包、废包、拆包。
2026-08-22 17:59:00
23
原创 基于QtPy (PySide6) 的PLC-HMI工程项目(十四)后续完善和改进:上位机数据解析的防粘包、残包、废包、拆包
下位将DB1.DBB0--DBB4的字节内容:“11 22 33 44 55”传输到上位,并映射到上位数据池,更新显示。下位将油泵1的压力设定内容:“10.0”传输到上位,并映射到上位数据池,更新显示。
2026-08-17 08:55:42
14
原创 基于socket的 TCP上位机通信内容解析程序
帧头[0x58 0x58] + [有效数据 ,不定数据长度] + 帧尾[0x59 0x59] + [CRC16 2B,大端]由于是TCP通信,不可避免粘包、半包、拆包。帧头 + 有效数据 + 帧尾头(0x。
2026-08-16 15:01:27
259
原创 基于QtPy (PySide6) 的PLC-HMI工程实战记录(一)创建PLC工程模板项目
这个命名为“AreaVar”的数据类型,包含了数据分区(I/QM/DB)、DB编号、数据起点、数据字节长度等信息,可用来进行各种以字节为单位的块间操作。调用时会自动创建一个背景DB,将其命名为:上位通信_背景DB,并拖入“背景类DB”分组中。这个分组中的DB全部为背景类的DB,无需人工干预和编辑。并且在硬件确定之后不用手动逐个输入组态硬件,连接到已通电的CPU,使用“在线”、“硬件检测”就可以直接把实际的硬件读取到项目中。“添加新的外部文件”、“从源生成块”,这样就把外部的db文件转换为项目中的DB块。
2026-08-10 21:19:14
266
原创 PySide6, 将 QWidget 嵌入 GraphicsView 作为图元显示
self.btn = QPushButton("自定义控件")proxy.setWidget(QPushButton("内嵌按钮"))
2026-08-09 11:23:07
244
原创 Win10 能看到本机但打不开共享完整修复方案
设置→网络和 Internet→WLAN / 以太网→属性→网络配置文件:切换为专用,公用网络默认屏蔽共享访问。切换到【安全】选项卡→编辑→添加→高级→立即查找,选中 Everyone 添加,同样勾选全部允许权限,确定保存。高级→WINS→勾选启用 TCP/IP 上的 NetBIOS,一路确定保存,开启NetBIOS。需要密码则保持开启,客户端输入本机账号密码)置→更新和安全→Windows Defender 防火墙→允许应用通过防火墙。计算机配置→Windows 设置→安全设置→本地策略→安全选项。
2026-07-18 09:39:06
481
原创 基于QtPy (PySide6) 的PLC-HMI工程项目(十三)应用qdarkstyle样式表主题
并在HMI项目UI目录下中创建/styles文件夹,拷贝生成的各个文件。
2026-05-13 15:12:54
78
原创 用HSL颜色系统改造qdarkstyle样式表库
将颜色用hsl值表示,并且升级色彩库,升级以后的色彩库共有15个色系,每个色系的色相值固定,比如红色为0,绿色为120,蓝色240,每个色系的色彩浓度从0%到100%,每个浓度的又包含亮度的从0%到100%,浓度和亮度均以5%递进,这样每个色系有400多个颜色,就有了一个颜色丰富、足够使用的色彩库,而且从色彩名就大致能判断出它的颜色类型、鲜艳程度、明亮程度,无论是做动态或者渐变都很方便。灰色, 红色, 棕色, 橙色, 橙黄, 黄色, 黄绿, 绿色, 青绿, 青色, 靛蓝, 蓝色, 紫色, 品红, 紫红。
2026-05-07 18:13:09
445
原创 PySide6,图形按钮使用系统内置图标
调用名: StandardPixmap.SP_ToolBarHorizontalExtensionButton。调用名: StandardPixmap.SP_ToolBarVerticalExtensionButton。调用名: StandardPixmap.SP_FileDialogContentsView。调用名: StandardPixmap.SP_FileDialogDetailedView。调用名: StandardPixmap.SP_DockWidgetCloseButton。
2026-05-01 11:33:04
523
原创 Qt:创建一套基于HSL颜色体系的颜色库
文件中每个颜色的色彩浓度和亮度每间隔5%创建了一个颜色名,黑白灰色的H(色相)和S(色彩浓度)恒为0,黑白灰颜色名的数字是HSL颜色的"L"(亮度)。其余颜色的数字是"S"(色彩浓度5%-100%)和"L"(亮度5%-95%),比如:红色5_30 = hsl(h=0, s=5%, l=30%)。
2026-04-27 22:22:59
155
原创 Qt的HSL色彩系统
与常见的HSB色彩系统不同,HSL颜色系统有它独特的色彩设置规律,更适合UI工程的界面主题、模式切换、整体亮度调节、CSS 风格配色等应用。看得出,随着s的递增,色彩逐渐浓郁;随着l的递增,亮度逐渐提高;s = 100%(色彩浓度不变),l递增(亮度递增)l = 50%(亮度不变),s递增(色彩浓度递增)根据设计需求选择不同的常量和递变量即可。demo:一个绿色带灯按钮。
2026-04-26 12:20:46
149
原创 基于QtPy (PySide6) 的PLC-HMI工程项目(十二)最后的工作
rsv_area_var "AreaVar" 接收下行报文的DB块。frameHeader1 Byte 帧头字节1。链接: https://pan.baidu.com/s/18SBz4wM2G3Od4hidv6FHmQ 提取码: qwya。frameEnd1 Byte 帧尾字节1。
2026-04-25 17:14:54
382
原创 基于QtPy (PySide6) 的PLC-HMI工程项目(十一)框架的进一步完善:UI的自动周期更新以及下行数据的生成和处理
所有上位机代码见附件。目录结构:"""解析Excel变量表的变量地址,解析出区域、偏移、位:return:"""out = []s = ''# 取出地址文字串中每个“."之前的连续的数字,;
2026-04-21 18:51:32
244
原创 PLC学习笔记:数据存储的大小端模式
以一个16 位整数(Word)0x1234高字节 0x12(0001 0010)低字节 0x34(0011 0100)
2026-04-19 10:06:46
544
原创 基于QtPy (PySide6) 的PLC-HMI工程项目(十)框架初成的阶段总结
DataStore:变量存储区(变量池)变量池位于上位机,是一个连续区域的存储区,最小存取单位是字节。AreaVar:区域变量区域变量:NamedTuplearea:I、Q、M或DB区,DBnum:DB编号,offset:地址偏移,byte_count:字节数,content:数据内容区域变量的作用是携带区域信息,用来成块读写变量池中和PLC的连续数据。所有的通信读写均通过区域变量进行。UiVari:UI变量。
2026-04-17 17:52:47
391
原创 基于QtPy (PySide6) 的PLC-HMI工程项目(九)在上位机中创建变量系统
将其保存在项目根目录,命名为:PLC1Tags.xlsx。将其导出为excel文件。在excel表中利用。
2026-04-16 12:07:19
68
原创 基于QtPy (PySide6) 的PLC-HMI工程项目(八)在上位机中解析上行报文
当接收到上行报文后首先对帧头和帧尾进行校验,如果校验不过就舍弃帧数据。然后经过CRC校验,确保所有数据无误,将帧数据保存。
2026-04-15 18:21:45
99
原创 基于QtPy (PySide6) 的PLC-HMI工程项目(七)上位机通信部分的初步建设:socket客户端
signal_start = Signal() # 开始运行的信号_signal_stop = Signal() # 停止信号_signal_run_now = Signal() # 打破定时器周期立即运行一次""":param target: 需要在子线程中运行的目标函数:param looping: 是周期运行还是一次性任务:param loop_interval: 周期运行的间隙时间:param args: 附带参数"""
2026-04-14 22:19:42
89
原创 基于QtPy (PySide6) 的PLC-HMI工程项目(六)创建通信块和生成上行报文
destArea "AreaVar" 目标区域,存放上行报文的字节。srcAreaVars Array[*] of "AreaVar" 源数据区域,支持多区域输入。的数据格式为:Array[0..5] of "AreaVar"上行报文发送的数据就是位于这些区域的连续字节块。创建FC,命名为:组态上行报文。
2026-04-12 18:21:21
381
原创 基于QtPy (PySide6) 的PLC-HMI工程项目(四)为PLC创建开放式TCP连接
需要注意的是:在创建连接的时候,如果没有客户端连接到PLC,TCON的“BUSY”会一直输出True,直到有客户端连接"DONE"才会置位。调用时会自动创建一个背景DB,将其命名为:上位通信_背景DB。输入实例名称和网络地址,点“start”。会自动创建一个DB块:TCON_DB。这样就将PLC创建为TCP主站。伙伴:未指定、主动建立连接。
2026-04-11 12:00:13
283
原创 S7-1500学习笔记:Array数据类型
创建 ARRAY 变量时,将在方括号内定义小标的限值,并在关键字“of”之后定义数据类型。ARRAY 限值可使用。ARRAY 数据类型的变量表示一个由多个数目固定且数据类型相同元素组成的数据结构。[-2147483648..2147483647] of <数据类型>下限值必须小于或等于上限值。[-32768..32767] of <数据类型>ARRAY[n],例:Array_1[0, 3]ARRAY[下限..上限] of <数据类型>维度,各维度的限值使用逗号进行分隔。除 ARRAY 之外的所有数据类型。
2026-04-05 22:14:12
127
原创 S7-1500学习笔记:用户自定义数据类型(UDT)
项目管理器--PLC--PLC数据类型--添加新数据类型在打开的窗口内定义UDT的变量成员:本例,将UDT 命名为“AreaVar”,由Arrary、DBNum、Offset、byteCount4个变量成员组成。
2026-04-05 17:51:53
978
原创 S7-1500PLC学习笔记:MOVE_BLK、MOVE_BLK_VARIANT、BLKMOV的区别
在 S7‑1500 里,是三种最常用的块移动指令,但定位、用法、限制完全不同。
2026-04-03 17:48:20
900
原创 西门子S7-1500PLC的PEEK/POKE学习笔记
数据类型匹配,比如:PEEK_WORD 对应 2 字节,POKE_DWORD 对应 4 字节,类型错位会导致数据错乱。DB 属性 → 取消 优化的块访问,否则地址不固定,PEEK/POKE 无法定位。16#84 DB 数据块(Data Block)访问 DB 区时:填 DB 号(如 10 → DB10)IO 映射:PI/PQ 直接读写(1500 专属)Area 写错(如用 84 代替 16#84)访问 I/Q/M/PI/PQ 时:必须填 0。
2026-04-03 17:01:52
664
原创 基于QtPy (PySide6) 的PLC-HMI工程项目(二)系统规划
曾多年使用wincc等专业软件进行组态,对HMI(人机交互界面)项目有一定的了解。与前面做过的AI项目demo不同的是,PLC的HMI项目是基于PLC通信的,大部分的操作和更新都是基于PLC变量的读写。
2026-04-01 10:18:24
368
原创 基于QtPy (PySide6) 的PLC-HMI工程项目(一)使用自定义socket协议的基本方法
DEMO展示了创建socket连接,以及断线重连、数据收发、心跳保活的基本方法,同时展示了从自定义格式的数据包中解析出指定类型数据的方法。
2026-03-31 17:26:57
92
原创 使用@property将类方法包装为属性
property→ 定义读取方法(getter),并伪装成属性@属性名.setter→ 定义修改方法(加校验 / 限制)好处:代码简洁、安全可控、符合 Python 优雅的语法风格名字必须一样只有 @property 时,属性是只读的。
2026-03-30 21:00:52
173
基于QtPy (PySide6) 的PLC-HMI工程实战记录(六)当前的PLC和UI进度
2026-08-26
基于QtPy (PySide6) 的PLC-HMI工程实战记录(六)继续改进实时动作监控画面类:NowDoForm
2026-08-26
基于QtPy (PySide6) 的PLC-HMI工程实战记录(六)继续改进实时动作监控画面类:NowDoForm
2026-08-26
基于QtPy (PySide6) 的PLC-HMI工程实战记录(二)复制和应用PLC模板
2026-08-22
基于QtPy (PySide6) 的PLC-HMI工程实战记录(一)创建PLC工程模板项目
2026-08-22
基于QtPy (PySide6) 的PLC-HMI工程项目(十五)后续完善和改进:PLC端数据解析的防粘包、残包、废包、拆包
2026-08-22
基于QtPy (PySide6) 的PLC-HMI工程项目(十四)后续完善和改进:上位机数据解析的防粘包、残包、废包、拆包
2026-08-17
基于QtPy (PySide6) 的PLC-HMI工程实战记录(四)组态当前动作的联锁关系画面
2026-08-10
基于QtPy (PySide6) 的PLC-HMI工程项目(十一)框架的进一步完善:UI的自动周期更新以及下行数据的生成和处理
2026-04-21
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅
4