EtherNet/IP---3报文解析

目录

1、下面是EtherNet/IP首部中封装的CIP帧字段:

2、示例


1、下面是EtherNet/IP首部中封装的CIP帧字段:

  • Command

两字节整数,对应一个CIP命令。CPI标准要求,设备必须能接收无法识别的命令字段,并处理这种异常。

  • Length

两字节整数,代表数据包中数据部分的长度。对于没有数据部分的请求报文,该字段为0。

  • Session Handle

会话句柄(session handle)由目标设备生成,并返回给会话的发起者。该句柄将用于后续与目标设备的通信。

  • Status

Status字段存储了目标设备执行命令返回的状态码。状态码“0”代表命令执行成功。所有的请求报文中,状态码被置为“0”。其它的状态码还包括:

- 0x0001无效或不受支持的命令

- 0x0002目标设备资源不足,无法处理命令

- 0x0003数据格式不正确或数据不正确

- 0x0065接收到无效的数据长度

  • Sender Context

命令的发送者生成这六字节值,接收方将原封不动的返回该值。

  • Options

该值必须始终为0,如果不为零,数据包将被丢弃。

  • Command-specific data

该字段根据接收/发送的命令进行修改。

如果请求发送方是工程师站,大多数会话中执行的第一条命令是“List Identity”命令。如下所示的数据包,命令字段是0x63,代表“List Identity”命令,上下文是“0x00006a0ebe64”。这个命令与Modbus功能码43非常相似,可以查询设备信息,如供应商、产品、序列号、产品代码、设备类型和版本号等。

2、示例

EtherNet/IP通常通过TCP/UDP端口44818运行。此外,EtherNet/IP还有另一个端口 TCP/UDP端口2222。使用这个端口的原因是 EtherNet/IP实现了隐式和显示两种消息传递方式。显式消息被称为客户端/服务器消息,而隐式消息通常被称为I/O消息。

TCP建立连接:

报文为四层

建立EIP会话:

多了一层封装层,注册EIP

CIP未连接信息的收发:

多了一层CIP协议层和CIP连接管理层 ,send RR data即Request/Response类型数据

使用连接管理器对象的ForwardOpen Request服务建立连接。ForwardOpen Request包含所有连接参数,包括传输类、生产触发器、定时信息、电子密钥和连接ID。当发出ForwardClose Request服务请求或任一连接端点超时时,将进行连接清理。

上面使用的都是TCP协议的44818端口

下面使用UDP协议的2222端口进行IO数据的收发

CIP IO数据的收发:

O->T:实例号为0x97=151,0x96=150,0x64=100(LED)

T->O:LED

O->T:实例号为0x97=151,0xee=238,0x65=101(SW)

### 构建任务失败解决方案 当遇到 `Execution failed for task ':app:shrinkReleaseRes'` 错误时,这通常意味着资源压缩过程中出现了问题。此错误可能由多种原因引起,包括但不限于配置不正确、依赖冲突或特定于项目的其他因素。 #### 可能的原因分析 1. **ProGuard 或 R8 配置不当** ProGuard 和 R8 是用于优化和混淆代码以及减少 APK 大小的工具。如果这些工具的配置存在问题,可能会导致资源无法正常处理[^1]。 2. **重复资源** 如果项目中有多个模块定义了相同的资源名称,可能导致冲突并引发该错误。检查是否存在重名的 drawable、string 等资源文件[^2]。 3. **第三方库兼容性** 某些第三方库可能与当前使用的 Gradle 插件版本或其他库存在兼容性问题,从而影响到资源打包过程中的行为[^3]。 4. **Gradle 缓存问题** 有时旧缓存数据会干扰新编译的结果,尝试清理本地仓库和重新同步项目可以帮助排除此类潜在障碍[^4]。 #### 推荐的操作方法 为了有效解决问题,建议按照以下步骤逐一排查: ```bash # 清理项目构建目录 ./gradlew clean # 删除 .gradle 文件夹下的所有内容以清除缓存 rm -rf ~/.gradle/caches/ ``` 调整 `build.gradle` 中的相关设置也是一个重要环节: ```groovy android { ... buildTypes { release { minifyEnabled true // 是否启用代码缩减 shrinkResources true // 是否开启资源压缩 proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' // 尝试禁用 shrinkResources 来测试是否为资源压缩引起的错误 // shrinkResources false } } } ``` 此外,在 `proguard-rules.pro` 文件内添加必要的保留规则,防止关键类被意外移除: ```text -keep class com.example.yourpackage.** { *; } # 替换为你自己的包路径 -dontwarn androidx.**,com.google.** # 忽略警告信息 ``` 最后,确保所使用的 Android Studio 版本是最新的稳定版,并且已经应用了所有的补丁更新。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值