跳转至

RJ45_px6x 接口文档

简介

简述:该文件提供了基于RJ45网口连接PX6x系列无人机集群的TCP通信设备管理能力,实现了网口设备抽象与TCP服务端功能,支持无人机集群的组网通信。

在RflySim无人机集群仿真与实飞测试场景中,多架PX6x飞控无人机通常需要通过有线RJ45网口与地面站控制端建立稳定的数据通信,实现飞行控制指令下发、飞控状态回传等功能。本模块作为RflySimSDK集群模块的网口通信组件,通过RJ_Device类抽象单个RJ45连接的PX6x无人机通信设备,TCPServer类提供多设备接入的TCP服务支撑,适用于实机RJ45组网集群测试、仿真环境固定IP集群通信对接等场景,为上层集群任务调度、状态监控提供基础通信接口。

快速开始

最简可用示例,复制后修改最少配置即可运行。

from RflySimSDK.swarm import RJ45_px6x

# 1. 初始化RJ45组网设备对象,使用默认广播地址和端口
rj_device = RJ45_px6x.RJ_Device()

# 2. 搜索局域网内的所有PX6x设备,设置搜索超时时间为2秒
found_devices = rj_device.discover_devices(timeout=2)
print("搜索到的设备列表:", found_devices)

# 3. 示例:重启指定ID的设备(如果搜索到设备则执行)
if found_devices:
    first_device_id = found_devices[0]
    print(f"正在重启设备 {first_device_id}")
    rj_device.reboot_device_by_id(device_id=first_device_id)

# 4. 启动所有已发现的设备
rj_device.start_all_devices()
print("所有设备已启动")

环境与依赖

  • Python 环境>= 3.8.10
  • 依赖库resockettime
  • 前置准备:调用此接口前,必须确保已正确配置RJ45网络连接,完成PX6x设备的硬件接线,并正确安装RflySimSDK依赖环境。

核心接口说明

该模块 RJ45_px6x.py 包含了配置变量、辅助函数及核心业务类。

全局常量与枚举定义

本节列出模块中所有可直接引用的全局常量和枚举定义。

独立常量


全局/独立函数


RJ_Device

用于通过UDP广播发现和管理网口连接的PX6x系列RJ45设备,支持设备发现、重启、网络配置等功能,适用于集群无人机设备的网络管理场景。

__init__(broadcast_ip='255.255.255.255', broadcast_port=5000)

功能说明:初始化RJ_Device设备管理对象,设置UDP广播的IP地址和端口 参数列表 (Args)

参数名 类型 是否必填 默认值 说明
broadcast_ip str '255.255.255.255' UDP广播使用的IP地址
broadcast_port int 5000 UDP广播使用的端口号

返回值 (Returns)

  • RJ_Device 实例对象

异常 (Raises)


discover_devices(timeout=1)

功能说明:在局域网内广播搜索可用的RJ45设备,获取已发现设备的列表信息 参数列表 (Args)

参数名 类型 是否必填 默认值 说明
timeout float 1 等待设备响应的超时时间,单位为秒

返回值 (Returns)

  • list: 包含所有发现的设备信息字典的列表,每个字典包含设备ID、IP地址等信息

异常 (Raises)

示例

from RflySimSDK.swarm.RJ45_px6x import RJ_Device
device_manager = RJ_Device()
# 搜索局域网内的设备,超时2秒
devices = device_manager.discover_devices(timeout=2)
print(f"发现{len(devices)}个设备: {devices}")

reboot_device_by_id(device_id)

功能说明:根据设备ID向指定设备发送重启指令 参数列表 (Args)

参数名 类型 是否必填 默认值 说明
device_id int/str - 目标设备的ID

返回值 (Returns)

  • bool: 指令发送成功返回True,失败返回False

异常 (Raises)


start_all_devices()

功能说明:向局域网内所有已发现的设备发送启动指令 参数列表 (Args): 无 返回值 (Returns)

  • None

异常 (Raises)


get_current_ip(device_id)

功能说明:根据设备ID获取对应设备当前的IP地址 参数列表 (Args)

参数名 类型 是否必填 默认值 说明
device_id int/str - 目标设备的ID

返回值 (Returns)

  • str | None: 成功获取返回设备的IP地址字符串,未找到对应设备则返回None

异常 (Raises)


set_dhcp(device_id, enable)

功能说明:设置指定设备是否启用DHCP自动获取IP 参数列表 (Args)

参数名 类型 是否必填 默认值 说明
device_id int/str - 目标设备的ID
enable bool - True表示开启DHCP,False表示禁用DHCP

返回值 (Returns)

  • bool: 设置成功返回True,失败返回False

异常 (Raises)

示例

from RflySimSDK.swarm.RJ45_px6x import RJ_Device
device_manager = RJ_Device()
devices = device_manager.discover_devices()
# 开启第一个设备的DHCP
if devices:
    device_id = devices[0]['device_id']
    success = device_manager.set_dhcp(device_id, enable=True)
    print(f"设置DHCP结果: {success}")

set_static_ip(device_id, ip_address, gateway, mask)

功能说明:为指定设备设置静态IP地址、网关和子网掩码 参数列表 (Args)

参数名 类型 是否必填 默认值 说明
device_id int/str - 目标设备的ID
ip_address str - 要设置的静态IP地址
gateway str - 要设置的网关地址
mask str - 要设置的子网掩码

返回值 (Returns)

  • bool: 设置成功返回True,失败返回False

异常 (Raises)


modify_device_id(device_id)

功能说明:修改指定设备的设备ID 参数列表 (Args)

参数名 类型 是否必填 默认值 说明
device_id int/str - 设备要修改为的新ID

