From d1e02dc042e6846179c5759e1a7788bcfd92531f Mon Sep 17 00:00:00 2001 From: lihanbo Date: Mon, 7 Apr 2025 16:25:20 +0800 Subject: [PATCH] =?UTF-8?q?105040=20Update=20=E5=AE=8C=E5=96=84=E6=B3=A8?= =?UTF-8?q?=E9=87=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 38 ++++++++++++++++++++++++++++++++++++++ 邮件示例.png | Bin 0 -> 20528 bytes 2 files changed, 38 insertions(+) create mode 100644 邮件示例.png diff --git a/README.md b/README.md index 05464b5..e6adf66 100644 --- a/README.md +++ b/README.md @@ -12,3 +12,41 @@ - 插件分为单芯线扫描装配、单芯线线材检查与伺服电机选型三部分,其中单芯线线材检查与伺服电机选型为同一版本文件,单芯线扫描装配为单独版本文件。 - 插件数据源均使用共享盘(192.168.1.160)中excel文件,除单芯线扫描装配外,其余功能无法在无局域网情况下使用。 +## 3. 插件安装 +- 参考 \\192.168.1.160\plm系统文档\线材资料检查\线材资料检查插件安装.pptx 文件进行操作 + + +## 4. 开发说明 +- 本项目使用C# / .net framework 4.8 / Visual studio 2022 开发,理论上EPLAN ProD 2.9 支持 .net framework 4.8.1 制作插件,后续有需要可进行升级。 +- 插件使用多项目结构,区分入口项目、界面项目、对接PLM项目: + - 入口项目(Sinvo.EplanHpD.Plugin):存放EPLAN ProD菜单入口类,由于EPLAN ProD 插件要求,必须使用继承对应接口的方式编写菜单入口。 + - 界面项目(Sinvo.EplanHpD.Plugin.WPFUI):存放UI与大部分逻辑代码,使用WPF编写UI界面,使用MVVM设计模式。 + - 对接PLM项目(Sinvo.EplanHpD.Plugin.DynaClient):存放Web Service相关代码,使用SOAP方式对接PLM系统,并进行封装。(目前仅要求登录功能) + - Sinvo.EplanHpD.Plugin.Service :跨项目使用的服务类,存放一些公共方法。 + - Sinvo.EplanHpD.Plugin.Test : 测试用例。 + +- 项目使用HandyControl作为主要的UI控件库,使界面样式更加统一、美观。 +- 项目使用MiniExcel作为Excel读写库,支持xlsx格式的Excel文件读写(不支持xls)。 +- 项目使用PdfiumViewer作为PDF预览支持,由于网络问题,所以将改第三方库的源码在公司内部Gitlab上进行了同步,后续如有更新,请上传到公司内部Gitlab上。 +- 编译配置说明: + - Debug:调试版本,包含调试信息,编译后可直接在EPLAN ProD中使用。 + - Release:发布版本,包含调试信息,编译后可直接在EPLAN ProD中使用。 + - Release_EPLAN_2024:2024版本EPLAN测试用,引用DLL不同。 + - Release_Scanner:扫码装配需求独立版本,只包含扫码装配菜单入口。 + - Release_WireAndCable:线材相关功能独立版本,只包含线材相关功能菜单入口。 + +## 5. 注意事项 +- 当EPLAN进行大版本升级时,很有可能会修改菜单入口的接口,导致插件无法使用。 +- 由于公开的API接口并不完善,可能会导致一些功能无法实现。 +- 现有逻辑均基于`FlexProject`中对象进行数据获取,若后续EPLAN ProD 版本中修改了`FlexProject`对象的结构,可能会导致插件无法使用。 +- 由于插件加载方式的局限性,引用WPF的第三方库时,会导致Application对象无法初始化,故编写`AppDomainDllLoader`手动处理DLL加载方式,后续如更换UI控件库,或是增加了DLL引用,需注意是否与该加载方式兼容。 +- 插件版本使用 Versioning-Controlled-Build 插件进行管理,对多项目版本进行统一管理。 +- 代码中存在部分按编译标志判断的代码,所以禁止向用户发送DEBUG版本,如需要调试,请确保编译标志内容已调整或是删除了编译标志控制。 +- 目前插件没有日志记录功能,请确保修改代码后测试完整,再进行发布。 +- 如果有暂时不需要发布的新功能需要开发,建议建立新分支进行开发,以防开发过程中需要更新导致插件出现问题。 + +## 6. 发布更新 +- 发布更新前,需确保插件已在本机测试完成,且无明显BUG。 +- 发布更新时,推荐同时更新版本号,以便快速定位是否为更新后问题,插件窗口标题会显示版本号。 +- 发布更新需要通过邮件方式通知标准化部相关人员、体系开发部门相关领导,参考: + - ![alt text](邮件示例.png) diff --git a/邮件示例.png b/邮件示例.png new file mode 100644 index 0000000000000000000000000000000000000000..df2e646658dbf05ee34fa8ff405fd4e8cb0aa5ca GIT binary patch literal 20528 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 Q0ZovP_Ytphk1*oj01RKBYXATM literal 0 HcmV?d00001