在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))
然后在本地可以输出一个类似的数据表单,可根据这个表单进行数据的二次整理
