iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >总结Python连接CS2000的详细步骤
  • 846
分享到

总结Python连接CS2000的详细步骤

2024-04-02 19:04:59 846人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

前言 记录CS2000设备使用串口连接以及相关控制。 CS2000是一台分光辐射亮度计,也就是可以测量光源的亮度。详细的规格网址参考CS2000/CS-2000A ,所有信息以柯尼卡

前言

记录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支持的通讯设定如下:

image-20210614110048426

这里选用波特率115200,数据长度8 bits, 无校验,1 bit停止位的设定;至于Hardware(RTS/CTS),即Require To Send和Clear To Send信号,这里先不做考虑。

程序主体流程

1.获取电脑COM列表;

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的0x0D0x0A;也就是在命令结束后要加分隔符进行分割;

数据字符格式

发送的数据中,数字发送,必须要跟数字的字符一样。比如发送十进制数据886,就需要发送对应的字符886。如果需要输入的字符长度少,需要用空格补齐。

超时

PC通信的超时设定至少要10s。这里可以理解为设备测量亮度是需要积分时间的,比如说测试比较暗的画面,需要长时间的积分,因此测量的返回数据需要对应延迟很长时间,因此超时设定为至少10s。

实际使用的情况中,比较暗的画面可能需要超过7s的测量时间。

初始化

初始化包含以下以几个环节,包括设置远端模式(SCMS),关闭测量按键(MSWE),设定同步模式(SCMS)等;这里仔细参考手册,很容易就能理解,下面就直接贴出代码。


def remote_mode(ser):
    """
    对cs2000进行远程控制设置
    :param ser: cs2000的串口
    :return: None
    """
    data = b'RMTS,1\n'
    tx_data(ser, data)
    if rx_data(ser)[0] == "OK00":
        print("Status\t\t:\tRemote Mode Setting OK!")
    else:
        print("Status\t\t:\tRemote Mode Setting ERROR!")


def meas_key_off(ser):
    """
    关闭cs2000设备上的measure按键控制
    :param ser: cs2000的串口
    :return: None
    """
    data = b'MSWE,0\n'
    tx_data(ser, data)
    if rx_data(ser)[0] == "OK00":
        # print("Status\t\t:\tMeasure Key Disable OK!")
        pass
    else:
        print("Status\t\t:\tMeasure Key Disable ERROR!")


def sync_mode_set(ser, freq):
    """
    同步模式设定
    :param ser: cs2000的串口
    :param freq: 频率,单位Hz
    :return: None
    """
    mode = b'1,'
    freq = freq.encode()
    data = b'SCMS,' + mode + freq + b'00\n'
    tx_data(ser, data)
    if rx_data(ser)[0] == "OK00":
        print("Status\t\t:\tSync Mode is {}, freq is {}Hz!".format(mode, freq))
        pass
    else:
        print("Status\t\t:\tMeasure Key Disable ERROR!")


def sync_mode_read(ser):
    """
    同步模式读取
    :param ser: cs2000的串口
    :return: None
    """
    sync_mode_dict = {"0": "No sync",
                      "1": "Internal sync",
                      "2": "External sync"}
    data = b'SCMR\n'
    tx_data(ser, data)
    rdata = rx_data(ser)
    if rdata[0] == "OK00":
        print("Status\t\t:\tSync Mode is {}. ".format(sync_mode_dict[rdata[1]]))
        if rdata[1] == "1":
            print("Status\t\t:\tSync frequency is {}Hz. ".format(rdata[2][:-2]))
        pass
    else:
        print("Status\t\t:\tSync Mode read ERROR!")


def dev_init(ser):
    """
    cs2000设备进行初始化,包含设置为远程控制,关闭测量按键,设置同步模式,查询同步模式数据
    :param ser: cs2000的串口
    :return: None
    """
    remote_mode(ser)
    meas_key_off(ser)
    sync_mode_set(ser, SYNC_FREQ)
    sync_mode_read(ser)

