1、重要函数
ser.isOpen() 查看端口是否被打开
ser.open() 打开端口
ser.close() 关闭端口
ser.read() 从端口读字节数据。默认1个字节。
ser.read_all() 从端口接收全部数据。
ser.write(“30”) 向端口写数据。
ser.readline() 读一行数据。
ser.readlines() 读多行数据。
in_waiting() 返回接收缓存中的字节数。
flush() 等待所有数据写出。
flushInput() 丢弃接收缓存中的所有数据。
flushOutput() 终止当前写操作,并丢弃发送缓存中的数据。
2、Serial()
方法
port port = ‘COM1’ 读或者写端口
baudrate baudrate = 9600 波特率
bytesize bytesize = 8 字节大小
parity parity = ‘N’ 校验位
stopbit stopbits = 1 停止位
timeout timeout = None 超时设置
xonxoff xonxoff = False 软件流控
rtscts rtscts = False 硬件流控
dsrdtr dsrdtr = False 硬件流控
import serial
import serial.tools.list_ports
import time
class Ser_control:
def __init__(self):
COM = self.get_COM_number()
try:
# 初始化串口
self.ser = serial.Serial(
port=COM, # 根据实际情况修改端口号
baudrate=9600,
parity=serial.PARITY_NONE,
stopbits=serial.STOPBITS_ONE,
bytesize=serial.EIGHTBITS,
timeout=1
)
except Exception as e:
if '拒绝访问' in e.args[0]:
print('端口占用中,请断开端口连接')
else:
print(f'未知错误:{e}')
def get_COM_number(self):
port_list = list(serial.tools.list_ports.comports())
if len(port_list) <= 0:
print("This Serial Port Can not Find!!")
else:
for i in port_list:
name = i.description
# print(i.description,type(i.description))
if 'STMicroelectronics Virtual' in name:
COM = name.split('(')[1].split(')')[0]
return COM
def send_number(self,number):
if self.ser.is_open==True:
print('连接成功')
self.ser.write(f'att-0{number}.00\r\n'.encode('utf-8'))
time.sleep(1)
if self.ser.in_waiting > 0:
result = self.ser.read_all().decode('utf-8').rstrip()
print(result)
if 'attOK' in result:
print(f'衰减值:{number} 设定成功')
return True
else:
print('指令发送错误')
return False
else:
print('指令无响应')
return False
def __del__(self):
#如果端口处于连接状态,进行关闭连接
if self.ser.is_open:
self.ser.close()
if __name__ == '__main__':
Ser_control().send_number(25)