Newport Model 2936-R台式光功率计远程读表
一、Newport Model 2936-R台式光功率计
Newport Model 2936-R台式光功率计在250kHz采样率处理高达10kHz的重复率。双通道同时测量以不同功率水平和波长运行的各种光源。

二、远程读表

1、 源代码
# -*- coding: utf-8 -*-
import serial
import time
class PowermeterStrategy:
    def __init__(self, port, baudrate=38400):
        self.port = port
        self.baudrate = baudrate
        self.timeout = 1
        self.serial_connection = None
        self.command = None
        self.retry_max = 5
    def connect(self):
        try:
            self.serial_connection = serial.Serial(
                port=self.port,
                baudrate=self.baudrate,
                timeout=self.timeout,
                parity=serial.PARITY_NONE,
                stopbits=serial.STOPBITS_ONE,
                bytesize=serial.EIGHTBITS
            )
            if self.serial_connection.is_open:
                print(f"Serial port {self.port} opened successfully.")
                power = self.get_power()
        except serial.SerialException as e:
            print(f"Failed to open serial port {self.port}: {e}")
    def disconnect(self):
        if self.serial_connection and self.serial_connection.is_open:
            self.serial_connection.close()
            print(f"Serial port {self.port} closed successfully.")
    def send_command(self, command):
        if self.serial_connection and self.serial_connection.is_open:
            self.serial_connection.write(f"{command}\r".encode())
            self.command = command
            time.sleep(0.1)  # 等待设备响应
    def read_response(self):
        if self.serial_connection and self.serial_connection.is_open:
            response = self.serial_connection.read_until(b"\r").decode().strip()
            if response == self.command:
                response = self.serial_connection.read_until(b"\r").decode().strip()
                return response
            else:
                print(response)
        return None
    def send(self, command):
        self.send_command(command)
    def get_power(self):
        self.send_command("PM:P?")
        response = self.read_response()
        if response:
            try:
                power = float(response)
                return power
            except ValueError:
                print(f"Invalid response: {response}")
        return None
    def read(self):
        data = []
        errcnt = 0
        okcnt = 0
        if self.serial_connection is  None or not self.serial_connection.is_open:
            return 0.0
        while True:
            read_data = self.get_power()
            if read_data is not None:
                print(f"光功率计测量{okcnt}结果: {read_data}")
                data.append(read_data)
                okcnt += 1
                errcnt = 0
            else:
                errcnt += 1
                if errcnt > self.retry_max:
                    print("Powermeter Exceeded maximum retry count")
                    return None
            time.sleep(1)
            if okcnt >= self.retry_max:
                break
        if okcnt < 3:  # 如果成功读取的数据少于3次,无法去掉最大值和最小值
            print("Powermeter Not enough valid readings to process")
            return None
        # 去掉最大值和最小值
        data.remove(max(data))
        data.remove(min(data))
        # 计算平均值并返回,保留6位小数
        return round(sum(data) / len(data), 6)
# 示例使用
if __name__ == "__main__":
    port = "COM7"  # 替换为你的串口名称
    power_meter = PowermeterStrategy(port)
    power_meter.connect()
    power = power_meter.get_power()
    try:
        while True:
            power = power_meter.read()
            if power is not None:
                print(f"Measured power: {power} W")
            time.sleep(0.5)
    except KeyboardInterrupt:
        print("User interrupted the program.")
    finally:
        power_meter.disconnect()
测试结果:
光功率计测量0结果: -1.964794e-05
光功率计测量1结果: -1.980689e-05
光功率计测量2结果: -1.976691e-05
光功率计测量3结果: -1.975326e-05
光功率计测量4结果: -1.981323e-05
Measured power: -2e-05 W
光功率计测量0结果: -1.991562e-05
光功率计测量1结果: -2.008823e-05
光功率计测量2结果: -2.005556e-05
光功率计测量3结果: -1.992294e-05
光功率计测量4结果: -1.998486e-05
Measured power: -2e-05 W
光功率计测量0结果: -1.99439e-05
 
                    
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号