注意:这里每次发送命令之后,设备均会返回数据。如若返回的是OK00,则说明命令发送和接收都没有出现问题,如果返回的指令有ERxx等字样,需要根据手册中的错误代码列表查询错误原因,并进行改正。

测量数据

测量数据需要先发送测量指令,等待返回测量时间,等待测量结束;

再发送测量数据读取指令。


def measure(ser):
    """
    向cs2000发出测量的命令
    :param ser: cs2000的串口
    :return: None
    """
    data = b'MEAS,1\n'
    tx_data(ser, data)
    rdata = rx_data(ser)
    if rdata[0] == "OK00":
        # print("Status\t\t:\tMeasure time is {}s".format(rdata[1]))
        pass
    else:
        print("Status\t\t:\tMeasure CMD ERROR Code {}".format(rdata[0]))

    rdata_1 = rx_data(ser)
    if rdata_1[0] == "OK00":
        # print("Status\t\t:\tMeasurement completed!")
        pass
    else:
        print("Status\t\t:\tMeasure Wait ERROR Code {}".format(rdata_1[0]))


def lv_read(ser):
    """
    向cs2000发出测量的命令
    :param ser: cs2000的串口
    :return: 亮度值lv
    """
    data = b'MEDR,2,0,101\n'
    tx_data(ser, data)
    rdata = rx_data(ser)
    if rdata[0] == "OK00":
        # print("Status\t\t:\tLuminance is {} cd/m²".format(rdata[1]))
        return rdata[1]
    else:
        print("Status\t\t:\tLuminance Read ERROR Code {}".format(rdata[0]))
        return None


def get_lv(ser):
    """
    获取亮度值
    :param ser: cs2000的串口
    :return: 亮度值,单位cd/m²
    """
    measure(ser)
    return lv_read(ser)


def xylv_read(ser):
    """
    向cs2000发出测量的命令
    :param ser: cs2000的串口
    :return: 色坐标,X,Y,亮度,LV
    """
    data = b'MEDR,2,0,2\n'
    tx_data(ser, data)
    rdata = rx_data(ser)
    if rdata[0] == "OK00":
        print("Status\t\t:\tX,Y,LV are {} {} {}".format(rdata[1], rdata[2], rdata[3]))
        return rdata[1:]
    else:
        print("Status\t\t:\tMeasure ERROR!")
        return None


def get_xylv(ser):
    """
    获取色坐标X,Y和亮度LV。
    :param ser: cs2000的串口
    :return: 色坐标,X,Y,亮度,LV
    """
    measure(ser)
    return xylv_read(ser)

其中,返回数据的格式需要根据发送的指令进行解析,对应在Datasheet中也有介绍。

串口收发数据的函数

对于串口收发数据,也封装了一层函数,方便调用:


def tx_data(ser, data):
    # noinspection PyBroadException
    try:
        ser.write(data)
        # print("Status\t\t:\tSend OK!")
    except Exception:
        print("Status\t\t:\tSend ERROR!")


def rx_data(ser):
    # noinspection PyBroadException
    try:
        rdata = ser.readline().decode("utf-8").replace("\n", "").split(",")
        # print("Status\t\t:\tReceived {}".format(rdata))
        return rdata
    except Exception:
        print("Status\t\t:\tReceive ERROR!")

串口关闭

串口使用之后一定要进行合理的关闭,防止多个程序运行,出现连接问题。


def serial_close(ser):
    """
    关闭串口连接
    :return: None
    """
    # noinspection PyBroadException
    try:
        ser.close()
        print("Port {} has been closed!".format(ser.name))
    except Exception:
        print("----serial_close failed!")

主函数

所有的参数传递,都是将产生的串口对象作为参数传递。


if __name__ == '__main__':

    port_list()

    cs2000 = connect_com("COM1", timeout=5)

    dev_init(cs2000)

    get_lv(cs2000)
    get_xylv(cs2000)

    serial_close(cs2000)

写在后面

