Ubuntu+Python环境做上位机

2023-11-10

最近需要制作程控电阻箱的上位机,使得大学毕业后就不再接触硬件的我无从下手.拿到机器后不知道怎么与其进行通信,Google上的资料也很少,现将我的环境搭建过程记录下来,希望对和我一样的小白有所帮助.

软件环境:
Ubuntu 16.04
python 3.5
硬件环境:
RS232 串口
SCPI指令的程控电阻箱

先说一下接口问题,串口通信不一定非要使用232(9针)接口,usb-usb或者usb-232都可以,目前主流浏览器大都默认支持这些驱动,需要区别的是Windows上接口名为"COM"口,而Ubuntu上则为"/dev/ttyS*“或”/dev/ttyUSB*",在编程时需要这些接口名称.

Ubuntu上查找接口名可通过dmesg命令,dmesg命令可以查看众多系统信息,包括开机\CPU\RAM\接口信息等等.

向接口发送/读取信息方式

  • cutecom (GUI)

cutecom是一个GUI程序,其作用类似minicom,可以对接口发送信息并读取信息.

sudo apt install cutecom
//一定要用sudo启动cutecom,否则会提示接口没有访问权限
sudo cutecom 

在这里插入图片描述
注: 在cutecom和下面介绍的命令行工具同时开启并访问同一接口的情况下,命令行工具会无法读取接口数据,只能写入,因而命令行工具出现读取超时或读取无反应时,确保cutecom关闭.

  • pyvisa

pyvisa是符合VISA标准的python版本(貌似并不需要安装NI-VISA,而且由于Ubuntu上没有rpm,所以在Ubuntu上安装NI-VISA非常困难)

sudo pip install pyvisa
//安装python版本visa标准
sudo pip install pyvisa-py

安装完成后即可通过python与设备进行通信

import visa
rm = visa.ResourceManager() # visa.ResorceManager('@py')可指定使用python版的visa后端,这里使用默认即可
rm.list_resources()         # 列出可用接口
inst = rm.open_resource('ASRL/dev/ttyS0::INSTR')  # 默认腾讯速率为9600, 无校验位, 停止位为1
inst.write('OUTP:STAT ONL') # 对接口写入
inst.read()                 # 对接口读取

如果read的时候报错:

VisaIOError: VI_ERROR_TMO (-1073807339): Timeout expired before operation completed.

则极有可能是因为命令结束符设置错了,也就是说读取到了输出,但是不知道在哪里结束,造成响应超时. 大多数设备命令结束符为’\r’,也就是回车. 但也有’\n’,比如我的设备就是.通过以下命令可设置结束符:

inst.read_termination = '\n'

write和read配合使用往往会出现输出漏字符现象,这是因为读取过快,需要在write和read之间设置一段延时,可以通过pyvisa自己的delay或系统的time.sleep(1)引入延时.

inst.query(‘命令’)则是更方便的命令,它将write和read合二为一,并且不用考虑漏字符现象,所以更推荐使用:

import visa
...
print(inst.query('OUTP:STAT?')) # 向设备询问当前状态,并打印在终端上
  • pyserial

pyserial是可以让我们以python方式访问接口的封装包,安装方式为:

sudo pip install pyserial

以root用户执行:

import serial
import serial.tools.list_ports
print(list(serial.tools.list_ports.comports())) # 列出可访问接口
ser = serial.Serial("/dev/ttyS0") #默认腾讯速率为9600, 无校验位, 停止位为1
ser.write('OUT:STAT ONL\n'.encode()) #一定记住这里要用'\n'结束符,否则命令无法执行,
ser.readline() # 可读取以'\n'作为结束符的内容

:pyserial读取的内容可以完全显示出来,包括结束符,比如我这里输出结果为

 b'OUTP:STAT OPEN\n'

结束符一般是’\n’, 由于自己是个小白, 对结束符不太了解, 设备的开发文档上写的结束符是’<\n>’, 造成使用serial发送指令时一直不成功,而visa和echo会默认添加’\n’, 使用pyvisa会造成在后期用pyinstaller打包后, 程序找不到visa相关文件的问题, 因而如果是普通设备,建议使用pyserial, 不建议pyvisa.

因而如果你不知道你的设备反回的结束符是什么,可以通过pyserial获知,并结合pyvisa设置结束符,解决读取超时的问题.算是一个意外发现吧.

  • bash

通过bash的重定向就能实现写入,读取功能的实现还不清楚

// 需要超级用户权限,"sudo + 命令"的形式依旧提示权限不够
sudo su
echo "OUTP:STAT ONL" > /dev/ttyS0

折腾一天半,总算是能访问了,下一步打算用pyqt做成图形界面的上位机.(就算死也不用windows)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Ubuntu+Python环境做上位机 的相关文章

