重构移动utils文件夹
This commit is contained in:
181
drivers/caSerail.py
Normal file
181
drivers/caSerail.py
Normal file
@@ -0,0 +1,181 @@
|
||||
# -*- coding: UTF-8 -*-
|
||||
import re
|
||||
import time
|
||||
from drivers.baseSerail import BaseSerial
|
||||
# from baseSerail import BaseSerial
|
||||
import colour
|
||||
|
||||
class CASerail(BaseSerial):
|
||||
def __init__(self):
|
||||
BaseSerial.__init__(self)
|
||||
|
||||
def __del__(self):
|
||||
self.close()
|
||||
|
||||
def checkport(self):
|
||||
if not self.ser.is_open:
|
||||
self.reOpen()
|
||||
|
||||
return self.ser.is_open
|
||||
|
||||
def sendcmd(self, cmd:str):
|
||||
self.write(cmd.encode('utf-8'))
|
||||
return self.read()
|
||||
|
||||
'''开启通讯'''
|
||||
def startCommunication(self):
|
||||
self.sendcmd('COM,1\r')
|
||||
|
||||
'''结束通讯'''
|
||||
def endCommunication(self):
|
||||
self.sendcmd('COM,0\r')
|
||||
|
||||
'''设置用于测量的校准通道'''
|
||||
def setChannel(self, channel:str):
|
||||
self.sendcmd('MCH,%s\r'%(channel))
|
||||
|
||||
'''
|
||||
设置显示模式
|
||||
'''
|
||||
def setDisplayMode(self, mode:int):
|
||||
return self.sendcmd('MDS,%d\r'%(mode))
|
||||
|
||||
'''设置显示模式为XYZ'''
|
||||
def set_XYZ_Display(self):
|
||||
return self.sendcmd('MDS,%d\r'%(7))
|
||||
|
||||
'''设置显示模式为xyLv'''
|
||||
def set_xyLv_Display(self):
|
||||
return self.sendcmd('MDS,%d\r'%(0))
|
||||
|
||||
'''设置显示模式为xyLv'''
|
||||
def set_all_Display(self):
|
||||
return self.sendcmd('MDS,%d\r'%(0))
|
||||
|
||||
def set_Display(self, mode:int):
|
||||
'''
|
||||
0: x,y,LV
|
||||
1: Tcp,duv,LV
|
||||
5: u’,v’,LV
|
||||
7: X,Y,Z
|
||||
8: λd,Pe,LV
|
||||
'''
|
||||
return self.sendcmd('MDS,%d\r'%(mode))
|
||||
|
||||
|
||||
'''
|
||||
设置同步模式和同步频率
|
||||
'''
|
||||
def setSynchMode(self, mode: int, freq: int = None):
|
||||
if freq == None:
|
||||
return self.sendcmd('SCS,%d\r'%(mode))
|
||||
else:
|
||||
return self.sendcmd('SCS,%d,%d\r'%(mode,freq))
|
||||
|
||||
'''
|
||||
设置测量速度
|
||||
'''
|
||||
def setMeasureSpeed(self, speed: int):
|
||||
return self.sendcmd('FSC,%d\r'%(speed))
|
||||
|
||||
'''执行零点校准'''
|
||||
def setZeroCalibration(self):
|
||||
return self.sendcmd('ZRC\r')
|
||||
|
||||
'''读取当前显示模式下的三值'''
|
||||
def readDisplay(self):
|
||||
data = self.sendcmd('MES\r')
|
||||
x,y,z = self.__get_display_data(data.decode('utf-8'))
|
||||
return float(x), float(y), float(z)
|
||||
|
||||
'''获取当前显示模式值'''
|
||||
def __get_display_data(self, data):
|
||||
p = re.compile(r"(\D*)(\d+),P1 (.*);(.*);(.*)", re.DOTALL)
|
||||
mo = p.search(data)
|
||||
if mo is None:
|
||||
print("无匹配正则")
|
||||
pw = re.compile(r"(\D*)(\d+)", re.DOTALL)
|
||||
mo = pw.search(data)
|
||||
if mo is None:
|
||||
# print("短匹配失败")
|
||||
return None, None, None
|
||||
else:
|
||||
return None, None, None
|
||||
else:
|
||||
# print(mo.group(1), mo.group(2), mo.group(3), mo.group(4), mo.group(5))
|
||||
return mo.group(3), mo.group(4), mo.group(5)
|
||||
|
||||
'''读取所有数据'''
|
||||
def readAllDisplay(self):
|
||||
data = self.sendcmd('MES,2\r')
|
||||
x,y,lv,X,Y,Z = self.__get_all_display_data(data.decode('utf-8'))
|
||||
return float(x), float(y), float(lv), float(X), float(Y), float(Z)
|
||||
|
||||
'''获取所有显示模式值'''
|
||||
def __get_all_display_data(self, data):
|
||||
p = re.compile(r"(\D*)(\d+),P1,(.*),(.*),(.*),(.*),(.*),(.*),(.*),(.*),(.*)", re.DOTALL)
|
||||
mo = p.search(data)
|
||||
if mo is None:
|
||||
return None, None, None, None, None, None
|
||||
else:
|
||||
return mo.group(4), mo.group(5), mo.group(6), mo.group(9), mo.group(10), mo.group(11)
|
||||
|
||||
def xyY_to_XYZ( x, y, Y):
|
||||
X = x * Y / y
|
||||
Z = (1 - x - y) * Y / y
|
||||
return X, Y, Z
|
||||
|
||||
|
||||
def XYZ_to_lambda_pe(XYZ, illuminant='D65'):
|
||||
xy = colour.XYZ_to_xy(XYZ)
|
||||
white = colour.CCS_ILLUMINANTS['CIE 1931 2 Degree Standard Observer'][illuminant]
|
||||
λd, comp, xy_intersection = colour.dominant_wavelength(xy, white)
|
||||
Pe = colour.excitation_purity(xy, white)
|
||||
return xy, λd, comp, Pe
|
||||
|
||||
|
||||
def test_ca410():
|
||||
print('\r\rtest ca410\r\r')
|
||||
ca = CASerail()
|
||||
ca.open("COM3", 19200, 7, 'E', 2)
|
||||
ca.startCommunication()
|
||||
ca.setSynchMode(3)
|
||||
ca.setMeasureSpeed(2)
|
||||
ca.setZeroCalibration()
|
||||
ca.setChannel('01')
|
||||
|
||||
ca.set_Display(0)
|
||||
xyYXYZ = ca.readAllDisplay()
|
||||
print(f"xyYXYZ: {xyYXYZ}")
|
||||
XYZ = xyYXYZ[3], xyYXYZ[4], xyYXYZ[5]
|
||||
xy = colour.XYZ_to_xy(XYZ)
|
||||
print(f"xy: {xy}")
|
||||
|
||||
ca.set_Display(1)
|
||||
tcpduvlvXYZ = ca.readAllDisplay()
|
||||
print(f"tcpduvlvXYZ: {tcpduvlvXYZ}")
|
||||
XYZ = tcpduvlvXYZ[3], tcpduvlvXYZ[4], tcpduvlvXYZ[5]
|
||||
xy = colour.XYZ_to_xy(XYZ)
|
||||
TCP = colour.temperature.xy_to_CCT(xy, 'Hernandez 1999')
|
||||
print(f"TCP: {TCP}K")
|
||||
|
||||
ca.set_Display(5)
|
||||
uvlvXYZ = ca.readAllDisplay()
|
||||
print(f"uvlvXYZ: {uvlvXYZ}")
|
||||
XYZ = uvlvXYZ[3], uvlvXYZ[4], uvlvXYZ[5]
|
||||
xy = colour.XYZ_to_xy(XYZ)
|
||||
u_prime, v_prime, _ = colour.XYZ_to_CIE1976UCS(XYZ)
|
||||
print(f"u': {u_prime}, v': {v_prime}")
|
||||
|
||||
|
||||
ca.set_Display(8)
|
||||
lambdaPeXYZ = ca.readAllDisplay()
|
||||
print(f"lambdaPeXYZ: {lambdaPeXYZ}")
|
||||
XYZ = lambdaPeXYZ[3], lambdaPeXYZ[4], lambdaPeXYZ[5]
|
||||
xy, λd, isComplementary, Pe = XYZ_to_lambda_pe(XYZ)
|
||||
print(f"xy: {xy}, λd: {λd}, isComplementary: {isComplementary}, Pe: {Pe}")
|
||||
|
||||
|
||||
ca.endCommunication()
|
||||
|
||||
# test_ca410()
|
||||
Reference in New Issue
Block a user