opendaylight(Li) l2switch 源代码分析(3)--packethandler

本文详细介绍了OpenDaylight l2switch的PacketHandler工程,包括config、implementation和model目录的结构与功能。重点分析了packet-handler的pom.xml,model目录中的yang文件以及implementation中的service实现,解释了如何处理和解析不同类型的网络包。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文介绍packethander工程,该工程用于对进入到controller的packet进行解析并分发到不同的
模块进行处理。
工程分为四个部分:
config文件夹:packethander的配置信息,如plugin的部署顺序,初始化时的配置。
implementation文件夹:service的具体实现,包含了java和yang。
model文件夹:定义了packet相关的yang。
pom.xml


一、pom.xml
packethander的pom.xml文件很简单,主要包含一下两部分:
  <parent>
    <groupId>org.opendaylight.l2switch</groupId>
    <artifactId>l2switch-parent</artifactId>
    <version>0.4.0-SNAPSHOT</version>
    <relativePath>../parent</relativePath>
  </parent>
该配置指向了之前讲的parent工程,说明packethander继承了parent,所以很多配置都可以省略。

  <modules>
    <module>model</module>
    <module>implementation</module>
    <module>config</module>
  </modules>
该配置指向了config,implementation和model三个文件夹,maven会去这三个文件夹下面去找
pom.xml文件。


二、model
该目录包含了五个yang文件和一个pom.xml.

1.arp-packet.yang
该文件主要定义了一个grouping和一个notification。
grouping arp-packet-fields {
leaf xxx {
}

leaf xxx {
}
......
uses bpacket:packet-fields;
}
上面的语句定义了arp pakcet的结构。
最后的uses语句会引用packet.yang中grouping packet-fields。

notification arp-packet-received {
  uses bpacket:packet-chain-grp {
    augment "packet-chain/packet" {
       case arp-pack
### 使用树莓派控制DYNAMIXEL AX-12A伺服电机 要使用树莓派控制DYNAMIXEL AX-12A伺服电机,需要完成硬件连接以及软件编程两部分的工作。以下是详细的说明: #### 硬件连接 为了使树莓派能够与AX-12A伺服电机通信,通常会使用USB转TTL串口模块作为中间设备[^2]。这是因为AX-12A伺服电机采用RS-485半双工通信协议,而树莓派本身并不具备这种接口。 具体连接方式如下: - 将USB转TTL串口模块的TX端连接到AX-12A的RX端。 - 将USB转TTL串口模块的RX端连接到AX-12A的TX端。 - 共享GND以确保电平一致。 - 通过电源适配器为AX-12A提供独立供电[^4]。 #### 软件配置 在树莓派上安装必要的库文件以便于操作AX-12A伺服电机。推荐使用`dynamixel-sdk`官方库来简化开发过程[^1]。可以通过以下命令安装Python版本的SDK: ```bash pip install dynamixel-sdk ``` 接着编写一段简单的测试程序用于验证设置是否成功。下面给出了一段示例代码用来调整指定ID号的AX-12A伺服电机的角度至90度位置: ```python from dynamixel_sdk import * # 导入Dynamixel SDK包 # 协议版本定义 PROTOCOL_VERSION = 1.0 # AX-12A支持Protocol 1.0 # 默认的DXL ID DXL_ID = 1 # 修改成实际使用的Servo ID # 波特率定义 BAUDRATE = 1000000 # AX-12A默认波特率为1Mbps # 设备路径 (通常是USB转串口设备) DEVICENAME = &#39;/dev/ttyUSB0&#39; # 替换为你的串口号 # 初始化PortHandler实例 portHandler = PortHandler(DEVICENAME) # 初始化PacketHandler实例 packetHandler = PacketHandler(PROTOCOL_VERSION) # 打开端口并设置波特率 if portHandler.openPort(): print("Succeeded to open the port") else: print("Failed to open the port") quit() if portHandler.setBaudRate(BAUDRATE): print("Succeeded to change the baudrate") else: print("Failed to change the baudrate") quit() # 定义目标角度(单位:刻度) goal_position = 512 # 对应90度的位置 # 构建写入指令 dxl_comm_result, dxl_error = packetHandler.write2ByteTxRx(portHandler, DXL_ID, ADDR_AX_GOAL_POSITION_L, goal_position) if dxl_comm_result != COMM_SUCCESS: print("%s" % packetHandler.getTxRxResult(dxl_comm_result)) elif dxl_error != 0: print("%s" % packetHandler.getRxPacketError(dxl_error)) else: print("Goal Position has been written successfully") # 关闭端口 portHandler.closePort() ``` 此脚本实现了基本的功能演示,即通过树莓派发送命令给特定编号的AX-12A伺服电机让其转动到预设角度。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值