前言
记录CS2000设备使用串口连接以及相关控制。
CS2000是一台分光辐射亮度计,也就是可以测量光源的亮度。详细的规格网址参考CS2000/CS-2000A ,所有信息以柯尼卡美能达官网的参数以及使用手册为主。
使用目的及环境
当前的使用目的是使用PC端控制CS2000,测量屏幕的亮度数据。
PC端使用Python,在Win10环境下开发;
需要额外安装的模块:pySerial;
设备连接方法
这台设备是支持USB1.1 Full-Speed和RS-232C的。其配套的软件CS-S10是使用的USB1.1接口,如果安装了软件,也就相当于安装了对应驱动。当然,我这里则是使用了配置串行通讯端口COM Port
(Cluster Communication Port)。
CS2000支持的通讯设定如下:
这里选用波特率115200,数据长度8 bits, 无校验,1 bit停止位的设定;至于Hardware(RTS/CTS),即Require To Send和Clear To Send信号,这里先不做考虑。
程序主体流程
1.获取电脑COM本文来源[email protected]搞@^&代*@码2网列表;
2.连接并打开CS2000的设备端口;
3.设备初始化(设定控制模式,关闭测试按键操作,设定同步模式等);
4.单次测量并获取测量值;
5.关闭串口;
接下来就开始结合手册进行操作。
获取端口
需要引入serial.tools.list_ports
模块:
def port_list(): """ 获取电脑端口列表 :return: 端口列表 """ pl = serial.tools.list_ports.comports() # print(pl) print("Port List:") for item in pl: print("{}\t\t:\t{}".format(item.usb_description(), item.manufacturer))
获取端口列表后,可以打印端口的描述和制造商,用于区分多个端口。
连接端口
需要引入serial
模块:
def connect_com(port, baudrate=115200, timeout=0): """ 配置串口参数并进行连接; :param port: 端口号,“COM1” :param baudrate: 波特率,115200 :param timeout: 超时时间,0 :return: 连接好的串口,ser """ # noinspection PyBroadException try: ser = serial.Serial(port, baudrate, timeout=timeout) print("Port\t\t:\t{}".format(ser.name)) print("Baudrate\t:\t{}".format(ser.baudrate)) print("Status\t\t:\t{} Connect Successful!".format(port)) return ser except Exception: print("Status\t\t:\t\t\tConnect COM Failed!")
定义的函数,返回打开串口之后的对象。
发送格式
分隔符
使用PC发送命令到测量设备的时候,需要使用如下分隔符:
CR
, LF
对应的ASCII的0x0D
和0x0A
;也就是在命令结束后要加分隔符进行分割;
数据字符格式
发送的数据中,数字发送,必须要跟数字的字符一样。比如发送十进制数据886
,就需要发送对应的字符886
。如果需要输入的字符长度少,需要用空格补齐。
超时
PC通信的超时设定至少要10s。这里可以理解为设备测量亮度是需要积分时间的,比如说测试比较暗的画面,需要长时间的积分,因此测量的返回数据需要对应延迟很长时间,因此超时设定为至少10s。
实际使用的情况中,比较暗的画面可能需要超过7s的测量时间。