init repo
This commit is contained in:
273
class_sensorcmd.py
Normal file
273
class_sensorcmd.py
Normal 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
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user