SFP光口通信控制电源

2023-10-31 04:10
文章标签 通信 控制 电源 sfp 光口

本文主要是介绍SFP光口通信控制电源,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

千兆光电转换器测试

  • 0 首先拿到千兆光电转换器
  • 1 UDP设置值
    • 1.1 UDP帧格式
    • 1.2 UDP data
  • 2 接下来计划

首先在这要夸一下国产产品,现在的电子模块,标准电子元器件或者类似交换机、光电转换器这样的,国产真的是感觉不必国外的差,支持国产。
两天时间从淘宝上买下 就到了,非常的快捷。

0 首先拿到千兆光电转换器

产品如下图所示:
在这里插入图片描述

  • PC与光电转换器 网口连接以及光电转换器与电源光纤连接
    在这里插入图片描述

经过与客服上的技术支持 咨询,把光纤线连接如下,并ping通。电源的IP地址设置成192.168.0.100,PC上的IP地址设置成192.168.0.2;并成功ping通。
图片如下:
在这里插入图片描述

  • 指示灯状态说明
    其中光电转换器的指示灯状态说明如下:
    FX代表光纤连通,而FX右边的代表网口(电口)连通,上面1000代表1000M。
    以上说明物理层 以太帧这块基本没问题。

1 UDP设置值

  • 修改Demo例程
    通过之前的Python代码,把IP地址修改对应。
    需要根据技术手册把UDP帧格式搞懂
    根据向销售电源设备的技术支持询问,拿到一段Python代码并读懂,然后根据技术手册对UDP帧格式的说明,修改对应参数。
import socket
import struct # -----------------------------------------------------------------------------
# Parameters:
# -----------------------------------------------------------------------------
# IP地址应该要对应修改一下,变量声明HOST_IP = '192.168.0.2'
HOST_PORT = 28685   #端口自定义 DEST_IP = '192.168.0.100'#DEVICE_IP = '192.168.0.10'
#DEVICE_IP = '255.255.255.255'
DEVICE_PORT = 30721  #标准设备端口号
#RESP_TIMEOUT = 0.4# 是不是构建UDP格式
FAST_PROTOCOL_ID = 0x7631
COMMAND = 0xFFDD    # 这值设置的是不是有问题 
NONCE = 0x111122223333AAAAFAST_ADDR = 0xFFFF  # 地址值
SET_POINT = 6.0     #分别是MSB值 和LSB值 DUMMY_ADDR = 0xAACB
DUMMY_SET_POINT = -4012300012348754.123456789BROADCAST = True# -----------------------------------------------------------------------------
# Costants:
#data = b'\x43\x41\x45\x4E\x65\x6C\x73'   #CAENels
#data = b'\x12\x34'  
# Packet Header:# 把上面的帧打包成帧  对应UDP格式来进行打包
data = struct.pack('>H', FAST_PROTOCOL_ID) # Bin endian - unsigned short (16 bits - 2 bytes)
data += struct.pack('>H', COMMAND)         # Bin endian - unsigned short (16 bits - 2 bytes)
data += struct.pack('>Q', NONCE)           # Bin endian - unsigned long long (64 bits - 8 bytes)
# Packet data:
data += struct.pack('>Hf', DUMMY_ADDR, DUMMY_SET_POINT)   # 6 bytes
data += struct.pack('>Hf', FAST_ADDR, SET_POINT)   # Bin endian - unsigned short + float (2 bytes + 4 bytes)
data += struct.pack('>Hf', DUMMY_ADDR, DUMMY_SET_POINT)   # 6 bytes
data += struct.pack('>Hf', DUMMY_ADDR, DUMMY_SET_POINT)   # 6 bytes
data += struct.pack('>Hf', DUMMY_ADDR, DUMMY_SET_POINT)   # 6 bytes
data += struct.pack('>Hf', FAST_ADDR, SET_POINT)   # Bin endian - unsigned short + float (2 bytes + 4 bytes)
data += struct.pack('>Hf', DUMMY_ADDR, DUMMY_SET_POINT)   # 6 bytes# Broadcast socket configuration:
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)    
s.settimeout(1.0)
s.bind((HOST_IP, HOST_PORT))s_recv = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)  
s_recv.settimeout(1.0)
s_recv.bind(('', DEVICE_PORT))# Send:
if (BROADCAST):s.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR, 1) s.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1) s.sendto(data, ('<broadcast>', DEVICE_PORT))
else:s.sendto(data, (DEST_IP, DEVICE_PORT))m = s_recv.recv(1024)
print("Recv:", m)# Close connections:
s.close()
s_recv.close()

1.1 UDP帧格式

