失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > python实现485通讯_Python编程实现USB转RS485串口通信

python实现485通讯_Python编程实现USB转RS485串口通信

时间:2020-05-15 14:35:24

相关推荐

python实现485通讯_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 server Vista 7 8 8.1 10 32-64bit\中Autoinstaller_WHQL_CDM2.12.24_Win 2K, XP, Vista, 7, 8, 8.1, 10, 32_64bit.exe傻瓜式安装,可见USB转串口连接线与串口调试助手的使用。

(2)环境搭建

安装serial库,cmd中执行命令 pip3 install pyserial

(3)源码实现

#-*- coding:utf-8 -*-#Author: WUJiang#运行环境为Windows7&Python3.7

importserialimporttime

ser= serial.Serial("com3", 9600) #选择串口,并设置波特率

ifser.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() #获取缓冲数据(接收数据)长度

iflen_return_data:

return_data= ser.read(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("portopen failed")

二、Ubuntu14.04&Python2.7下Python编程实现USB转RS485串口通信

(1)驱动下载

按linux对应驱动安装包中readme说明直接make报错,解决不了寻求宇泰科技官方技术支持,建议我更新系统内核(我拒绝!),后来提供了一个说明文件(FTDI.txt),经验证本机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

importserialimporttime

ser= serial.Serial("/dev/ttyUSB0", 9600) #选择串口,并设置波特率

ifser.is_open:print("port open success")#hex(16进制)转换为bytes(2进制),应注意Python2.7与Python3.7此处转换的不同

send_data = 'ff010055000056'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() #获取缓冲数据(接收数据)长度

iflen_return_data:

return_data= ser.read(len_return_data) #读取缓冲数据

#bytes(2进制)转换为hex(16进制),应注意Python2.7与Python3.7此处转换的不同,并转为字符串后截取所需数据字段,再转为10进制

str_return_data = str(return_data.encode('hex'))

feedback_data= int(str_return_data[-6:-2], 16)print(feedback_data)else:print("portopen failed")

注意:Python2、Python3中bytes(2进制)与hex(16进制)相互转换有区别,以下摘自Python-bytes和hex字符串之间的相互转换。

如果觉得《python实现485通讯_Python编程实现USB转RS485串口通信》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。