设备调试的要义在于,一切操作要参考Datasheet:cs_2000_technicalnote_en,可以在官网支持中下载到。熟悉了手册之后,后面的调试环节可以节省很多时间,调制的过程也会非常顺利。这里例举几个调试过程中遇到的问题:

1.合理设定超时(要根据最长的测量时间设定),在发送数据之后就可以等待接收数据;

2.这里的分隔符使用的就是\n,转换为byte类型后进行串口发送;

3.一些模式设定可以只进行一次设定,不需要每次上电都进行设定,为保险起见,统一放在初始化里面;

4.暗光环境下测试暗光源,需要的时间会很长,手动测试版有24s之多,亮光源的测试时间在1s一次左右;

5.程序中将串口直接作为参数传递有些不妥,可以将该模块改为class

后面如果遇到了其他问题也会在此更新。

项目源码地址:https://GitHub.com/LJacki/CS2000

到此这篇关于总结Python连接CS2000的详细步骤的文章就介绍到这了,更多相关python连接CS2000内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: 总结Python连接CS2000的详细步骤

本文链接: https://www.lsjlt.com/news/128967.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 总结Python连接CS2000的详细步骤
    前言 记录CS2000设备使用串口连接以及相关控制。 CS2000是一台分光辐射亮度计,也就是可以测量光源的亮度。详细的规格网址参考CS2000/CS-2000A ,所有信息以柯尼卡...
    99+
    2022-11-12
  • 使用Idea连接MySQL的详细步骤总结
    一、创建普通java工程 创建工程跳过了,普通的java工程 二、导入mysql的jar包 mysql jar包下载地址 我使用的是5.1.15版本 创建目录,下载的jar包复制到目...
    99+
    2022-11-12
  • eclipse配置tomcat10的详细步骤总结
    eclipse配置tomcat tomcat资源下载 如果打开没有servers请查看这篇文章:eclipse创建项目没有dynamic web 如果如上图一样没有apache ...
    99+
    2022-11-12
  • Yolov5更换BiFPN的详细步骤总结
    目录第一步:修改common.py第二步:修改yolo.py第三步:修改train.py第四步:修改yolov5.yaml总结Yolov5如何更换BiFPN 第一步:修改common...
    99+
    2022-12-19
    yolov5更换bifpn yolov5 bifpn
  • DBeaver连接MySQL的超详细步骤
    目录一、DBeaver连接mysql二、Kettle连接DBeaver总结一、DBeaver连接MySQL 打开DBeaver软件,点击MySQL创建数据库连接 点击下一步 把需要连接的数据库名、用户名及密码填进去 ...
    99+
    2023-05-12
    dbeaver连接mysql dbeaver连接数据库 dbeaver连接数据库
  • 【MySQL】MySQL内连接和外连接详细总结
    目录 多表查询的分类3:内连接VS外连接(重难点)1. 内连接2.外连接3. SQL99语法实现多表查询3.1 SQL99实现内连接3.2 SQL99语法实现外连接3.2.1 左外连...
    99+
    2023-09-04
    mysql 数据库 java sql
  • 总结Gitee上创建仓库的详细步骤
    如果您想在Gitee上托管您的项目或代码,需要先创建一个仓库。以下是在Gitee上创建仓库的详细步骤。第一步:登录您的Gitee账户在浏览器中打开Gitee的官方网站,并使用您的账户名和密码登录。第二步:进入仓库页面登录成功后,您会看到Gi...
    99+
    2023-10-22
  • Debian11.6+win11双系统的安装详细步骤(总结)
    前言      Debian 计划是一个致力于创建一个自由操作系统的合作组织。我们所创建的这个操作系统名为 Debian。 操作系统是使计算机运行的基本程序和工具的集合,其中最主要的部分称为内核 (kernel)。内核是计算机中最重要的程序...
    99+
    2023-10-09
    linux 服务器 debian 运维 大数据
  • VS2015连接Oracle数据库的详细步骤
    开发环境 宿主机:Win10 + VS2015 + ODP.Net for VS2015 虚拟机:Win7 + Oracle 11g + 桥接 配置ODP.Net 首先下载 Oracle Developer...
    99+
    2022-10-18
  • QT连接MYSQL数据库的详细步骤
     第一步要加入对应的数据库模块(sql)在工程文件(.pro)介绍几个类(也是对应的头文件)  QSqlError提供SQL数据库错误信息的类 ...
    99+
    2022-11-12
  • PowerDesigner 连接MySQL数据库详细步骤
    新建一个 Physical Data ,选择自己要连接的数据库 在PowerDesigner菜单栏中,依次点击“File ->New Model->Physical Data” 点击OK 2、连接数...
    99+
    2023-09-03
    powerdesigner 数据库
  • Java连接MySQL8.0 JDBC的详细步骤(IDEA版本)
    一.导入jar包   1.下载jar包:https://dev.mysql.com/downloads/                  2.导入     在项目文件夹下新建一个名...
    99+
    2022-11-12
  • oracle连接ODBC sqlserver数据源的详细步骤
     一. 添加数据源ODBC 1.打开数据源 或者 2.添加数据源 3.选择SQL Server 4.名称:输入ODBC数据源名称 描述:随意 服务器:输入sqlse...
    99+
    2022-11-12
  • Kettle 连接MySQL连接失败 详细解决步骤(实测)
    前言:先说一下我使用的环境和软件版本,不同的环境】版本即使相同的问题可能处理的解决方案也是不一样;网上教程太多,处理起来也很烦; 操作系统:windows10、MySQL:8.0.16  Kettle :8.2 问题描述:错误连接数据库 错...
    99+
    2023-10-03
    etl 数据仓库 mysql
  • Java连接阿里云数据库的详细步骤
    在Java编程中,连接阿里云数据库是非常常见的需求。阿里云数据库提供了丰富的功能和高性能的计算能力,能够满足各种企业级应用的需求。本文将详细介绍如何使用Java连接阿里云数据库。 一、准备工作首先,你需要在阿里云上创建一个数据库实例,并获取...
    99+
    2023-11-07
    阿里 步骤 数据库
  • Java使用JDBC连接数据库的详细步骤
    目录一、JDBC是什么?二、使用步骤1.注册驱动2.获取连接3.获取数据库操作对象4.执行sql语句5.处理查询结果集6.释放资源上述六步连贯:第一次优化:(比较两种注册驱动的方法)...
    99+
    2022-11-12
  • 阿里云服务器mysql连接详细步骤
    以下是阿里云服务器mysql连接的详细步骤: 打开阿里云服务器主界面,在登录框中输入阿里云账户并输入用户名与密码,点击登录。 选择您要连接的阿里云服务器,点击连接。 输入正确的数据库连接配置信息,包括用户名、密码和连接参数。 完成连接后...
    99+
    2023-10-27
    阿里 步骤 服务器
  • Java连接Mysql数据库步骤详细讲解
    如何使用java连接mysql数据库? 使用 jdbc 连接 mysql 数据库。 详细讲解如下,请依次逐步观看,避免出错。 选择jdk版本 建议选择18以下的jdk,18版本以上可能会导致输出中文乱码。这里我们使用intellij ide...
    99+
    2023-09-03
    java mysql maven intellij-idea java-ee
  • 连接阿里云ecs云服务器的详细步骤
    随着互联网技术的发展,云服务器已经成为许多企业和个人的重要工具。阿里云作为国内最大的云计算服务商,其ecs云服务器更是备受瞩目。那么,如何连接阿里云ecs云服务器呢?本文将为你详细说明。 一、准备工作 1. 阿里云账号:你需要有一个阿里云账...
    99+
    2023-12-17
    阿里 步骤 服务器
  • Xshell远程连接linux详细步骤(小白必备)
    目录环境:前提权限查看端口关防火墙连接linux IP打开Xshell创建连接结束环境: Linux服务器我使用的是Centos虚拟机 , IP: 192.168.50.224 OK,废话不多说直接走流程 前提 权限 首...
    99+
    2022-08-16
    Xshell远程连接linux Xshell远程连接
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作