Xena Valkyrie以太网测试仪,如何手动去获取QSFPxx光模块的温度数据

在ValkyrieManager软件界面上,有2个温度信息,一个是测试仪板卡的温度监控,另一个是光模块/TCVR的温度,针对光模块信息,还提供其功耗,Laser Power的监控信息

//之前一直以为这些信息是可有可无的,但在一次交流中,用户提出他们目前测试用的这颗光模块属于试验阶段,担心温度过高会导致损毁,所以希望能够不间断的去查询这个温度

ValkyrieManager软件UI显示的光模块温度信息等,都是来自于光模块本身的寄存器上报回来的数据,我们也可以手动去获得这些信息,/// 同样的可以将这个信息用脚本的方式来获取,达到长期记录绘制的效果。

 通过查询CMIS相关规范,我们得知温度信息分为整数位和小数位两个部分,分别在Page0 ,14,15。

我们通过获取这2个寄存器的信息,经过进制转换,公式推演,过程如下

Page0,14数据为HEX  23, 换算成十进制数值为 35,

Page0,15数据为HEX  9B ,换算成十进制数值为 155,验算后 155/256= 0.61

所以得出光模块/TCVR的温度数值为 35.61 °C


当然,为了将这些数据更友好的展示,软件也提供IEEE,QSFPxx,SFPxx多套模板,用户可以直接导入模板进行常用的一些寄存器信息的读写交互


附上Python脚本上的实现

# coding=UTF-8
import time, json, random, types, sys, socket, math, os
from binascii import hexlify
from TestUtilsL23 import XenaScriptTools

#########################################
##############Description################
## Aurthor: Zohn Yang                  ##
## Date : 2019-12-1                    ##
## Email : szy@xenanetworks.com        ##
## Software : Pyhton 3.7.4             ##
## This is a scripting special for the ##
## transceiver test. It could monitor  ##
## each x seconds Fec bit error rate   ##
## base on the port and each physical  ##
## lines.                              ##
#########################################


def runtest(xm, ports, tt, step, number):
	filename = 'output.txt'
	with open(filename,'ab') as f:
		for m in range(11):
			for n in range(256):
				print(m)
				print(n)
				res = xm.Send("4/0 PX_RW [" + str(m) + "," + str(n) + "] ?")
				res = res.encode()
				f.write(res + b'\r\n')
				print(str(res))
				res = xm.Send("4/1 PX_RW [" + str(m) + "," + str(n) + "] ?")
				res = res.encode()
				f.write(res + b'\r\n')
				print(str(res))


def main(argv):
	a = sys.argv
	configvalue = {}
	with open('config.json','rb') as f:
		configs=json.loads(f.read())

		ip_address = configs.get('ip_address')
		ports = configs.get('ports', '')
		tt = configs.get('time')
		step = configs.get('step')
		number = configs.get('number')

	xm = XenaScriptTools(ip_address)
	xm.LogonSetOwner("xena", "python_test_1")
	runtest(xm, ports, tt, step, number)



if __name__ == '__main__':
    sys.exit(main(sys.argv))

然后在本地可以输出一个类似的数据表单,可根据这个表单进行数据的二次整理

 

posted @ 2022-09-08 15:06  Evan_丹麦信雅纳网络  阅读(16)  评论(0编辑  收藏  举报  来源