整体框架-参考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固件很大
使用