返回值 (Returns)

  • bool: 修改成功返回True,失败返回False

异常 (Raises)


modify_device_port(device_id)

功能说明:修改指定设备的通信端口 参数列表 (Args)

参数名 类型 是否必填 默认值 说明
device_id int/str - 设备要修改为的新通信端口

返回值 (Returns)

  • bool: 修改成功返回True,失败返回False

异常 (Raises)

TCPServer

TCP/UDP多模式网络通信服务端工具类,用于RflySim无人机集群仿真中建立PX6x飞控与仿真环境的网络通信,支持TCP服务端、TCP客户端、UDP客户端、UDP服务端四种连接模式切换。

__init__()

功能说明:初始化TCPServer实例对象 参数列表 (Args)

无参数

返回值 (Returns)

  • TCPServer 实例对象

异常 (Raises): 无


get_local_ip()

功能说明:获取本机可用的局域网IP地址,用于网络通信绑定 参数列表 (Args)

无参数

返回值 (Returns)

  • str: 本机局域网IP地址

异常 (Raises): 无


setup_server()

功能说明:根据当前配置的连接模式启动网络服务,完成套接字绑定与监听/连接初始化 参数列表 (Args)

无参数

返回值 (Returns)

异常 (Raises): 无


功能说明:打印当前使用的网络连接模式 参数列表 (Args)

无参数

返回值 (Returns)

异常 (Raises): 无


change_connection_mode()

功能说明:修改网络连接模式,允许用户交互选择所需的连接模式 参数列表 (Args)

无参数

返回值 (Returns)

异常 (Raises): 无


set_default_cleanup()

功能说明:释放网络资源,关闭已打开的套接字 参数列表 (Args)

无参数

返回值 (Returns)

异常 (Raises): 无


set_default_mode()

功能说明:设置默认网络连接方式为UDP_SERVER_MODE 参数列表 (Args)

无参数

返回值 (Returns)

异常 (Raises): 无

示例

from RflySimSDK.swarm import TCPServer

# 创建TCPServer实例并使用默认配置
tcp_server = TCPServer()
tcp_server.set_default_mode()
tcp_server.setup_server()

# 打印当前连接模式
tcp_server.print_current_mode()

# 退出时释放资源
tcp_server.set_default_cleanup()

类变量说明

类变量名 类型 说明
TCP_SERVER_MODE int 0 TCP服务端连接模式
TCP_CLIENT_MODE int 1 TCP客户端连接模式
UDP_CLIENT_MODE int 2 UDP客户端连接模式
UDP_SERVER_MODE int 3 UDP服务端连接模式

进阶用法示例

展示复杂组合场景(如多类协作、异步控制、批量操作)

import RflySimSDK.swarm.RJ45_px6x as rj_sdk
import asyncio

async def batch_configure_devices(async_interval=1):
    # 批量扫描发现所有在线RJ45设备
    device_list = rj_sdk.RJ_Device.discover_devices(timeout=5)
    if not device_list:
        print("未发现任何可配置设备")
        return None
    # 启动TCP服务完成设备通信链路搭建
    tcp_server = rj_sdk.TCPServer()
    local_ip = tcp_server.get_local_ip()
    tcp_server.setup_server(local_ip, 8899)
    tcp_server.set_default_cleanup()
    # 异步批量修改设备ID与静态IP,避免同步等待阻塞
    config_tasks = []
    for idx, dev in enumerate(device_list):
        new_id = 100 + idx
        new_ip = f"{'.'.join(local_ip.split('.')[:3])}.{200 + idx}"
        # 异步封装设备配置任务
        async def config_task(dev, new_id, new_ip):
            rj_sdk.RJ_Device.modify_device_id(dev, new_id)
            rj_sdk.RJ_Device.set_static_ip(dev, new_ip, "255.255.255.0", local_ip)
            await asyncio.sleep(async_interval)
        config_tasks.append(config_task(dev, new_id, new_ip))
    # 并发执行所有配置任务
    await asyncio.gather(*config_tasks)
    # 批量启动所有配置完成的设备
    rj_sdk.RJ_Device.start_all_devices()
    # 切换为自动重连模式保障链路稳定
    tcp_server.change_connection_mode("auto_reconnect")
    tcp_server.print_current_mode()
    print(f"完成{len(device_list)}台设备的批量配置启动")
    return device_list

if __name__ == "__main__":
    asyncio.run(batch_configure_devices())

注意事项与避坑指南

  • 设备扫描范围限制discover_devices仅能发现同一局域网网段下的PX6X设备,跨网段扫描会直接返回空列表,使用前需确保所有目标设备与控制端处于同一子网。
  • 静态IP配置冲突风险:调用set_static_ip批量配置设备时,需要提前确认目标IP未被局域网内其他设备占用,IP冲突会导致设备后续无法正常通信。
  • TCP服务资源清理:程序退出前需要确保set_default_cleanup被正确调用,否则会导致端口被持续占用,下次启动服务时会出现端口绑定失败的错误。
  • 设备ID修改生效条件:调用modify_device_id修改设备ID后,需要调用reboot_device_by_id重启设备才能使新ID生效,直接使用新ID进行后续操作会触发设备找不到的错误。

更新日志

  • 2024-12-10: fix:更新集群控制接口注释
  • 2024-11-13: fix:适配最新硬件接口程序
  • 2024-08-30: feat:新增出厂TCP连接模式,本机识别接口,TCP转UDP模式接口
  • 2024-08-28: (1)feat:新增延时时间函数、是否启用DHCP、增加静态ip设置、设备端口号设置、设备id设置
  • 2024-07-31: 新增加RJ45网络继电器相关接口