UDP帧格式由:UDP header + UDP data 组成。
1.UDP header
UDP 头由 4 个字段组成,每个字段为 16 位。
UDP header = source port + destination port + length +checksum.

1.2 UDP data

The device Fast Address (ID) : 可以设置也可以读取
值是:65535 十六进制是:0XFFFF。
通过光纤可以进行设置数值,如下所示:
在这里插入图片描述

尝到成功的感觉了,有点兴奋,兴奋,兴奋。先兴奋半小时,接下来就是对变量和对数值的意义 进行搞清楚。现在是站在别人的肩膀上来实现成功了一下。

2 接下来计划

接下来自己尝试能不能FPGA尝试复现一下Python代码,用Verilog来重写描述一下。
方案:1. 首先是尽可能找到已有现成的FPGA实现Demo,阅读并加以理解。
2. 是看一下论文或者文章,了解一下这大致是个什么过程和实现原理
3. 修改测试一下,还是使用FPGA的网口连接电源。

这篇关于SFP光口通信控制电源的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/312714

相关文章

用js控制视频播放进度基本示例代码

《用js控制视频播放进度基本示例代码》写前端的时候,很多的时候是需要支持要网页视频播放的功能,下面这篇文章主要给大家介绍了关于用js控制视频播放进度的相关资料,文中通过代码介绍的非常详细,需要的朋友可... 目录前言html部分:JavaScript部分:注意:总结前言在javascript中控制视频播放

Python异步编程中asyncio.gather的并发控制详解

《Python异步编程中asyncio.gather的并发控制详解》在Python异步编程生态中,asyncio.gather是并发任务调度的核心工具,本文将通过实际场景和代码示例,展示如何结合信号量... 目录一、asyncio.gather的原始行为解析二、信号量控制法:给并发装上"节流阀"三、进阶控制

使用DrissionPage控制360浏览器的完美解决方案

《使用DrissionPage控制360浏览器的完美解决方案》在网页自动化领域,经常遇到需要保持登录状态、保留Cookie等场景,今天要分享的方案可以完美解决这个问题:使用DrissionPage直接... 目录完整代码引言为什么要使用已有用户数据?核心代码实现1. 导入必要模块2. 关键配置(重点!)3.

SpringSecurity 认证、注销、权限控制功能(注销、记住密码、自定义登入页)

《SpringSecurity认证、注销、权限控制功能(注销、记住密码、自定义登入页)》SpringSecurity是一个强大的Java框架,用于保护应用程序的安全性,它提供了一套全面的安全解决方案... 目录简介认识Spring Security“认证”(Authentication)“授权” (Auth

python之流程控制语句match-case详解

《python之流程控制语句match-case详解》:本文主要介绍python之流程控制语句match-case使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录match-case 语法详解与实战一、基础值匹配(类似 switch-case)二、数据结构解构匹

Spring Security注解方式权限控制过程

《SpringSecurity注解方式权限控制过程》:本文主要介绍SpringSecurity注解方式权限控制过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、摘要二、实现步骤2.1 在配置类中添加权限注解的支持2.2 创建Controller类2.3 Us

Python中如何控制小数点精度与对齐方式

《Python中如何控制小数点精度与对齐方式》在Python编程中,数据输出格式化是一个常见的需求,尤其是在涉及到小数点精度和对齐方式时,下面小编就来为大家介绍一下如何在Python中实现这些功能吧... 目录一、控制小数点精度1. 使用 round() 函数2. 使用字符串格式化二、控制对齐方式1. 使用

Springboot控制反转与Bean对象的方法

《Springboot控制反转与Bean对象的方法》文章介绍了SpringBoot中的控制反转(IoC)概念,描述了IoC容器如何管理Bean的生命周期和依赖关系,它详细讲解了Bean的注册过程,包括... 目录1 控制反转1.1 什么是控制反转1.2 SpringBoot中的控制反转2 Ioc容器对Bea

浅析如何使用Swagger生成带权限控制的API文档

《浅析如何使用Swagger生成带权限控制的API文档》当涉及到权限控制时,如何生成既安全又详细的API文档就成了一个关键问题,所以这篇文章小编就来和大家好好聊聊如何用Swagger来生成带有... 目录准备工作配置 Swagger权限控制给 API 加上权限注解查看文档注意事项在咱们的开发工作里,API

Spring IOC控制反转的实现解析

《SpringIOC控制反转的实现解析》:本文主要介绍SpringIOC控制反转的实现,IOC是Spring的核心思想之一,它通过将对象的创建、依赖注入和生命周期管理交给容器来实现解耦,使开发者... 目录1. IOC的基本概念1.1 什么是IOC1.2 IOC与DI的关系2. IOC的设计目标3. IOC