python进行虚拟串口通信,不讲废话,直接上代码

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)


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值