Python编程实现USB转RS485串⼝通信---作者疆,未经允许,严禁转载,违权必究---
---欢迎指正,需要源码和⽂件可站内私信联系---
----------------------
功能说明:Python编程实现USB转RS485串⼝通信(发送数据、接收数据均为16进制格式)
运⾏环境:Windows7&Python3.7与Ubuntu14.04&Python2.7,宇泰UT-890A USB转RS-485/422串⼝连接线
⽂件下载: vsl7
⼀、Windows7&Python3.7下Python编程实现USB转RS485串⼝通信
参考链接:、
(1)驱动下载
解压驱动压缩包,选取..\390-11000880 V01\Driver\win xp server2003 2008 2012 Vista 7 8 8.1 10 32-64bit\中Autoinstaller_WHQL_CDM2.12.24_Win 2K, XP, Vista, 7, 8, 8.1, 10, 傻⽠式安装,
可见。
(2)环境搭建
安装serial库,cmd中执⾏命令 pip3 install pyserial
(3)源码实现
# -*- coding:utf-8 -*-python怎么读取串口数据
# Author: WUJiang
# 运⾏环境为Windows7&Python3.7
import serial
import time
ser = serial.Serial("com3", 9600) # 选择串⼝,并设置波特率
if ser.is_open:
print("port open success")
# hex(16进制)转换为bytes(2进制),应注意Python3.7与Python2.7此处转换的不同
send_data = bytes.fromhex('ff 01 00 55 00 00 56') # 发送数据转换为b'\xff\x01\x00U\x00\x00V'
ser.write(send_data) # 发送命令
time.sleep(0.1) # 延时,否则len_return_data将返回0,此处易忽视
len_return_data = ser.inWaiting() # 获取缓冲数据(接收数据)长度
if len_return_data:
return_data = ad(len_return_data) # 读取缓冲数据
# bytes(2进制)转换为hex(16进制),应注意Python3.7与Python2.7此处转换的不同,并转为字符串后截取所需数据字段,再转为10进制 str_return_data = str(return_data.hex())
feedback_data = int(str_return_data[-6:-2], 16)
print(feedback_data)
else:
print("port open failed")
⼆、Ubuntu14.04&Python2.7下Python编程实现USB转RS485串⼝通信
参考链接:、
(1)驱动下载
按linux对应驱动安装包中readme说明直接make报错,解决不了寻求宇泰科技官⽅技术⽀持,建议我更新系统内核(我拒绝!),后来提供了⼀个说明⽂件(),经验证本机ubuntu14.04的4.4.0内核集成了该USB驱动,免去了安装⿇烦。
(2)环境搭建
ubuntu14.04中预装了python-serial,其版本为2.6,需要卸载重新安装⾼版本的pyserial,否则会有相
关接⼝错误,如‘serial’ object has no attribute 'is_open',执⾏以下命令,卸载原有python-serial,pip安装pyserial。
sudo apt-get remove python-serial
sudo apt-get install python-pip
sudo pip install pyserial
(3)源码实现
# -*- coding:utf-8 -*-
# Author: WUJiang
# 运⾏环境为Ubuntu14.04&Python2.7
import serial
import time
ser = serial.Serial("/dev/ttyUSB0", 9600) # 选择串⼝,并设置波特率
if ser.is_open:
print("port open success")
# hex(16进制)转换为bytes(2进制),应注意Python2.7与Python3.7此处转换的不同
send_data = 'ff010*********'
send_data = send_data.decode('hex') # 发送数据转换为b'\xff\x01\x00U\x00\x00V'
ser.write(send_data) # 发送命令
time.sleep(0.1) # 延时,否则len_return_data将返回0,此处易忽视
len_return_data = ser.inWaiting() # 获取缓冲数据(接收数据)长度
if len_return_data:
return_data = ad(len_return_data) # 读取缓冲数据
# bytes(2进制)转换为hex(16进制),应注意Python2.7与Python3.7此处转换的不同,并转为字符串后截取所需数据字段,再转为10进制
str_return_data = str(de('hex'))
feedback_data = int(str_return_data[-6:-2], 16)
print(feedback_data)
else:
print("port open failed")
注意:Python2、Python3中bytes(2进制)与hex(16进制)相互转换有区别,以下摘⾃。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论