记一次报错解决经历依赖重复

解决模块重复依赖与API管理
博客探讨了在软件开发中如何处理模块间的重复依赖问题,特别是当一个类被多个模块共同引用时。通过使用`implementation`和`api`依赖管理方式,可以避免D模块对A的重复依赖。同时,指出了`BapiA`和`CimplementationD`的配置差异,影响到B在不同模块中的可见性。建议将公共API集中管理,以减少冲突并提高代码组织的清晰度。

这个类型的报错有几种情况,我这次遇到的时候module里面的同样的类依赖多次。

1、比如说重复的包是A。B依赖A,C也依赖A,D依赖B和C和A。那这里实际解决D的重复依赖问题。所以B中的A和C中的A需要使用implementation来依赖。这样D就不会有依赖重复。D中的依赖A可以用api或者implementation都可。一般这种情况,这个A就有点类似是公共的api了。对于公共的api我个人觉得可以类似那种谷歌的库一样,直接都用implementation就行了。或者搞一个公共的module,里面的库都是以api形式依赖提供。

这里有一个容易混淆的地方。

B api A , C implementation D。

如果D implementation B:D可以使用A,C不能使用B。

D api B: D可以使用A,C能使用B。

<think>嗯,用户的问题是关于海康VM软件如何配置启动时发送一次数据。用户之前提到了串口通讯和报文解析的踩坑经历,看起来是个实际工程问题,而且语气比较急("踩坑俩小时"),可能是个现场调试的工程师。 从引用内容看,用户应该已经解决了报文解析问题(引用[1]),现在需要实现启动时自动发送一次数据的功能。引用[2]提到VM有"运行策略"和"回调设置",引用[3]涉及字符识别SDK开发,引用[4]是二次开发报错。这些都不直接相关,但暗示用户可能在用SDK做深度开发。 核心难点在于:VM本身似乎没有直接的"启动发送"配置项。需要拆解: 1 启动时机:方案加载时?流程运行时? 2 发送机制:用通讯模块?还是脚本触发? 3 单次执行:如何避免重复发送 用户可能忽略了VM的事件机制。方案加载完成事件是最合适的触发点,配合全局脚本就能实现。考虑到用户之前卡在报文解析,这次要避免他再踩脚本执行的坑,得给出具体操作路径。 另外观察到用户引用[3]提到字符识别案例路径,说明他有SDK开发经验。可以提一下SDK方案作为备选,但优先推荐图形化方案更稳妥——毕竟SDK报错他遇到过(引用[4]那个MissingMethodException挺典型的版本兼容问题)。 最后留个技术活口:如果用户需要更复杂的触发逻辑(比如等相机就绪后再发送),得用流程事件绑定,这个在"相关问题"里埋点吧。</think>在海康 Vision Master (VM) 软件中,配置启动时发送一次数据,可以通过其**“运行策略”**和**“全局脚本”**功能结合实现。以下是具体操作步骤: --- ### **配置步骤** 1. **启用全局脚本** - 在 VM 主界面,进入 `方案` → `脚本编辑` → `全局脚本`。 - 选择 `方案加载完成` 事件(此事件在方案启动时自动触发一次)。 - 在脚本编辑器中编写发送数据的逻辑(例如调用串口/485通讯模块)。 示例脚本(伪代码): ```lua function OnSchemeLoaded() -- 获取通讯模块对象 local comModule = VM.GetModule("串口模块名称") -- 发送数据(示例:十六进制报文) comModule.SendData("01 03 00 00 00 02 C4 38") end ``` 2. **配置通讯模块** - 在流程中正确配置串口或485模块(波特率、校验位等)。 - 确保模块名称与脚本中调用的名称一致。 3. **设置运行策略** - 进入 `系统设置` → `运行策略`。 - 选择 **`普通模式`** 或 **`诊断模式`**(根据资源需求)。 - 策略模式建议选 **`默认`** 或 **`自定义`**(确保脚本线程正常执行)[^2]。 4. **保存并启动方案** - 保存方案后重新加载,脚本将在方案启动时自动执行一次发送。 --- ### **注意事项** 1. **单次执行保障** `方案加载完成` 事件仅在方案打开时触发一次,符合“启动发送一次”需求。 2. **依赖模块初始化** 若通讯模块初始化较慢,可在脚本中添加延时(如 `VM.Delay(500)` 等待500ms)。 3. **错误处理** 在脚本中增加异常捕获,避免因发送失败导致流程中断: ```lua function OnSchemeLoaded() pcall(function() -- 发送逻辑 end) end ``` 4. **调试建议** - 先在 `流程运行前` 事件中测试脚本,确认无误后移至 `方案加载完成`。 - 通过 `VM.Trace()` 输出日志,便于排查问题。 --- ### **替代方案:SDK二次开发** 若图形化配置无法满足需求,可通过 **SDK 监听方案加载事件** 实现(需编程能力): 1. 引用 `VMControls` 库(C#示例): ```csharp var scheme = new VMScheme(); scheme.SchemeLoaded += (sender, e) => { // 调用通讯模块发送数据 ComModule.SendData("01 03 00 00 00 02 C4 38"); }; ``` 2. 需处理权限及依赖项(注意引用[^4]中的`MissingMethodException`通常由版本不匹配引起)。 --- ### **相关问题** 1. 如何确保海康 VM 启动时通讯模块已初始化完成? 2. 全局脚本发送数据失败如何自动重试? 3. SDK 二次开发中如何监听 VM 方案状态变化? 4. 串口数据发送与接收如何在海康 VM 中实时调试? [^1]: 海康 VM 串口通讯配置经验 [^2]: VM 运行策略说明(普通/诊断模式) [^4]: SDK 开发常见异常处理
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值