随机推荐

  • 黑苹果升级到catalina 10.15.6问题

    配置 dell 9570 从catalina 10 15 4升级到 10 15 5 无任何问题 今天手贱 升级到10 15 6 问题来了 主要表现是 有时启动不成功 另外就是三指拖动窗口失效 发现xcode也升级了 可能需要重新编译 也许有
  • node.js操作mysql数据库和sql server数据库

    node js操作mysql数据库和sql server数据库 这一篇博客主要是数据库的 特别是sql server数据库 首先讲解mysql 因为mysql的操作并不复杂 所以讲解会很快 第一步 第一步肯定是导入模块 和配置配置项 con
  • 关于单舵轮AGV运动学模型整理笔记

    2 1 单舵机图画 2
  • Daily report和weekly report很重要

    7 Daily report和weekly report很重要很多程序员宁愿多写程序 也不愿意写report 觉得十分麻烦 而又无聊 但是Daily report weekly report真的非常的重要 首先report可以帮助你管理自己
  • 多个el-tab共用一个表单校验问题

    需求是这样的 有多项tab 切换不同的tab 显示的输入框是一样的 但有的tab需要必填 有的tab则不需要必填 效果图如下 带星号和不带星号
  • 西门子PN协议分布式IO模块

    BL200Pro版本支持OPC UA MQTT和Modbus TCP协议 分布式I O模块系统由于具有可靠度高 容易扩展 设置容易 网络布线方便等特性 适用于分散地区的应用 广泛应用于数据收集和各种控制 产品广泛应用于物联网 智慧工厂 智慧
  • 【进程间通信(三)】共享内存(system v)

    一 共享内存通信的实现原理 其实进程之间通信的本质就是让通信双方看见同一份内存 这样当这份内存的数据发生改变的时候 双方进程都能直接观察到结果 这份内存存放在共享数据区 由操作系统提供并维护 共享内存的特性是只会储存进程之间通信产生的临时变
  • 从Qt谈到C++(一):关键字explicit与构造函数

    原文 http blog csdn net guodongxiaren article details 24455653 主题 Qt 提出疑问 当我们新建了一个Qt的widgets应用工程时 会自动生成一个框架 包含了几个文件 其中有个ma
  • 关于sshd服务无法开启的问题集合

    SSHD服务开启问题集合 报错1 错误 systemctl restart sshd Failed to restart sshd service Interactive authentication required See system
  • 沈师 PTA 数据库题目及部分解析 第一章

    判断题 1 一个数据库只有一个模式和一个内模式 T 2 数据模型是由数据结构 数据操作和完整性约束三部分组成的 T 3 由于数据库中的数据是不断更新的 因此关系模式是相对变化的 F 解析 关系模式不会相对变化 变化的是实例 4 数据库中的数
  • linux中vim/gvim的安装与verilog,systemverilog语法高亮显示

    linux中vim gvim的安装参考如下链接 https blog csdn net Stone Age article details 47276995 utm source blogxgwz8 安装完后 在用户目录下vim和gvim都
  • SpringBoot集成redis

    一 下载安装redis 1 官网地址 https redis io 2 GitHub地址 https github com MicrosoftArchive redis tags 3 安装 自行安装 二 SpringBoot集成redis
  • 【odoo】创建带用户类型的odoo用户,基于xml

  • 3dmax卡顿、卡死 怎么解决?

    一般3dmax容易卡 主要有下面几个原因 1 Win10自带的微软输入法引起的 2 3dmax病毒引起的 3 3d场景太多垃圾引起的 4 模型太大 5 显卡驱动或显示模式不正确 如果是Win10自带的微软输入法引起的 只需要将Win10下面
  • 【web漏洞】PHP反序列化

    目录 知识点 反序列化常用方法 序列化的 构造payload 运行顺序 反序列化的 实现payload 运行顺序 绕过 wakeup tostring 知识点 序列化 serialize 对象的状态信息转换为可以存储或传输的形式的过程 在序
  • CUDA_NVCC_FLAGS set

    NVIDIA CUDA C 编译器 nvcc 基于每个内核 既可以用来产生特定于体系结构的 cubin 文件 又能产生前向兼容的 PTX 版本 每个 cubin 文件针对特定的计算能力版本 并且仅与相同主要版本号的 GPU 架构向前兼容 例
  • 网页制作神器—ElementUI(小白入门超详细)

    目录 一 前置准备 初始化Vue 项目 二 引入ElementUI 三 使用ElementUI 一 前置准备 1 安装相关环境 使用VsCode或者webstrom初始化Vue 项目 软件环境下载地址 软件 坚果云 同步 备份 无限空间 v
  • 一些工具类

    1 字符串处理工具类 1 1 StrUtils package com study java8 util Classname StrUtils Description 字符串工具类 Date 2023 9 9 9 37 Author jsz
  • Windows7 64位系统下安装 latex:texlive2019 和 texstudio

    1 下载及安装texlive2019 a 网上下载方法很多 TeX套装下载来这里 http www latexstudio net texsoftware b https www tug org texlive c https mirror
  • Ubuntu+Python环境做上位机

    最近需要制作程控电阻箱的上位机 使得大学毕业后就不再接触硬件的我无从下手 拿到机器后不知道怎么与其进行通信 Google上的资料也很少 现将我的环境搭建过程记录下来 希望对和我一样的小白有所帮助 软件环境 Ubuntu 16 04 pyth