微智科技网
您的当前位置:首页【学习笔记】pyqt5+python 应用开发-simplefoc

【学习笔记】pyqt5+python 应用开发-simplefoc

来源:微智科技网

整体框架-参考simplefoc stduio设计

每一个ui一个模块,好处是实例化非常方便,一次设计,随时使用;
由整体的app模块来分别加载各个子模块

使用映射表的形式,简化combox和lineedit的事件响应

前提 是他们有类似的事件响应;都可以映射到同一个事件响应中;

("comboBox__sns",c_sns,(0x98,4,4),(0x96,3,3)),
("comboBox__sns",p_sns,(0x60,7,7)),

数据定义:combobox 名称-数据类型-寄存器列表

sns = (
    ("csns",0,0),
    ("C_sns",1,1),
    ("all_close",1,0)

关联数据 刷新触发对应的事件响应

如有个combobox绑定了一个index改变的事on-index-changed;
当与其相关的数据改变后,需要刷新该combobox;
此时的刷新动作会触发on-index-changed事件,引发连锁操作;

故需要在关联数据刷新之前先解绑;数据更新之后在绑定

使用信号的方式实现数据的交互

信号实现了不同模块之间的数据交互;尤其是由下到上的数据交互;
信号的使用是基于事件触发的思想;

# 数据更新事件类 
class SensorDataEvent:  
    def __init__(self, data_type, data = None, metadata=None):  
        self.data_type = data_type  
        self.data = data  
        self.metadata = metadata  

# 传感器类
class Sensor(QObject):
    # 信号
    data_updated = pyqtSignal(SensorDataEvent)

在传感器模块中定义了,SensorDataEvent;
该模块实现不同数据和数据类型的映射;
优点:将所有数据的信号都统一处理;条理清晰;

def send_data_event(self,type:DataType,info = f" initialized"):
        match type:
            case DataType.CONFIGRATION:
                self.data_updated.emit(SensorDataEvent(type,self.config))
            case DataType.IMU_AURA:
                self.imu_statistics(self.imu)
                self.data_updated.emit(SensorDataEvent(type,(self.imu,self.imu_calc)))
                data_bytes = pack(IMU_DATA_FROMAT,*(asdict(self.imu).values()))
            case DataType.IMU_BMI:
                self.imu_statistics(self.imu)
                self.data_updated.emit(SensorDataEvent(type,(self.imu,self.imu_calc)))                
                data_bytes = pack(IMU_DATA_FROMAT,*(asdict(self.imu).values()))

从上往下

可以利用函数的调用,实现从上往下的数据传递;

从下往上

可以利用信号的形式,

linedeit

有效性检查

实现针对格式的数据输入有效性检查;

打包是应为numpy使用了 mkl导致exe固件很大

使用

因篇幅问题不能全部显示,请点此查看更多更全内容