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号