init repo

This commit is contained in:
Brunsmeier
2026-07-16 14:56:43 +08:00
commit 111c9bab8a
25 changed files with 4289 additions and 0 deletions

273
class_sensorcmd.py Normal file
View File

@ -0,0 +1,273 @@
import time
from class_ch341 import *
from enum import *
class ClassSensorCmd:
def __init__(self, ch341):
# 命令定义
self.CMD_GET_CHANNEL_NUM = 0x01 # 读取通道数量
self.CMD_GET_SENSOR_CAP_DATA = 0x60 # 读取传感器数据
self.CMD_SET_SENSOR_UART_SEND_TYPE = 0x61 # 设置串口输出模式
self.CMD_GET_SENSOR_CHANNEL = 0x62 # 读取通道数量
self.CMD_SET_SENSOR_AUTO_DAC = 0x63 # 自动dac
self.CMD_GET_SENSOR_ERR_CODE = 0x64 # 读取错误码
self.CMD_SET_SENSOR_CHANNEL_CALIBRATE = 0x65 # 设置通道重量标定
self.CMD_GET_SENSOR_CHANNEL_CALIBRATE = 0x66 # 读取通道重量标定
self.CMD_SET_SENSOR_AUTO_THRESHOLD = 0x67 # 设置自动阈值
self.CMD_GET_SENSOR_THRESHOLD = 0x68 # 读取自动阈值
self.CMD_SET_SENSOR_THRESHOLD = 0x69 # 设置通道阈值
self.CMD_SET_SENSOR_TOUCH_THRESHOLD = 0x6A # 设置压力阈值
self.CMD_SET_SENSOR_CHANNEL_CALIBRATE_QUICK = 0x6B # 最大力快速标定
self.CMD_GET_SENSOR_TEST_HZ = 0x6C # 读取采样率
self.CMD_GET_SENSOR_CALI_N_LIST = 0x6D # 读取标定列表
self.CMD_SET_SENSOR_CHANNEL_GROUP_CALIBRATE = 0x6E # 设置通道组重量标定
self.CMD_SET_SENSOR_IIC_ADDR = 0x70 # 设置传感器IIC地址
self.CMD_GET_SENSOR_IIC_ADDR = 0x71 # 读取传感器IIC地址
self.CMD_SET_SENSOR_CDC_SYNC = 0x72 # 采集停止,用于同步
self.CMD_SET_SENSOR_CDC_START_OFFSET = 0x73 # 设置电容开始偏移
self.CMD_GET_SENSOR_TEMP = 0x74 # 读取温度
self.CMD_SET_SENSOR_CDC_CFG_SAVE = 0x75 # 保存cdc配置
self.CMD_SET_SENSOR_FACTOR = 0x76 # 恢复出厂设置
self.CMD_SET_SENSOR_RESTART = 0x77 # 软件复位
self.CMD_SET_SENSOR_WEIGHT_CALIBRATE = 0x78 # 设置重量标定参数
self.CMD_SET_SENSOR_BASE_RESET = 0x79 # 基线复位
self.CMD_SET_SENSOR_UNIFORMIZATION = 0x7A # 归一化
self.CMD_SET_SENSOR_CHANNEL_ENABLE = 0x7B # 通道使能
self.CMD_SET_SENSOR_CHANNEL_BASE_RESET = 0x7C # 单独通道复位
self.CMD_GET_SENSOR_WEIGHT_CALIBRATE = 0x7D # 读取重量标定参数
self.CMD_GET_SENSOR_CHANNEL_STATE = 0x7E # 读取电容通道状态
self.CMD_SET_SENSOR_SEND_TYPE = 0x7F # 数据传输类型
self.CMD_GET_VERSION = 0xA0 # 读取软件版本
self.CMD_SOFT_RESTART = 0xA1 # 软件复位
self.CMD_GET_TYPE = 0xA2 # 读取设备类型
self.CMD_SET_TYPE = 0xA3 # 设置设备类型
self.CMD_SET_INF = 0xA5 # 设置输出接口
self.CMD_GET_PRG = 0xA6 # 获取项目类型
self._ch341 = ch341
self.sendTimePre = list()
self.sendTimePre.append(time.time())
self.sendTimePre.append(time.time())
self.sendTimeNow = list()
self.sendTimeNow.append(time.time())
self.sendTimeNow.append(time.time())
self.sendCnt = list()
self.sendCnt.append(0)
self.sendCnt.append(0)
# 计算校验和
# pack 数据
def calcSum(self, pack):
if len(pack) <= 5:
return 0
_sum = 0
for i in range(0, len(pack)):
_sum += (pack[i] & 0xFF)
pack.append(_sum & 0xFF)
pack.append(_sum >> 8)
# 检查校验值
# pack要检查的数据
# return 0校验值不一致
# 1:校验值一致
def checkSum(self, pack):
if len(pack) <= 5:
return False
_sum = 0
for i in range(0, len(pack) - 2):
_sum += (pack[i] & 0xFF)
chkL = _sum & 0xFF
chkH = (_sum >> 8) & 0xFF
rchkL = pack[len(pack) - 2] & 0xFF
rchkH = pack[len(pack) - 1] & 0xFF
if chkL == rchkL and chkH == rchkH:
return True
else:
return False
# 设置传感器iic地址
# addr当前地址
# new_addr系地址
# return读取的地址
def setAddr(self, addr, new_addr):
_pack = list()
_pack.append(0xAA)
_pack.append(0x55)
_pack.append(0x03)
_pack.append(self.CMD_SET_SENSOR_IIC_ADDR)
_pack.append(0x00)
_pack.append(0x00)
_pack.append(0x00)
_pack.append(new_addr)
_pack.append(0x00)
self.calcSum(_pack)
self._ch341.write(addr, _pack)
_pack.clear()
_pack.extend(list(range(11)))
time.sleep(0.01)
self._ch341.read(new_addr, _pack)
checksum = self.checkSum(_pack)
if checksum == True and ((self.CMD_SET_SENSOR_IIC_ADDR|0x80) == c_uint8(_pack[3]).value):
return _pack[7] & 0xFF
return 0
def getAddr(self, addr):
_pack = list()
_pack.append(0xAA)
_pack.append(0x55)
_pack.append(0x03)
_pack.append(self.CMD_GET_SENSOR_IIC_ADDR)
_pack.append(0x00)
_pack.append(0x00)
_pack.append(0x00)
_pack.append(0x00)
_pack.append(0x00)
self.calcSum(_pack)
self._ch341.write(addr, _pack)
_pack.clear()
_pack.extend(list(range(11)))
time.sleep(0.01)
self._ch341.read(addr, _pack)
if self.checkSum(_pack) == True:
return _pack[7] & 0xFF
return 0
def getSensorVersion(self, addr):
pass
# 读取电容通道数
# addr传感器地址
def getSensorNum(self, addr):
_pack = list()
_pack.append(0xAA)
_pack.append(0x55)
_pack.append(0x03)
_pack.append(self.CMD_GET_CHANNEL_NUM)
_pack.append(0x00)
_pack.append(0x00)
_pack.append(0x00)
_pack.append(0x00)
_pack.append(0x00)
self.calcSum(_pack)
self._ch341.write(addr, _pack)
_pack.clear()
_pack.extend(list(range(15)))
time.sleep(0.01)
self._ch341.read(addr, _pack)
if self.checkSum(_pack) == True:
return (_pack[5] & 0xFF) + (_pack[6] & 0xFF) * 256
return 0
# 读取项目编号
# addr传感器地址
def getSensorProjectIdex(self, addr):
_pack = list()
_pack.append(0xAA)
_pack.append(0x55)
_pack.append(0x03)
_pack.append(self.CMD_GET_PRG)
_pack.append(0x00)
_pack.append(0x00)
_pack.append(0x00)
_pack.append(0x00)
_pack.append(0x00)
self.calcSum(_pack)
self._ch341.write(addr, _pack)
_pack.clear()
_pack.extend(list(range(11)))
time.sleep(0.01)
self._ch341.read(addr, _pack)
if self.checkSum(_pack) == True:
return (_pack[7] & 0xFF) + (_pack[8] & 0xFF) * 256
return 0
# 设置发送类型
# addr传感器地址
def setSensorSendType(self, addr, sendType):
_pack = list()
_pack.append(0xAA)
_pack.append(0x55)
_pack.append(0x03)
_pack.append(self.CMD_SET_SENSOR_SEND_TYPE)
_pack.append(0x00)
_pack.append(0x00)
_pack.append(0x00)
_pack.append(sendType)
_pack.append(0x00)
self.calcSum(_pack)
self._ch341.write(addr, _pack)
_pack.clear()
_pack.extend(list(range(11)))
time.sleep(0.01)
self._ch341.read(addr, _pack)
if (self.checkSum(_pack) == True) and ((self.CMD_SET_SENSOR_SEND_TYPE|0x80) == c_uint8(_pack[3]).value):
return True
return False
# 设置采集偏置
# addr传感器地址
def setSensorCapOffset(self, addr, offset):
_pack = list()
_pack.append(0xAA)
_pack.append(0x55)
_pack.append(0x03)
_pack.append(self.CMD_SET_SENSOR_CDC_START_OFFSET)
_pack.append(0x00)
_pack.append(0x00)
_pack.append(0x00)
_pack.append(offset)
_pack.append(0x00)
self.calcSum(_pack)
self._ch341.write(addr, _pack)
_pack.clear()
_pack.extend(list(range(6)))
time.sleep(0.01)
self._ch341.read(addr, _pack)
checksum = self.checkSum(_pack)
if (checksum == True) and ((self.CMD_SET_SENSOR_CDC_START_OFFSET|0x80) == c_uint8(_pack[3]).value):
return True
return False
# 读取电容数据
# addr传感器地址
def getSensorCapData(self, addr, buf):
tarLen = len(buf)
err = self._ch341.read(addr, buf)
if(err == 0):
print("get data err")
checkSum = self.checkSum(buf)
if(tarLen != len(buf)):
buf.clear()
buf.extend(range(tarLen))
# try:
if (len(buf) == tarLen and buf[0] & 0xFF) == 0x55 and (buf[1] & 0xFF) == 0xAA and checkSum == True:
return True
else:
#print(f"time={time.time()},len(buf) = {len(buf)}, tarLen={tarLen}, buf[0]={buf[0]}, buf[1]={buf[1]}, sum={checkSum}")
pass
return False
# 设置采集同步
# addr传感器地址
def setSensorSync(self, addr):
_pack = list()
_pack.append(0xAA)
_pack.append(0x55)
_pack.append(0x03)
_pack.append(self.CMD_SET_SENSOR_CDC_SYNC)
_pack.append(0x00)
_pack.append(0x00)
_pack.append(0x00)
_pack.append(0x00)
_pack.append(0x00)
self.calcSum(_pack)
self._ch341.write(addr, _pack)
return True