From 87a49ccc47abbb3505403d174001ceb3a2d2341d Mon Sep 17 00:00:00 2001
From: liurunyu <lry9898@163.com>
Date: 星期五, 08 十一月 2024 09:02:46 +0800
Subject: [PATCH] Merge branch 'master' of http://8.140.179.55:20000/r/pipIrr-SV

---
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/global/GlCreate.java                |   28 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_99_Down.java                     |    4 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/upVos/DataCd960XVo.java                   |   23 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_1600_Down.java                   |   80 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_37_Up.java                       |    2 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_68_Down.java                     |    4 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_93_Up.java                       |    3 
 pipIrr-platform/pipIrr-web/pipIrr-web-base/src/main/java/com/dy/pipIrrBase/rtuUpgrade/task/UgRtuAddSomeResVo.java      |   19 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_C0_Down.java                     |    4 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_5E_Up.java                       |    2 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_A2_Up.java                       |    2 
 pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/Server.java                                         |   17 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_6D_Up.java                       |    2 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_69_Up.java                       |    2 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_83_Down.java                     |    4 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_39_Down.java                     |    4 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_65_Up.java                       |    2 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_83_Up.java                       |    4 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_91_Down.java                     |    4 
 pipIrr-platform/pipIrr-web/pipIrr-web-app/src/main/java/com/dy/pipIrrApp/workOrder/dto/DtoDeleteWorkOrder.java         |   28 
 pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/upgrade/UpgradeManager.java                  |  147 +
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_97_Up.java                       |    2 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_51_Up.java                       |    2 
 pipIrr-platform/pipIrr-web/pipIrr-mwTest-rtu/src/main/java/com/dy/pipIrrMwTestRtu/tcpClient/upData/UpCd81.java         |    2 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_A1_Up.java                       |    2 
 pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/upgrade/UpgradeCode.java                     |   28 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_C0_Up.java                       |    2 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_9602_Up.java                     |   73 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_68_Up.java                       |    2 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_84_Up.java                       |    2 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_38_Down.java                     |    4 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_67_Down.java                     |    4 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_92_Up.java                       |    2 
 pipIrr-platform/pipIrr-global/src/main/resources/mapper/OpeWorkOrderMapper.xml                                         |  159 +
 pipIrr-platform/pipIrr-global/src/main/resources/mapper/UgRtuProgramMapper.xml                                         |  225 ++
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/CommonV2.java                             |   79 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_6A_Down.java                     |    4 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_92_Down.java                     |    4 
 pipIrr-platform/pipIrr-global/src/main/resources/application-global.yml                                                |    2 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_3A_Up.java                       |    2 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/ProtocolConstantV206V1.java               |   31 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_66_Up.java                       |    2 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_93_Down.java                     |    4 
 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoRm/UgRtuProgram.java                               |  114 +
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/CodeV1.java                               |   18 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_98_Up.java                       |    3 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/OnLineV2.java                             |    6 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_97_Down.java                     |    4 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_1602_Down.java                   |   91 
 pipIrr-platform/pipIrr-web/pipIrr-web-base/src/main/java/com/dy/pipIrrBase/rtuUpgrade/task/UgRtuControllerSv.java      |   79 
 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoRm/UgRtuControllerMapper.java                       |   99 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/DriverV1.java                             |    9 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_10_Down.java                     |    6 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_21_Down.java                     |    4 
 pipIrr-platform/pipIrr-global/src/main/resources/mapper/OpeProcessingResultMapper.xml                                  |    5 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_36_Down.java                     |    4 
 pipIrr-platform/pipIrr-web/pipIrr-web-app/src/main/java/com/dy/pipIrrApp/workOrder/WorkOrderCtrl.java                  |  184 +
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_6B_Down.java                     |    4 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_1603_Down.java                   |   80 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_02_Down.java                     |    4 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/PrefixedDataAvailableV2.java              |    7 
 pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/upgrade/UpgradeState.java                    |   29 
 pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/resources/config(test测试).xml                                          |   18 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_36_Up.java                       |    2 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_3D_Down.java                     |    4 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/ProtocolConstantV206V2.java               |   25 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_3B_Up.java                       |    2 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_9601_Up.java                     |   73 
 pipIrr-platform/pipIrr-web/pipIrr-web-base/src/main/java/com/dy/pipIrrBase/rtuUpgrade/task/UgRtuTaskCtrl.java          |  228 ++
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_12_Up.java                       |    2 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_6A_Up.java                       |    2 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_65_Down.java                     |    4 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_B0_Down.java                     |    4 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_1602_Down.java                   |   82 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_A1_Down.java                     |    4 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_99_Up.java                       |    3 
 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voOp/VoWorkOrder.java                                  |  117 +
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_6D_Down.java                     |    4 
 pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/upgrade/UpgradeUnitAdapter.java              |   14 
 pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/upgrade/UpgradeUnitConfigVo.java             |   20 
 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoRm/UgRtuProgramMapper.java                          |   88 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_21_Up.java                       |    2 
 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voRm/VoRtuTask.java                                    |   58 
 pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/upgrade/UpgradeUnit.java                     |  154 +
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/softUpgrade/parse/HexFileVo.java                             |    3 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_3B_Down.java                     |    4 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_6D_Down.java                     |    4 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_A2_Down.java                     |    4 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/CommonV1.java                             |  137 
 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoOp/OpeProcessingResult.java                        |    6 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_99_Up.java                       |    2 
 pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/AdapterImp_UpgradeUnit.java                  |   19 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/softUpgrade/parse/HexFileParse.java                          |   56 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_A2_Down.java                     |    4 
 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoOp/OpeWorkOrderMapper.java                          |   46 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_1603_Down.java                   |   80 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_5E_Down.java                     |    4 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_3A_Down.java                     |    4 
 pipIrr-platform/pipIrr-web/pipIrr-web-app/src/main/java/com/dy/pipIrrApp/workOrder/WorkOrderSv.java                    |  106 
 pipIrr-platform/pipIrr-web/pipIrr-web-app/src/main/resources/application.yml                                           |    1 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_36_Down.java                     |    4 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_68_Up.java                       |    2 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_B0_Down.java                     |    4 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_10_Down.java                     |    6 
 pipIrr-platform/pipIrr-web/pipIrr-mwTest-rtu/src/main/java/com/dy/pipIrrMwTestRtu/tcpClient/upData/UpCd83Close.java    |    2 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_3C_Up.java                       |    2 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/CommonV202404.java                   |   20 
 pipIrr-platform/pipIrr-web/pipIrr-web-base/src/main/java/com/dy/pipIrrBase/rtuUpgrade/task/QueryAddControllerVo.java   |   36 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_3C_Up.java                       |    2 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_02_Up.java                       |    2 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_02_Down.java                     |    4 
 pipIrr-platform/pipIrr-web/pipIrr-web-base/src/main/java/com/dy/pipIrrBase/rtuUpgrade/task/UgRtuTaskSv.java            |   92 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_38_Up.java                       |    2 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_51_Down.java                     |    4 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_84_Up.java                       |    6 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_1601_Down.java                   |   82 
 pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/tasks/RtuUpTask.java                         |   31 
 pipIrr-platform/pipIrr-web/pipIrr-mwTest-rtu/src/main/java/com/dy/pipIrrMwTestRtu/tcpClient/upData/UpHeartBeat.java    |    2 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_A2_Up.java                       |    2 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_38_Up.java                       |    2 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_21_Down.java                     |    4 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_69_Down.java                     |    4 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_81_Up.java                       |    2 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_84_Down.java                     |    4 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_93_Up.java                       |    2 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/util/ByteUtilUnsigned.java                                   |   21 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_81_Up.java                       |    2 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_9603_Up.java                     |   73 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_97_Down.java                     |    4 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/CodeV2.java                               |   17 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_02_Up.java                       |    2 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_65_Up.java                       |    2 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_97_Up.java                       |    3 
 pipIrr-platform/pipIrr-global/src/main/resources/mapper/UgRtuTaskMapper.xml                                            |  181 +
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_3B_Up.java                       |    2 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_92_Down.java                     |    4 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_6D_Up.java                       |    2 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_84_Down.java                     |    4 
 pipIrr-platform/pipIrr-web/pipIrr-mwTest-rtu/src/main/java/com/dy/pipIrrMwTestRtu/tcpClient/upData/UpData.java         |    2 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_98_Down.java                     |    4 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_68_Down.java                     |    4 
 pipIrr-platform/pipIrr-global/src/main/resources/mapper/UgRtuControllerMapper.xml                                      |  180 +
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_C0_Down.java                     |    4 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_37_Up.java                       |    2 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_83_Down.java                     |    4 
 pipIrr-platform/pipIrr-web/pipIrr-web-base/src/main/java/com/dy/pipIrrBase/rtuUpgrade/program/QueryVo.java             |   22 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_5E_Up.java                       |    2 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_C0_Up.java                       |    5 
 pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/resources/config.xml                                                  |   18 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_9602_Up.java                     |   73 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_99_Down.java                     |    4 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/upVos/DataCd960XVo.java                   |   23 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_51_Up.java                       |    2 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_6A_Down.java                     |    4 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_67_Down.java                     |    4 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_38_Down.java                     |    4 
 pipIrr-platform/pipIrr-web/pipIrr-web-base/src/main/java/com/dy/pipIrrBase/rtuUpgrade/task/QueryControllerVo.java      |   36 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_6A_Up.java                       |    2 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_A1_Up.java                       |    2 
 pipIrr-platform/pipIrr-web/pipIrr-web-base/src/main/java/com/dy/pipIrrBase/rtuUpgrade/task/QueryTaskVo.java            |   27 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_21_Up.java                       |    2 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_92_Up.java                       |    4 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_36_Up.java                       |    2 
 pipIrr-platform/pipIrr-web/pipIrr-web-base/src/main/java/com/dy/pipIrrBase/rtuUpgrade/task/UgRtuControllerCtrl.java    |   77 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_66_Up.java                       |    2 
 pipIrr-platform/pipIrr-web/pipIrr-mwTest-rtu/src/main/java/com/dy/pipIrrMwTestRtu/tcpClient/upData/UpCd84.java         |    2 
 pipIrr-platform/pipIrr-web/pipIrr-web-base/src/main/java/com/dy/pipIrrBase/rtuUpgrade/task/UgRtuAddControllerCtrl.java |  178 +
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_66_Down.java                     |    4 
 pipIrr-platform/pipIrr-web/pipIrr-web-app/src/main/java/com/dy/pipIrrApp/workOrder/qo/QoWorkOrder.java                 |   44 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_37_Down.java                     |    4 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_12_Up.java                       |    2 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_98_Up.java                       |    2 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_A0_Down.java                     |    4 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_69_Up.java                       |    2 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_91_Down.java                     |    4 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_9603_Up.java                     |   73 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_3A_Down.java                     |    4 
 pipIrr-platform/pipIrr-web/pipIrr-web-base/src/main/java/com/dy/pipIrrBase/rtuUpgrade/program/UgRtuProgramCtrl.java    |  248 ++
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_69_Down.java                     |    4 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_83_Up.java                       |    5 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_1600_Down.java                   |   79 
 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoRm/UgRtuTask.java                                  |   80 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_81_Down.java                     |    4 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_91_Up.java                       |    2 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_A0_Up.java                       |    2 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_A0_Up.java                       |    3 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_12_Down.java                     |    4 
 pipIrr-platform/pipIrr-web/pipIrr-mwTest-rtu/src/main/java/com/dy/pipIrrMwTestRtu/tcpClient/upData/UpCd83Open.java     |    2 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_3C_Down.java                     |    4 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_67_Up.java                       |    2 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_12_Down.java                     |    4 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_65_Down.java                     |    4 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_3D_Up.java                       |    2 
 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voRm/VoRtuProgram.java                                 |   63 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_91_Up.java                       |    2 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_3C_Down.java                     |    4 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/OnLineV1.java                             |    8 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_6B_Up.java                       |    2 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/rtuState/UpgradeStateInfo.java                   |   18 
 pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/upgrade/UpgradeRtu.java                      |  178 +
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_A1_Down.java                     |    4 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_39_Up.java                       |    2 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/DriverV2.java                             |    3 
 pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/resources/config(ym元谋).xml                                            |   18 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_3A_Up.java                       |    2 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_51_Down.java                     |    4 
 pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/upgrade/UpgradeTask.java                     |  208 +
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_5E_Down.java                     |    4 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_3D_Up.java                       |    2 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_6B_Up.java                       |    2 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_39_Up.java                       |    2 
 pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/tcpClient/RtuUpData.java                |   12 
 pipIrr-platform/pipIrr-web/pipIrr-mwTest-rtu/src/main/java/com/dy/pipIrrMwTestRtu/tcpClient/upData/UpCd38.java         |    2 
 pipIrr-platform/pipIrr-web/pipIrr-web-base/src/main/java/com/dy/pipIrrBase/rtuUpgrade/program/UgRtuProgramSv.java      |   92 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/softUpgrade/Com1601Vo.java                                   |   16 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/PrefixedDataAvailableV1.java              |   13 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_37_Down.java                     |    4 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_66_Down.java                     |    4 
 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoOp/OpeWorkOrder.java                               |   58 
 pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/resources/config(sp沙盘).xml                                            |   18 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_3B_Down.java                     |    4 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_93_Down.java                     |    4 
 pipIrr-platform/pipIrr-web/pipIrr-web-base/src/main/java/com/dy/pipIrrBase/rtuUpgrade/task/UgRtuAddControllerSv.java   |   58 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_10_Up.java                       |    4 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_98_Down.java                     |    4 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_81_Down.java                     |    4 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_6B_Down.java                     |    4 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_39_Down.java                     |    4 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_9601_Up.java                     |   73 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_67_Up.java                       |    2 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_1601_Down.java                   |  108 +
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/DriverV202404.java                   |    1 
 pipIrr-platform/pipIrr-global/src/main/resources/mapper/PrControllerMapper.xml                                         |   51 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/global/GlCreate.java                |   35 
 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoRm/UgRtuController.java                            |   57 
 /dev/null                                                                                                              |   37 
 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoRm/UgRtuTaskMapper.java                             |   86 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_10_Up.java                       |    2 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_A0_Down.java                     |    4 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_3D_Down.java                     |    4 
 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoOp/OpeProcessingResultMapper.java                   |    7 
 241 files changed, 5,822 insertions(+), 565 deletions(-)

diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/CodeV1.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/CodeV1.java
index 09637fa..81ae3e8 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/CodeV1.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/CodeV1.java
@@ -46,6 +46,14 @@
 	public static final String cd_B0 = "B0" ;//鏌ヨ瀹炴椂鏁版嵁锛堟湭瀹炵幇锛�
 	public static final String cd_C0 = "C0" ;//閬ユ祴绔欐暣鐐逛笂鎶ュ疄鏃舵暟鎹� ok
 
+	public static final String cd_1600 = "1600" ;//鍗囩骇澶嶄綅
+	public static final String cd_1601 = "1601" ;//鍗囩骇閰嶇疆
+	public static final String cd_1602 = "1602" ;//鍗囩骇鏁版嵁
+	public static final String cd_1603 = "1603" ;//鍗囩骇鏍¢獙
+	public static final String cd_9601 = "9601" ;//鍗囩骇閰嶇疆
+	public static final String cd_9602 = "9602" ;//鍗囩骇鏁版嵁
+	public static final String cd_9603 = "9603" ;//鍗囩骇鏍¢獙
+
     public static String getCodeName(String code) {
 		String name = (code.equals(cd_02) ? "閾捐矾妫�娴�" :
 			(code.equals(cd_10) ? "璁剧疆缁堢鍦板潃" :
@@ -90,13 +98,21 @@
 			(code.equals(cd_A2) ? "瀹氶噺鍏抽榾寮忚鍒掑紑闃�" :
 			(code.equals(cd_B0) ? "鏌ヨ瀹炴椂鏁版嵁" :
 			(code.equals(cd_C0) ? "鑷姤(鏁寸偣)瀹炴椂鏁版嵁" :
-			""))))))))))))))))))))))))))))))))))))))))))) ;
+			(code.equals(cd_1600) ? "鍗囩骇澶嶄綅" :
+			(code.equals(cd_1601) ? "鍗囩骇閰嶇疆" :
+			(code.equals(cd_1602) ? "鍗囩骇鏁版嵁" :
+			(code.equals(cd_1603) ? "鍗囩骇鏍¢獙" :
+			(code.equals(cd_9601) ? "鍗囩骇閰嶇疆" :
+			(code.equals(cd_9602) ? "鍗囩骇鏁版嵁" :
+			(code.equals(cd_9603) ? "鍗囩骇鏍¢獙" :
+			"")))))))))))))))))))))))))))))))))))))))))))))))))) ;
 		if(name == null || name.equals("")){
 			name = code ;
 		}
 		return name ;
 	}
 
+
 	/**
 	 * 鏄惁涓烘湁鏁堝姛鑳界爜
 	 * @param code 鍔熻兘鐮�
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/CommonV1.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/CommonV1.java
index fb408c2..d77f480 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/CommonV1.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/CommonV1.java
@@ -2,6 +2,7 @@
 
 import com.dy.common.util.ByteUtil;
 import com.dy.common.util.ByteUtilUnsigned;
+import com.dy.common.util.CRC16;
 import com.dy.common.util.CRC8_for_2_0;
 
 
@@ -9,36 +10,47 @@
 	/**
 	 * 妫�鏌ュご
 	 * @param bs 涓婅瀛楄妭鏁扮粍
-	 * @return true鏄�,false鍚�
+	 * @return [rt1->true:鏄湰鍗忚P206锛宖alse:涓嶆槸鏈崗璁�;  rt2->true:鏄按璧勬簮鍗忚锛宖alse:鏄崌绾у崗璁甝
 	 * @throws Exception  寮傚父
 	 */
-	public Boolean isThisProtocolHead(byte[] bs) throws Exception{
+	public Boolean[] isThisProtocolHead(byte[] bs) throws Exception{
 		if(bs == null){
 			return null ;
 		}else if(bs.length >= (ProtocolConstantV206V1.ctrlIndex)
 				&& bs[0] == ProtocolConstantV206V1.P_Head_Byte
 				&& bs[2] == ProtocolConstantV206V1.P_Head_Byte){
-			//String vs = this.parseVersion(bs) ;
-			//return vs.equals(ProtocolConstantV206V1.version);
-			return true ;
+			return new Boolean[]{true, true} ;
+		}else if(bs.length >= (ProtocolConstantV206V1.UG_codeIndex)
+				&& bs[0] == ProtocolConstantV206V1.UG_P_Head_Byte
+				&& bs[3] == ProtocolConstantV206V1.UG_P_Head_Byte){
+			return new Boolean[]{true, false} ;
 		}else{
-			return false ;
+			return new Boolean[]{false, false} ;
 		}
 	}
-	
+
 	/**
-	 * 妫�鏌ュご
-	 * @param bs 涓婅瀛楄妭鏁扮粍
-	 * @throws Exception 寮傚父
+     * 妫�鏌ュ崗璁被鍨�
+     * @param bs 涓婅瀛楄妭鏁扮粍
+     * @return 鍗忚绫诲瀷
+     * @throws Exception 寮傚父
 	 */
-	public void checkHead(byte[] bs) throws Exception{
-		if(bs.length < ProtocolConstantV206V1.onLineDataMinLength
-				|| bs[0] != ProtocolConstantV206V1.P_Head_Byte
-				|| bs[2] != ProtocolConstantV206V1.P_Head_Byte){
-			throw new Exception("涓婅鏁版嵁甯уご涓嶆纭紒") ;
+	public Boolean protocolType_p206TrueUgFalse(byte[] bs){
+		if(bs == null){
+			return null ;
+		}else if(bs.length >= (ProtocolConstantV206V1.ctrlIndex)
+				&& bs[0] == ProtocolConstantV206V1.P_Head_Byte
+				&& bs[2] == ProtocolConstantV206V1.P_Head_Byte){
+			return true ;
+		}else if(bs.length >= (ProtocolConstantV206V1.UG_codeIndex)
+				&& bs[0] == ProtocolConstantV206V1.UG_P_Head_Byte
+				&& bs[3] == ProtocolConstantV206V1.UG_P_Head_Byte){
+			return false ;
+		}else{
+			return null ;
 		}
 	}
-	
+
 	/**
 	 * 妫�鏌ュ熬
 	 * @param bs 涓婅瀛楄妭鏁扮粍
@@ -54,40 +66,62 @@
 	/**
 	 * 鍒嗘瀽甯ч暱搴�
 	 * @param bs 涓婅瀛楄妭鏁扮粍
+	 * @param p206TrueUgFalse 206鍗忚涓簍rue锛屽崌绾у崗璁负false
 	 * @return 鏁版嵁闀垮害
 	 * @throws Exception 寮傚父
 	 */
-	public int parseFrameLen(byte[] bs)throws Exception{
-		int len = ByteUtilUnsigned.byte2Byte(bs, ProtocolConstantV206V1.dataLenIndex) ;
-		return len + ProtocolConstantV206V1.lenHead2ctrl + ProtocolConstantV206V1.lenTail ;
+	public int parseFrameLen(byte[] bs, boolean p206TrueUgFalse)throws Exception{
+		if(p206TrueUgFalse) {
+			int len = ByteUtilUnsigned.byte2Byte(bs, ProtocolConstantV206V1.dataLenIndex);
+			return len + ProtocolConstantV206V1.lenHead2ctrl + ProtocolConstantV206V1.lenTail;
+		}else{
+			int len = ByteUtilUnsigned.bytes2Short_BE(bs, ProtocolConstantV206V1.UG_dataLenIndex_start);
+			return len + ProtocolConstantV206V1.UG_lenHead2Cmd + ProtocolConstantV206V1.UG_lenTail;
+		}
 	}
 
 
 	/**
-	 * 鍒嗘瀽鐢ㄦ埛鏁版嵁鍩熷瓧鑺傛暟
+	 * 鍒嗘瀽鐢ㄦ埛鏁版嵁鍩熷瓧鑺傛暟(榛樿鏄潪鍗囩骇鍗忚)
 	 * @param bs 涓婅瀛楄妭鏁扮粍
 	 * @return 鏁版嵁闀垮害
 	 * @throws Exception 寮傚父
 	 */
-	public int parseDataLen(byte[] bs)throws Exception{
+	public int parseDataLen4P206(byte[] bs)throws Exception{
 		int len = ByteUtilUnsigned.byte2Byte(bs, ProtocolConstantV206V1.dataLenIndex) ;
-		return len + ProtocolConstantV206V1.lenHead2ctrl + ProtocolConstantV206V1.lenTail ;
+		return len - ProtocolConstantV206V1.lenCtrl - ProtocolConstantV206V1.lenRtuAddr ;
+	}
+
+	/**
+	 * 鍒嗘瀽鐢ㄦ埛鏁版嵁鍩熷瓧鑺傛暟(鍗囩骇鍗忚)
+	 * @param bs 涓婅瀛楄妭鏁扮粍
+	 * @return 鏁版嵁闀垮害
+	 * @throws Exception 寮傚父
+	 */
+	public int parseDataLen4Ug(byte[] bs)throws Exception{
+		int len = ByteUtilUnsigned.bytes2Short_LE(bs, ProtocolConstantV206V1.UG_dataLenIndex_start) ;
+		return len - ProtocolConstantV206V1.UG_lenCmd - ProtocolConstantV206V1.UG_lenRtuAddr ;
 	}
 
 
 	/**
 	 * 鍒嗘瀽Rtu鍦板潃
 	 * @param bs 涓婅瀛楄妭鏁扮粍
+	 * @param p206TrueUgFalse 206鍗忚涓簍rue锛屽崌绾у崗璁负false
 	 * @return 鎺у埗鍣ㄥ湴鍧�
 	 * @throws Exception 寮傚父
 	 */
-	public String parseRtuAddr(byte[] bs)throws Exception{
-		String rtuAddrBCD = "" + ByteUtil.BCD2Long_BE(bs, ProtocolConstantV206V1.rtuAddr1Index_start, ProtocolConstantV206V1.rtuAddr1Index_end) ;
-		String rtuAddrStr = "" + ByteUtilUnsigned.bytes2Short_LE(bs, ProtocolConstantV206V1.rtuAddr2Index_start) ;
-		while(rtuAddrStr.length() <= 5){
-			rtuAddrStr = "0" + rtuAddrStr ;
+	public String parseRtuAddr(byte[] bs, boolean p206TrueUgFalse)throws Exception{
+		if(p206TrueUgFalse){
+			String rtuAddrBCD = "" + ByteUtil.BCD2Long_BE(bs, ProtocolConstantV206V1.rtuAddr1Index_start, ProtocolConstantV206V1.rtuAddr1Index_end) ;
+			String rtuAddrStr = "" + ByteUtilUnsigned.bytes2Short_LE(bs, ProtocolConstantV206V1.rtuAddr2Index_start) ;
+			while(rtuAddrStr.length() <= 5){
+				rtuAddrStr = "0" + rtuAddrStr ;
+			}
+			return rtuAddrBCD + rtuAddrStr ;
+		}else{
+			return ("" + ByteUtil.BCD2Long_BE(bs, ProtocolConstantV206V1.UG_rtuAddrIndex_start, ProtocolConstantV206V1.UG_rtuAddrIndex_end)) ;
 		}
-		return rtuAddrBCD + rtuAddrStr ;
 	}
 
 
@@ -98,13 +132,17 @@
 	 * @return 鎺у埗鍣ㄥ湴鍧�
 	 * @throws Exception 寮傚父
 	 */
-	public String parseRtuAddr(byte[] bs, int index)throws Exception{
-		String rtuAddrBCD = "" + ByteUtil.BCD2Long_BE(bs, index, index + 2) ;//鍦板潃鏄ぇ绔ā寮�
-		String rtuAddrStr = "" + ByteUtilUnsigned.bytes2Short_LE(bs, index + 3) ;
-		while(rtuAddrStr.length() <= 5){
-			rtuAddrStr = "0" + rtuAddrStr ;
+	public String parseRtuAddr(byte[] bs, int index, boolean p206TrueUgFalse)throws Exception{
+		if(p206TrueUgFalse){
+			String rtuAddrBCD = "" + ByteUtil.BCD2Long_BE(bs, index, index + 2) ;//鍦板潃鏄ぇ绔ā寮�
+			String rtuAddrStr = "" + ByteUtilUnsigned.bytes2Short_LE(bs, index + 3) ;
+			while(rtuAddrStr.length() <= 5){
+				rtuAddrStr = "0" + rtuAddrStr ;
+			}
+			return rtuAddrBCD + rtuAddrStr ;
+		}else{
+			throw new Exception("鍗囩骇鍗忚鏃犺缃湴鍧�") ;
 		}
-		return rtuAddrBCD + rtuAddrStr ;
 	}
 
 
@@ -113,23 +151,38 @@
 	 * @param bs 涓婅瀛楄妭鏁扮粍
 	 * @return 鍔熻兘鐮�
 	 */
-	public String parseCode(byte[] bs){
-		return ByteUtil.bytes2Hex(bs, false, ProtocolConstantV206V1.codeIndex, 1) ;
+	public String parseCode(byte[] bs, boolean p206TrueUgFalse){
+		if(p206TrueUgFalse) {
+			return ByteUtil.bytes2Hex(bs, false, ProtocolConstantV206V1.codeIndex, 1);
+		}else{
+			return ByteUtil.bytes2Hex(bs, false, ProtocolConstantV206V1.UG_codeIndex, 2);
+		}
 	}
 
 	/**
 	 * 鏍¢獙鍜屾鏌�
 	 * @param bs  涓婅瀛楄妭鏁扮粍
+	 * @param p206TrueUgFalse 206鍗忚涓簍rue锛屽崌绾у崗璁负false
 	 * @return 閫氳繃null锛屾湭閫氳繃杩斿洖鍘熷洜
 	 * @throws Exception 寮傚父
 	 */
-	public String checkCrc_str(byte[] bs) throws Exception {
-		byte crcCompute = (byte)new CRC8_for_2_0().CRC8(bs, ProtocolConstantV206V1.ctrlIndex, bs.length - 3) ;
-		byte crcInBs = bs[bs.length - 2] ;
-		if(crcCompute == crcInBs){
-			return null ;
+	public String checkCrc_str(byte[] bs, boolean p206TrueUgFalse) throws Exception {
+		if(p206TrueUgFalse){
+			byte crcCompute = (byte)new CRC8_for_2_0().CRC8(bs, ProtocolConstantV206V1.ctrlIndex, bs.length - 3) ;
+			byte crcInBs = bs[bs.length - 2] ;
+			if(crcCompute == crcInBs){
+				return null ;
+			}else{
+				return "璁$畻CRC鏄�:" + crcCompute + "锛屼笂浼燙RC鏄�" + crcInBs ;
+			}
 		}else{
-			return "璁$畻CRC鏄�:" + crcCompute + "锛屼笂浼燙RC鏄�" + crcInBs ;
+			int crcCompute = (byte)new CRC16().CRC(bs, ProtocolConstantV206V1.ctrlIndex, bs.length - 3) ;
+			int crcInBs = ByteUtilUnsigned.bytes2Short_BE(bs, bs.length - 3) ;
+			if(crcCompute == crcInBs){
+				return null ;
+			}else{
+				return "璁$畻CRC鏄�:" + crcCompute + "锛屼笂浼燙RC鏄�" + crcInBs ;
+			}
 		}
 	}
 
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/DriverV1.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/DriverV1.java
index fc13a7c..2bd47f6 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/DriverV1.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/DriverV1.java
@@ -59,18 +59,17 @@
 		String upCode = null ;
 		try{
 			CommonV1 cp = new CommonV1() ;
-			cp.checkHead(upBuffer) ;
+			Boolean p206TrueUgFalse = cp.protocolType_p206TrueUgFalse(upBuffer) ;
+			//鍒版澶勪簡锛宲206TrueUgFalse涓嶅彲鑳戒负绌轰簡
 			cp.checkTail(upBuffer) ;
-			String crcStr = cp.checkCrc_str(upBuffer) ;
+			String crcStr = cp.checkCrc_str(upBuffer, p206TrueUgFalse) ;
 			if(crcStr != null){
 				return new MidResult[]{(new MidResultError(ProtocolConstantV206V1.protocolName, rtuAddr, "涓ラ噸閿欒锛屼笂琛屾暟鎹瓹RC妫�鏌ュけ璐ワ紝" + crcStr, null))} ;
 			}
-			rtuAddr = cp.parseRtuAddr(upBuffer) ;
-			upCode = cp.parseCode(upBuffer) ;
+			upCode = cp.parseCode(upBuffer, p206TrueUgFalse) ;
 			if(upCode == null){
 				return new MidResult[]{(new MidResultError(ProtocolConstantV206V1.protocolName, rtuAddr, "涓ラ噸閿欒锛屾湭鑳戒粠涓婅鏁版嵁涓В鏋愬嚭鍔熻兘鐮侊紒", null))} ;
 			}
-			//Integer dataLen = cp.parseFrameLen(upBuffer) ;
 			Data upData = new Data() ;
 			upData.setRtuAddr(rtuAddr) ;
 			upData.setProtocol(ProtocolConstantV206V1.protocolName);
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/OnLineV1.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/OnLineV1.java
index 20f1359..0b02041 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/OnLineV1.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/OnLineV1.java
@@ -19,19 +19,19 @@
 	public OnLineResult parse(byte[] upBuf)throws Exception {
 		OnLineResult olr = new OnLineResult() ;
 		CommonV1 cp = new CommonV1() ;
-		Boolean flag = cp.isThisProtocolHead(upBuf) ;
-		if(flag == null){
+		Boolean[] isThis_p206Pgu = cp.isThisProtocolHead(upBuf) ;
+		if(isThis_p206Pgu == null || isThis_p206Pgu.length != 2){
 			//鍑洪敊
 			olr.result = OnLine.OnLineAction_fail ;
 			olr.rtuAddr = null ;
-		}else if(!flag.booleanValue()){
+		}else if(!isThis_p206Pgu[0].booleanValue()){
 			//涓嶆槸鏈崗璁暟鎹�
 			olr.result = OnLine.OnLineAction_success_noMe ;
 			olr.rtuAddr = null ;
 		}else{
 			//鏄湰鍗忚鏁版嵁
 			olr.result = OnLine.OnLineAction_success ;
-			olr.rtuAddr = cp.parseRtuAddr(upBuf) ;
+			olr.rtuAddr = cp.parseRtuAddr(upBuf, isThis_p206Pgu[1]) ;
 			olr.protocolName = ProtocolConstantV206V1.protocolName ;
 			olr.protocolVersion = ProtocolConstantV206V1.protocolVer ;
 		}
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/PrefixedDataAvailableV1.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/PrefixedDataAvailableV1.java
index 139b92a..d51dba2 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/PrefixedDataAvailableV1.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/PrefixedDataAvailableV1.java
@@ -35,8 +35,8 @@
 	 */
 	public PrefixedDataAvailableStatus forOnLine(IoBuffer in, 
 			int remain,
-			int minDataLength, //瀵瑰簲ProtocolConstantV2_0.onLineDataMinLength
-			int maxDataLength //瀵瑰簲ProtocolConstant.errorMaxLength
+			int minDataLength,
+			int maxDataLength
 			) throws Exception {
 		
 		int oldPosition = in.position() ;
@@ -92,16 +92,15 @@
 			return new PrefixedDataAvailableStatus().rubbish(remain) ;
 		}
 
-		
         CommonV1 parseCommon = new CommonV1();
-		boolean isThisProtocolData = parseCommon.isThisProtocolHead(preByte) ;
+		Boolean[] isThisProtocolData = parseCommon.isThisProtocolHead(preByte) ;
 
-		if(!isThisProtocolData){
-			//涓嶆槸鏈崗璁暟鎹�
+		if(isThisProtocolData == null || isThisProtocolData.length != 2 || !isThisProtocolData[0].booleanValue()){
+			//涓嶆槸鏈琑TU鐨勫崗璁暟鎹�
 			return null ;
 		}
 
-		Integer dataLen = parseCommon.parseFrameLen(preByte) ;
+		Integer dataLen = parseCommon.parseFrameLen(preByte, isThisProtocolData[1]) ;
 
 		if(dataLen == null){
 			String headHex = ByteUtil.bytes2Hex(preByte, true) ;
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/ProtocolConstantV206V1.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/ProtocolConstantV206V1.java
index ea4f320..e91539a 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/ProtocolConstantV206V1.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/ProtocolConstantV206V1.java
@@ -17,8 +17,10 @@
      * RTU涓婃姤鏁版嵁鐨勫ご閮ㄦ渶灏忛暱搴︼紝涓婃姤鏁版嵁涓紝鍙栬繖涓渶灏忛暱搴︾殑閮ㄥ垎鏁版嵁涓紝
      * 瑕佷竴瀹氬寘鍚暟鎹抚闀垮害锛屼互澶囧彇鍑烘暟鎹抚闀垮害鏉ワ紝杩涜瀹屾暣鎬ф鏌ワ紝
      * 鍗虫柇鍖呬笌绮樺寘妫�鏌�(鍙栧�艰寖鍥�0-100锛屽叾涓彇鍊间负0鏃讹紝琛ㄧずheadMinLength鏁版嵁鏃犱綔鐢紝鐢卞崗璁疄鐜版潵鎺у埗)
+     *
+     * 2024-11-04澧炲姞浜嗚繙绋嬪崌绾у崗璁紝杩欎釜鍊肩敱3鏀逛负4
      */
-    public static final int headMinLength = 3 ;
+    public static final int headMinLength = 4 ;
 
 
     //甯ц捣濮�
@@ -34,6 +36,9 @@
     public static final byte lenHead2ctrl = 3 ; //浠庡ご鍒版帶鍒跺煙锛堜笉鍖呮嫭锛夊瓧鑺傛暟缁勯暱搴�
     public static final byte lenHead2Code = 10 ; //浠庡ご鍒板姛鑳界爜锛堝寘鎷級瀛楄妭鏁扮粍闀垮害
     public static final byte lenTail = 2 ; //甯у熬閮ㄥ瓧鑺傛暟缁勯暱搴�
+    public static final byte lenCtrl = 1 ; //鎺у埗鍩熷瓧鑺傛暟缁勯暱搴�
+    public static final byte lenRtuAddr = 5 ; //鎺у埗鍣ㄥ湴鍧�瀛楄妭鏁扮粍闀垮害
+
     /**
      * 鎵�鍦ㄥ瓧鑺傛暟缁勭殑浣嶇疆锛堜笅鏍囷級
      */
@@ -46,7 +51,29 @@
     public static final int codeIndex = 9 ;//鍔熻兘鐮佸瓧鑺傛暟缁勪笅鏍�
     public static final int dataIndex = 10 ;//鍏蜂綋鏁版嵁瀛楄妭鏁扮粍涓嬫爣
 
-
     public static final String vsCardAddr = "00000000";//鏈郴缁熷簲鐢ㄧ殑铏氭嫙鍗★紝鍗$墿鐞嗗湴鍧�閲囩敤10涓�0浣滀负妯℃嫙
 
+    ////////////////////////////////////////////////
+    //
+    //杩滅▼鍗囩骇鐩稿叧
+    //
+    ////////////////////////////////////////////////
+    public static final byte UG_P_Head_Byte = (byte)0xAA ;
+    public static final byte UG_P_Tail_Byte = (byte)0x16 ;
+    public static final int UG_codeIndex = 4 ;//鍔熻兘鐮佸瓧鑺傛暟缁勪笅鏍�
+    public static final int UG_dataIndex = 12 ;//鍏蜂綋鏁版嵁瀛楄妭鏁扮粍涓嬫爣
+
+    public static final int UG_dataLenIndex_start = 1 ;//甯ч暱搴﹀紑濮嬫墍鍦� 瀛楄妭鏁扮粍璧峰涓嬫爣
+    public static final int UG_dataLenIndex_end = 2 ;//甯ч暱搴︾粨鏉熸墍鍦� 瀛楄妭鏁扮粍璧峰涓嬫爣
+
+    public static final int UG_rtuAddrIndex_start = 6 ;//鎺у埗鍣ㄥ湴鍧� 瀛楄妭鏁扮粍寮�濮嬩笅鏍�
+    public static final int UG_rtuAddrIndex_end = 11 ;//鎺у埗鍣ㄥ湴鍧� 瀛楄妭鏁扮粍寮�濮嬩笅鏍�
+
+    public static final byte UG_lenCmd = 2 ; //鍔熻兘鐮佸瓧鑺傛暟缁勯暱搴�
+    public static final byte UG_lenRtuAddr = 6 ; //鍔熻兘鐮佸瓧鑺傛暟缁勯暱搴�
+    public static final byte UG_lenHead2Cmd = 4 ; //浠庡ご鍒板姛鑳界爜锛堜笉鍖呮嫭锛夊瓧鑺傛暟缁勯暱搴�
+    public static final byte UG_lenTail = 3 ; //甯у熬閮ㄥ瓧鑺傛暟缁勯暱搴�
+    public static final byte UG_lenHead2RtuAddr = 12 ; //浠庡ご鍒癛TU鍦板潃锛堝寘鎷級瀛楄妭鏁扮粍闀垮害
+
+
 }
\ No newline at end of file
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_02_Down.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_02_Down.java
index dabe900..e9a6f2e 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_02_Down.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_02_Down.java
@@ -62,7 +62,7 @@
         bsHead[index] = commonV_1.createCtrl((byte)0, (byte)0) ;
 
         index++ ;
-        GlCreate.createRtuAddr(para.rtuAddr, bsHead, index);
+        GlCreate.createRtuAddr4P206(para.rtuAddr, bsHead, index);
         index += 5 ;
 
         ByteUtil.hex2Bytes(para.commandCode, bsHead, index) ;
@@ -83,7 +83,7 @@
 
         GlCreate.createLen(bytes);//闀垮害鏀惧瓧鑺傛暟缁勪腑
 
-        byte[] bsTail = GlCreate.createCrcTail(bytes) ;//CRC鍜屽熬鍙犲姞瀛楄妭鏁扮粍涓�
+        byte[] bsTail = GlCreate.createCrcTail4P206(bytes) ;//CRC鍜屽熬鍙犲姞瀛楄妭鏁扮粍涓�
 
         bytes = ByteUtil.bytesMerge(bytes, bsTail) ;
 
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_02_Up.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_02_Up.java
index 6d24b13..b93e73b 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_02_Up.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_02_Up.java
@@ -23,7 +23,7 @@
     @Override
     public MidResult[] parse(Boolean isLowPower, CodeParseParams params, CodeParseCallback callback)throws Exception {
         ParseParamsForUpV1 para = (ParseParamsForUpV1)params ;
-        int bsLen = new CommonV1().parseDataLen(para.upBuffer) ;
+        int bsLen = new CommonV1().parseDataLen4P206(para.upBuffer) ;
         if(bsLen > 0){
             this.doParse(para.upBuffer,
                     bsLen,
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_10_Down.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_10_Down.java
index 855fff8..997c39b 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_10_Down.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_10_Down.java
@@ -85,7 +85,7 @@
             bsHead[index] = commonV_1.createCtrl((byte) 0, (byte) 0);
 
             index++;
-            GlCreate.createRtuAddr(para.rtuAddr, bsHead, index);
+            GlCreate.createRtuAddr4P206(para.rtuAddr, bsHead, index);
             index += 5;
 
             ByteUtil.hex2Bytes(para.commandCode, bsHead, index);
@@ -93,7 +93,7 @@
             index = 0;
             byte[] bs = new byte[13];
 
-            GlCreate.createRtuAddr(cvo.rtuAddr, bs, index);
+            GlCreate.createRtuAddr4P206(cvo.rtuAddr, bs, index);
             index += 5;
             GlCreate.createPw(bs, index);
             index += 2;
@@ -102,7 +102,7 @@
 
             GlCreate.createLen(bytes);//闀垮害鏀惧瓧鑺傛暟缁勪腑
 
-            byte[] bsTail = GlCreate.createCrcTail(bytes);//CRC鍜屽熬鍙犲姞瀛楄妭鏁扮粍涓�
+            byte[] bsTail = GlCreate.createCrcTail4P206(bytes);//CRC鍜屽熬鍙犲姞瀛楄妭鏁扮粍涓�
 
             bytes = ByteUtil.bytesMerge(bytes, bsTail);
 
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_10_Up.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_10_Up.java
index 8c7d5da..21e4b05 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_10_Up.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_10_Up.java
@@ -25,7 +25,7 @@
     @Override
     public MidResult[] parse(Boolean isLowPower, CodeParseParams params, CodeParseCallback callback)throws Exception {
         ParseParamsForUpV1 para = (ParseParamsForUpV1)params ;
-        int bsLen = new CommonV1().parseDataLen(para.upBuffer) ;
+        int bsLen = new CommonV1().parseDataLen4P206(para.upBuffer) ;
         if(bsLen > 0){
             this.doParse(para.upBuffer,
                     bsLen,
@@ -60,7 +60,7 @@
         DataV1 dV1 = (DataV1)data.getSubData() ;
         DataCd10Vo cdData = new DataCd10Vo() ;
         dV1.subData = cdData ;
-        cdData.newRtuAddr = new CommonV1().parseRtuAddr(bs, ProtocolConstantV206V1.dataIndex) ;
+        cdData.newRtuAddr = new CommonV1().parseRtuAddr(bs, ProtocolConstantV206V1.dataIndex, true) ;
     }
 
 }
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_12_Down.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_12_Down.java
index b8beabb..379c6c5 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_12_Down.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_12_Down.java
@@ -65,7 +65,7 @@
         bsHead[index] = commonV_1.createCtrl((byte)0, (byte)0) ;
 
         index++ ;
-        GlCreate.createRtuAddr(para.rtuAddr, bsHead, index);
+        GlCreate.createRtuAddr4P206(para.rtuAddr, bsHead, index);
         index += 5 ;
 
         ByteUtil.hex2Bytes(para.commandCode, bsHead, index) ;
@@ -80,7 +80,7 @@
 
         GlCreate.createLen(bytes);//闀垮害鏀惧瓧鑺傛暟缁勪腑
 
-        byte[] bsTail = GlCreate.createCrcTail(bytes) ;//CRC鍜屽熬鍙犲姞瀛楄妭鏁扮粍涓�
+        byte[] bsTail = GlCreate.createCrcTail4P206(bytes) ;//CRC鍜屽熬鍙犲姞瀛楄妭鏁扮粍涓�
 
         bytes = ByteUtil.bytesMerge(bytes, bsTail) ;
 
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_12_Up.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_12_Up.java
index d8677cd..4eb1589 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_12_Up.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_12_Up.java
@@ -20,7 +20,7 @@
     @Override
     public MidResult[] parse(Boolean isLowPower, CodeParseParams params, CodeParseCallback callback)throws Exception {
         ParseParamsForUpV1 para = (ParseParamsForUpV1)params ;
-        int bsLen = new CommonV1().parseDataLen(para.upBuffer) ;
+        int bsLen = new CommonV1().parseDataLen4P206(para.upBuffer) ;
         if(bsLen > 0){
             this.doParse(para.upBuffer,
                     bsLen,
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_1600_Down.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_1600_Down.java
new file mode 100644
index 0000000..55f2527
--- /dev/null
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_1600_Down.java
@@ -0,0 +1,80 @@
+package com.dy.common.mw.protocol.p206V1.parse;
+
+import com.dy.common.mw.protocol.*;
+import com.dy.common.mw.protocol.p206V1.CodeV1;
+import com.dy.common.mw.protocol.p206V1.CommonV1;
+import com.dy.common.mw.protocol.p206V1.ParseParamsForDownV1;
+import com.dy.common.mw.protocol.p206V1.ProtocolConstantV206V1;
+import com.dy.common.mw.protocol.p206V1.parse.global.GlCreate;
+import com.dy.common.util.ByteUtil;
+
+/**
+ * @Author liurunyu
+ * @Date 2024/06/12 9:30
+ * @Description
+ */
+@AnnotationCodeDown(ifAny={
+        CodeV1.cd_1600
+})
+public class Cd_1600_Down implements CodeParse {
+
+    @Override
+    public MidResult[] parse(Boolean isLowPower, CodeParseParams params, CodeParseCallback callback) throws Exception {
+        ParseParamsForDownV1 para = (ParseParamsForDownV1) params ;
+        MidResultToRtu midRs = new MidResultToRtu() ;
+        byte[] bs = this.doParse(midRs, para) ;
+
+        midRs.rtuResultSendWebUrl = para.rtuResultSendWebUrl ;//rtu杩斿洖鍛戒护缁撴灉 鍙戝悜鐩殑鍦皐eb URL
+        midRs.protocolName = para.protocolName ;//鍗忚鍚嶇О
+        midRs.protocolVersion = para.protocolVersion; //鍗忚鐗堟湰鍙�
+        midRs.rtuAddr = para.rtuAddr ;//Rtu鍦板潃
+        midRs.commandId = para.commandId ;//鍛戒护ID锛屽彂璧峰懡浠ょ殑瀹㈡埛绔�(web绔�)鐢熸垚锛屼互鍖归厤鍛戒护缁撴灉
+        midRs.downCode = para.commandCode ;//涓嬭鍛戒护鍔熻兘鐮�;
+        midRs.downCodeName = CodeV1.getCodeName(para.commandCode) ;//涓嬭鍛戒护鍔熻兘鐮佸悕绉�;
+        midRs.downBuffer = bs ;//涓嬭鍛戒护鏁版嵁
+        midRs.downBufHex = ByteUtil.bytes2Hex(bs, true) ;//涓嬭鍛戒护鏁版嵁鍗佸叚杩涘埗褰㈠紡
+        midRs.hasResponse = false ;//鏄惁鏈夊簲绛�
+        midRs.maxSendTimes = null ;//鍛戒护鏈�澶у彂閫佹鏁�(褰撴敹涓嶅埌搴旂瓟鏃讹紝灏嗛噸鍙�)锛屽鏋滀笉璁剧疆锛屽懡浠ょ紦瀛樺櫒杩涜琛ュ厖璁剧疆
+        midRs.isCachForOffLine = false ;//RTU涓嶅湪绾匡紝鍛戒护鏄惁缂撳瓨锛屼綆鍔熻�楁椂涓簍rue
+
+        if(isLowPower != null && isLowPower.booleanValue()){
+            //浣庡姛鑰楁椂锛屽敖蹇彂閫�
+            midRs.isQuickSend = true ;
+        }
+
+        return new MidResult[]{midRs} ;
+    }
+
+    /**
+     * 鏋勯�犱笅琛屾暟鎹�
+     * @param midRs 鍙傛暟
+     * @param para 鍙傛暟
+     * @return 瀛楄妭鏁扮粍
+     * @throws Exception 寮傚父
+     */
+    public byte[] doParse(MidResultToRtu midRs, ParseParamsForDownV1 para) throws Exception {
+        byte[] preBytes = new byte[ProtocolConstantV206V1.UG_lenHead2RtuAddr] ;
+        byte index = 0 ;
+        preBytes[index] = ProtocolConstantV206V1.UG_P_Head_Byte ;
+
+        index++ ;
+        preBytes[index] = 0 ;//甯ч暱搴�
+        index++ ;
+        preBytes[index] = 0 ;//甯ч暱搴�
+
+        index++ ;
+        preBytes[index] = ProtocolConstantV206V1.UG_P_Head_Byte ;
+
+        index++ ;
+        ByteUtil.hex2Bytes(para.commandCode, preBytes, index) ;
+
+        index += 2 ;
+        GlCreate.createRtuAddr4PUg(para.rtuAddr, preBytes, index);
+
+        byte[] bsTail = GlCreate.createCrcTail4Ug(preBytes) ;//CRC鍜屽熬鍙犲姞瀛楄妭鏁扮粍涓�
+
+        return ByteUtil.bytesMerge(preBytes, bsTail) ;
+    }
+
+}
+
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_1601_Down.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_1601_Down.java
new file mode 100644
index 0000000..207cabb
--- /dev/null
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_1601_Down.java
@@ -0,0 +1,108 @@
+package com.dy.common.mw.protocol.p206V1.parse;
+
+import com.dy.common.mw.protocol.*;
+import com.dy.common.mw.protocol.p206V1.CodeV1;
+import com.dy.common.mw.protocol.p206V1.ParseParamsForDownV1;
+import com.dy.common.mw.protocol.p206V1.ProtocolConstantV206V1;
+import com.dy.common.mw.protocol.p206V1.parse.global.GlCreate;
+import com.dy.common.softUpgrade.Com1601Vo;
+import com.dy.common.util.ByteUtil;
+
+/**
+ * @Author liurunyu
+ * @Date 2024/06/12 9:30
+ * @Description
+ */
+@AnnotationCodeDown(ifAny={
+        CodeV1.cd_1601
+})
+public class Cd_1601_Down implements CodeParse {
+
+    @Override
+    public MidResult[] parse(Boolean isLowPower, CodeParseParams params, CodeParseCallback callback) throws Exception {
+        ParseParamsForDownV1 para = (ParseParamsForDownV1) params ;
+        MidResultToRtu midRs = new MidResultToRtu() ;
+        byte[] bs = this.doParse(midRs, para) ;
+
+        midRs.rtuResultSendWebUrl = para.rtuResultSendWebUrl ;//rtu杩斿洖鍛戒护缁撴灉 鍙戝悜鐩殑鍦皐eb URL
+        midRs.protocolName = para.protocolName ;//鍗忚鍚嶇О
+        midRs.protocolVersion = para.protocolVersion; //鍗忚鐗堟湰鍙�
+        midRs.rtuAddr = para.rtuAddr ;//Rtu鍦板潃
+        midRs.commandId = para.commandId ;//鍛戒护ID锛屽彂璧峰懡浠ょ殑瀹㈡埛绔�(web绔�)鐢熸垚锛屼互鍖归厤鍛戒护缁撴灉
+        midRs.downCode = para.commandCode ;//涓嬭鍛戒护鍔熻兘鐮�;
+        midRs.downCodeName = CodeV1.getCodeName(para.commandCode) ;//涓嬭鍛戒护鍔熻兘鐮佸悕绉�;
+        midRs.downBuffer = bs ;//涓嬭鍛戒护鏁版嵁
+        midRs.downBufHex = ByteUtil.bytes2Hex(bs, true) ;//涓嬭鍛戒护鏁版嵁鍗佸叚杩涘埗褰㈠紡
+        midRs.hasResponse = true ;//鏄惁鏈夊簲绛�
+        midRs.maxSendTimes = null ;//鍛戒护鏈�澶у彂閫佹鏁�(褰撴敹涓嶅埌搴旂瓟鏃讹紝灏嗛噸鍙�)锛屽鏋滀笉璁剧疆锛屽懡浠ょ紦瀛樺櫒杩涜琛ュ厖璁剧疆
+        midRs.isCachForOffLine = false ;//RTU涓嶅湪绾匡紝鍛戒护鏄惁缂撳瓨锛屼綆鍔熻�楁椂涓簍rue
+
+        if(isLowPower != null && isLowPower.booleanValue()){
+            //浣庡姛鑰楁椂锛屽敖蹇彂閫�
+            midRs.isQuickSend = true ;
+        }
+
+        return new MidResult[]{midRs} ;
+    }
+
+
+    /**
+     * 鏋勯�犱笅琛屾暟鎹�
+     * @param midRs 鍙傛暟
+     * @param para 鍙傛暟
+     * @return 瀛楄妭鏁扮粍
+     * @throws Exception 寮傚父
+     */
+    public byte[] doParse(MidResultToRtu midRs, ParseParamsForDownV1 para) throws Exception {
+        byte[] preBytes = new byte[ProtocolConstantV206V1.UG_lenHead2RtuAddr] ;
+        byte index = 0 ;
+        preBytes[index] = ProtocolConstantV206V1.UG_P_Head_Byte ;
+
+        index++ ;
+        preBytes[index] = 0 ;//甯ч暱搴�
+        index++ ;
+        preBytes[index] = 0 ;//甯ч暱搴�
+
+        index++ ;
+        preBytes[index] = ProtocolConstantV206V1.UG_P_Head_Byte ;
+
+        index++ ;
+        ByteUtil.hex2Bytes(para.commandCode, preBytes, index) ;
+
+        index += 2 ;
+        GlCreate.createRtuAddr4PUg(para.rtuAddr, preBytes, index);
+
+        if(para.param == null){
+            throw new Exception("鍙傛暟涓虹┖") ;
+        }
+        if(para.param instanceof Com1601Vo){
+            throw new Exception("鍙傛暟绫诲瀷闈濩om1601Vo") ;
+        }
+        Com1601Vo vo = (Com1601Vo) para.param ;
+        byte[] bs = new byte[4] ;
+        ByteUtil.hex2Bytes(vo.softStoreAddr, bs, 0) ;
+        byte[] bytes = ByteUtil.bytesMerge(preBytes, bs) ;
+
+        bs = new byte[4] ;
+        ByteUtil.int2Bytes_BE(bs, vo.totalByte, 0);
+        bytes = ByteUtil.bytesMerge(bytes, bs) ;
+
+        bs = new byte[2] ;
+        ByteUtil.short2Bytes_BE(bs, (short)vo.softCrc, 0);
+        bytes = ByteUtil.bytesMerge(bytes, bs) ;
+
+        bs = new byte[2] ;
+        ByteUtil.short2Bytes_BE(bs, (short)vo.softCrc, 0);
+        bytes = ByteUtil.bytesMerge(bytes, bs) ;
+
+        bs = new byte[4] ;
+        ByteUtil.hex2Bytes(vo.softStartAddr, bs, 0) ;
+        bytes = ByteUtil.bytesMerge(bytes, bs) ;
+
+        byte[] bsTail = GlCreate.createCrcTail4Ug(bytes) ;//CRC鍜屽熬鍙犲姞瀛楄妭鏁扮粍涓�
+
+        return ByteUtil.bytesMerge(bytes, bsTail) ;
+    }
+
+}
+
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_1602_Down.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_1602_Down.java
new file mode 100644
index 0000000..41c64e4
--- /dev/null
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_1602_Down.java
@@ -0,0 +1,91 @@
+package com.dy.common.mw.protocol.p206V1.parse;
+
+import com.dy.common.mw.protocol.*;
+import com.dy.common.mw.protocol.p206V1.CodeV1;
+import com.dy.common.mw.protocol.p206V1.ParseParamsForDownV1;
+import com.dy.common.mw.protocol.p206V1.ProtocolConstantV206V1;
+import com.dy.common.mw.protocol.p206V1.parse.global.GlCreate;
+import com.dy.common.softUpgrade.Com1601Vo;
+import com.dy.common.util.ByteUtil;
+
+/**
+ * @Author liurunyu
+ * @Date 2024/06/12 9:30
+ * @Description
+ */
+@AnnotationCodeDown(ifAny={
+        CodeV1.cd_1602
+})
+public class Cd_1602_Down implements CodeParse {
+
+    @Override
+    public MidResult[] parse(Boolean isLowPower, CodeParseParams params, CodeParseCallback callback) throws Exception {
+        ParseParamsForDownV1 para = (ParseParamsForDownV1) params ;
+        MidResultToRtu midRs = new MidResultToRtu() ;
+        byte[] bs = this.doParse(midRs, para) ;
+
+        midRs.rtuResultSendWebUrl = para.rtuResultSendWebUrl ;//rtu杩斿洖鍛戒护缁撴灉 鍙戝悜鐩殑鍦皐eb URL
+        midRs.protocolName = para.protocolName ;//鍗忚鍚嶇О
+        midRs.protocolVersion = para.protocolVersion; //鍗忚鐗堟湰鍙�
+        midRs.rtuAddr = para.rtuAddr ;//Rtu鍦板潃
+        midRs.commandId = para.commandId ;//鍛戒护ID锛屽彂璧峰懡浠ょ殑瀹㈡埛绔�(web绔�)鐢熸垚锛屼互鍖归厤鍛戒护缁撴灉
+        midRs.downCode = para.commandCode ;//涓嬭鍛戒护鍔熻兘鐮�;
+        midRs.downCodeName = CodeV1.getCodeName(para.commandCode) ;//涓嬭鍛戒护鍔熻兘鐮佸悕绉�;
+        midRs.downBuffer = bs ;//涓嬭鍛戒护鏁版嵁
+        midRs.downBufHex = ByteUtil.bytes2Hex(bs, true) ;//涓嬭鍛戒护鏁版嵁鍗佸叚杩涘埗褰㈠紡
+        midRs.hasResponse = true ;//鏄惁鏈夊簲绛�
+        midRs.maxSendTimes = null ;//鍛戒护鏈�澶у彂閫佹鏁�(褰撴敹涓嶅埌搴旂瓟鏃讹紝灏嗛噸鍙�)锛屽鏋滀笉璁剧疆锛屽懡浠ょ紦瀛樺櫒杩涜琛ュ厖璁剧疆
+        midRs.isCachForOffLine = false ;//RTU涓嶅湪绾匡紝鍛戒护鏄惁缂撳瓨锛屼綆鍔熻�楁椂涓簍rue
+
+        if(isLowPower != null && isLowPower.booleanValue()){
+            //浣庡姛鑰楁椂锛屽敖蹇彂閫�
+            midRs.isQuickSend = true ;
+        }
+
+        return new MidResult[]{midRs} ;
+    }
+
+
+    /**
+     * 鏋勯�犱笅琛屾暟鎹�
+     * @param midRs 鍙傛暟
+     * @param para 鍙傛暟
+     * @return 瀛楄妭鏁扮粍
+     * @throws Exception 寮傚父
+     */
+    public byte[] doParse(MidResultToRtu midRs, ParseParamsForDownV1 para) throws Exception {
+        byte[] preBytes = new byte[ProtocolConstantV206V1.UG_lenHead2RtuAddr] ;
+        byte index = 0 ;
+        preBytes[index] = ProtocolConstantV206V1.UG_P_Head_Byte ;
+
+        index++ ;
+        preBytes[index] = 0 ;//甯ч暱搴�
+        index++ ;
+        preBytes[index] = 0 ;//甯ч暱搴�
+
+        index++ ;
+        preBytes[index] = ProtocolConstantV206V1.UG_P_Head_Byte ;
+
+        index++ ;
+        ByteUtil.hex2Bytes(para.commandCode, preBytes, index) ;
+
+        index += 2 ;
+        GlCreate.createRtuAddr4PUg(para.rtuAddr, preBytes, index);
+        if(para.param == null){
+            throw new Exception("鍙傛暟涓虹┖") ;
+        }
+        Integer ramAddr = (Integer)para.param ;
+
+        byte[] bs = new byte[4] ;
+        ByteUtil.int2Bytes_BE(bs, ramAddr, 0);
+        byte[] bytes = ByteUtil.bytesMerge(preBytes, bs) ;
+
+        bytes = ByteUtil.bytesMerge(bytes, (byte[])para.attachment) ;
+
+        byte[] bsTail = GlCreate.createCrcTail4Ug(bytes) ;//CRC鍜屽熬鍙犲姞瀛楄妭鏁扮粍涓�
+
+        return ByteUtil.bytesMerge(bytes, bsTail) ;
+    }
+
+}
+
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_1603_Down.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_1603_Down.java
new file mode 100644
index 0000000..616e749
--- /dev/null
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_1603_Down.java
@@ -0,0 +1,80 @@
+package com.dy.common.mw.protocol.p206V1.parse;
+
+import com.dy.common.mw.protocol.*;
+import com.dy.common.mw.protocol.p206V1.CodeV1;
+import com.dy.common.mw.protocol.p206V1.ParseParamsForDownV1;
+import com.dy.common.mw.protocol.p206V1.ProtocolConstantV206V1;
+import com.dy.common.mw.protocol.p206V1.parse.global.GlCreate;
+import com.dy.common.util.ByteUtil;
+
+/**
+ * @Author liurunyu
+ * @Date 2024/06/12 9:30
+ * @Description
+ */
+@AnnotationCodeDown(ifAny={
+        CodeV1.cd_1603
+})
+public class Cd_1603_Down implements CodeParse {
+
+    @Override
+    public MidResult[] parse(Boolean isLowPower, CodeParseParams params, CodeParseCallback callback) throws Exception {
+        ParseParamsForDownV1 para = (ParseParamsForDownV1) params ;
+        MidResultToRtu midRs = new MidResultToRtu() ;
+        byte[] bs = this.doParse(midRs, para) ;
+
+        midRs.rtuResultSendWebUrl = para.rtuResultSendWebUrl ;//rtu杩斿洖鍛戒护缁撴灉 鍙戝悜鐩殑鍦皐eb URL
+        midRs.protocolName = para.protocolName ;//鍗忚鍚嶇О
+        midRs.protocolVersion = para.protocolVersion; //鍗忚鐗堟湰鍙�
+        midRs.rtuAddr = para.rtuAddr ;//Rtu鍦板潃
+        midRs.commandId = para.commandId ;//鍛戒护ID锛屽彂璧峰懡浠ょ殑瀹㈡埛绔�(web绔�)鐢熸垚锛屼互鍖归厤鍛戒护缁撴灉
+        midRs.downCode = para.commandCode ;//涓嬭鍛戒护鍔熻兘鐮�;
+        midRs.downCodeName = CodeV1.getCodeName(para.commandCode) ;//涓嬭鍛戒护鍔熻兘鐮佸悕绉�;
+        midRs.downBuffer = bs ;//涓嬭鍛戒护鏁版嵁
+        midRs.downBufHex = ByteUtil.bytes2Hex(bs, true) ;//涓嬭鍛戒护鏁版嵁鍗佸叚杩涘埗褰㈠紡
+        midRs.hasResponse = true ;//鏄惁鏈夊簲绛�
+        midRs.maxSendTimes = null ;//鍛戒护鏈�澶у彂閫佹鏁�(褰撴敹涓嶅埌搴旂瓟鏃讹紝灏嗛噸鍙�)锛屽鏋滀笉璁剧疆锛屽懡浠ょ紦瀛樺櫒杩涜琛ュ厖璁剧疆
+        midRs.isCachForOffLine = false ;//RTU涓嶅湪绾匡紝鍛戒护鏄惁缂撳瓨锛屼綆鍔熻�楁椂涓簍rue
+
+        if(isLowPower != null && isLowPower.booleanValue()){
+            //浣庡姛鑰楁椂锛屽敖蹇彂閫�
+            midRs.isQuickSend = true ;
+        }
+
+        return new MidResult[]{midRs} ;
+    }
+
+
+    /**
+     * 鏋勯�犱笅琛屾暟鎹�
+     * @param midRs 鍙傛暟
+     * @param para 鍙傛暟
+     * @return 瀛楄妭鏁扮粍
+     * @throws Exception 寮傚父
+     */
+    public byte[] doParse(MidResultToRtu midRs, ParseParamsForDownV1 para) throws Exception {
+        byte[] preBytes = new byte[ProtocolConstantV206V1.UG_lenHead2RtuAddr] ;
+        byte index = 0 ;
+        preBytes[index] = ProtocolConstantV206V1.UG_P_Head_Byte ;
+
+        index++ ;
+        preBytes[index] = 0 ;//甯ч暱搴�
+        index++ ;
+        preBytes[index] = 0 ;//甯ч暱搴�
+
+        index++ ;
+        preBytes[index] = ProtocolConstantV206V1.UG_P_Head_Byte ;
+
+        index++ ;
+        ByteUtil.hex2Bytes(para.commandCode, preBytes, index) ;
+
+        index += 2 ;
+        GlCreate.createRtuAddr4PUg(para.rtuAddr, preBytes, index);
+
+        byte[] bsTail = GlCreate.createCrcTail4Ug(preBytes) ;//CRC鍜屽熬鍙犲姞瀛楄妭鏁扮粍涓�
+
+        return ByteUtil.bytesMerge(preBytes, bsTail) ;
+    }
+
+}
+
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_21_Down.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_21_Down.java
index 813a1c2..9bb2c88 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_21_Down.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_21_Down.java
@@ -91,7 +91,7 @@
             bsHead[index] = commonV_1.createCtrl((byte)0, (byte)0) ;
 
             index++ ;
-            GlCreate.createRtuAddr(para.rtuAddr, bsHead, index);
+            GlCreate.createRtuAddr4P206(para.rtuAddr, bsHead, index);
             index += 5 ;
 
             ByteUtil.hex2Bytes(para.commandCode, bsHead, index) ;
@@ -113,7 +113,7 @@
 
             GlCreate.createLen(bytes);//闀垮害鏀惧瓧鑺傛暟缁勪腑
 
-            byte[] bsTail = GlCreate.createCrcTail(bytes) ;//CRC鍜屽熬鍙犲姞瀛楄妭鏁扮粍涓�
+            byte[] bsTail = GlCreate.createCrcTail4P206(bytes) ;//CRC鍜屽熬鍙犲姞瀛楄妭鏁扮粍涓�
 
             bytes = ByteUtil.bytesMerge(bytes, bsTail) ;
 
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_21_Up.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_21_Up.java
index 95a4534..40f8bac 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_21_Up.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_21_Up.java
@@ -27,7 +27,7 @@
     @Override
     public MidResult[] parse(Boolean isLowPower, CodeParseParams params, CodeParseCallback callback)throws Exception {
         ParseParamsForUpV1 para = (ParseParamsForUpV1)params ;
-        int bsLen = new CommonV1().parseDataLen(para.upBuffer) ;
+        int bsLen = new CommonV1().parseDataLen4P206(para.upBuffer) ;
         if(bsLen > 0){
             this.doParse(para.upBuffer,
                     bsLen,
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_36_Down.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_36_Down.java
index 70a348d..fe9bbf2 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_36_Down.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_36_Down.java
@@ -70,7 +70,7 @@
         bsHead[index] = commonV_1.createCtrl((byte)0, (byte)0) ;
 
         index++ ;
-        GlCreate.createRtuAddr(para.rtuAddr, bsHead, index);
+        GlCreate.createRtuAddr4P206(para.rtuAddr, bsHead, index);
         index += 5 ;
 
         ByteUtil.hex2Bytes(para.commandCode, bsHead, index) ;
@@ -99,7 +99,7 @@
 
         GlCreate.createLen(bytes);//闀垮害鏀惧瓧鑺傛暟缁勪腑
 
-        byte[] bsTail = GlCreate.createCrcTail(bytes) ;//CRC鍜屽熬鍙犲姞瀛楄妭鏁扮粍涓�
+        byte[] bsTail = GlCreate.createCrcTail4P206(bytes) ;//CRC鍜屽熬鍙犲姞瀛楄妭鏁扮粍涓�
 
         bytes = ByteUtil.bytesMerge(bytes, bsTail) ;
 
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_36_Up.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_36_Up.java
index f51d558..787d2e0 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_36_Up.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_36_Up.java
@@ -26,7 +26,7 @@
     @Override
     public MidResult[] parse(Boolean isLowPower, CodeParseParams params, CodeParseCallback callback)throws Exception {
         ParseParamsForUpV1 para = (ParseParamsForUpV1)params ;
-        int bsLen = new CommonV1().parseDataLen(para.upBuffer) ;
+        int bsLen = new CommonV1().parseDataLen4P206(para.upBuffer) ;
         if(bsLen > 0){
             this.doParse(para.upBuffer,
                     bsLen,
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_37_Down.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_37_Down.java
index aeef95e..7e32d1e 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_37_Down.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_37_Down.java
@@ -88,7 +88,7 @@
             bsHead[index] = commonV_1.createCtrl((byte) 0, (byte) 0);
 
             index++;
-            GlCreate.createRtuAddr(para.rtuAddr, bsHead, index);
+            GlCreate.createRtuAddr4P206(para.rtuAddr, bsHead, index);
             index += 5;
 
             ByteUtil.hex2Bytes(para.commandCode, bsHead, index);
@@ -104,7 +104,7 @@
 
             GlCreate.createLen(bytes);//闀垮害鏀惧瓧鑺傛暟缁勪腑
 
-            byte[] bsTail = GlCreate.createCrcTail(bytes);//CRC鍜屽熬鍙犲姞瀛楄妭鏁扮粍涓�
+            byte[] bsTail = GlCreate.createCrcTail4P206(bytes);//CRC鍜屽熬鍙犲姞瀛楄妭鏁扮粍涓�
 
             bytes = ByteUtil.bytesMerge(bytes, bsTail);
 
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_37_Up.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_37_Up.java
index 39479b6..fed7e9f 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_37_Up.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_37_Up.java
@@ -26,7 +26,7 @@
     @Override
     public MidResult[] parse(Boolean isLowPower, CodeParseParams params, CodeParseCallback callback)throws Exception {
         ParseParamsForUpV1 para = (ParseParamsForUpV1)params ;
-        int bsLen = new CommonV1().parseDataLen(para.upBuffer) ;
+        int bsLen = new CommonV1().parseDataLen4P206(para.upBuffer) ;
         if(bsLen > 0){
             this.doParse(para.upBuffer,
                     bsLen,
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_38_Down.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_38_Down.java
index f749acd..df76c5b 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_38_Down.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_38_Down.java
@@ -87,7 +87,7 @@
             bsHead[index] = commonV_1.createCtrl((byte) 0, (byte) 0);
 
             index++;
-            GlCreate.createRtuAddr(para.rtuAddr, bsHead, index);
+            GlCreate.createRtuAddr4P206(para.rtuAddr, bsHead, index);
             index += 5;
 
             ByteUtil.hex2Bytes(para.commandCode, bsHead, index);
@@ -112,7 +112,7 @@
 
             GlCreate.createLen(bytes);//闀垮害鏀惧瓧鑺傛暟缁勪腑
 
-            byte[] bsTail = GlCreate.createCrcTail(bytes);//CRC鍜屽熬鍙犲姞瀛楄妭鏁扮粍涓�
+            byte[] bsTail = GlCreate.createCrcTail4P206(bytes);//CRC鍜屽熬鍙犲姞瀛楄妭鏁扮粍涓�
 
             bytes = ByteUtil.bytesMerge(bytes, bsTail);
 
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_38_Up.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_38_Up.java
index 676ca54..81d595d 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_38_Up.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_38_Up.java
@@ -26,7 +26,7 @@
     @Override
     public MidResult[] parse(Boolean isLowPower, CodeParseParams params, CodeParseCallback callback)throws Exception {
         ParseParamsForUpV1 para = (ParseParamsForUpV1)params ;
-        int bsLen = new CommonV1().parseDataLen(para.upBuffer) ;
+        int bsLen = new CommonV1().parseDataLen4P206(para.upBuffer) ;
         if(bsLen > 0){
             this.doParse(para.upBuffer,
                     bsLen,
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_39_Down.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_39_Down.java
index 20ca593..b60903f 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_39_Down.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_39_Down.java
@@ -88,7 +88,7 @@
             bsHead[index] = commonV_1.createCtrl((byte) 0, (byte) 0);
 
             index++;
-            GlCreate.createRtuAddr(para.rtuAddr, bsHead, index);
+            GlCreate.createRtuAddr4P206(para.rtuAddr, bsHead, index);
             index += 5;
 
             ByteUtil.hex2Bytes(para.commandCode, bsHead, index);
@@ -106,7 +106,7 @@
 
             GlCreate.createLen(bytes);//闀垮害鏀惧瓧鑺傛暟缁勪腑
 
-            byte[] bsTail = GlCreate.createCrcTail(bytes);//CRC鍜屽熬鍙犲姞瀛楄妭鏁扮粍涓�
+            byte[] bsTail = GlCreate.createCrcTail4P206(bytes);//CRC鍜屽熬鍙犲姞瀛楄妭鏁扮粍涓�
 
             bytes = ByteUtil.bytesMerge(bytes, bsTail);
 
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_39_Up.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_39_Up.java
index 3227b6e..425ab9c 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_39_Up.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_39_Up.java
@@ -26,7 +26,7 @@
     @Override
     public MidResult[] parse(Boolean isLowPower, CodeParseParams params, CodeParseCallback callback)throws Exception {
         ParseParamsForUpV1 para = (ParseParamsForUpV1)params ;
-        int bsLen = new CommonV1().parseDataLen(para.upBuffer) ;
+        int bsLen = new CommonV1().parseDataLen4P206(para.upBuffer) ;
         if(bsLen > 0){
             this.doParse(para.upBuffer,
                     bsLen,
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_3A_Down.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_3A_Down.java
index 77b8d44..df39a42 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_3A_Down.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_3A_Down.java
@@ -88,7 +88,7 @@
             bsHead[index] = commonV_1.createCtrl((byte) 0, (byte) 0);
 
             index++;
-            GlCreate.createRtuAddr(para.rtuAddr, bsHead, index);
+            GlCreate.createRtuAddr4P206(para.rtuAddr, bsHead, index);
             index += 5;
 
             ByteUtil.hex2Bytes(para.commandCode, bsHead, index);
@@ -106,7 +106,7 @@
 
             GlCreate.createLen(bytes);//闀垮害鏀惧瓧鑺傛暟缁勪腑
 
-            byte[] bsTail = GlCreate.createCrcTail(bytes);//CRC鍜屽熬鍙犲姞瀛楄妭鏁扮粍涓�
+            byte[] bsTail = GlCreate.createCrcTail4P206(bytes);//CRC鍜屽熬鍙犲姞瀛楄妭鏁扮粍涓�
 
             bytes = ByteUtil.bytesMerge(bytes, bsTail);
 
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_3A_Up.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_3A_Up.java
index 1da4cc6..574147a 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_3A_Up.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_3A_Up.java
@@ -26,7 +26,7 @@
     @Override
     public MidResult[] parse(Boolean isLowPower, CodeParseParams params, CodeParseCallback callback)throws Exception {
         ParseParamsForUpV1 para = (ParseParamsForUpV1)params ;
-        int bsLen = new CommonV1().parseDataLen(para.upBuffer) ;
+        int bsLen = new CommonV1().parseDataLen4P206(para.upBuffer) ;
         if(bsLen > 0){
             this.doParse(para.upBuffer,
                     bsLen,
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_3B_Down.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_3B_Down.java
index d43bbed..b58bbf4 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_3B_Down.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_3B_Down.java
@@ -88,7 +88,7 @@
             bsHead[index] = commonV_1.createCtrl((byte) 0, (byte) 0);
 
             index++;
-            GlCreate.createRtuAddr(para.rtuAddr, bsHead, index);
+            GlCreate.createRtuAddr4P206(para.rtuAddr, bsHead, index);
             index += 5;
 
             ByteUtil.hex2Bytes(para.commandCode, bsHead, index);
@@ -104,7 +104,7 @@
 
             GlCreate.createLen(bytes);//闀垮害鏀惧瓧鑺傛暟缁勪腑
 
-            byte[] bsTail = GlCreate.createCrcTail(bytes);//CRC鍜屽熬鍙犲姞瀛楄妭鏁扮粍涓�
+            byte[] bsTail = GlCreate.createCrcTail4P206(bytes);//CRC鍜屽熬鍙犲姞瀛楄妭鏁扮粍涓�
 
             bytes = ByteUtil.bytesMerge(bytes, bsTail);
 
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_3B_Up.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_3B_Up.java
index 52632dd..ccb1442 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_3B_Up.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_3B_Up.java
@@ -26,7 +26,7 @@
     @Override
     public MidResult[] parse(Boolean isLowPower, CodeParseParams params, CodeParseCallback callback)throws Exception {
         ParseParamsForUpV1 para = (ParseParamsForUpV1)params ;
-        int bsLen = new CommonV1().parseDataLen(para.upBuffer) ;
+        int bsLen = new CommonV1().parseDataLen4P206(para.upBuffer) ;
         if(bsLen > 0){
             this.doParse(para.upBuffer,
                     bsLen,
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_3C_Down.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_3C_Down.java
index 4aae89a..685f757 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_3C_Down.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_3C_Down.java
@@ -88,7 +88,7 @@
             bsHead[index] = commonV_1.createCtrl((byte) 0, (byte) 0);
 
             index++;
-            GlCreate.createRtuAddr(para.rtuAddr, bsHead, index);
+            GlCreate.createRtuAddr4P206(para.rtuAddr, bsHead, index);
             index += 5;
 
             ByteUtil.hex2Bytes(para.commandCode, bsHead, index);
@@ -104,7 +104,7 @@
 
             GlCreate.createLen(bytes);//闀垮害鏀惧瓧鑺傛暟缁勪腑
 
-            byte[] bsTail = GlCreate.createCrcTail(bytes);//CRC鍜屽熬鍙犲姞瀛楄妭鏁扮粍涓�
+            byte[] bsTail = GlCreate.createCrcTail4P206(bytes);//CRC鍜屽熬鍙犲姞瀛楄妭鏁扮粍涓�
 
             bytes = ByteUtil.bytesMerge(bytes, bsTail);
 
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_3C_Up.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_3C_Up.java
index 60b5bd7..c90e2a4 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_3C_Up.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_3C_Up.java
@@ -26,7 +26,7 @@
     @Override
     public MidResult[] parse(Boolean isLowPower, CodeParseParams params, CodeParseCallback callback)throws Exception {
         ParseParamsForUpV1 para = (ParseParamsForUpV1)params ;
-        int bsLen = new CommonV1().parseDataLen(para.upBuffer) ;
+        int bsLen = new CommonV1().parseDataLen4P206(para.upBuffer) ;
         if(bsLen > 0){
             this.doParse(para.upBuffer,
                     bsLen,
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_3D_Down.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_3D_Down.java
index 2f0f4bf..3db12d9 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_3D_Down.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_3D_Down.java
@@ -70,7 +70,7 @@
         bsHead[index] = commonV_1.createCtrl((byte)0, (byte)0) ;
 
         index++ ;
-        GlCreate.createRtuAddr(para.rtuAddr, bsHead, index);
+        GlCreate.createRtuAddr4P206(para.rtuAddr, bsHead, index);
         index += 5 ;
 
         ByteUtil.hex2Bytes(para.commandCode, bsHead, index) ;
@@ -92,7 +92,7 @@
 
         GlCreate.createLen(bytes);//闀垮害鏀惧瓧鑺傛暟缁勪腑
 
-        byte[] bsTail = GlCreate.createCrcTail(bytes) ;//CRC鍜屽熬鍙犲姞瀛楄妭鏁扮粍涓�
+        byte[] bsTail = GlCreate.createCrcTail4P206(bytes) ;//CRC鍜屽熬鍙犲姞瀛楄妭鏁扮粍涓�
 
         bytes = ByteUtil.bytesMerge(bytes, bsTail) ;
 
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_3D_Up.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_3D_Up.java
index f5c4653..2271cb1 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_3D_Up.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_3D_Up.java
@@ -26,7 +26,7 @@
     @Override
     public MidResult[] parse(Boolean isLowPower, CodeParseParams params, CodeParseCallback callback)throws Exception {
         ParseParamsForUpV1 para = (ParseParamsForUpV1)params ;
-        int bsLen = new CommonV1().parseDataLen(para.upBuffer) ;
+        int bsLen = new CommonV1().parseDataLen4P206(para.upBuffer) ;
         if(bsLen > 0){
             this.doParse(para.upBuffer,
                     bsLen,
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_51_Down.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_51_Down.java
index ba5ca46..5d97637 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_51_Down.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_51_Down.java
@@ -69,7 +69,7 @@
         bsHead[index] = commonV_1.createCtrl((byte)0, (byte)0) ;
 
         index++ ;
-        GlCreate.createRtuAddr(para.rtuAddr, bsHead, index);
+        GlCreate.createRtuAddr4P206(para.rtuAddr, bsHead, index);
         index += 5 ;
 
         ByteUtil.hex2Bytes(para.commandCode, bsHead, index) ;
@@ -78,7 +78,7 @@
 
         GlCreate.createLen(bytes);//闀垮害鏀惧瓧鑺傛暟缁勪腑
 
-        byte[] bsTail = GlCreate.createCrcTail(bytes) ;//CRC鍜屽熬鍙犲姞瀛楄妭鏁扮粍涓�
+        byte[] bsTail = GlCreate.createCrcTail4P206(bytes) ;//CRC鍜屽熬鍙犲姞瀛楄妭鏁扮粍涓�
 
         bytes = ByteUtil.bytesMerge(bytes, bsTail) ;
 
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_51_Up.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_51_Up.java
index 3835d21..8dd29ae 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_51_Up.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_51_Up.java
@@ -26,7 +26,7 @@
     @Override
     public MidResult[] parse(Boolean isLowPower, CodeParseParams params, CodeParseCallback callback)throws Exception {
         ParseParamsForUpV1 para = (ParseParamsForUpV1)params ;
-        int bsLen = new CommonV1().parseDataLen(para.upBuffer) ;
+        int bsLen = new CommonV1().parseDataLen4P206(para.upBuffer) ;
         if(bsLen > 0){
             this.doParse(para.upBuffer,
                     bsLen,
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_5E_Down.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_5E_Down.java
index c818e1a..96ef02b 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_5E_Down.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_5E_Down.java
@@ -69,7 +69,7 @@
         bsHead[index] = commonV_1.createCtrl((byte)0, (byte)0) ;
 
         index++ ;
-        GlCreate.createRtuAddr(para.rtuAddr, bsHead, index);
+        GlCreate.createRtuAddr4P206(para.rtuAddr, bsHead, index);
         index += 5 ;
 
         ByteUtil.hex2Bytes(para.commandCode, bsHead, index) ;
@@ -78,7 +78,7 @@
 
         GlCreate.createLen(bytes);//闀垮害鏀惧瓧鑺傛暟缁勪腑
 
-        byte[] bsTail = GlCreate.createCrcTail(bytes) ;//CRC鍜屽熬鍙犲姞瀛楄妭鏁扮粍涓�
+        byte[] bsTail = GlCreate.createCrcTail4P206(bytes) ;//CRC鍜屽熬鍙犲姞瀛楄妭鏁扮粍涓�
 
         bytes = ByteUtil.bytesMerge(bytes, bsTail) ;
 
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_5E_Up.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_5E_Up.java
index 6827ac6..c36cebe 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_5E_Up.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_5E_Up.java
@@ -25,7 +25,7 @@
     @Override
     public MidResult[] parse(Boolean isLowPower, CodeParseParams params, CodeParseCallback callback)throws Exception {
         ParseParamsForUpV1 para = (ParseParamsForUpV1)params ;
-        int bsLen = new CommonV1().parseDataLen(para.upBuffer) ;
+        int bsLen = new CommonV1().parseDataLen4P206(para.upBuffer) ;
         if(bsLen > 0){
             this.doParse(para.upBuffer,
                     bsLen,
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_65_Down.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_65_Down.java
index f7fab42..4cdf05d 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_65_Down.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_65_Down.java
@@ -69,7 +69,7 @@
         bsHead[index] = commonV_1.createCtrl((byte)0, (byte)0) ;
 
         index++ ;
-        GlCreate.createRtuAddr(para.rtuAddr, bsHead, index);
+        GlCreate.createRtuAddr4P206(para.rtuAddr, bsHead, index);
         index += 5 ;
 
         ByteUtil.hex2Bytes(para.commandCode, bsHead, index) ;
@@ -78,7 +78,7 @@
 
         GlCreate.createLen(bytes);//闀垮害鏀惧瓧鑺傛暟缁勪腑
 
-        byte[] bsTail = GlCreate.createCrcTail(bytes) ;//CRC鍜屽熬鍙犲姞瀛楄妭鏁扮粍涓�
+        byte[] bsTail = GlCreate.createCrcTail4P206(bytes) ;//CRC鍜屽熬鍙犲姞瀛楄妭鏁扮粍涓�
 
         bytes = ByteUtil.bytesMerge(bytes, bsTail) ;
 
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_65_Up.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_65_Up.java
index a606c52..e318ce6 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_65_Up.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_65_Up.java
@@ -26,7 +26,7 @@
     @Override
     public MidResult[] parse(Boolean isLowPower, CodeParseParams params, CodeParseCallback callback)throws Exception {
         ParseParamsForUpV1 para = (ParseParamsForUpV1)params ;
-        int bsLen = new CommonV1().parseDataLen(para.upBuffer) ;
+        int bsLen = new CommonV1().parseDataLen4P206(para.upBuffer) ;
         if(bsLen > 0){
             this.doParse(para.upBuffer,
                     bsLen,
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_66_Down.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_66_Down.java
index 4a112e2..031ab41 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_66_Down.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_66_Down.java
@@ -71,7 +71,7 @@
         bsHead[index] = commonV_1.createCtrl((byte)0, (byte)0) ;
 
         index++ ;
-        GlCreate.createRtuAddr(para.rtuAddr, bsHead, index);
+        GlCreate.createRtuAddr4P206(para.rtuAddr, bsHead, index);
         index += 5 ;
 
         ByteUtil.hex2Bytes(para.commandCode, bsHead, index) ;
@@ -80,7 +80,7 @@
 
         GlCreate.createLen(bytes);//闀垮害鏀惧瓧鑺傛暟缁勪腑
 
-        byte[] bsTail = GlCreate.createCrcTail(bytes) ;//CRC鍜屽熬鍙犲姞瀛楄妭鏁扮粍涓�
+        byte[] bsTail = GlCreate.createCrcTail4P206(bytes) ;//CRC鍜屽熬鍙犲姞瀛楄妭鏁扮粍涓�
 
         bytes = ByteUtil.bytesMerge(bytes, bsTail) ;
 
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_66_Up.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_66_Up.java
index fabbb8d..9c9ea27 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_66_Up.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_66_Up.java
@@ -27,7 +27,7 @@
     @Override
     public MidResult[] parse(Boolean isLowPower, CodeParseParams params, CodeParseCallback callback)throws Exception {
         ParseParamsForUpV1 para = (ParseParamsForUpV1)params ;
-        int bsLen = new CommonV1().parseDataLen(para.upBuffer) ;
+        int bsLen = new CommonV1().parseDataLen4P206(para.upBuffer) ;
         if(bsLen > 0){
             this.doParse(para.upBuffer,
                     bsLen,
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_67_Down.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_67_Down.java
index 3949595..baae4ea 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_67_Down.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_67_Down.java
@@ -69,7 +69,7 @@
         bsHead[index] = commonV_1.createCtrl((byte)0, (byte)0) ;
 
         index++ ;
-        GlCreate.createRtuAddr(para.rtuAddr, bsHead, index);
+        GlCreate.createRtuAddr4P206(para.rtuAddr, bsHead, index);
         index += 5 ;
 
         ByteUtil.hex2Bytes(para.commandCode, bsHead, index) ;
@@ -78,7 +78,7 @@
 
         GlCreate.createLen(bytes);//闀垮害鏀惧瓧鑺傛暟缁勪腑
 
-        byte[] bsTail = GlCreate.createCrcTail(bytes) ;//CRC鍜屽熬鍙犲姞瀛楄妭鏁扮粍涓�
+        byte[] bsTail = GlCreate.createCrcTail4P206(bytes) ;//CRC鍜屽熬鍙犲姞瀛楄妭鏁扮粍涓�
 
         bytes = ByteUtil.bytesMerge(bytes, bsTail) ;
 
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_67_Up.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_67_Up.java
index 840034d..da5c9d4 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_67_Up.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_67_Up.java
@@ -26,7 +26,7 @@
     @Override
     public MidResult[] parse(Boolean isLowPower, CodeParseParams params, CodeParseCallback callback)throws Exception {
         ParseParamsForUpV1 para = (ParseParamsForUpV1)params ;
-        int bsLen = new CommonV1().parseDataLen(para.upBuffer) ;
+        int bsLen = new CommonV1().parseDataLen4P206(para.upBuffer) ;
         if(bsLen > 0){
             this.doParse(para.upBuffer,
                     bsLen,
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_68_Down.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_68_Down.java
index 27a8a01..8a41adc 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_68_Down.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_68_Down.java
@@ -69,7 +69,7 @@
         bsHead[index] = commonV_1.createCtrl((byte)0, (byte)0) ;
 
         index++ ;
-        GlCreate.createRtuAddr(para.rtuAddr, bsHead, index);
+        GlCreate.createRtuAddr4P206(para.rtuAddr, bsHead, index);
         index += 5 ;
 
         ByteUtil.hex2Bytes(para.commandCode, bsHead, index) ;
@@ -78,7 +78,7 @@
 
         GlCreate.createLen(bytes);//闀垮害鏀惧瓧鑺傛暟缁勪腑
 
-        byte[] bsTail = GlCreate.createCrcTail(bytes) ;//CRC鍜屽熬鍙犲姞瀛楄妭鏁扮粍涓�
+        byte[] bsTail = GlCreate.createCrcTail4P206(bytes) ;//CRC鍜屽熬鍙犲姞瀛楄妭鏁扮粍涓�
 
         bytes = ByteUtil.bytesMerge(bytes, bsTail) ;
 
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_68_Up.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_68_Up.java
index 51198e6..5900151 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_68_Up.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_68_Up.java
@@ -26,7 +26,7 @@
     @Override
     public MidResult[] parse(Boolean isLowPower, CodeParseParams params, CodeParseCallback callback)throws Exception {
         ParseParamsForUpV1 para = (ParseParamsForUpV1)params ;
-        int bsLen = new CommonV1().parseDataLen(para.upBuffer) ;
+        int bsLen = new CommonV1().parseDataLen4P206(para.upBuffer) ;
         if(bsLen > 0){
             this.doParse(para.upBuffer,
                     bsLen,
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_69_Down.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_69_Down.java
index bad903b..deefd53 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_69_Down.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_69_Down.java
@@ -69,7 +69,7 @@
         bsHead[index] = commonV_1.createCtrl((byte)0, (byte)0) ;
 
         index++ ;
-        GlCreate.createRtuAddr(para.rtuAddr, bsHead, index);
+        GlCreate.createRtuAddr4P206(para.rtuAddr, bsHead, index);
         index += 5 ;
 
         ByteUtil.hex2Bytes(para.commandCode, bsHead, index) ;
@@ -78,7 +78,7 @@
 
         GlCreate.createLen(bytes);//闀垮害鏀惧瓧鑺傛暟缁勪腑
 
-        byte[] bsTail = GlCreate.createCrcTail(bytes) ;//CRC鍜屽熬鍙犲姞瀛楄妭鏁扮粍涓�
+        byte[] bsTail = GlCreate.createCrcTail4P206(bytes) ;//CRC鍜屽熬鍙犲姞瀛楄妭鏁扮粍涓�
 
         bytes = ByteUtil.bytesMerge(bytes, bsTail) ;
 
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_69_Up.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_69_Up.java
index 8046831..0333371 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_69_Up.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_69_Up.java
@@ -26,7 +26,7 @@
     @Override
     public MidResult[] parse(Boolean isLowPower, CodeParseParams params, CodeParseCallback callback)throws Exception {
         ParseParamsForUpV1 para = (ParseParamsForUpV1)params ;
-        int bsLen = new CommonV1().parseDataLen(para.upBuffer) ;
+        int bsLen = new CommonV1().parseDataLen4P206(para.upBuffer) ;
         if(bsLen > 0){
             this.doParse(para.upBuffer,
                     bsLen,
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_6A_Down.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_6A_Down.java
index 6b6b63b..6c94f23 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_6A_Down.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_6A_Down.java
@@ -69,7 +69,7 @@
         bsHead[index] = commonV_1.createCtrl((byte)0, (byte)0) ;
 
         index++ ;
-        GlCreate.createRtuAddr(para.rtuAddr, bsHead, index);
+        GlCreate.createRtuAddr4P206(para.rtuAddr, bsHead, index);
         index += 5 ;
 
         ByteUtil.hex2Bytes(para.commandCode, bsHead, index) ;
@@ -78,7 +78,7 @@
 
         GlCreate.createLen(bytes);//闀垮害鏀惧瓧鑺傛暟缁勪腑
 
-        byte[] bsTail = GlCreate.createCrcTail(bytes) ;//CRC鍜屽熬鍙犲姞瀛楄妭鏁扮粍涓�
+        byte[] bsTail = GlCreate.createCrcTail4P206(bytes) ;//CRC鍜屽熬鍙犲姞瀛楄妭鏁扮粍涓�
 
         bytes = ByteUtil.bytesMerge(bytes, bsTail) ;
 
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_6A_Up.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_6A_Up.java
index 4f1c8cb..afdfabb 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_6A_Up.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_6A_Up.java
@@ -27,7 +27,7 @@
     @Override
     public MidResult[] parse(Boolean isLowPower, CodeParseParams params, CodeParseCallback callback)throws Exception {
         ParseParamsForUpV1 para = (ParseParamsForUpV1)params ;
-        int bsLen = new CommonV1().parseDataLen(para.upBuffer) ;
+        int bsLen = new CommonV1().parseDataLen4P206(para.upBuffer) ;
         if(bsLen > 0){
             this.doParse(para.upBuffer,
                     bsLen,
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_6B_Down.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_6B_Down.java
index c899d81..f2f2010 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_6B_Down.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_6B_Down.java
@@ -69,7 +69,7 @@
         bsHead[index] = commonV_1.createCtrl((byte)0, (byte)0) ;
 
         index++ ;
-        GlCreate.createRtuAddr(para.rtuAddr, bsHead, index);
+        GlCreate.createRtuAddr4P206(para.rtuAddr, bsHead, index);
         index += 5 ;
 
         ByteUtil.hex2Bytes(para.commandCode, bsHead, index) ;
@@ -78,7 +78,7 @@
 
         GlCreate.createLen(bytes);//闀垮害鏀惧瓧鑺傛暟缁勪腑
 
-        byte[] bsTail = GlCreate.createCrcTail(bytes) ;//CRC鍜屽熬鍙犲姞瀛楄妭鏁扮粍涓�
+        byte[] bsTail = GlCreate.createCrcTail4P206(bytes) ;//CRC鍜屽熬鍙犲姞瀛楄妭鏁扮粍涓�
 
         bytes = ByteUtil.bytesMerge(bytes, bsTail) ;
 
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_6B_Up.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_6B_Up.java
index 9c3547d..eed2faf 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_6B_Up.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_6B_Up.java
@@ -27,7 +27,7 @@
     @Override
     public MidResult[] parse(Boolean isLowPower, CodeParseParams params, CodeParseCallback callback)throws Exception {
         ParseParamsForUpV1 para = (ParseParamsForUpV1)params ;
-        int bsLen = new CommonV1().parseDataLen(para.upBuffer) ;
+        int bsLen = new CommonV1().parseDataLen4P206(para.upBuffer) ;
         if(bsLen > 0){
             this.doParse(para.upBuffer,
                     bsLen,
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_6D_Down.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_6D_Down.java
index 8a93e72..81cc01b 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_6D_Down.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_6D_Down.java
@@ -69,7 +69,7 @@
         bsHead[index] = commonV_1.createCtrl((byte)0, (byte)0) ;
 
         index++ ;
-        GlCreate.createRtuAddr(para.rtuAddr, bsHead, index);
+        GlCreate.createRtuAddr4P206(para.rtuAddr, bsHead, index);
         index += 5 ;
 
         ByteUtil.hex2Bytes(para.commandCode, bsHead, index) ;
@@ -78,7 +78,7 @@
 
         GlCreate.createLen(bytes);//闀垮害鏀惧瓧鑺傛暟缁勪腑
 
-        byte[] bsTail = GlCreate.createCrcTail(bytes) ;//CRC鍜屽熬鍙犲姞瀛楄妭鏁扮粍涓�
+        byte[] bsTail = GlCreate.createCrcTail4P206(bytes) ;//CRC鍜屽熬鍙犲姞瀛楄妭鏁扮粍涓�
 
         bytes = ByteUtil.bytesMerge(bytes, bsTail) ;
 
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_6D_Up.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_6D_Up.java
index fa6df59..53dc69b 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_6D_Up.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_6D_Up.java
@@ -26,7 +26,7 @@
     @Override
     public MidResult[] parse(Boolean isLowPower, CodeParseParams params, CodeParseCallback callback)throws Exception {
         ParseParamsForUpV1 para = (ParseParamsForUpV1)params ;
-        int bsLen = new CommonV1().parseDataLen(para.upBuffer) ;
+        int bsLen = new CommonV1().parseDataLen4P206(para.upBuffer) ;
         if(bsLen > 0){
             this.doParse(para.upBuffer,
                     bsLen,
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_81_Down.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_81_Down.java
index b9faef1..24db3a8 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_81_Down.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_81_Down.java
@@ -66,7 +66,7 @@
         bsHead[index] = commonV_1.createCtrl((byte)0, (byte)0) ;
 
         index++ ;
-        GlCreate.createRtuAddr(para.rtuAddr, bsHead, index);
+        GlCreate.createRtuAddr4P206(para.rtuAddr, bsHead, index);
         index += 5 ;
 
         ByteUtil.hex2Bytes(para.commandCode, bsHead, index) ;
@@ -81,7 +81,7 @@
 
         GlCreate.createLen(bytes);//闀垮害鏀惧瓧鑺傛暟缁勪腑
 
-        byte[] bsTail = GlCreate.createCrcTail(bytes) ;//CRC鍜屽熬鍙犲姞瀛楄妭鏁扮粍涓�
+        byte[] bsTail = GlCreate.createCrcTail4P206(bytes) ;//CRC鍜屽熬鍙犲姞瀛楄妭鏁扮粍涓�
 
         bytes = ByteUtil.bytesMerge(bytes, bsTail) ;
 
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_81_Up.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_81_Up.java
index 5fa37cd..8bb04f1 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_81_Up.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_81_Up.java
@@ -23,7 +23,7 @@
     @Override
     public MidResult[] parse(Boolean isLowPower, CodeParseParams params, CodeParseCallback callback)throws Exception {
         ParseParamsForUpV1 para = (ParseParamsForUpV1)params ;
-        int bsLen = new CommonV1().parseDataLen(para.upBuffer) ;
+        int bsLen = new CommonV1().parseDataLen4P206(para.upBuffer) ;
         if(bsLen > 0){
             this.doParse(para.upBuffer,
                     bsLen,
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_83_Down.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_83_Down.java
index e1892c4..34a00ff 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_83_Down.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_83_Down.java
@@ -66,7 +66,7 @@
         bsHead[index] = commonV_1.createCtrl((byte)0, (byte)0) ;
 
         index++ ;
-        GlCreate.createRtuAddr(para.rtuAddr, bsHead, index);
+        GlCreate.createRtuAddr4P206(para.rtuAddr, bsHead, index);
         index += 5 ;
 
         ByteUtil.hex2Bytes(para.commandCode, bsHead, index) ;
@@ -82,7 +82,7 @@
 
         GlCreate.createLen(bytes);//闀垮害鏀惧瓧鑺傛暟缁勪腑
 
-        byte[] bsTail = GlCreate.createCrcTail(bytes) ;//CRC鍜屽熬鍙犲姞瀛楄妭鏁扮粍涓�
+        byte[] bsTail = GlCreate.createCrcTail4P206(bytes) ;//CRC鍜屽熬鍙犲姞瀛楄妭鏁扮粍涓�
 
         bytes = ByteUtil.bytesMerge(bytes, bsTail) ;
 
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_83_Up.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_83_Up.java
index 75ca70d..4512ccb 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_83_Up.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_83_Up.java
@@ -3,7 +3,6 @@
 import com.dy.common.mw.protocol.*;
 import com.dy.common.mw.protocol.p206V1.*;
 import com.dy.common.mw.protocol.p206V1.parse.global.GlParse;
-import com.dy.common.mw.protocol.p206V1.upVos.DataCd81Vo;
 import com.dy.common.mw.protocol.p206V1.upVos.DataCd83CloseVo;
 import com.dy.common.mw.protocol.p206V1.upVos.DataCd83OpenVo;
 import com.dy.common.mw.protocol.rtuState.ValveStateInfo;
@@ -25,7 +24,7 @@
     @Override
     public MidResult[] parse(Boolean isLowPower, CodeParseParams params, CodeParseCallback callback)throws Exception {
         ParseParamsForUpV1 para = (ParseParamsForUpV1)params ;
-        int bsLen = new CommonV1().parseDataLen(para.upBuffer) ;
+        int bsLen = new CommonV1().parseDataLen4P206(para.upBuffer) ;
         if(bsLen > 0){
             this.doParse(para.upBuffer,
                     bsLen,
@@ -223,7 +222,7 @@
         Data data = new Data() ;
         data.setSubData(new DataV1()) ;
 
-        int bsLen = new CommonV1().parseDataLen(bs) ;
+        int bsLen = new CommonV1().parseDataLen4P206(bs) ;
         if(bsLen > 0){
             try {
             obj.doParse(bs,
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_84_Down.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_84_Down.java
index ef8be95..3ad8983 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_84_Down.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_84_Down.java
@@ -66,7 +66,7 @@
         bsHead[index] = commonV_1.createCtrl((byte)0, (byte)0) ;
 
         index++ ;
-        GlCreate.createRtuAddr(para.rtuAddr, bsHead, index);
+        GlCreate.createRtuAddr4P206(para.rtuAddr, bsHead, index);
         index += 5 ;
 
         ByteUtil.hex2Bytes(para.commandCode, bsHead, index) ;
@@ -82,7 +82,7 @@
 
         GlCreate.createLen(bytes);//闀垮害鏀惧瓧鑺傛暟缁勪腑
 
-        byte[] bsTail = GlCreate.createCrcTail(bytes) ;//CRC鍜屽熬鍙犲姞瀛楄妭鏁扮粍涓�
+        byte[] bsTail = GlCreate.createCrcTail4P206(bytes) ;//CRC鍜屽熬鍙犲姞瀛楄妭鏁扮粍涓�
 
         bytes = ByteUtil.bytesMerge(bytes, bsTail) ;
 
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_84_Up.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_84_Up.java
index 02e99ce..50c923d 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_84_Up.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_84_Up.java
@@ -23,7 +23,7 @@
     @Override
     public MidResult[] parse(Boolean isLowPower, CodeParseParams params, CodeParseCallback callback)throws Exception {
         ParseParamsForUpV1 para = (ParseParamsForUpV1)params ;
-        int bsLen = new CommonV1().parseDataLen(para.upBuffer) ;
+        int bsLen = new CommonV1().parseDataLen4P206(para.upBuffer) ;
         if(bsLen > 0){
             this.doParse(para.upBuffer,
                     bsLen,
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_91_Down.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_91_Down.java
index ddb5366..05fce94 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_91_Down.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_91_Down.java
@@ -69,7 +69,7 @@
         bsHead[index] = commonV_1.createCtrl((byte)0, (byte)0) ;
 
         index++ ;
-        GlCreate.createRtuAddr(para.rtuAddr, bsHead, index);
+        GlCreate.createRtuAddr4P206(para.rtuAddr, bsHead, index);
         index += 5 ;
 
         ByteUtil.hex2Bytes(para.commandCode, bsHead, index) ;
@@ -83,7 +83,7 @@
 
         GlCreate.createLen(bytes);//闀垮害鏀惧瓧鑺傛暟缁勪腑
 
-        byte[] bsTail = GlCreate.createCrcTail(bytes) ;//CRC鍜屽熬鍙犲姞瀛楄妭鏁扮粍涓�
+        byte[] bsTail = GlCreate.createCrcTail4P206(bytes) ;//CRC鍜屽熬鍙犲姞瀛楄妭鏁扮粍涓�
 
         bytes = ByteUtil.bytesMerge(bytes, bsTail) ;
 
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_91_Up.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_91_Up.java
index d4bb338..06d67cd 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_91_Up.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_91_Up.java
@@ -19,7 +19,7 @@
     @Override
     public MidResult[] parse(Boolean isLowPower, CodeParseParams params, CodeParseCallback callback)throws Exception {
         ParseParamsForUpV1 para = (ParseParamsForUpV1)params ;
-        int bsLen = new CommonV1().parseDataLen(para.upBuffer) ;
+        int bsLen = new CommonV1().parseDataLen4P206(para.upBuffer) ;
         if(bsLen > 0){
             this.doParse(para.upBuffer,
                     bsLen,
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_92_Down.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_92_Down.java
index 34b3cf6..a230ac6 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_92_Down.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_92_Down.java
@@ -69,7 +69,7 @@
         bsHead[index] = commonV_1.createCtrl((byte)0, (byte)0) ;
 
         index++ ;
-        GlCreate.createRtuAddr(para.rtuAddr, bsHead, index);
+        GlCreate.createRtuAddr4P206(para.rtuAddr, bsHead, index);
         index += 5 ;
 
         ByteUtil.hex2Bytes(para.commandCode, bsHead, index) ;
@@ -85,7 +85,7 @@
 
         GlCreate.createLen(bytes);//闀垮害鏀惧瓧鑺傛暟缁勪腑
 
-        byte[] bsTail = GlCreate.createCrcTail(bytes) ;//CRC鍜屽熬鍙犲姞瀛楄妭鏁扮粍涓�
+        byte[] bsTail = GlCreate.createCrcTail4P206(bytes) ;//CRC鍜屽熬鍙犲姞瀛楄妭鏁扮粍涓�
 
         bytes = ByteUtil.bytesMerge(bytes, bsTail) ;
 
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_92_Up.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_92_Up.java
index 66ed0e1..327d453 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_92_Up.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_92_Up.java
@@ -2,8 +2,6 @@
 
 import com.dy.common.mw.protocol.*;
 import com.dy.common.mw.protocol.p206V1.*;
-import com.dy.common.mw.protocol.p206V1.upVos.DataCd83CloseVo;
-import com.dy.common.mw.protocol.p206V1.upVos.DataCd83OpenVo;
 import com.dy.common.mw.protocol.p206V1.upVos.DataCd92Vo;
 import com.dy.common.mw.protocol.rtuState.ValveStateInfo;
 import com.dy.common.util.ByteUtil;
@@ -30,7 +28,7 @@
     @Override
     public MidResult[] parse(Boolean isLowPower, CodeParseParams params, CodeParseCallback callback)throws Exception {
         ParseParamsForUpV1 para = (ParseParamsForUpV1)params ;
-        int bsLen = new CommonV1().parseDataLen(para.upBuffer) ;
+        int bsLen = new CommonV1().parseDataLen4P206(para.upBuffer) ;
         if(bsLen > 0){
             this.doParse(para.upBuffer,
                     bsLen,
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_93_Down.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_93_Down.java
index 0a0824a..7c00be3 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_93_Down.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_93_Down.java
@@ -69,7 +69,7 @@
         bsHead[index] = commonV_1.createCtrl((byte)0, (byte)0) ;
 
         index++ ;
-        GlCreate.createRtuAddr(para.rtuAddr, bsHead, index);
+        GlCreate.createRtuAddr4P206(para.rtuAddr, bsHead, index);
         index += 5 ;
 
         ByteUtil.hex2Bytes(para.commandCode, bsHead, index) ;
@@ -85,7 +85,7 @@
 
         GlCreate.createLen(bytes);//闀垮害鏀惧瓧鑺傛暟缁勪腑
 
-        byte[] bsTail = GlCreate.createCrcTail(bytes) ;//CRC鍜屽熬鍙犲姞瀛楄妭鏁扮粍涓�
+        byte[] bsTail = GlCreate.createCrcTail4P206(bytes) ;//CRC鍜屽熬鍙犲姞瀛楄妭鏁扮粍涓�
 
         bytes = ByteUtil.bytesMerge(bytes, bsTail) ;
 
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_93_Up.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_93_Up.java
index b6d0c64..3b7d704 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_93_Up.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_93_Up.java
@@ -2,7 +2,6 @@
 
 import com.dy.common.mw.protocol.*;
 import com.dy.common.mw.protocol.p206V1.*;
-import com.dy.common.mw.protocol.p206V1.upVos.DataCd92Vo;
 import com.dy.common.mw.protocol.p206V1.upVos.DataCd93Vo;
 import com.dy.common.mw.protocol.rtuState.ValveStateInfo;
 import com.dy.common.util.ByteUtil;
@@ -29,7 +28,7 @@
     @Override
     public MidResult[] parse(Boolean isLowPower, CodeParseParams params, CodeParseCallback callback)throws Exception {
         ParseParamsForUpV1 para = (ParseParamsForUpV1)params ;
-        int bsLen = new CommonV1().parseDataLen(para.upBuffer) ;
+        int bsLen = new CommonV1().parseDataLen4P206(para.upBuffer) ;
         if(bsLen > 0){
             this.doParse(para.upBuffer,
                     bsLen,
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_9601_Up.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_9601_Up.java
new file mode 100644
index 0000000..598d671
--- /dev/null
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_9601_Up.java
@@ -0,0 +1,73 @@
+package com.dy.common.mw.protocol.p206V1.parse;
+
+import com.dy.common.mw.protocol.*;
+import com.dy.common.mw.protocol.p206V1.*;
+import com.dy.common.mw.protocol.p206V1.upVos.DataCd960XVo;
+import com.dy.common.mw.protocol.rtuState.UpgradeStateInfo;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+
+/**
+ * @Author: liurunyu
+ * @Date: 2024/11/4 10:58
+ * @Description
+ */
+@AnnotationCodeUp(ifAny={
+        CodeV1.cd_9601
+})
+public class Cd_9601_Up implements CodeParse {
+
+    private static final Logger log = LogManager.getLogger(Cd_9601_Up.class);
+
+    /**
+     * 鍒嗘瀽涓婅鏁版嵁
+     */
+    @Override
+    public MidResult[] parse(Boolean isLowPower, CodeParseParams params, CodeParseCallback callback)throws Exception {
+        ParseParamsForUpV1 para = (ParseParamsForUpV1)params ;
+        int bsLen = new CommonV1().parseDataLen4Ug(para.upBuffer) ;
+        if(bsLen > 0){
+            this.doParse(para.upBuffer,
+                    bsLen,
+                    para.upCode,
+                    para.data) ;
+        }
+        log.info("\n鍒嗘瀽鍛戒护搴旂瓟鏁版嵁<" + CodeV1.getCodeName(para.upCode) + " RTU鍦板潃=" + para.rtuAddr + ">:\n" + para.data.toString());
+
+        MidResultFromRtu midRs = new MidResultFromRtu() ;
+        midRs.protocolName = para.protocolName ;//鍗忚鍚嶇О
+        midRs.protocolVersion = para.protocolVersion; //鍗忚鐗堟湰鍙�
+        midRs.rtuAddr = para.rtuAddr ;//Rtu鍦板潃
+        midRs.upCode = para.upCode ;//涓婅鏁版嵁涓殑鍔熻兘鐮�
+        midRs.upHex = para.upHex ;//涓婅鏁版嵁鍗佸叚杩涘埗褰㈠紡
+        midRs.upBuffer = para.upBuffer ;//涓婅鏁版嵁瀛楄妭鏁扮粍
+        midRs.data = para.data ;//瑙f瀽鍚庣殑鏁版嵁
+
+        midRs.reportOrResponse_trueOrFalse = false ;//涓诲姩涓婃姤
+
+        callback.callback(midRs.reportOrResponse_trueOrFalse);
+        if(para.data != null && para.data.getSubData() != null){
+            DataCd960XVo subData = (DataCd960XVo)((DataV1)para.data.getSubData()).subData ;
+            callback.notify(new UpgradeStateInfo(subData.success));
+        }
+        return new MidResult[]{midRs} ;
+    }
+    /**
+     * 鎵ц鍒嗘瀽
+     * @param bs 瀛楄妭鏁扮粍
+     * @param bsLen 瀛楄妭闀垮害锛堟�诲寘闀匡紝鍖呮嫭鍖呭ご鍜屽寘灏撅級
+     * @param dataCode 鍔熻兘鐮�
+     * @param data 鏁版嵁
+     * @throws Exception 寮傚父
+     */
+    protected void doParse(byte[] bs, int bsLen, String dataCode, Data data) throws Exception {
+        DataV1 dV1 = (DataV1)data.getSubData() ;
+        DataCd960XVo cdData = new DataCd960XVo() ;
+        dV1.subData = cdData ;
+        if(bs[ProtocolConstantV206V1.UG_dataIndex] == (byte)0x00){
+            cdData.success = true ;
+        }else{
+            cdData.success = false ;
+        }
+    }
+}
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_9602_Up.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_9602_Up.java
new file mode 100644
index 0000000..7c145ac
--- /dev/null
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_9602_Up.java
@@ -0,0 +1,73 @@
+package com.dy.common.mw.protocol.p206V1.parse;
+
+import com.dy.common.mw.protocol.*;
+import com.dy.common.mw.protocol.p206V1.*;
+import com.dy.common.mw.protocol.p206V1.upVos.DataCd960XVo;
+import com.dy.common.mw.protocol.rtuState.UpgradeStateInfo;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+
+/**
+ * @Author: liurunyu
+ * @Date: 2024/11/4 10:58
+ * @Description
+ */
+@AnnotationCodeUp(ifAny={
+        CodeV1.cd_9602
+})
+public class Cd_9602_Up implements CodeParse {
+
+    private static final Logger log = LogManager.getLogger(Cd_9602_Up.class);
+
+    /**
+     * 鍒嗘瀽涓婅鏁版嵁
+     */
+    @Override
+    public MidResult[] parse(Boolean isLowPower, CodeParseParams params, CodeParseCallback callback)throws Exception {
+        ParseParamsForUpV1 para = (ParseParamsForUpV1)params ;
+        int bsLen = new CommonV1().parseDataLen4Ug(para.upBuffer) ;
+        if(bsLen > 0){
+            this.doParse(para.upBuffer,
+                    bsLen,
+                    para.upCode,
+                    para.data) ;
+        }
+        log.info("\n鍒嗘瀽鍛戒护搴旂瓟鏁版嵁<" + CodeV1.getCodeName(para.upCode) + " RTU鍦板潃=" + para.rtuAddr + ">:\n" + para.data.toString());
+
+        MidResultFromRtu midRs = new MidResultFromRtu() ;
+        midRs.protocolName = para.protocolName ;//鍗忚鍚嶇О
+        midRs.protocolVersion = para.protocolVersion; //鍗忚鐗堟湰鍙�
+        midRs.rtuAddr = para.rtuAddr ;//Rtu鍦板潃
+        midRs.upCode = para.upCode ;//涓婅鏁版嵁涓殑鍔熻兘鐮�
+        midRs.upHex = para.upHex ;//涓婅鏁版嵁鍗佸叚杩涘埗褰㈠紡
+        midRs.upBuffer = para.upBuffer ;//涓婅鏁版嵁瀛楄妭鏁扮粍
+        midRs.data = para.data ;//瑙f瀽鍚庣殑鏁版嵁
+
+        midRs.reportOrResponse_trueOrFalse = false ;//涓诲姩涓婃姤
+
+        callback.callback(midRs.reportOrResponse_trueOrFalse);
+        if(para.data != null && para.data.getSubData() != null){
+            DataCd960XVo subData = (DataCd960XVo)((DataV1)para.data.getSubData()).subData ;
+            callback.notify(new UpgradeStateInfo(subData.success));
+        }
+        return new MidResult[]{midRs} ;
+    }
+    /**
+     * 鎵ц鍒嗘瀽
+     * @param bs 瀛楄妭鏁扮粍
+     * @param bsLen 瀛楄妭闀垮害锛堟�诲寘闀匡紝鍖呮嫭鍖呭ご鍜屽寘灏撅級
+     * @param dataCode 鍔熻兘鐮�
+     * @param data 鏁版嵁
+     * @throws Exception 寮傚父
+     */
+    protected void doParse(byte[] bs, int bsLen, String dataCode, Data data) throws Exception {
+        DataV1 dV1 = (DataV1)data.getSubData() ;
+        DataCd960XVo cdData = new DataCd960XVo() ;
+        dV1.subData = cdData ;
+        if(bs[ProtocolConstantV206V1.UG_dataIndex] == (byte)0x00){
+            cdData.success = true ;
+        }else{
+            cdData.success = false ;
+        }
+    }
+}
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_9603_Up.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_9603_Up.java
new file mode 100644
index 0000000..e820660
--- /dev/null
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_9603_Up.java
@@ -0,0 +1,73 @@
+package com.dy.common.mw.protocol.p206V1.parse;
+
+import com.dy.common.mw.protocol.*;
+import com.dy.common.mw.protocol.p206V1.*;
+import com.dy.common.mw.protocol.p206V1.upVos.DataCd960XVo;
+import com.dy.common.mw.protocol.rtuState.UpgradeStateInfo;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+
+/**
+ * @Author: liurunyu
+ * @Date: 2024/11/4 10:58
+ * @Description
+ */
+@AnnotationCodeUp(ifAny={
+        CodeV1.cd_9603
+})
+public class Cd_9603_Up implements CodeParse {
+
+    private static final Logger log = LogManager.getLogger(Cd_9603_Up.class);
+
+    /**
+     * 鍒嗘瀽涓婅鏁版嵁
+     */
+    @Override
+    public MidResult[] parse(Boolean isLowPower, CodeParseParams params, CodeParseCallback callback)throws Exception {
+        ParseParamsForUpV1 para = (ParseParamsForUpV1)params ;
+        int bsLen = new CommonV1().parseDataLen4Ug(para.upBuffer) ;
+        if(bsLen > 0){
+            this.doParse(para.upBuffer,
+                    bsLen,
+                    para.upCode,
+                    para.data) ;
+        }
+        log.info("\n鍒嗘瀽鍛戒护搴旂瓟鏁版嵁<" + CodeV1.getCodeName(para.upCode) + " RTU鍦板潃=" + para.rtuAddr + ">:\n" + para.data.toString());
+
+        MidResultFromRtu midRs = new MidResultFromRtu() ;
+        midRs.protocolName = para.protocolName ;//鍗忚鍚嶇О
+        midRs.protocolVersion = para.protocolVersion; //鍗忚鐗堟湰鍙�
+        midRs.rtuAddr = para.rtuAddr ;//Rtu鍦板潃
+        midRs.upCode = para.upCode ;//涓婅鏁版嵁涓殑鍔熻兘鐮�
+        midRs.upHex = para.upHex ;//涓婅鏁版嵁鍗佸叚杩涘埗褰㈠紡
+        midRs.upBuffer = para.upBuffer ;//涓婅鏁版嵁瀛楄妭鏁扮粍
+        midRs.data = para.data ;//瑙f瀽鍚庣殑鏁版嵁
+
+        midRs.reportOrResponse_trueOrFalse = false ;//涓诲姩涓婃姤
+
+        callback.callback(midRs.reportOrResponse_trueOrFalse);
+        if(para.data != null && para.data.getSubData() != null){
+            DataCd960XVo subData = (DataCd960XVo)((DataV1)para.data.getSubData()).subData ;
+            callback.notify(new UpgradeStateInfo(subData.success));
+        }
+        return new MidResult[]{midRs} ;
+    }
+    /**
+     * 鎵ц鍒嗘瀽
+     * @param bs 瀛楄妭鏁扮粍
+     * @param bsLen 瀛楄妭闀垮害锛堟�诲寘闀匡紝鍖呮嫭鍖呭ご鍜屽寘灏撅級
+     * @param dataCode 鍔熻兘鐮�
+     * @param data 鏁版嵁
+     * @throws Exception 寮傚父
+     */
+    protected void doParse(byte[] bs, int bsLen, String dataCode, Data data) throws Exception {
+        DataV1 dV1 = (DataV1)data.getSubData() ;
+        DataCd960XVo cdData = new DataCd960XVo() ;
+        dV1.subData = cdData ;
+        if(bs[ProtocolConstantV206V1.UG_dataIndex] == (byte)0x00){
+            cdData.success = true ;
+        }else{
+            cdData.success = false ;
+        }
+    }
+}
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_97_Down.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_97_Down.java
index c8381c1..7fe0bd8 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_97_Down.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_97_Down.java
@@ -73,7 +73,7 @@
         bsHead[index] = commonV_1.createCtrl((byte)0, (byte)0) ;
 
         index++ ;
-        GlCreate.createRtuAddr(para.rtuAddr, bsHead, index);
+        GlCreate.createRtuAddr4P206(para.rtuAddr, bsHead, index);
         index += 5 ;
 
         ByteUtil.hex2Bytes(para.commandCode, bsHead, index) ;
@@ -139,7 +139,7 @@
 
         GlCreate.createLen(bytes);//闀垮害鏀惧瓧鑺傛暟缁勪腑
 
-        byte[] bsTail = GlCreate.createCrcTail(bytes) ;//CRC鍜屽熬鍙犲姞瀛楄妭鏁扮粍涓�
+        byte[] bsTail = GlCreate.createCrcTail4P206(bytes) ;//CRC鍜屽熬鍙犲姞瀛楄妭鏁扮粍涓�
 
         bytes = ByteUtil.bytesMerge(bytes, bsTail) ;
 
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_97_Up.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_97_Up.java
index 280e67f..707f8ac 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_97_Up.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_97_Up.java
@@ -3,7 +3,6 @@
 import com.dy.common.mw.protocol.*;
 import com.dy.common.mw.protocol.p206V1.*;
 import com.dy.common.mw.protocol.p206V1.parse.global.GlParse;
-import com.dy.common.mw.protocol.p206V1.upVos.DataCd92Vo;
 import com.dy.common.mw.protocol.p206V1.upVos.DataCd97Vo;
 import com.dy.common.mw.protocol.rtuState.ValveStateInfo;
 import org.apache.logging.log4j.LogManager;
@@ -29,7 +28,7 @@
     @Override
     public MidResult[] parse(Boolean isLowPower, CodeParseParams params, CodeParseCallback callback)throws Exception {
         ParseParamsForUpV1 para = (ParseParamsForUpV1)params ;
-        int bsLen = new CommonV1().parseDataLen(para.upBuffer) ;
+        int bsLen = new CommonV1().parseDataLen4P206(para.upBuffer) ;
         if(bsLen > 0){
             this.doParse(para.upBuffer,
                     bsLen,
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_98_Down.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_98_Down.java
index f2fe152..59ee2a9 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_98_Down.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_98_Down.java
@@ -73,7 +73,7 @@
         bsHead[index] = commonV_1.createCtrl((byte)0, (byte)0) ;
 
         index++ ;
-        GlCreate.createRtuAddr(para.rtuAddr, bsHead, index);
+        GlCreate.createRtuAddr4P206(para.rtuAddr, bsHead, index);
         index += 5 ;
 
         ByteUtil.hex2Bytes(para.commandCode, bsHead, index) ;
@@ -102,7 +102,7 @@
 
         GlCreate.createLen(bytes);//闀垮害鏀惧瓧鑺傛暟缁勪腑
 
-        byte[] bsTail = GlCreate.createCrcTail(bytes) ;//CRC鍜屽熬鍙犲姞瀛楄妭鏁扮粍涓�
+        byte[] bsTail = GlCreate.createCrcTail4P206(bytes) ;//CRC鍜屽熬鍙犲姞瀛楄妭鏁扮粍涓�
 
         bytes = ByteUtil.bytesMerge(bytes, bsTail) ;
 
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_98_Up.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_98_Up.java
index 5fe1408..45e4a25 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_98_Up.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_98_Up.java
@@ -3,7 +3,6 @@
 import com.dy.common.mw.protocol.*;
 import com.dy.common.mw.protocol.p206V1.*;
 import com.dy.common.mw.protocol.p206V1.parse.global.GlParse;
-import com.dy.common.mw.protocol.p206V1.upVos.DataCd97Vo;
 import com.dy.common.mw.protocol.p206V1.upVos.DataCd98Vo;
 import com.dy.common.mw.protocol.rtuState.ValveStateInfo;
 import org.apache.logging.log4j.LogManager;
@@ -29,7 +28,7 @@
     @Override
     public MidResult[] parse(Boolean isLowPower, CodeParseParams params, CodeParseCallback callback)throws Exception {
         ParseParamsForUpV1 para = (ParseParamsForUpV1)params ;
-        int bsLen = new CommonV1().parseDataLen(para.upBuffer) ;
+        int bsLen = new CommonV1().parseDataLen4P206(para.upBuffer) ;
         if(bsLen > 0){
             this.doParse(para.upBuffer,
                     bsLen,
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_99_Down.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_99_Down.java
index 9579587..f411a75 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_99_Down.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_99_Down.java
@@ -72,7 +72,7 @@
         bsHead[index] = commonV_1.createCtrl((byte)0, (byte)0) ;
 
         index++ ;
-        GlCreate.createRtuAddr(para.rtuAddr, bsHead, index);
+        GlCreate.createRtuAddr4P206(para.rtuAddr, bsHead, index);
         index += 5 ;
 
         ByteUtil.hex2Bytes(para.commandCode, bsHead, index) ;
@@ -167,7 +167,7 @@
 
         GlCreate.createLen(bytes);//闀垮害鏀惧瓧鑺傛暟缁勪腑
 
-        byte[] bsTail = GlCreate.createCrcTail(bytes) ;//CRC鍜屽熬鍙犲姞瀛楄妭鏁扮粍涓�
+        byte[] bsTail = GlCreate.createCrcTail4P206(bytes) ;//CRC鍜屽熬鍙犲姞瀛楄妭鏁扮粍涓�
 
         bytes = ByteUtil.bytesMerge(bytes, bsTail) ;
 
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_99_Up.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_99_Up.java
index 7ecbfbf..7b0102f 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_99_Up.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_99_Up.java
@@ -3,7 +3,6 @@
 import com.dy.common.mw.protocol.*;
 import com.dy.common.mw.protocol.p206V1.*;
 import com.dy.common.mw.protocol.p206V1.parse.global.GlParse;
-import com.dy.common.mw.protocol.p206V1.upVos.DataCd98Vo;
 import com.dy.common.mw.protocol.p206V1.upVos.DataCd99Vo;
 import com.dy.common.mw.protocol.rtuState.ValveStateInfo;
 import org.apache.logging.log4j.LogManager;
@@ -28,7 +27,7 @@
     @Override
     public MidResult[] parse(Boolean isLowPower, CodeParseParams params, CodeParseCallback callback)throws Exception {
         ParseParamsForUpV1 para = (ParseParamsForUpV1)params ;
-        int bsLen = new CommonV1().parseDataLen(para.upBuffer) ;
+        int bsLen = new CommonV1().parseDataLen4P206(para.upBuffer) ;
         if(bsLen > 0){
             this.doParse(para.upBuffer,
                     bsLen,
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_A0_Down.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_A0_Down.java
index 3a252d9..75c21e0 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_A0_Down.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_A0_Down.java
@@ -72,7 +72,7 @@
         bsHead[index] = commonV_1.createCtrl((byte)0, (byte)0) ;
 
         index++ ;
-        GlCreate.createRtuAddr(para.rtuAddr, bsHead, index);
+        GlCreate.createRtuAddr4P206(para.rtuAddr, bsHead, index);
         index += 5 ;
 
         ByteUtil.hex2Bytes(para.commandCode, bsHead, index) ;
@@ -165,7 +165,7 @@
 
         GlCreate.createLen(bytes);//闀垮害鏀惧瓧鑺傛暟缁勪腑
 
-        byte[] bsTail = GlCreate.createCrcTail(bytes) ;//CRC鍜屽熬鍙犲姞瀛楄妭鏁扮粍涓�
+        byte[] bsTail = GlCreate.createCrcTail4P206(bytes) ;//CRC鍜屽熬鍙犲姞瀛楄妭鏁扮粍涓�
 
         bytes = ByteUtil.bytesMerge(bytes, bsTail) ;
 
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_A0_Up.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_A0_Up.java
index b9c3eac..1bbd623 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_A0_Up.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_A0_Up.java
@@ -3,7 +3,6 @@
 import com.dy.common.mw.protocol.*;
 import com.dy.common.mw.protocol.p206V1.*;
 import com.dy.common.mw.protocol.p206V1.parse.global.GlParse;
-import com.dy.common.mw.protocol.p206V1.upVos.DataCd99Vo;
 import com.dy.common.mw.protocol.p206V1.upVos.DataCdA0Vo;
 import com.dy.common.mw.protocol.rtuState.ValveStateInfo;
 import org.apache.logging.log4j.LogManager;
@@ -28,7 +27,7 @@
     @Override
     public MidResult[] parse(Boolean isLowPower, CodeParseParams params, CodeParseCallback callback)throws Exception {
         ParseParamsForUpV1 para = (ParseParamsForUpV1)params ;
-        int bsLen = new CommonV1().parseDataLen(para.upBuffer) ;
+        int bsLen = new CommonV1().parseDataLen4P206(para.upBuffer) ;
         if(bsLen > 0){
             this.doParse(para.upBuffer,
                     bsLen,
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_A1_Down.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_A1_Down.java
index 2777710..ebd7844 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_A1_Down.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_A1_Down.java
@@ -72,7 +72,7 @@
         bsHead[index] = commonV_1.createCtrl((byte)0, (byte)0) ;
 
         index++ ;
-        GlCreate.createRtuAddr(para.rtuAddr, bsHead, index);
+        GlCreate.createRtuAddr4P206(para.rtuAddr, bsHead, index);
         index += 5 ;
 
         ByteUtil.hex2Bytes(para.commandCode, bsHead, index) ;
@@ -204,7 +204,7 @@
 
         GlCreate.createLen(bytes);//闀垮害鏀惧瓧鑺傛暟缁勪腑
 
-        byte[] bsTail = GlCreate.createCrcTail(bytes) ;//CRC鍜屽熬鍙犲姞瀛楄妭鏁扮粍涓�
+        byte[] bsTail = GlCreate.createCrcTail4P206(bytes) ;//CRC鍜屽熬鍙犲姞瀛楄妭鏁扮粍涓�
 
         bytes = ByteUtil.bytesMerge(bytes, bsTail) ;
 
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_A1_Up.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_A1_Up.java
index 7a77b8c..da7dc20 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_A1_Up.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_A1_Up.java
@@ -26,7 +26,7 @@
     @Override
     public MidResult[] parse(Boolean isLowPower, CodeParseParams params, CodeParseCallback callback)throws Exception {
         ParseParamsForUpV1 para = (ParseParamsForUpV1)params ;
-        int bsLen = new CommonV1().parseDataLen(para.upBuffer) ;
+        int bsLen = new CommonV1().parseDataLen4P206(para.upBuffer) ;
         if(bsLen > 0){
             this.doParse(para.upBuffer,
                     bsLen,
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_A2_Down.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_A2_Down.java
index c72ffa1..d4485a0 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_A2_Down.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_A2_Down.java
@@ -72,7 +72,7 @@
         bsHead[index] = commonV_1.createCtrl((byte)0, (byte)0) ;
 
         index++ ;
-        GlCreate.createRtuAddr(para.rtuAddr, bsHead, index);
+        GlCreate.createRtuAddr4P206(para.rtuAddr, bsHead, index);
         index += 5 ;
 
         ByteUtil.hex2Bytes(para.commandCode, bsHead, index) ;
@@ -211,7 +211,7 @@
 
         GlCreate.createLen(bytes);//闀垮害鏀惧瓧鑺傛暟缁勪腑
 
-        byte[] bsTail = GlCreate.createCrcTail(bytes) ;//CRC鍜屽熬鍙犲姞瀛楄妭鏁扮粍涓�
+        byte[] bsTail = GlCreate.createCrcTail4P206(bytes) ;//CRC鍜屽熬鍙犲姞瀛楄妭鏁扮粍涓�
 
         bytes = ByteUtil.bytesMerge(bytes, bsTail) ;
 
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_A2_Up.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_A2_Up.java
index 60caa89..d7a1909 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_A2_Up.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_A2_Up.java
@@ -26,7 +26,7 @@
     @Override
     public MidResult[] parse(Boolean isLowPower, CodeParseParams params, CodeParseCallback callback)throws Exception {
         ParseParamsForUpV1 para = (ParseParamsForUpV1)params ;
-        int bsLen = new CommonV1().parseDataLen(para.upBuffer) ;
+        int bsLen = new CommonV1().parseDataLen4P206(para.upBuffer) ;
         if(bsLen > 0){
             this.doParse(para.upBuffer,
                     bsLen,
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_B0_Down.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_B0_Down.java
index 7111063..72ae601 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_B0_Down.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_B0_Down.java
@@ -69,7 +69,7 @@
         bsHead[index] = commonV_1.createCtrl((byte)0, (byte)0) ;
 
         index++ ;
-        GlCreate.createRtuAddr(para.rtuAddr, bsHead, index);
+        GlCreate.createRtuAddr4P206(para.rtuAddr, bsHead, index);
         index += 5 ;
 
         ByteUtil.hex2Bytes(para.commandCode, bsHead, index) ;
@@ -85,7 +85,7 @@
 
         GlCreate.createLen(bytes);//闀垮害鏀惧瓧鑺傛暟缁勪腑
 
-        byte[] bsTail = GlCreate.createCrcTail(bytes) ;//CRC鍜屽熬鍙犲姞瀛楄妭鏁扮粍涓�
+        byte[] bsTail = GlCreate.createCrcTail4P206(bytes) ;//CRC鍜屽熬鍙犲姞瀛楄妭鏁扮粍涓�
 
         bytes = ByteUtil.bytesMerge(bytes, bsTail) ;
 
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_C0_Down.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_C0_Down.java
index c521fcd..f12d064 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_C0_Down.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_C0_Down.java
@@ -66,7 +66,7 @@
         bsHead[index] = commonV_1.createCtrl((byte)0, (byte)0) ;
 
         index++ ;
-        GlCreate.createRtuAddr(para.rtuAddr, bsHead, index);
+        GlCreate.createRtuAddr4P206(para.rtuAddr, bsHead, index);
         index += 5 ;
 
         ByteUtil.hex2Bytes(para.commandCode, bsHead, index) ;
@@ -82,7 +82,7 @@
 
         GlCreate.createLen(bytes);//闀垮害鏀惧瓧鑺傛暟缁勪腑
 
-        byte[] bsTail = GlCreate.createCrcTail(bytes) ;//CRC鍜屽熬鍙犲姞瀛楄妭鏁扮粍涓�
+        byte[] bsTail = GlCreate.createCrcTail4P206(bytes) ;//CRC鍜屽熬鍙犲姞瀛楄妭鏁扮粍涓�
 
         bytes = ByteUtil.bytesMerge(bytes, bsTail) ;
 
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_C0_Up.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_C0_Up.java
index 8c0d643..7a1545d 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_C0_Up.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_C0_Up.java
@@ -23,7 +23,7 @@
     @Override
     public MidResult[] parse(Boolean isLowPower, CodeParseParams params, CodeParseCallback callback)throws Exception {
         ParseParamsForUpV1 para = (ParseParamsForUpV1)params ;
-        int bsLen = new CommonV1().parseDataLen(para.upBuffer) ;
+        int bsLen = new CommonV1().parseDataLen4P206(para.upBuffer) ;
         if(bsLen > 0){
             this.doParse(para.upBuffer,
                     bsLen,
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/global/GlCreate.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/global/GlCreate.java
index 5a07e0d..b9a916e 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/global/GlCreate.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/global/GlCreate.java
@@ -1,14 +1,18 @@
 package com.dy.common.mw.protocol.p206V1.parse.global;
 
 import com.dy.common.mw.protocol.p206V1.ProtocolConstantV206V1;
-import com.dy.common.util.ByteUtil;
-import com.dy.common.util.ByteUtilUnsigned;
-import com.dy.common.util.CRC8_for_2_0;
-import com.dy.common.util.DateTime;
+import com.dy.common.util.*;
 
 public class GlCreate {
 
-    public static void createRtuAddr(String rtuAddr, byte[] bs, int index) throws Exception {
+    /**
+     * 涓�206鍗忚
+     * @param rtuAddr
+     * @param bs
+     * @param index
+     * @throws Exception
+     */
+    public static void createRtuAddr4P206(String rtuAddr, byte[] bs, int index) throws Exception {
         String rtuAddr1 = rtuAddr.substring(0, 6) ;
         String rtuAddr2 = rtuAddr.substring(6) ;
 
@@ -17,6 +21,17 @@
 
         Integer rtuAddr2Int = Integer.parseInt(rtuAddr2) ;
         ByteUtilUnsigned.short2Bytes_LE(bs, rtuAddr2Int.shortValue(), index);
+    }
+
+    /**
+     * 涓哄崌绾у崗璁�
+     * @param rtuAddr
+     * @param bs
+     * @param index
+     * @throws Exception
+     */
+    public static void createRtuAddr4PUg(String rtuAddr, byte[] bs, int index) throws Exception {
+        ByteUtil.string2BCD_BE(bs, rtuAddr, index) ;
     }
 
     public static void createPw(byte[] bs, int index) throws Exception {
@@ -57,11 +72,19 @@
         ByteUtil.string2BCD_LE(bs, icCardNo1, index) ;
     }
 
-    public static byte[] createCrcTail(byte[] bsNoTail) throws Exception {
+    public static byte[] createCrcTail4P206(byte[] bsNoTail) throws Exception {
         int crc = new CRC8_for_2_0().CRC8(bsNoTail, ProtocolConstantV206V1.ctrlIndex, bsNoTail.length -1) ;
         byte[] bytes = new byte[ProtocolConstantV206V1.lenTail] ;
         bytes[0] = (byte)crc ;
         bytes[1] = ProtocolConstantV206V1.P_Tail_Byte ;
         return bytes ;
     }
+
+    public static byte[] createCrcTail4Ug(byte[] bsNoTail) throws Exception {
+        int crc = new CRC16().CRC(bsNoTail, 0, bsNoTail.length -1) ;
+        byte[] bytes = new byte[ProtocolConstantV206V1.UG_lenTail] ;
+        ByteUtilUnsigned.short2Bytes_BE(bytes, crc, 0);
+        bytes[2] = ProtocolConstantV206V1.P_Tail_Byte ;
+        return bytes ;
+    }
 }
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/upVos/DataCd960XVo.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/upVos/DataCd960XVo.java
new file mode 100644
index 0000000..38bc14e
--- /dev/null
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/upVos/DataCd960XVo.java
@@ -0,0 +1,23 @@
+package com.dy.common.mw.protocol.p206V1.upVos;
+
+import com.dy.common.mw.protocol.UpDataVo;
+
+/**
+ * @Author: liurunyu
+ * @Date: 2024/11/4 11:14
+ * @Description
+ */
+public class DataCd960XVo implements UpDataVo {
+    public boolean success;
+
+    public String toString(){
+        StringBuilder sb = new StringBuilder() ;
+        sb.append("   鍗囩骇搴旂瓟:\n");
+        sb.append("      缁撴灉锛�");
+        sb.append(success?"姝g‘":"閿欒");
+        sb.append("\n");
+
+        return sb.toString() ;
+    }
+
+}
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/CodeV2.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/CodeV2.java
index cbb1cb4..b38c1b0 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/CodeV2.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/CodeV2.java
@@ -46,6 +46,14 @@
 	public static final String cd_B0 = "B0" ;//鏌ヨ瀹炴椂鏁版嵁锛堟湭瀹炵幇锛�
 	public static final String cd_C0 = "C0" ;//閬ユ祴绔欐暣鐐逛笂鎶ュ疄鏃舵暟鎹� ok
 
+	public static final String cd_1600 = "1600" ;//鍗囩骇澶嶄綅
+	public static final String cd_1601 = "1601" ;//鍗囩骇閰嶇疆
+	public static final String cd_1602 = "1602" ;//鍗囩骇鏁版嵁
+	public static final String cd_1603 = "1603" ;//鍗囩骇鏍¢獙
+	public static final String cd_9601 = "9601" ;//鍗囩骇閰嶇疆
+	public static final String cd_9602 = "9602" ;//鍗囩骇鏁版嵁
+	public static final String cd_9603 = "9603" ;//鍗囩骇鏍¢獙
+
     public static String getCodeName(String code) {
 		String name = (code.equals(cd_02) ? "閾捐矾妫�娴�" :
 			(code.equals(cd_10) ? "璁剧疆缁堢鍦板潃" :
@@ -90,7 +98,14 @@
 			(code.equals(cd_A2) ? "瀹氶噺鍏抽榾寮忚鍒掑紑闃�" :
 			(code.equals(cd_B0) ? "鏌ヨ瀹炴椂鏁版嵁" :
 			(code.equals(cd_C0) ? "鑷姤(鏁寸偣)瀹炴椂鏁版嵁" :
-			""))))))))))))))))))))))))))))))))))))))))))) ;
+			(code.equals(cd_1600) ? "鍗囩骇澶嶄綅" :
+			(code.equals(cd_1601) ? "鍗囩骇閰嶇疆" :
+			(code.equals(cd_1602) ? "鍗囩骇鏁版嵁" :
+			(code.equals(cd_1603) ? "鍗囩骇鏍¢獙" :
+			(code.equals(cd_9601) ? "鍗囩骇閰嶇疆" :
+			(code.equals(cd_9602) ? "鍗囩骇鏁版嵁" :
+			(code.equals(cd_9603) ? "鍗囩骇鏍¢獙" :
+			"")))))))))))))))))))))))))))))))))))))))))))))))))) ;
 		if(name == null || name.equals("")){
 			name = code ;
 		}
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/CommonV2.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/CommonV2.java
index a0d3c47..ebcaacf 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/CommonV2.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/CommonV2.java
@@ -1,5 +1,6 @@
 package com.dy.common.mw.protocol.p206V2;
 
+import com.dy.common.mw.protocol.p206V1.ProtocolConstantV206V1;
 import com.dy.common.util.ByteUtil;
 import com.dy.common.util.ByteUtilUnsigned;
 import com.dy.common.util.CRC8_for_2_0;
@@ -12,19 +13,48 @@
 	 * @return true鏄�,false鍚�
 	 * @throws Exception  寮傚父
 	 */
-	public Boolean isThisProtocolHead(byte[] bs) throws Exception{
+	public Boolean[] isThisProtocolHead(byte[] bs) throws Exception{
 		if(bs == null){
 			return null ;
 		}else if(bs.length >= (ProtocolConstantV206V2.ctrlIndex)
 				&& bs[ProtocolConstantV206V2.headFlag1Index] == ProtocolConstantV206V2.P_Head_Byte
 				&& bs[ProtocolConstantV206V2.headFlag2Index] == ProtocolConstantV206V2.P_Head_Byte){
 			Short vs = this.parseVersion(bs) ;
-			return vs.shortValue() == ProtocolConstantV206V2.protocolVer.shortValue() ;
+			if(vs.shortValue() == ProtocolConstantV206V2.protocolVer.shortValue()){
+				return new Boolean[]{true, true};
+			}else{
+				return new Boolean[]{false, true};
+			}
+		}else if(bs.length >= (ProtocolConstantV206V2.UG_codeIndex)
+				&& bs[0] == ProtocolConstantV206V2.UG_P_Head_Byte
+				&& bs[3] == ProtocolConstantV206V2.UG_P_Head_Byte){
+			return new Boolean[]{true, false} ;
 		}else{
-			return false ;
+			return new Boolean[]{false, false} ;
 		}
 	}
 
+	/**
+	 * 妫�鏌ュ崗璁被鍨�
+	 * @param bs 涓婅瀛楄妭鏁扮粍
+	 * @return 鍗忚绫诲瀷
+	 * @throws Exception 寮傚父
+	 */
+	public Boolean protocolType_p206TrueUgFalse(byte[] bs){
+		if(bs == null){
+			return null ;
+		}else if(bs.length >= (ProtocolConstantV206V2.ctrlIndex)
+				&& bs[0] == ProtocolConstantV206V2.P_Head_Byte
+				&& bs[2] == ProtocolConstantV206V2.P_Head_Byte){
+			return true ;
+		}else if(bs.length >= (ProtocolConstantV206V2.UG_codeIndex)
+				&& bs[0] == ProtocolConstantV206V2.UG_P_Head_Byte
+				&& bs[3] == ProtocolConstantV206V2.UG_P_Head_Byte){
+			return false ;
+		}else{
+			return null ;
+		}
+	}
 	/**
 	 * 鍒嗘瀽鐗堟湰鍙�
 	 * @param bs
@@ -33,18 +63,7 @@
 	public Short parseVersion(byte[] bs)throws Exception{
 		return ByteUtil.byte2PlusInt(bs[ProtocolConstantV206V2.versionIndex]) ;
 	}
-	
-	/**
-	 * 妫�鏌ュご
-	 * @param bs 涓婅瀛楄妭鏁扮粍
-	 * @throws Exception 寮傚父
-	 */
-	public void checkHead(byte[] bs) throws Exception{
-		if(bs.length < ProtocolConstantV206V2.onLineDataMinLength || bs[0] != ProtocolConstantV206V2.P_Head_Byte || bs[2] != ProtocolConstantV206V2.P_Head_Byte){
-			throw new Exception("涓婅鏁版嵁甯уご涓嶆纭紒") ;
-		}
-	}
-	
+
 	/**
 	 * 妫�鏌ュ熬
 	 * @param bs 涓婅瀛楄妭鏁扮粍
@@ -60,24 +79,40 @@
 	/**
 	 * 鍒嗘瀽甯ч暱搴�
 	 * @param bs 涓婅瀛楄妭鏁扮粍
+	 * @param p206TrueUgFalse 206鍗忚涓簍rue锛屽崌绾у崗璁负false
 	 * @return 鏁版嵁闀垮害
 	 * @throws Exception 寮傚父
 	 */
-	public int parseFrameLen(byte[] bs)throws Exception{
-		int len = ByteUtilUnsigned.byte2Byte(bs, ProtocolConstantV206V2.dataLenIndex) ;
-		return len + ProtocolConstantV206V2.lenHead2ctrl + ProtocolConstantV206V2.lenTail ;
+	public int parseFrameLen(byte[] bs, boolean p206TrueUgFalse)throws Exception{
+		if(p206TrueUgFalse) {
+			int len = ByteUtilUnsigned.byte2Byte(bs, ProtocolConstantV206V2.dataLenIndex);
+			return len + ProtocolConstantV206V2.lenHead2ctrl + ProtocolConstantV206V2.lenTail;
+		}else{
+			int len = ByteUtilUnsigned.bytes2Short_BE(bs, ProtocolConstantV206V2.UG_dataLenIndex_start);
+			return len + ProtocolConstantV206V2.UG_lenHead2Cmd + ProtocolConstantV206V2.UG_lenTail;
+		}
 	}
 
-
 	/**
-	 * 鍒嗘瀽鐢ㄦ埛鏁版嵁鍩熷瓧鑺傛暟
+	 * 鍒嗘瀽鐢ㄦ埛鏁版嵁鍩熷瓧鑺傛暟(榛樿鏄潪鍗囩骇鍗忚)
 	 * @param bs 涓婅瀛楄妭鏁扮粍
 	 * @return 鏁版嵁闀垮害
 	 * @throws Exception 寮傚父
 	 */
-	public int parseDataLen(byte[] bs)throws Exception{
+	public int parseDataLen4P206(byte[] bs)throws Exception{
 		int len = ByteUtilUnsigned.byte2Byte(bs, ProtocolConstantV206V2.dataLenIndex) ;
-		return len + ProtocolConstantV206V2.lenHead2ctrl + ProtocolConstantV206V2.lenTail ;
+		return len - ProtocolConstantV206V2.lenCtrl - ProtocolConstantV206V2.lenRtuAddr ;
+	}
+
+	/**
+	 * 鍒嗘瀽鐢ㄦ埛鏁版嵁鍩熷瓧鑺傛暟(鍗囩骇鍗忚)
+	 * @param bs 涓婅瀛楄妭鏁扮粍
+	 * @return 鏁版嵁闀垮害
+	 * @throws Exception 寮傚父
+	 */
+	public int parseDataLen4Ug(byte[] bs)throws Exception{
+		int len = ByteUtilUnsigned.bytes2Short_LE(bs, ProtocolConstantV206V2.UG_dataLenIndex_start) ;
+		return len - ProtocolConstantV206V2.UG_lenCmd - ProtocolConstantV206V2.UG_lenRtuAddr ;
 	}
 
 
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/DriverV2.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/DriverV2.java
index f1defc1..9a7f080 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/DriverV2.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/DriverV2.java
@@ -60,19 +60,16 @@
 		Short protocolVersion = null ;
 		try{
 			CommonV2 cp = new CommonV2() ;
-			cp.checkHead(upBuffer) ;
 			cp.checkTail(upBuffer) ;
 			String crcStr = cp.checkCrc_str(upBuffer) ;
 			if(crcStr != null){
 				return new MidResult[]{(new MidResultError(ProtocolConstantV206V2.protocolName, rtuAddr, "涓ラ噸閿欒锛屼笂琛屾暟鎹瓹RC妫�鏌ュけ璐ワ紝" + crcStr, null))} ;
 			}
-			rtuAddr = cp.parseRtuAddr(upBuffer) ;
 			protocolVersion = cp.parseVersion(upBuffer) ;
 			upCode = cp.parseCode(upBuffer) ;
 			if(upCode == null){
 				return new MidResult[]{(new MidResultError(ProtocolConstantV206V2.protocolName, rtuAddr, "涓ラ噸閿欒锛屾湭鑳戒粠涓婅鏁版嵁涓В鏋愬嚭鍔熻兘鐮侊紒", null))} ;
 			}
-			//Integer dataLen = cp.parseFrameLen(upBuffer) ;
 			Data upData = new Data() ;
 			upData.setRtuAddr(rtuAddr) ;
 			upData.setProtocol(ProtocolConstantV206V2.protocolName);
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/OnLineV2.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/OnLineV2.java
index 7ca3647..078625e 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/OnLineV2.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/OnLineV2.java
@@ -20,12 +20,12 @@
 	public OnLineResult parse(byte[] upBuf)throws Exception {
 		OnLineResult olr = new OnLineResult() ;
 		CommonV2 cp = new CommonV2() ;
-		Boolean flag = cp.isThisProtocolHead(upBuf) ;
-		if(flag == null){
+		Boolean[] isThis_p206Pgu = cp.isThisProtocolHead(upBuf) ;
+		if(isThis_p206Pgu == null || isThis_p206Pgu.length != 2){
 			//鍑洪敊
 			olr.result = OnLine.OnLineAction_fail ;
 			olr.rtuAddr = null ;
-		}else if(!flag.booleanValue()){
+		}else if(!isThis_p206Pgu[0].booleanValue()){
 			//涓嶆槸鏈崗璁暟鎹�
 			olr.result = OnLine.OnLineAction_success_noMe ;
 			olr.rtuAddr = null ;
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/PrefixedDataAvailableV2.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/PrefixedDataAvailableV2.java
index a5f5c86..43fa369 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/PrefixedDataAvailableV2.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/PrefixedDataAvailableV2.java
@@ -94,14 +94,13 @@
 
 		
         CommonV2 parseCommon = new CommonV2();
-		boolean isThisProtocolData = parseCommon.isThisProtocolHead(preByte) ;
-
-		if(!isThisProtocolData){
+		Boolean[] isThisProtocolData = parseCommon.isThisProtocolHead(preByte) ;
+		if(isThisProtocolData == null || isThisProtocolData.length != 2 || !isThisProtocolData[0].booleanValue()){
 			//涓嶆槸鏈崗璁暟鎹�
 			return null ;
 		}
 
-		Integer dataLen = parseCommon.parseFrameLen(preByte) ;
+		Integer dataLen = parseCommon.parseFrameLen(preByte, isThisProtocolData[1]) ;
 
 		if(dataLen == null){
 			String headHex = ByteUtil.bytes2Hex(preByte, true) ;
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/ProtocolConstantV206V2.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/ProtocolConstantV206V2.java
index 37b3a1e..aa97a77 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/ProtocolConstantV206V2.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/ProtocolConstantV206V2.java
@@ -34,6 +34,8 @@
     public static final byte lenHead2ctrl = 4 ; //浠庡ご鍒版帶鍒跺煙锛堜笉鍖呮嫭锛夊瓧鑺傛暟缁勯暱搴�
     public static final byte lenHead2Code = 11 ; //浠庡ご鍒板姛鑳界爜锛堝寘鎷級瀛楄妭鏁扮粍闀垮害
     public static final byte lenTail = 2 ; //甯у熬閮ㄥ瓧鑺傛暟缁勯暱搴�
+    public static final byte lenCtrl = 1 ; //鎺у埗鍩熷瓧鑺傛暟缁勯暱搴�
+    public static final byte lenRtuAddr = 5 ; //鎺у埗鍣ㄥ湴鍧�瀛楄妭鏁扮粍闀垮害
     /**
      * 鎵�鍦ㄥ瓧鑺傛暟缁勭殑浣嶇疆锛堜笅鏍囷級
      */
@@ -49,7 +51,28 @@
     public static final int codeIndex = 10 ;//鍔熻兘鐮佸瓧鑺傛暟缁勪笅鏍�
     public static final int dataIndex = 11 ;//鍏蜂綋鏁版嵁瀛楄妭鏁扮粍涓嬫爣
 
-
     public static final String vsCardAddr = "00000000";//鏈郴缁熷簲鐢ㄧ殑铏氭嫙鍗★紝鍗$墿鐞嗗湴鍧�閲囩敤10涓�0浣滀负妯℃嫙
 
+    ////////////////////////////////////////////////
+    //
+    //杩滅▼鍗囩骇鐩稿叧
+    //
+    ////////////////////////////////////////////////
+    public static final byte UG_P_Head_Byte = (byte)0xAA ;
+    public static final byte UG_P_Tail_Byte = (byte)0x16 ;
+    public static final int UG_codeIndex = 4 ;//鍔熻兘鐮佸瓧鑺傛暟缁勪笅鏍�
+    public static final int UG_dataIndex = 12 ;//鍏蜂綋鏁版嵁瀛楄妭鏁扮粍涓嬫爣
+
+    public static final int UG_dataLenIndex_start = 1 ;//甯ч暱搴﹀紑濮嬫墍鍦� 瀛楄妭鏁扮粍璧峰涓嬫爣
+    public static final int UG_dataLenIndex_end = 2 ;//甯ч暱搴︾粨鏉熸墍鍦� 瀛楄妭鏁扮粍璧峰涓嬫爣
+
+    public static final int UG_rtuAddrIndex_start = 6 ;//鎺у埗鍣ㄥ湴鍧� 瀛楄妭鏁扮粍寮�濮嬩笅鏍�
+    public static final int UG_rtuAddrIndex_end = 11 ;//鎺у埗鍣ㄥ湴鍧� 瀛楄妭鏁扮粍寮�濮嬩笅鏍�
+
+    public static final byte UG_lenCmd = 2 ; //鍔熻兘鐮佸瓧鑺傛暟缁勯暱搴�
+    public static final byte UG_lenRtuAddr = 6 ; //鍔熻兘鐮佸瓧鑺傛暟缁勯暱搴�
+    public static final byte UG_lenHead2Cmd = 4 ; //浠庡ご鍒板姛鑳界爜锛堜笉鍖呮嫭锛夊瓧鑺傛暟缁勯暱搴�
+    public static final byte UG_lenTail = 3 ; //甯у熬閮ㄥ瓧鑺傛暟缁勯暱搴�
+    public static final byte UG_lenHead2RtuAddr = 12 ; //浠庡ご鍒癛TU鍦板潃锛堝寘鎷級瀛楄妭鏁扮粍闀垮害
+
 }
\ No newline at end of file
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_02_Down.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_02_Down.java
index aa4c391..7cafa8e 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_02_Down.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_02_Down.java
@@ -58,7 +58,7 @@
         bsHead[index] = commonV_1.createCtrl((byte)0, (byte)0) ;
 
         index++ ;
-        GlCreate.createRtuAddr(para.rtuAddr, bsHead, index);
+        GlCreate.createRtuAddr4P206(para.rtuAddr, bsHead, index);
         index += 5 ;
 
         ByteUtil.hex2Bytes(para.commandCode, bsHead, index) ;
@@ -79,7 +79,7 @@
 
         GlCreate.createLen(bytes);//闀垮害鏀惧瓧鑺傛暟缁勪腑
 
-        byte[] bsTail = GlCreate.createCrcTail(bytes) ;//CRC鍜屽熬鍙犲姞瀛楄妭鏁扮粍涓�
+        byte[] bsTail = GlCreate.createCrcTail4P206(bytes) ;//CRC鍜屽熬鍙犲姞瀛楄妭鏁扮粍涓�
 
         bytes = ByteUtil.bytesMerge(bytes, bsTail) ;
 
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_02_Up.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_02_Up.java
index 82e8a79..30652a0 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_02_Up.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_02_Up.java
@@ -24,7 +24,7 @@
     @Override
     public MidResult[] parse(Boolean isLowPower, CodeParseParams params, CodeParseCallback callback)throws Exception {
         ParseParamsForUpV2 para = (ParseParamsForUpV2)params ;
-        int bsLen = new CommonV2().parseDataLen(para.upBuffer) ;
+        int bsLen = new CommonV2().parseDataLen4P206(para.upBuffer) ;
         if(bsLen > 0){
             this.doParse(para.upBuffer,
                     bsLen,
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_10_Down.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_10_Down.java
index b0e7deb..dbb1848 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_10_Down.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_10_Down.java
@@ -78,7 +78,7 @@
             bsHead[index] = commonV_1.createCtrl((byte) 0, (byte) 0);
 
             index++;
-            GlCreate.createRtuAddr(para.rtuAddr, bsHead, index);
+            GlCreate.createRtuAddr4P206(para.rtuAddr, bsHead, index);
             index += 5;
 
             ByteUtil.hex2Bytes(para.commandCode, bsHead, index);
@@ -86,7 +86,7 @@
             index = 0;
             byte[] bs = new byte[13];
 
-            GlCreate.createRtuAddr(cvo.rtuAddr, bs, index);
+            GlCreate.createRtuAddr4P206(cvo.rtuAddr, bs, index);
             index += 5;
             GlCreate.createPw(bs, index);
             index += 2;
@@ -95,7 +95,7 @@
 
             GlCreate.createLen(bytes);//闀垮害鏀惧瓧鑺傛暟缁勪腑
 
-            byte[] bsTail = GlCreate.createCrcTail(bytes);//CRC鍜屽熬鍙犲姞瀛楄妭鏁扮粍涓�
+            byte[] bsTail = GlCreate.createCrcTail4P206(bytes);//CRC鍜屽熬鍙犲姞瀛楄妭鏁扮粍涓�
 
             bytes = ByteUtil.bytesMerge(bytes, bsTail);
 
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_10_Up.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_10_Up.java
index 940ee74..62262da 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_10_Up.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_10_Up.java
@@ -25,7 +25,7 @@
     @Override
     public MidResult[] parse(Boolean isLowPower, CodeParseParams params, CodeParseCallback callback)throws Exception {
         ParseParamsForUpV2 para = (ParseParamsForUpV2)params ;
-        int bsLen = new CommonV2().parseDataLen(para.upBuffer) ;
+        int bsLen = new CommonV2().parseDataLen4P206(para.upBuffer) ;
         if(bsLen > 0){
             this.doParse(para.upBuffer,
                     bsLen,
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_12_Down.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_12_Down.java
index 8351ca8..9210f21 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_12_Down.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_12_Down.java
@@ -58,7 +58,7 @@
         bsHead[index] = commonV_1.createCtrl((byte)0, (byte)0) ;
 
         index++ ;
-        GlCreate.createRtuAddr(para.rtuAddr, bsHead, index);
+        GlCreate.createRtuAddr4P206(para.rtuAddr, bsHead, index);
         index += 5 ;
 
         ByteUtil.hex2Bytes(para.commandCode, bsHead, index) ;
@@ -73,7 +73,7 @@
 
         GlCreate.createLen(bytes);//闀垮害鏀惧瓧鑺傛暟缁勪腑
 
-        byte[] bsTail = GlCreate.createCrcTail(bytes) ;//CRC鍜屽熬鍙犲姞瀛楄妭鏁扮粍涓�
+        byte[] bsTail = GlCreate.createCrcTail4P206(bytes) ;//CRC鍜屽熬鍙犲姞瀛楄妭鏁扮粍涓�
 
         bytes = ByteUtil.bytesMerge(bytes, bsTail) ;
 
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_12_Up.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_12_Up.java
index 851d6a6..832c0b6 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_12_Up.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_12_Up.java
@@ -20,7 +20,7 @@
     @Override
     public MidResult[] parse(Boolean isLowPower, CodeParseParams params, CodeParseCallback callback)throws Exception {
         ParseParamsForUpV2 para = (ParseParamsForUpV2)params ;
-        int bsLen = new CommonV2().parseDataLen(para.upBuffer) ;
+        int bsLen = new CommonV2().parseDataLen4P206(para.upBuffer) ;
         if(bsLen > 0){
             this.doParse(para.upBuffer,
                     bsLen,
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_1600_Down.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_1600_Down.java
new file mode 100644
index 0000000..83a27a2
--- /dev/null
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_1600_Down.java
@@ -0,0 +1,79 @@
+package com.dy.common.mw.protocol.p206V2.parse;
+
+import com.dy.common.mw.protocol.*;
+import com.dy.common.mw.protocol.p206V2.CodeV2;
+import com.dy.common.mw.protocol.p206V2.ParseParamsForDownV2;
+import com.dy.common.mw.protocol.p206V2.ProtocolConstantV206V2;
+import com.dy.common.mw.protocol.p206V2.parse.global.GlCreate;
+import com.dy.common.util.ByteUtil;
+
+/**
+ * @Author liurunyu
+ * @Date 2024/06/12 9:30
+ * @Description
+ */
+@AnnotationCodeDown(ifAny={
+        CodeV2.cd_1600
+})
+public class Cd_1600_Down implements CodeParse {
+
+    @Override
+    public MidResult[] parse(Boolean isLowPower, CodeParseParams params, CodeParseCallback callback) throws Exception {
+        ParseParamsForDownV2 para = (ParseParamsForDownV2) params ;
+        MidResultToRtu midRs = new MidResultToRtu() ;
+        byte[] bs = this.doParse(midRs, para) ;
+
+        midRs.rtuResultSendWebUrl = para.rtuResultSendWebUrl ;//rtu杩斿洖鍛戒护缁撴灉 鍙戝悜鐩殑鍦皐eb URL
+        midRs.protocolName = para.protocolName ;//鍗忚鍚嶇О
+        midRs.protocolVersion = para.protocolVersion; //鍗忚鐗堟湰鍙�
+        midRs.rtuAddr = para.rtuAddr ;//Rtu鍦板潃
+        midRs.commandId = para.commandId ;//鍛戒护ID锛屽彂璧峰懡浠ょ殑瀹㈡埛绔�(web绔�)鐢熸垚锛屼互鍖归厤鍛戒护缁撴灉
+        midRs.downCode = para.commandCode ;//涓嬭鍛戒护鍔熻兘鐮�;
+        midRs.downCodeName = CodeV2.getCodeName(para.commandCode) ;//涓嬭鍛戒护鍔熻兘鐮佸悕绉�;
+        midRs.downBuffer = bs ;//涓嬭鍛戒护鏁版嵁
+        midRs.downBufHex = ByteUtil.bytes2Hex(bs, true) ;//涓嬭鍛戒护鏁版嵁鍗佸叚杩涘埗褰㈠紡
+        midRs.hasResponse = false ;//鏄惁鏈夊簲绛�
+        midRs.maxSendTimes = null ;//鍛戒护鏈�澶у彂閫佹鏁�(褰撴敹涓嶅埌搴旂瓟鏃讹紝灏嗛噸鍙�)锛屽鏋滀笉璁剧疆锛屽懡浠ょ紦瀛樺櫒杩涜琛ュ厖璁剧疆
+        midRs.isCachForOffLine = false ;//RTU涓嶅湪绾匡紝鍛戒护鏄惁缂撳瓨锛屼綆鍔熻�楁椂涓簍rue
+
+        if(isLowPower != null && isLowPower.booleanValue()){
+            //浣庡姛鑰楁椂锛屽敖蹇彂閫�
+            midRs.isQuickSend = true ;
+        }
+
+        return new MidResult[]{midRs} ;
+    }
+
+    /**
+     * 鏋勯�犱笅琛屾暟鎹�
+     * @param midRs 鍙傛暟
+     * @param para 鍙傛暟
+     * @return 瀛楄妭鏁扮粍
+     * @throws Exception 寮傚父
+     */
+    public byte[] doParse(MidResultToRtu midRs, ParseParamsForDownV2 para) throws Exception {
+        byte[] preBytes = new byte[ProtocolConstantV206V2.UG_lenHead2RtuAddr] ;
+        byte index = 0 ;
+        preBytes[index] = ProtocolConstantV206V2.UG_P_Head_Byte ;
+
+        index++ ;
+        preBytes[index] = 0 ;//甯ч暱搴�
+        index++ ;
+        preBytes[index] = 0 ;//甯ч暱搴�
+
+        index++ ;
+        preBytes[index] = ProtocolConstantV206V2.UG_P_Head_Byte ;
+
+        index++ ;
+        ByteUtil.hex2Bytes(para.commandCode, preBytes, index) ;
+
+        index += 2 ;
+        GlCreate.createRtuAddr4PUg(para.rtuAddr, preBytes, index);
+
+        byte[] bsTail = GlCreate.createCrcTail4Ug(preBytes) ;//CRC鍜屽熬鍙犲姞瀛楄妭鏁扮粍涓�
+
+        return ByteUtil.bytesMerge(preBytes, bsTail) ;
+    }
+
+}
+
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_1601_Down.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_1601_Down.java
new file mode 100644
index 0000000..6d38fa7
--- /dev/null
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_1601_Down.java
@@ -0,0 +1,82 @@
+package com.dy.common.mw.protocol.p206V2.parse;
+
+import com.dy.common.mw.protocol.*;
+import com.dy.common.mw.protocol.p206V2.CodeV2;
+import com.dy.common.mw.protocol.p206V2.ParseParamsForDownV2;
+import com.dy.common.mw.protocol.p206V2.ProtocolConstantV206V2;
+import com.dy.common.mw.protocol.p206V2.parse.global.GlCreate;
+import com.dy.common.util.ByteUtil;
+
+/**
+ * @Author liurunyu
+ * @Date 2024/06/12 9:30
+ * @Description
+ */
+@AnnotationCodeDown(ifAny={
+        CodeV2.cd_1601
+})
+public class Cd_1601_Down implements CodeParse {
+
+    @Override
+    public MidResult[] parse(Boolean isLowPower, CodeParseParams params, CodeParseCallback callback) throws Exception {
+        ParseParamsForDownV2 para = (ParseParamsForDownV2) params ;
+        MidResultToRtu midRs = new MidResultToRtu() ;
+        byte[] bs = this.doParse(midRs, para) ;
+
+        midRs.rtuResultSendWebUrl = para.rtuResultSendWebUrl ;//rtu杩斿洖鍛戒护缁撴灉 鍙戝悜鐩殑鍦皐eb URL
+        midRs.protocolName = para.protocolName ;//鍗忚鍚嶇О
+        midRs.protocolVersion = para.protocolVersion; //鍗忚鐗堟湰鍙�
+        midRs.rtuAddr = para.rtuAddr ;//Rtu鍦板潃
+        midRs.commandId = para.commandId ;//鍛戒护ID锛屽彂璧峰懡浠ょ殑瀹㈡埛绔�(web绔�)鐢熸垚锛屼互鍖归厤鍛戒护缁撴灉
+        midRs.downCode = para.commandCode ;//涓嬭鍛戒护鍔熻兘鐮�;
+        midRs.downCodeName = CodeV2.getCodeName(para.commandCode) ;//涓嬭鍛戒护鍔熻兘鐮佸悕绉�;
+        midRs.downBuffer = bs ;//涓嬭鍛戒护鏁版嵁
+        midRs.downBufHex = ByteUtil.bytes2Hex(bs, true) ;//涓嬭鍛戒护鏁版嵁鍗佸叚杩涘埗褰㈠紡
+        midRs.hasResponse = true ;//鏄惁鏈夊簲绛�
+        midRs.maxSendTimes = null ;//鍛戒护鏈�澶у彂閫佹鏁�(褰撴敹涓嶅埌搴旂瓟鏃讹紝灏嗛噸鍙�)锛屽鏋滀笉璁剧疆锛屽懡浠ょ紦瀛樺櫒杩涜琛ュ厖璁剧疆
+        midRs.isCachForOffLine = false ;//RTU涓嶅湪绾匡紝鍛戒护鏄惁缂撳瓨锛屼綆鍔熻�楁椂涓簍rue
+
+        if(isLowPower != null && isLowPower.booleanValue()){
+            //浣庡姛鑰楁椂锛屽敖蹇彂閫�
+            midRs.isQuickSend = true ;
+        }
+
+        return new MidResult[]{midRs} ;
+    }
+
+
+    /**
+     * 鏋勯�犱笅琛屾暟鎹�
+     * @param midRs 鍙傛暟
+     * @param para 鍙傛暟
+     * @return 瀛楄妭鏁扮粍
+     * @throws Exception 寮傚父
+     */
+    public byte[] doParse(MidResultToRtu midRs, ParseParamsForDownV2 para) throws Exception {
+        byte[] preBytes = new byte[ProtocolConstantV206V2.UG_lenHead2RtuAddr] ;
+        byte index = 0 ;
+        preBytes[index] = ProtocolConstantV206V2.UG_P_Head_Byte ;
+
+        index++ ;
+        preBytes[index] = 0 ;//甯ч暱搴�
+        index++ ;
+        preBytes[index] = 0 ;//甯ч暱搴�
+
+        index++ ;
+        preBytes[index] = ProtocolConstantV206V2.UG_P_Head_Byte ;
+
+        index++ ;
+        ByteUtil.hex2Bytes(para.commandCode, preBytes, index) ;
+
+        index += 2 ;
+        GlCreate.createRtuAddr4PUg(para.rtuAddr, preBytes, index);
+
+        byte[] bytes = ByteUtil.bytesMerge(preBytes, (byte[])para.attachment) ;
+
+        byte[] bsTail = GlCreate.createCrcTail4Ug(bytes) ;//CRC鍜屽熬鍙犲姞瀛楄妭鏁扮粍涓�
+
+        return ByteUtil.bytesMerge(bytes, bsTail) ;
+    }
+
+}
+
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_1602_Down.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_1602_Down.java
new file mode 100644
index 0000000..153f46b
--- /dev/null
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_1602_Down.java
@@ -0,0 +1,82 @@
+package com.dy.common.mw.protocol.p206V2.parse;
+
+import com.dy.common.mw.protocol.*;
+import com.dy.common.mw.protocol.p206V2.CodeV2;
+import com.dy.common.mw.protocol.p206V2.ParseParamsForDownV2;
+import com.dy.common.mw.protocol.p206V2.ProtocolConstantV206V2;
+import com.dy.common.mw.protocol.p206V2.parse.global.GlCreate;
+import com.dy.common.util.ByteUtil;
+
+/**
+ * @Author liurunyu
+ * @Date 2024/06/12 9:30
+ * @Description
+ */
+@AnnotationCodeDown(ifAny={
+        CodeV2.cd_1602
+})
+public class Cd_1602_Down implements CodeParse {
+
+    @Override
+    public MidResult[] parse(Boolean isLowPower, CodeParseParams params, CodeParseCallback callback) throws Exception {
+        ParseParamsForDownV2 para = (ParseParamsForDownV2) params ;
+        MidResultToRtu midRs = new MidResultToRtu() ;
+        byte[] bs = this.doParse(midRs, para) ;
+
+        midRs.rtuResultSendWebUrl = para.rtuResultSendWebUrl ;//rtu杩斿洖鍛戒护缁撴灉 鍙戝悜鐩殑鍦皐eb URL
+        midRs.protocolName = para.protocolName ;//鍗忚鍚嶇О
+        midRs.protocolVersion = para.protocolVersion; //鍗忚鐗堟湰鍙�
+        midRs.rtuAddr = para.rtuAddr ;//Rtu鍦板潃
+        midRs.commandId = para.commandId ;//鍛戒护ID锛屽彂璧峰懡浠ょ殑瀹㈡埛绔�(web绔�)鐢熸垚锛屼互鍖归厤鍛戒护缁撴灉
+        midRs.downCode = para.commandCode ;//涓嬭鍛戒护鍔熻兘鐮�;
+        midRs.downCodeName = CodeV2.getCodeName(para.commandCode) ;//涓嬭鍛戒护鍔熻兘鐮佸悕绉�;
+        midRs.downBuffer = bs ;//涓嬭鍛戒护鏁版嵁
+        midRs.downBufHex = ByteUtil.bytes2Hex(bs, true) ;//涓嬭鍛戒护鏁版嵁鍗佸叚杩涘埗褰㈠紡
+        midRs.hasResponse = true ;//鏄惁鏈夊簲绛�
+        midRs.maxSendTimes = null ;//鍛戒护鏈�澶у彂閫佹鏁�(褰撴敹涓嶅埌搴旂瓟鏃讹紝灏嗛噸鍙�)锛屽鏋滀笉璁剧疆锛屽懡浠ょ紦瀛樺櫒杩涜琛ュ厖璁剧疆
+        midRs.isCachForOffLine = false ;//RTU涓嶅湪绾匡紝鍛戒护鏄惁缂撳瓨锛屼綆鍔熻�楁椂涓簍rue
+
+        if(isLowPower != null && isLowPower.booleanValue()){
+            //浣庡姛鑰楁椂锛屽敖蹇彂閫�
+            midRs.isQuickSend = true ;
+        }
+
+        return new MidResult[]{midRs} ;
+    }
+
+
+    /**
+     * 鏋勯�犱笅琛屾暟鎹�
+     * @param midRs 鍙傛暟
+     * @param para 鍙傛暟
+     * @return 瀛楄妭鏁扮粍
+     * @throws Exception 寮傚父
+     */
+    public byte[] doParse(MidResultToRtu midRs, ParseParamsForDownV2 para) throws Exception {
+        byte[] preBytes = new byte[ProtocolConstantV206V2.UG_lenHead2RtuAddr] ;
+        byte index = 0 ;
+        preBytes[index] = ProtocolConstantV206V2.UG_P_Head_Byte ;
+
+        index++ ;
+        preBytes[index] = 0 ;//甯ч暱搴�
+        index++ ;
+        preBytes[index] = 0 ;//甯ч暱搴�
+
+        index++ ;
+        preBytes[index] = ProtocolConstantV206V2.UG_P_Head_Byte ;
+
+        index++ ;
+        ByteUtil.hex2Bytes(para.commandCode, preBytes, index) ;
+
+        index += 2 ;
+        GlCreate.createRtuAddr4PUg(para.rtuAddr, preBytes, index);
+
+        byte[] bytes = ByteUtil.bytesMerge(preBytes, (byte[])para.attachment) ;
+
+        byte[] bsTail = GlCreate.createCrcTail4Ug(bytes) ;//CRC鍜屽熬鍙犲姞瀛楄妭鏁扮粍涓�
+
+        return ByteUtil.bytesMerge(bytes, bsTail) ;
+    }
+
+}
+
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_1603_Down.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_1603_Down.java
new file mode 100644
index 0000000..6832c5b
--- /dev/null
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_1603_Down.java
@@ -0,0 +1,80 @@
+package com.dy.common.mw.protocol.p206V2.parse;
+
+import com.dy.common.mw.protocol.*;
+import com.dy.common.mw.protocol.p206V2.CodeV2;
+import com.dy.common.mw.protocol.p206V2.ParseParamsForDownV2;
+import com.dy.common.mw.protocol.p206V2.ProtocolConstantV206V2;
+import com.dy.common.mw.protocol.p206V2.parse.global.GlCreate;
+import com.dy.common.util.ByteUtil;
+
+/**
+ * @Author liurunyu
+ * @Date 2024/06/12 9:30
+ * @Description
+ */
+@AnnotationCodeDown(ifAny={
+        CodeV2.cd_1603
+})
+public class Cd_1603_Down implements CodeParse {
+
+    @Override
+    public MidResult[] parse(Boolean isLowPower, CodeParseParams params, CodeParseCallback callback) throws Exception {
+        ParseParamsForDownV2 para = (ParseParamsForDownV2) params ;
+        MidResultToRtu midRs = new MidResultToRtu() ;
+        byte[] bs = this.doParse(midRs, para) ;
+
+        midRs.rtuResultSendWebUrl = para.rtuResultSendWebUrl ;//rtu杩斿洖鍛戒护缁撴灉 鍙戝悜鐩殑鍦皐eb URL
+        midRs.protocolName = para.protocolName ;//鍗忚鍚嶇О
+        midRs.protocolVersion = para.protocolVersion; //鍗忚鐗堟湰鍙�
+        midRs.rtuAddr = para.rtuAddr ;//Rtu鍦板潃
+        midRs.commandId = para.commandId ;//鍛戒护ID锛屽彂璧峰懡浠ょ殑瀹㈡埛绔�(web绔�)鐢熸垚锛屼互鍖归厤鍛戒护缁撴灉
+        midRs.downCode = para.commandCode ;//涓嬭鍛戒护鍔熻兘鐮�;
+        midRs.downCodeName = CodeV2.getCodeName(para.commandCode) ;//涓嬭鍛戒护鍔熻兘鐮佸悕绉�;
+        midRs.downBuffer = bs ;//涓嬭鍛戒护鏁版嵁
+        midRs.downBufHex = ByteUtil.bytes2Hex(bs, true) ;//涓嬭鍛戒护鏁版嵁鍗佸叚杩涘埗褰㈠紡
+        midRs.hasResponse = true ;//鏄惁鏈夊簲绛�
+        midRs.maxSendTimes = null ;//鍛戒护鏈�澶у彂閫佹鏁�(褰撴敹涓嶅埌搴旂瓟鏃讹紝灏嗛噸鍙�)锛屽鏋滀笉璁剧疆锛屽懡浠ょ紦瀛樺櫒杩涜琛ュ厖璁剧疆
+        midRs.isCachForOffLine = false ;//RTU涓嶅湪绾匡紝鍛戒护鏄惁缂撳瓨锛屼綆鍔熻�楁椂涓簍rue
+
+        if(isLowPower != null && isLowPower.booleanValue()){
+            //浣庡姛鑰楁椂锛屽敖蹇彂閫�
+            midRs.isQuickSend = true ;
+        }
+
+        return new MidResult[]{midRs} ;
+    }
+
+
+    /**
+     * 鏋勯�犱笅琛屾暟鎹�
+     * @param midRs 鍙傛暟
+     * @param para 鍙傛暟
+     * @return 瀛楄妭鏁扮粍
+     * @throws Exception 寮傚父
+     */
+    public byte[] doParse(MidResultToRtu midRs, ParseParamsForDownV2 para) throws Exception {
+        byte[] preBytes = new byte[ProtocolConstantV206V2.UG_lenHead2RtuAddr] ;
+        byte index = 0 ;
+        preBytes[index] = ProtocolConstantV206V2.UG_P_Head_Byte ;
+
+        index++ ;
+        preBytes[index] = 0 ;//甯ч暱搴�
+        index++ ;
+        preBytes[index] = 0 ;//甯ч暱搴�
+
+        index++ ;
+        preBytes[index] = ProtocolConstantV206V2.UG_P_Head_Byte ;
+
+        index++ ;
+        ByteUtil.hex2Bytes(para.commandCode, preBytes, index) ;
+
+        index += 2 ;
+        GlCreate.createRtuAddr4PUg(para.rtuAddr, preBytes, index);
+
+        byte[] bsTail = GlCreate.createCrcTail4Ug(preBytes) ;//CRC鍜屽熬鍙犲姞瀛楄妭鏁扮粍涓�
+
+        return ByteUtil.bytesMerge(preBytes, bsTail) ;
+    }
+
+}
+
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_21_Down.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_21_Down.java
index 329e340..431b97f 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_21_Down.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_21_Down.java
@@ -84,7 +84,7 @@
             bsHead[index] = commonV_1.createCtrl((byte)0, (byte)0) ;
 
             index++ ;
-            GlCreate.createRtuAddr(para.rtuAddr, bsHead, index);
+            GlCreate.createRtuAddr4P206(para.rtuAddr, bsHead, index);
             index += 5 ;
 
             ByteUtil.hex2Bytes(para.commandCode, bsHead, index) ;
@@ -106,7 +106,7 @@
 
             GlCreate.createLen(bytes);//闀垮害鏀惧瓧鑺傛暟缁勪腑
 
-            byte[] bsTail = GlCreate.createCrcTail(bytes) ;//CRC鍜屽熬鍙犲姞瀛楄妭鏁扮粍涓�
+            byte[] bsTail = GlCreate.createCrcTail4P206(bytes) ;//CRC鍜屽熬鍙犲姞瀛楄妭鏁扮粍涓�
 
             bytes = ByteUtil.bytesMerge(bytes, bsTail) ;
 
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_21_Up.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_21_Up.java
index 83574ef..f431c21 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_21_Up.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_21_Up.java
@@ -27,7 +27,7 @@
     @Override
     public MidResult[] parse(Boolean isLowPower, CodeParseParams params, CodeParseCallback callback)throws Exception {
         ParseParamsForUpV2 para = (ParseParamsForUpV2)params ;
-        int bsLen = new CommonV2().parseDataLen(para.upBuffer) ;
+        int bsLen = new CommonV2().parseDataLen4P206(para.upBuffer) ;
         if(bsLen > 0){
             this.doParse(para.upBuffer,
                     bsLen,
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_36_Down.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_36_Down.java
index 2647f44..6957e7f 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_36_Down.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_36_Down.java
@@ -63,7 +63,7 @@
         bsHead[index] = commonV_1.createCtrl((byte)0, (byte)0) ;
 
         index++ ;
-        GlCreate.createRtuAddr(para.rtuAddr, bsHead, index);
+        GlCreate.createRtuAddr4P206(para.rtuAddr, bsHead, index);
         index += 5 ;
 
         ByteUtil.hex2Bytes(para.commandCode, bsHead, index) ;
@@ -92,7 +92,7 @@
 
         GlCreate.createLen(bytes);//闀垮害鏀惧瓧鑺傛暟缁勪腑
 
-        byte[] bsTail = GlCreate.createCrcTail(bytes) ;//CRC鍜屽熬鍙犲姞瀛楄妭鏁扮粍涓�
+        byte[] bsTail = GlCreate.createCrcTail4P206(bytes) ;//CRC鍜屽熬鍙犲姞瀛楄妭鏁扮粍涓�
 
         bytes = ByteUtil.bytesMerge(bytes, bsTail) ;
 
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_36_Up.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_36_Up.java
index 8277a5d..953b75d 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_36_Up.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_36_Up.java
@@ -26,7 +26,7 @@
     @Override
     public MidResult[] parse(Boolean isLowPower, CodeParseParams params, CodeParseCallback callback)throws Exception {
         ParseParamsForUpV2 para = (ParseParamsForUpV2)params ;
-        int bsLen = new CommonV2().parseDataLen(para.upBuffer) ;
+        int bsLen = new CommonV2().parseDataLen4P206(para.upBuffer) ;
         if(bsLen > 0){
             this.doParse(para.upBuffer,
                     bsLen,
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_37_Down.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_37_Down.java
index c8b4557..3ddb785 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_37_Down.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_37_Down.java
@@ -81,7 +81,7 @@
             bsHead[index] = commonV_1.createCtrl((byte) 0, (byte) 0);
 
             index++;
-            GlCreate.createRtuAddr(para.rtuAddr, bsHead, index);
+            GlCreate.createRtuAddr4P206(para.rtuAddr, bsHead, index);
             index += 5;
 
             ByteUtil.hex2Bytes(para.commandCode, bsHead, index);
@@ -97,7 +97,7 @@
 
             GlCreate.createLen(bytes);//闀垮害鏀惧瓧鑺傛暟缁勪腑
 
-            byte[] bsTail = GlCreate.createCrcTail(bytes);//CRC鍜屽熬鍙犲姞瀛楄妭鏁扮粍涓�
+            byte[] bsTail = GlCreate.createCrcTail4P206(bytes);//CRC鍜屽熬鍙犲姞瀛楄妭鏁扮粍涓�
 
             bytes = ByteUtil.bytesMerge(bytes, bsTail);
 
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_37_Up.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_37_Up.java
index 9ced353..2357a8e 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_37_Up.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_37_Up.java
@@ -26,7 +26,7 @@
     @Override
     public MidResult[] parse(Boolean isLowPower, CodeParseParams params, CodeParseCallback callback)throws Exception {
         ParseParamsForUpV2 para = (ParseParamsForUpV2)params ;
-        int bsLen = new CommonV2().parseDataLen(para.upBuffer) ;
+        int bsLen = new CommonV2().parseDataLen4P206(para.upBuffer) ;
         if(bsLen > 0){
             this.doParse(para.upBuffer,
                     bsLen,
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_38_Down.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_38_Down.java
index 2cca9d1..585dbc6 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_38_Down.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_38_Down.java
@@ -80,7 +80,7 @@
             bsHead[index] = commonV_1.createCtrl((byte) 0, (byte) 0);
 
             index++;
-            GlCreate.createRtuAddr(para.rtuAddr, bsHead, index);
+            GlCreate.createRtuAddr4P206(para.rtuAddr, bsHead, index);
             index += 5;
 
             ByteUtil.hex2Bytes(para.commandCode, bsHead, index);
@@ -105,7 +105,7 @@
 
             GlCreate.createLen(bytes);//闀垮害鏀惧瓧鑺傛暟缁勪腑
 
-            byte[] bsTail = GlCreate.createCrcTail(bytes);//CRC鍜屽熬鍙犲姞瀛楄妭鏁扮粍涓�
+            byte[] bsTail = GlCreate.createCrcTail4P206(bytes);//CRC鍜屽熬鍙犲姞瀛楄妭鏁扮粍涓�
 
             bytes = ByteUtil.bytesMerge(bytes, bsTail);
 
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_38_Up.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_38_Up.java
index cf7218b..fe623ce 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_38_Up.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_38_Up.java
@@ -26,7 +26,7 @@
     @Override
     public MidResult[] parse(Boolean isLowPower, CodeParseParams params, CodeParseCallback callback)throws Exception {
         ParseParamsForUpV2 para = (ParseParamsForUpV2)params ;
-        int bsLen = new CommonV2().parseDataLen(para.upBuffer) ;
+        int bsLen = new CommonV2().parseDataLen4P206(para.upBuffer) ;
         if(bsLen > 0){
             this.doParse(para.upBuffer,
                     bsLen,
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_39_Down.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_39_Down.java
index c0a4aa3..f1fa4ba 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_39_Down.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_39_Down.java
@@ -81,7 +81,7 @@
             bsHead[index] = commonV_1.createCtrl((byte) 0, (byte) 0);
 
             index++;
-            GlCreate.createRtuAddr(para.rtuAddr, bsHead, index);
+            GlCreate.createRtuAddr4P206(para.rtuAddr, bsHead, index);
             index += 5;
 
             ByteUtil.hex2Bytes(para.commandCode, bsHead, index);
@@ -99,7 +99,7 @@
 
             GlCreate.createLen(bytes);//闀垮害鏀惧瓧鑺傛暟缁勪腑
 
-            byte[] bsTail = GlCreate.createCrcTail(bytes);//CRC鍜屽熬鍙犲姞瀛楄妭鏁扮粍涓�
+            byte[] bsTail = GlCreate.createCrcTail4P206(bytes);//CRC鍜屽熬鍙犲姞瀛楄妭鏁扮粍涓�
 
             bytes = ByteUtil.bytesMerge(bytes, bsTail);
 
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_39_Up.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_39_Up.java
index 6ad3d7e..c63b59a 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_39_Up.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_39_Up.java
@@ -26,7 +26,7 @@
     @Override
     public MidResult[] parse(Boolean isLowPower, CodeParseParams params, CodeParseCallback callback)throws Exception {
         ParseParamsForUpV2 para = (ParseParamsForUpV2)params ;
-        int bsLen = new CommonV2().parseDataLen(para.upBuffer) ;
+        int bsLen = new CommonV2().parseDataLen4P206(para.upBuffer) ;
         if(bsLen > 0){
             this.doParse(para.upBuffer,
                     bsLen,
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_3A_Down.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_3A_Down.java
index c8ea469..d46fafe 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_3A_Down.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_3A_Down.java
@@ -81,7 +81,7 @@
             bsHead[index] = commonV_1.createCtrl((byte) 0, (byte) 0);
 
             index++;
-            GlCreate.createRtuAddr(para.rtuAddr, bsHead, index);
+            GlCreate.createRtuAddr4P206(para.rtuAddr, bsHead, index);
             index += 5;
 
             ByteUtil.hex2Bytes(para.commandCode, bsHead, index);
@@ -99,7 +99,7 @@
 
             GlCreate.createLen(bytes);//闀垮害鏀惧瓧鑺傛暟缁勪腑
 
-            byte[] bsTail = GlCreate.createCrcTail(bytes);//CRC鍜屽熬鍙犲姞瀛楄妭鏁扮粍涓�
+            byte[] bsTail = GlCreate.createCrcTail4P206(bytes);//CRC鍜屽熬鍙犲姞瀛楄妭鏁扮粍涓�
 
             bytes = ByteUtil.bytesMerge(bytes, bsTail);
 
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_3A_Up.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_3A_Up.java
index 28f5f9b..129907a 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_3A_Up.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_3A_Up.java
@@ -26,7 +26,7 @@
     @Override
     public MidResult[] parse(Boolean isLowPower, CodeParseParams params, CodeParseCallback callback)throws Exception {
         ParseParamsForUpV2 para = (ParseParamsForUpV2)params ;
-        int bsLen = new CommonV2().parseDataLen(para.upBuffer) ;
+        int bsLen = new CommonV2().parseDataLen4P206(para.upBuffer) ;
         if(bsLen > 0){
             this.doParse(para.upBuffer,
                     bsLen,
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_3B_Down.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_3B_Down.java
index 359a9f7..025d53f 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_3B_Down.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_3B_Down.java
@@ -81,7 +81,7 @@
             bsHead[index] = commonV_1.createCtrl((byte) 0, (byte) 0);
 
             index++;
-            GlCreate.createRtuAddr(para.rtuAddr, bsHead, index);
+            GlCreate.createRtuAddr4P206(para.rtuAddr, bsHead, index);
             index += 5;
 
             ByteUtil.hex2Bytes(para.commandCode, bsHead, index);
@@ -97,7 +97,7 @@
 
             GlCreate.createLen(bytes);//闀垮害鏀惧瓧鑺傛暟缁勪腑
 
-            byte[] bsTail = GlCreate.createCrcTail(bytes);//CRC鍜屽熬鍙犲姞瀛楄妭鏁扮粍涓�
+            byte[] bsTail = GlCreate.createCrcTail4P206(bytes);//CRC鍜屽熬鍙犲姞瀛楄妭鏁扮粍涓�
 
             bytes = ByteUtil.bytesMerge(bytes, bsTail);
 
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_3B_Up.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_3B_Up.java
index d270f86..171c04b 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_3B_Up.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_3B_Up.java
@@ -26,7 +26,7 @@
     @Override
     public MidResult[] parse(Boolean isLowPower, CodeParseParams params, CodeParseCallback callback)throws Exception {
         ParseParamsForUpV2 para = (ParseParamsForUpV2)params ;
-        int bsLen = new CommonV2().parseDataLen(para.upBuffer) ;
+        int bsLen = new CommonV2().parseDataLen4P206(para.upBuffer) ;
         if(bsLen > 0){
             this.doParse(para.upBuffer,
                     bsLen,
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_3C_Down.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_3C_Down.java
index 1958647..d10d426 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_3C_Down.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_3C_Down.java
@@ -81,7 +81,7 @@
             bsHead[index] = commonV_1.createCtrl((byte) 0, (byte) 0);
 
             index++;
-            GlCreate.createRtuAddr(para.rtuAddr, bsHead, index);
+            GlCreate.createRtuAddr4P206(para.rtuAddr, bsHead, index);
             index += 5;
 
             ByteUtil.hex2Bytes(para.commandCode, bsHead, index);
@@ -97,7 +97,7 @@
 
             GlCreate.createLen(bytes);//闀垮害鏀惧瓧鑺傛暟缁勪腑
 
-            byte[] bsTail = GlCreate.createCrcTail(bytes);//CRC鍜屽熬鍙犲姞瀛楄妭鏁扮粍涓�
+            byte[] bsTail = GlCreate.createCrcTail4P206(bytes);//CRC鍜屽熬鍙犲姞瀛楄妭鏁扮粍涓�
 
             bytes = ByteUtil.bytesMerge(bytes, bsTail);
 
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_3C_Up.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_3C_Up.java
index 60fe17b..a180c9c 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_3C_Up.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_3C_Up.java
@@ -26,7 +26,7 @@
     @Override
     public MidResult[] parse(Boolean isLowPower, CodeParseParams params, CodeParseCallback callback)throws Exception {
         ParseParamsForUpV2 para = (ParseParamsForUpV2)params ;
-        int bsLen = new CommonV2().parseDataLen(para.upBuffer) ;
+        int bsLen = new CommonV2().parseDataLen4P206(para.upBuffer) ;
         if(bsLen > 0){
             this.doParse(para.upBuffer,
                     bsLen,
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_3D_Down.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_3D_Down.java
index 4d95dab..0aea340 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_3D_Down.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_3D_Down.java
@@ -63,7 +63,7 @@
         bsHead[index] = commonV_1.createCtrl((byte)0, (byte)0) ;
 
         index++ ;
-        GlCreate.createRtuAddr(para.rtuAddr, bsHead, index);
+        GlCreate.createRtuAddr4P206(para.rtuAddr, bsHead, index);
         index += 5 ;
 
         ByteUtil.hex2Bytes(para.commandCode, bsHead, index) ;
@@ -85,7 +85,7 @@
 
         GlCreate.createLen(bytes);//闀垮害鏀惧瓧鑺傛暟缁勪腑
 
-        byte[] bsTail = GlCreate.createCrcTail(bytes) ;//CRC鍜屽熬鍙犲姞瀛楄妭鏁扮粍涓�
+        byte[] bsTail = GlCreate.createCrcTail4P206(bytes) ;//CRC鍜屽熬鍙犲姞瀛楄妭鏁扮粍涓�
 
         bytes = ByteUtil.bytesMerge(bytes, bsTail) ;
 
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_3D_Up.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_3D_Up.java
index 6038b85..3c46061 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_3D_Up.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_3D_Up.java
@@ -26,7 +26,7 @@
     @Override
     public MidResult[] parse(Boolean isLowPower, CodeParseParams params, CodeParseCallback callback)throws Exception {
         ParseParamsForUpV2 para = (ParseParamsForUpV2)params ;
-        int bsLen = new CommonV2().parseDataLen(para.upBuffer) ;
+        int bsLen = new CommonV2().parseDataLen4P206(para.upBuffer) ;
         if(bsLen > 0){
             this.doParse(para.upBuffer,
                     bsLen,
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_51_Down.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_51_Down.java
index aaeb0fe..7c75b5a 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_51_Down.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_51_Down.java
@@ -62,7 +62,7 @@
         bsHead[index] = commonV_1.createCtrl((byte)0, (byte)0) ;
 
         index++ ;
-        GlCreate.createRtuAddr(para.rtuAddr, bsHead, index);
+        GlCreate.createRtuAddr4P206(para.rtuAddr, bsHead, index);
         index += 5 ;
 
         ByteUtil.hex2Bytes(para.commandCode, bsHead, index) ;
@@ -71,7 +71,7 @@
 
         GlCreate.createLen(bytes);//闀垮害鏀惧瓧鑺傛暟缁勪腑
 
-        byte[] bsTail = GlCreate.createCrcTail(bytes) ;//CRC鍜屽熬鍙犲姞瀛楄妭鏁扮粍涓�
+        byte[] bsTail = GlCreate.createCrcTail4P206(bytes) ;//CRC鍜屽熬鍙犲姞瀛楄妭鏁扮粍涓�
 
         bytes = ByteUtil.bytesMerge(bytes, bsTail) ;
 
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_51_Up.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_51_Up.java
index 9ad1b8a..6137c20 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_51_Up.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_51_Up.java
@@ -26,7 +26,7 @@
     @Override
     public MidResult[] parse(Boolean isLowPower, CodeParseParams params, CodeParseCallback callback)throws Exception {
         ParseParamsForUpV2 para = (ParseParamsForUpV2)params ;
-        int bsLen = new CommonV2().parseDataLen(para.upBuffer) ;
+        int bsLen = new CommonV2().parseDataLen4P206(para.upBuffer) ;
         if(bsLen > 0){
             this.doParse(para.upBuffer,
                     bsLen,
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_5E_Down.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_5E_Down.java
index d3869d5..0824395 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_5E_Down.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_5E_Down.java
@@ -62,7 +62,7 @@
         bsHead[index] = commonV_1.createCtrl((byte)0, (byte)0) ;
 
         index++ ;
-        GlCreate.createRtuAddr(para.rtuAddr, bsHead, index);
+        GlCreate.createRtuAddr4P206(para.rtuAddr, bsHead, index);
         index += 5 ;
 
         ByteUtil.hex2Bytes(para.commandCode, bsHead, index) ;
@@ -71,7 +71,7 @@
 
         GlCreate.createLen(bytes);//闀垮害鏀惧瓧鑺傛暟缁勪腑
 
-        byte[] bsTail = GlCreate.createCrcTail(bytes) ;//CRC鍜屽熬鍙犲姞瀛楄妭鏁扮粍涓�
+        byte[] bsTail = GlCreate.createCrcTail4P206(bytes) ;//CRC鍜屽熬鍙犲姞瀛楄妭鏁扮粍涓�
 
         bytes = ByteUtil.bytesMerge(bytes, bsTail) ;
 
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_5E_Up.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_5E_Up.java
index 06d497c..5f8f979 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_5E_Up.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_5E_Up.java
@@ -26,7 +26,7 @@
     @Override
     public MidResult[] parse(Boolean isLowPower, CodeParseParams params, CodeParseCallback callback)throws Exception {
         ParseParamsForUpV2 para = (ParseParamsForUpV2)params ;
-        int bsLen = new CommonV2().parseDataLen(para.upBuffer) ;
+        int bsLen = new CommonV2().parseDataLen4P206(para.upBuffer) ;
         if(bsLen > 0){
             this.doParse(para.upBuffer,
                     bsLen,
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_65_Down.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_65_Down.java
index 5c7d953..711da69 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_65_Down.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_65_Down.java
@@ -62,7 +62,7 @@
         bsHead[index] = commonV_1.createCtrl((byte)0, (byte)0) ;
 
         index++ ;
-        GlCreate.createRtuAddr(para.rtuAddr, bsHead, index);
+        GlCreate.createRtuAddr4P206(para.rtuAddr, bsHead, index);
         index += 5 ;
 
         ByteUtil.hex2Bytes(para.commandCode, bsHead, index) ;
@@ -71,7 +71,7 @@
 
         GlCreate.createLen(bytes);//闀垮害鏀惧瓧鑺傛暟缁勪腑
 
-        byte[] bsTail = GlCreate.createCrcTail(bytes) ;//CRC鍜屽熬鍙犲姞瀛楄妭鏁扮粍涓�
+        byte[] bsTail = GlCreate.createCrcTail4P206(bytes) ;//CRC鍜屽熬鍙犲姞瀛楄妭鏁扮粍涓�
 
         bytes = ByteUtil.bytesMerge(bytes, bsTail) ;
 
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_65_Up.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_65_Up.java
index 088de81..a10069d 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_65_Up.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_65_Up.java
@@ -26,7 +26,7 @@
     @Override
     public MidResult[] parse(Boolean isLowPower, CodeParseParams params, CodeParseCallback callback)throws Exception {
         ParseParamsForUpV2 para = (ParseParamsForUpV2)params ;
-        int bsLen = new CommonV2().parseDataLen(para.upBuffer) ;
+        int bsLen = new CommonV2().parseDataLen4P206(para.upBuffer) ;
         if(bsLen > 0){
             this.doParse(para.upBuffer,
                     bsLen,
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_66_Down.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_66_Down.java
index b12bf34..ae8abd6 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_66_Down.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_66_Down.java
@@ -64,7 +64,7 @@
         bsHead[index] = commonV_1.createCtrl((byte)0, (byte)0) ;
 
         index++ ;
-        GlCreate.createRtuAddr(para.rtuAddr, bsHead, index);
+        GlCreate.createRtuAddr4P206(para.rtuAddr, bsHead, index);
         index += 5 ;
 
         ByteUtil.hex2Bytes(para.commandCode, bsHead, index) ;
@@ -73,7 +73,7 @@
 
         GlCreate.createLen(bytes);//闀垮害鏀惧瓧鑺傛暟缁勪腑
 
-        byte[] bsTail = GlCreate.createCrcTail(bytes) ;//CRC鍜屽熬鍙犲姞瀛楄妭鏁扮粍涓�
+        byte[] bsTail = GlCreate.createCrcTail4P206(bytes) ;//CRC鍜屽熬鍙犲姞瀛楄妭鏁扮粍涓�
 
         bytes = ByteUtil.bytesMerge(bytes, bsTail) ;
 
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_66_Up.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_66_Up.java
index 963bdcf..b916b1d 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_66_Up.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_66_Up.java
@@ -27,7 +27,7 @@
     @Override
     public MidResult[] parse(Boolean isLowPower, CodeParseParams params, CodeParseCallback callback)throws Exception {
         ParseParamsForUpV2 para = (ParseParamsForUpV2)params ;
-        int bsLen = new CommonV2().parseDataLen(para.upBuffer) ;
+        int bsLen = new CommonV2().parseDataLen4P206(para.upBuffer) ;
         if(bsLen > 0){
             this.doParse(para.upBuffer,
                     bsLen,
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_67_Down.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_67_Down.java
index 21ccbeb..a42dd78 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_67_Down.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_67_Down.java
@@ -62,7 +62,7 @@
         bsHead[index] = commonV_1.createCtrl((byte)0, (byte)0) ;
 
         index++ ;
-        GlCreate.createRtuAddr(para.rtuAddr, bsHead, index);
+        GlCreate.createRtuAddr4P206(para.rtuAddr, bsHead, index);
         index += 5 ;
 
         ByteUtil.hex2Bytes(para.commandCode, bsHead, index) ;
@@ -71,7 +71,7 @@
 
         GlCreate.createLen(bytes);//闀垮害鏀惧瓧鑺傛暟缁勪腑
 
-        byte[] bsTail = GlCreate.createCrcTail(bytes) ;//CRC鍜屽熬鍙犲姞瀛楄妭鏁扮粍涓�
+        byte[] bsTail = GlCreate.createCrcTail4P206(bytes) ;//CRC鍜屽熬鍙犲姞瀛楄妭鏁扮粍涓�
 
         bytes = ByteUtil.bytesMerge(bytes, bsTail) ;
 
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_67_Up.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_67_Up.java
index 93f8c01..47f05f0 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_67_Up.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_67_Up.java
@@ -26,7 +26,7 @@
     @Override
     public MidResult[] parse(Boolean isLowPower, CodeParseParams params, CodeParseCallback callback)throws Exception {
         ParseParamsForUpV2 para = (ParseParamsForUpV2)params ;
-        int bsLen = new CommonV2().parseDataLen(para.upBuffer) ;
+        int bsLen = new CommonV2().parseDataLen4P206(para.upBuffer) ;
         if(bsLen > 0){
             this.doParse(para.upBuffer,
                     bsLen,
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_68_Down.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_68_Down.java
index 30bdd70..af95a97 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_68_Down.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_68_Down.java
@@ -62,7 +62,7 @@
         bsHead[index] = commonV_1.createCtrl((byte)0, (byte)0) ;
 
         index++ ;
-        GlCreate.createRtuAddr(para.rtuAddr, bsHead, index);
+        GlCreate.createRtuAddr4P206(para.rtuAddr, bsHead, index);
         index += 5 ;
 
         ByteUtil.hex2Bytes(para.commandCode, bsHead, index) ;
@@ -71,7 +71,7 @@
 
         GlCreate.createLen(bytes);//闀垮害鏀惧瓧鑺傛暟缁勪腑
 
-        byte[] bsTail = GlCreate.createCrcTail(bytes) ;//CRC鍜屽熬鍙犲姞瀛楄妭鏁扮粍涓�
+        byte[] bsTail = GlCreate.createCrcTail4P206(bytes) ;//CRC鍜屽熬鍙犲姞瀛楄妭鏁扮粍涓�
 
         bytes = ByteUtil.bytesMerge(bytes, bsTail) ;
 
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_68_Up.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_68_Up.java
index c0ba79d..1b80feb 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_68_Up.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_68_Up.java
@@ -26,7 +26,7 @@
     @Override
     public MidResult[] parse(Boolean isLowPower, CodeParseParams params, CodeParseCallback callback)throws Exception {
         ParseParamsForUpV2 para = (ParseParamsForUpV2)params ;
-        int bsLen = new CommonV2().parseDataLen(para.upBuffer) ;
+        int bsLen = new CommonV2().parseDataLen4P206(para.upBuffer) ;
         if(bsLen > 0){
             this.doParse(para.upBuffer,
                     bsLen,
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_69_Down.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_69_Down.java
index 43c68f7..c455a27 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_69_Down.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_69_Down.java
@@ -62,7 +62,7 @@
         bsHead[index] = commonV_1.createCtrl((byte)0, (byte)0) ;
 
         index++ ;
-        GlCreate.createRtuAddr(para.rtuAddr, bsHead, index);
+        GlCreate.createRtuAddr4P206(para.rtuAddr, bsHead, index);
         index += 5 ;
 
         ByteUtil.hex2Bytes(para.commandCode, bsHead, index) ;
@@ -71,7 +71,7 @@
 
         GlCreate.createLen(bytes);//闀垮害鏀惧瓧鑺傛暟缁勪腑
 
-        byte[] bsTail = GlCreate.createCrcTail(bytes) ;//CRC鍜屽熬鍙犲姞瀛楄妭鏁扮粍涓�
+        byte[] bsTail = GlCreate.createCrcTail4P206(bytes) ;//CRC鍜屽熬鍙犲姞瀛楄妭鏁扮粍涓�
 
         bytes = ByteUtil.bytesMerge(bytes, bsTail) ;
 
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_69_Up.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_69_Up.java
index 5c8c07e..dcc790b 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_69_Up.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_69_Up.java
@@ -26,7 +26,7 @@
     @Override
     public MidResult[] parse(Boolean isLowPower, CodeParseParams params, CodeParseCallback callback)throws Exception {
         ParseParamsForUpV2 para = (ParseParamsForUpV2)params ;
-        int bsLen = new CommonV2().parseDataLen(para.upBuffer) ;
+        int bsLen = new CommonV2().parseDataLen4P206(para.upBuffer) ;
         if(bsLen > 0){
             this.doParse(para.upBuffer,
                     bsLen,
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_6A_Down.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_6A_Down.java
index 5064b82..0fb0be7 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_6A_Down.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_6A_Down.java
@@ -62,7 +62,7 @@
         bsHead[index] = commonV_1.createCtrl((byte)0, (byte)0) ;
 
         index++ ;
-        GlCreate.createRtuAddr(para.rtuAddr, bsHead, index);
+        GlCreate.createRtuAddr4P206(para.rtuAddr, bsHead, index);
         index += 5 ;
 
         ByteUtil.hex2Bytes(para.commandCode, bsHead, index) ;
@@ -71,7 +71,7 @@
 
         GlCreate.createLen(bytes);//闀垮害鏀惧瓧鑺傛暟缁勪腑
 
-        byte[] bsTail = GlCreate.createCrcTail(bytes) ;//CRC鍜屽熬鍙犲姞瀛楄妭鏁扮粍涓�
+        byte[] bsTail = GlCreate.createCrcTail4P206(bytes) ;//CRC鍜屽熬鍙犲姞瀛楄妭鏁扮粍涓�
 
         bytes = ByteUtil.bytesMerge(bytes, bsTail) ;
 
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_6A_Up.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_6A_Up.java
index f42b986..510a411 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_6A_Up.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_6A_Up.java
@@ -27,7 +27,7 @@
     @Override
     public MidResult[] parse(Boolean isLowPower, CodeParseParams params, CodeParseCallback callback)throws Exception {
         ParseParamsForUpV2 para = (ParseParamsForUpV2)params ;
-        int bsLen = new CommonV2().parseDataLen(para.upBuffer) ;
+        int bsLen = new CommonV2().parseDataLen4P206(para.upBuffer) ;
         if(bsLen > 0){
             this.doParse(para.upBuffer,
                     bsLen,
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_6B_Down.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_6B_Down.java
index 436ca71..ae5a2f0 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_6B_Down.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_6B_Down.java
@@ -62,7 +62,7 @@
         bsHead[index] = commonV_1.createCtrl((byte)0, (byte)0) ;
 
         index++ ;
-        GlCreate.createRtuAddr(para.rtuAddr, bsHead, index);
+        GlCreate.createRtuAddr4P206(para.rtuAddr, bsHead, index);
         index += 5 ;
 
         ByteUtil.hex2Bytes(para.commandCode, bsHead, index) ;
@@ -71,7 +71,7 @@
 
         GlCreate.createLen(bytes);//闀垮害鏀惧瓧鑺傛暟缁勪腑
 
-        byte[] bsTail = GlCreate.createCrcTail(bytes) ;//CRC鍜屽熬鍙犲姞瀛楄妭鏁扮粍涓�
+        byte[] bsTail = GlCreate.createCrcTail4P206(bytes) ;//CRC鍜屽熬鍙犲姞瀛楄妭鏁扮粍涓�
 
         bytes = ByteUtil.bytesMerge(bytes, bsTail) ;
 
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_6B_Up.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_6B_Up.java
index e7e3b34..4185e33 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_6B_Up.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_6B_Up.java
@@ -27,7 +27,7 @@
     @Override
     public MidResult[] parse(Boolean isLowPower, CodeParseParams params, CodeParseCallback callback)throws Exception {
         ParseParamsForUpV2 para = (ParseParamsForUpV2)params ;
-        int bsLen = new CommonV2().parseDataLen(para.upBuffer) ;
+        int bsLen = new CommonV2().parseDataLen4P206(para.upBuffer) ;
         if(bsLen > 0){
             this.doParse(para.upBuffer,
                     bsLen,
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_6D_Down.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_6D_Down.java
index 0b8d1d9..2f70ad6 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_6D_Down.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_6D_Down.java
@@ -62,7 +62,7 @@
         bsHead[index] = commonV_1.createCtrl((byte)0, (byte)0) ;
 
         index++ ;
-        GlCreate.createRtuAddr(para.rtuAddr, bsHead, index);
+        GlCreate.createRtuAddr4P206(para.rtuAddr, bsHead, index);
         index += 5 ;
 
         ByteUtil.hex2Bytes(para.commandCode, bsHead, index) ;
@@ -71,7 +71,7 @@
 
         GlCreate.createLen(bytes);//闀垮害鏀惧瓧鑺傛暟缁勪腑
 
-        byte[] bsTail = GlCreate.createCrcTail(bytes) ;//CRC鍜屽熬鍙犲姞瀛楄妭鏁扮粍涓�
+        byte[] bsTail = GlCreate.createCrcTail4P206(bytes) ;//CRC鍜屽熬鍙犲姞瀛楄妭鏁扮粍涓�
 
         bytes = ByteUtil.bytesMerge(bytes, bsTail) ;
 
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_6D_Up.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_6D_Up.java
index 638f676..e212236 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_6D_Up.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_6D_Up.java
@@ -26,7 +26,7 @@
     @Override
     public MidResult[] parse(Boolean isLowPower, CodeParseParams params, CodeParseCallback callback)throws Exception {
         ParseParamsForUpV2 para = (ParseParamsForUpV2)params ;
-        int bsLen = new CommonV2().parseDataLen(para.upBuffer) ;
+        int bsLen = new CommonV2().parseDataLen4P206(para.upBuffer) ;
         if(bsLen > 0){
             this.doParse(para.upBuffer,
                     bsLen,
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_81_Down.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_81_Down.java
index 55eee92..521078e 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_81_Down.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_81_Down.java
@@ -59,7 +59,7 @@
         bsHead[index] = commonV_1.createCtrl((byte)0, (byte)0) ;
 
         index++ ;
-        GlCreate.createRtuAddr(para.rtuAddr, bsHead, index);
+        GlCreate.createRtuAddr4P206(para.rtuAddr, bsHead, index);
         index += 5 ;
 
         ByteUtil.hex2Bytes(para.commandCode, bsHead, index) ;
@@ -74,7 +74,7 @@
 
         GlCreate.createLen(bytes);//闀垮害鏀惧瓧鑺傛暟缁勪腑
 
-        byte[] bsTail = GlCreate.createCrcTail(bytes) ;//CRC鍜屽熬鍙犲姞瀛楄妭鏁扮粍涓�
+        byte[] bsTail = GlCreate.createCrcTail4P206(bytes) ;//CRC鍜屽熬鍙犲姞瀛楄妭鏁扮粍涓�
 
         bytes = ByteUtil.bytesMerge(bytes, bsTail) ;
 
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_81_Up.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_81_Up.java
index 97b434d..ddb2004 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_81_Up.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_81_Up.java
@@ -23,7 +23,7 @@
     @Override
     public MidResult[] parse(Boolean isLowPower, CodeParseParams params, CodeParseCallback callback)throws Exception {
         ParseParamsForUpV2 para = (ParseParamsForUpV2)params ;
-        int bsLen = new CommonV2().parseDataLen(para.upBuffer) ;
+        int bsLen = new CommonV2().parseDataLen4P206(para.upBuffer) ;
         if(bsLen > 0){
             this.doParse(para.upBuffer,
                     bsLen,
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_83_Down.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_83_Down.java
index a3b6840..300cd65 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_83_Down.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_83_Down.java
@@ -59,7 +59,7 @@
         bsHead[index] = commonV_1.createCtrl((byte)0, (byte)0) ;
 
         index++ ;
-        GlCreate.createRtuAddr(para.rtuAddr, bsHead, index);
+        GlCreate.createRtuAddr4P206(para.rtuAddr, bsHead, index);
         index += 5 ;
 
         ByteUtil.hex2Bytes(para.commandCode, bsHead, index) ;
@@ -75,7 +75,7 @@
 
         GlCreate.createLen(bytes);//闀垮害鏀惧瓧鑺傛暟缁勪腑
 
-        byte[] bsTail = GlCreate.createCrcTail(bytes) ;//CRC鍜屽熬鍙犲姞瀛楄妭鏁扮粍涓�
+        byte[] bsTail = GlCreate.createCrcTail4P206(bytes) ;//CRC鍜屽熬鍙犲姞瀛楄妭鏁扮粍涓�
 
         bytes = ByteUtil.bytesMerge(bytes, bsTail) ;
 
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_83_Up.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_83_Up.java
index 6d2b8c7..1321221 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_83_Up.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_83_Up.java
@@ -24,7 +24,7 @@
     @Override
     public MidResult[] parse(Boolean isLowPower, CodeParseParams params, CodeParseCallback callback)throws Exception {
         ParseParamsForUpV2 para = (ParseParamsForUpV2)params ;
-        int bsLen = new CommonV2().parseDataLen(para.upBuffer) ;
+        int bsLen = new CommonV2().parseDataLen4P206(para.upBuffer) ;
         if(bsLen > 0){
             this.doParse(para.upBuffer,
                     bsLen,
@@ -222,7 +222,7 @@
         Data data = new Data() ;
         data.setSubData(new DataV2()) ;
 
-        int bsLen = new CommonV2().parseDataLen(bs) ;
+        int bsLen = new CommonV2().parseDataLen4P206(bs) ;
         if(bsLen > 0){
             try {
             obj.doParse(bs,
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_84_Down.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_84_Down.java
index cc658e2..f58a5e1 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_84_Down.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_84_Down.java
@@ -59,7 +59,7 @@
         bsHead[index] = commonV_1.createCtrl((byte)0, (byte)0) ;
 
         index++ ;
-        GlCreate.createRtuAddr(para.rtuAddr, bsHead, index);
+        GlCreate.createRtuAddr4P206(para.rtuAddr, bsHead, index);
         index += 5 ;
 
         ByteUtil.hex2Bytes(para.commandCode, bsHead, index) ;
@@ -75,7 +75,7 @@
 
         GlCreate.createLen(bytes);//闀垮害鏀惧瓧鑺傛暟缁勪腑
 
-        byte[] bsTail = GlCreate.createCrcTail(bytes) ;//CRC鍜屽熬鍙犲姞瀛楄妭鏁扮粍涓�
+        byte[] bsTail = GlCreate.createCrcTail4P206(bytes) ;//CRC鍜屽熬鍙犲姞瀛楄妭鏁扮粍涓�
 
         bytes = ByteUtil.bytesMerge(bytes, bsTail) ;
 
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_84_Up.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_84_Up.java
index be8fd85..51b8a5a 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_84_Up.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_84_Up.java
@@ -1,7 +1,7 @@
 package com.dy.common.mw.protocol.p206V2.parse;
 
 import com.dy.common.mw.protocol.*;
-import com.dy.common.mw.protocol.p206V1.CommonV1;
+import com.dy.common.mw.protocol.p206V2.CommonV2;
 import com.dy.common.mw.protocol.p206V2.*;
 import com.dy.common.mw.protocol.p206V2.parse.global.GlParse;
 import com.dy.common.mw.protocol.p206V2.upVos.DataCd84Vo;
@@ -24,7 +24,7 @@
     @Override
     public MidResult[] parse(Boolean isLowPower, CodeParseParams params, CodeParseCallback callback)throws Exception {
         ParseParamsForUpV2 para = (ParseParamsForUpV2)params ;
-        int bsLen = new CommonV2().parseDataLen(para.upBuffer) ;
+        int bsLen = new CommonV2().parseDataLen4P206(para.upBuffer) ;
         if(bsLen > 0){
             this.doParse(para.upBuffer,
                     bsLen,
@@ -80,7 +80,7 @@
         callback.callback(midRs.reportOrResponse_trueOrFalse);
         if(para.data != null && para.data.getSubData() != null){
             DataCd84Vo cdData = (DataCd84Vo)((DataV2)para.data.getSubData()).subData ;
-            if(CommonV1.isCloseValveType(cdData.opType)){
+            if(CommonV2.isCloseValveType(cdData.opType)){
                 callback.notify(new ValveStateInfo(false)) ;
             }else{
                 callback.notify(new ValveStateInfo(true)) ;
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_91_Down.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_91_Down.java
index d9f0d78..ce201df 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_91_Down.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_91_Down.java
@@ -62,7 +62,7 @@
         bsHead[index] = commonV_1.createCtrl((byte)0, (byte)0) ;
 
         index++ ;
-        GlCreate.createRtuAddr(para.rtuAddr, bsHead, index);
+        GlCreate.createRtuAddr4P206(para.rtuAddr, bsHead, index);
         index += 5 ;
 
         ByteUtil.hex2Bytes(para.commandCode, bsHead, index) ;
@@ -76,7 +76,7 @@
 
         GlCreate.createLen(bytes);//闀垮害鏀惧瓧鑺傛暟缁勪腑
 
-        byte[] bsTail = GlCreate.createCrcTail(bytes) ;//CRC鍜屽熬鍙犲姞瀛楄妭鏁扮粍涓�
+        byte[] bsTail = GlCreate.createCrcTail4P206(bytes) ;//CRC鍜屽熬鍙犲姞瀛楄妭鏁扮粍涓�
 
         bytes = ByteUtil.bytesMerge(bytes, bsTail) ;
 
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_91_Up.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_91_Up.java
index e3679f5..a0c45d1 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_91_Up.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_91_Up.java
@@ -21,7 +21,7 @@
     @Override
     public MidResult[] parse(Boolean isLowPower, CodeParseParams params, CodeParseCallback callback)throws Exception {
         ParseParamsForUpV2 para = (ParseParamsForUpV2)params ;
-        int bsLen = new CommonV2().parseDataLen(para.upBuffer) ;
+        int bsLen = new CommonV2().parseDataLen4P206(para.upBuffer) ;
         if(bsLen > 0){
             this.doParse(para.upBuffer,
                     bsLen,
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_92_Down.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_92_Down.java
index 91a2a8e..bf76e15 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_92_Down.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_92_Down.java
@@ -62,7 +62,7 @@
         bsHead[index] = commonV_1.createCtrl((byte)0, (byte)0) ;
 
         index++ ;
-        GlCreate.createRtuAddr(para.rtuAddr, bsHead, index);
+        GlCreate.createRtuAddr4P206(para.rtuAddr, bsHead, index);
         index += 5 ;
 
         ByteUtil.hex2Bytes(para.commandCode, bsHead, index) ;
@@ -78,7 +78,7 @@
 
         GlCreate.createLen(bytes);//闀垮害鏀惧瓧鑺傛暟缁勪腑
 
-        byte[] bsTail = GlCreate.createCrcTail(bytes) ;//CRC鍜屽熬鍙犲姞瀛楄妭鏁扮粍涓�
+        byte[] bsTail = GlCreate.createCrcTail4P206(bytes) ;//CRC鍜屽熬鍙犲姞瀛楄妭鏁扮粍涓�
 
         bytes = ByteUtil.bytesMerge(bytes, bsTail) ;
 
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_92_Up.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_92_Up.java
index a97a04b..48cc463 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_92_Up.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_92_Up.java
@@ -28,7 +28,7 @@
     @Override
     public MidResult[] parse(Boolean isLowPower, CodeParseParams params, CodeParseCallback callback)throws Exception {
         ParseParamsForUpV2 para = (ParseParamsForUpV2)params ;
-        int bsLen = new CommonV2().parseDataLen(para.upBuffer) ;
+        int bsLen = new CommonV2().parseDataLen4P206(para.upBuffer) ;
         if(bsLen > 0){
             this.doParse(para.upBuffer,
                     bsLen,
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_93_Down.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_93_Down.java
index 187daab..66eb34a 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_93_Down.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_93_Down.java
@@ -62,7 +62,7 @@
         bsHead[index] = commonV_1.createCtrl((byte)0, (byte)0) ;
 
         index++ ;
-        GlCreate.createRtuAddr(para.rtuAddr, bsHead, index);
+        GlCreate.createRtuAddr4P206(para.rtuAddr, bsHead, index);
         index += 5 ;
 
         ByteUtil.hex2Bytes(para.commandCode, bsHead, index) ;
@@ -78,7 +78,7 @@
 
         GlCreate.createLen(bytes);//闀垮害鏀惧瓧鑺傛暟缁勪腑
 
-        byte[] bsTail = GlCreate.createCrcTail(bytes) ;//CRC鍜屽熬鍙犲姞瀛楄妭鏁扮粍涓�
+        byte[] bsTail = GlCreate.createCrcTail4P206(bytes) ;//CRC鍜屽熬鍙犲姞瀛楄妭鏁扮粍涓�
 
         bytes = ByteUtil.bytesMerge(bytes, bsTail) ;
 
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_93_Up.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_93_Up.java
index ea0543b..63dfe25 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_93_Up.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_93_Up.java
@@ -28,7 +28,7 @@
     @Override
     public MidResult[] parse(Boolean isLowPower, CodeParseParams params, CodeParseCallback callback)throws Exception {
         ParseParamsForUpV2 para = (ParseParamsForUpV2)params ;
-        int bsLen = new CommonV2().parseDataLen(para.upBuffer) ;
+        int bsLen = new CommonV2().parseDataLen4P206(para.upBuffer) ;
         if(bsLen > 0){
             this.doParse(para.upBuffer,
                     bsLen,
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_9601_Up.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_9601_Up.java
new file mode 100644
index 0000000..c7bba8a
--- /dev/null
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_9601_Up.java
@@ -0,0 +1,73 @@
+package com.dy.common.mw.protocol.p206V2.parse;
+
+import com.dy.common.mw.protocol.*;
+import com.dy.common.mw.protocol.p206V2.*;
+import com.dy.common.mw.protocol.p206V2.upVos.DataCd960XVo;
+import com.dy.common.mw.protocol.rtuState.UpgradeStateInfo;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+
+/**
+ * @Author: liurunyu
+ * @Date: 2024/11/4 10:58
+ * @Description
+ */
+@AnnotationCodeUp(ifAny={
+        CodeV2.cd_9601
+})
+public class Cd_9601_Up implements CodeParse {
+
+    private static final Logger log = LogManager.getLogger(Cd_9601_Up.class);
+
+    /**
+     * 鍒嗘瀽涓婅鏁版嵁
+     */
+    @Override
+    public MidResult[] parse(Boolean isLowPower, CodeParseParams params, CodeParseCallback callback)throws Exception {
+        ParseParamsForUpV2 para = (ParseParamsForUpV2)params ;
+        int bsLen = new CommonV2().parseDataLen4Ug(para.upBuffer) ;
+        if(bsLen > 0){
+            this.doParse(para.upBuffer,
+                    bsLen,
+                    para.upCode,
+                    para.data) ;
+        }
+        log.info("\n鍒嗘瀽鍛戒护搴旂瓟鏁版嵁<" + CodeV2.getCodeName(para.upCode) + " RTU鍦板潃=" + para.rtuAddr + ">:\n" + para.data.toString());
+
+        MidResultFromRtu midRs = new MidResultFromRtu() ;
+        midRs.protocolName = para.protocolName ;//鍗忚鍚嶇О
+        midRs.protocolVersion = para.protocolVersion; //鍗忚鐗堟湰鍙�
+        midRs.rtuAddr = para.rtuAddr ;//Rtu鍦板潃
+        midRs.upCode = para.upCode ;//涓婅鏁版嵁涓殑鍔熻兘鐮�
+        midRs.upHex = para.upHex ;//涓婅鏁版嵁鍗佸叚杩涘埗褰㈠紡
+        midRs.upBuffer = para.upBuffer ;//涓婅鏁版嵁瀛楄妭鏁扮粍
+        midRs.data = para.data ;//瑙f瀽鍚庣殑鏁版嵁
+
+        midRs.reportOrResponse_trueOrFalse = false ;//涓诲姩涓婃姤
+
+        callback.callback(midRs.reportOrResponse_trueOrFalse);
+        if(para.data != null && para.data.getSubData() != null){
+            DataCd960XVo subData = (DataCd960XVo)((DataV2)para.data.getSubData()).subData ;
+            callback.notify(new UpgradeStateInfo(subData.success));
+        }
+        return new MidResult[]{midRs} ;
+    }
+    /**
+     * 鎵ц鍒嗘瀽
+     * @param bs 瀛楄妭鏁扮粍
+     * @param bsLen 瀛楄妭闀垮害锛堟�诲寘闀匡紝鍖呮嫭鍖呭ご鍜屽寘灏撅級
+     * @param dataCode 鍔熻兘鐮�
+     * @param data 鏁版嵁
+     * @throws Exception 寮傚父
+     */
+    protected void doParse(byte[] bs, int bsLen, String dataCode, Data data) throws Exception {
+        DataV2 dV2 = (DataV2)data.getSubData() ;
+        DataCd960XVo cdData = new DataCd960XVo() ;
+        dV2.subData = cdData ;
+        if(bs[ProtocolConstantV206V2.UG_dataIndex] == (byte)0x00){
+            cdData.success = true ;
+        }else{
+            cdData.success = false ;
+        }
+    }
+}
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_9602_Up.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_9602_Up.java
new file mode 100644
index 0000000..83b99d8
--- /dev/null
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_9602_Up.java
@@ -0,0 +1,73 @@
+package com.dy.common.mw.protocol.p206V2.parse;
+
+import com.dy.common.mw.protocol.*;
+import com.dy.common.mw.protocol.p206V2.*;
+import com.dy.common.mw.protocol.p206V2.upVos.DataCd960XVo;
+import com.dy.common.mw.protocol.rtuState.UpgradeStateInfo;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+
+/**
+ * @Author: liurunyu
+ * @Date: 2024/11/4 10:58
+ * @Description
+ */
+@AnnotationCodeUp(ifAny={
+        CodeV2.cd_9602
+})
+public class Cd_9602_Up implements CodeParse {
+
+    private static final Logger log = LogManager.getLogger(Cd_9602_Up.class);
+
+    /**
+     * 鍒嗘瀽涓婅鏁版嵁
+     */
+    @Override
+    public MidResult[] parse(Boolean isLowPower, CodeParseParams params, CodeParseCallback callback)throws Exception {
+        ParseParamsForUpV2 para = (ParseParamsForUpV2)params ;
+        int bsLen = new CommonV2().parseDataLen4Ug(para.upBuffer) ;
+        if(bsLen > 0){
+            this.doParse(para.upBuffer,
+                    bsLen,
+                    para.upCode,
+                    para.data) ;
+        }
+        log.info("\n鍒嗘瀽鍛戒护搴旂瓟鏁版嵁<" + CodeV2.getCodeName(para.upCode) + " RTU鍦板潃=" + para.rtuAddr + ">:\n" + para.data.toString());
+
+        MidResultFromRtu midRs = new MidResultFromRtu() ;
+        midRs.protocolName = para.protocolName ;//鍗忚鍚嶇О
+        midRs.protocolVersion = para.protocolVersion; //鍗忚鐗堟湰鍙�
+        midRs.rtuAddr = para.rtuAddr ;//Rtu鍦板潃
+        midRs.upCode = para.upCode ;//涓婅鏁版嵁涓殑鍔熻兘鐮�
+        midRs.upHex = para.upHex ;//涓婅鏁版嵁鍗佸叚杩涘埗褰㈠紡
+        midRs.upBuffer = para.upBuffer ;//涓婅鏁版嵁瀛楄妭鏁扮粍
+        midRs.data = para.data ;//瑙f瀽鍚庣殑鏁版嵁
+
+        midRs.reportOrResponse_trueOrFalse = false ;//涓诲姩涓婃姤
+
+        callback.callback(midRs.reportOrResponse_trueOrFalse);
+        if(para.data != null && para.data.getSubData() != null){
+            DataCd960XVo subData = (DataCd960XVo)((DataV2)para.data.getSubData()).subData ;
+            callback.notify(new UpgradeStateInfo(subData.success));
+        }
+        return new MidResult[]{midRs} ;
+    }
+    /**
+     * 鎵ц鍒嗘瀽
+     * @param bs 瀛楄妭鏁扮粍
+     * @param bsLen 瀛楄妭闀垮害锛堟�诲寘闀匡紝鍖呮嫭鍖呭ご鍜屽寘灏撅級
+     * @param dataCode 鍔熻兘鐮�
+     * @param data 鏁版嵁
+     * @throws Exception 寮傚父
+     */
+    protected void doParse(byte[] bs, int bsLen, String dataCode, Data data) throws Exception {
+        DataV2 dV2 = (DataV2)data.getSubData() ;
+        DataCd960XVo cdData = new DataCd960XVo() ;
+        dV2.subData = cdData ;
+        if(bs[ProtocolConstantV206V2.UG_dataIndex] == (byte)0x00){
+            cdData.success = true ;
+        }else{
+            cdData.success = false ;
+        }
+    }
+}
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_9603_Up.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_9603_Up.java
new file mode 100644
index 0000000..6f111e1
--- /dev/null
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_9603_Up.java
@@ -0,0 +1,73 @@
+package com.dy.common.mw.protocol.p206V2.parse;
+
+import com.dy.common.mw.protocol.*;
+import com.dy.common.mw.protocol.p206V2.*;
+import com.dy.common.mw.protocol.p206V2.upVos.DataCd960XVo;
+import com.dy.common.mw.protocol.rtuState.UpgradeStateInfo;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+
+/**
+ * @Author: liurunyu
+ * @Date: 2024/11/4 10:58
+ * @Description
+ */
+@AnnotationCodeUp(ifAny={
+        CodeV2.cd_9603
+})
+public class Cd_9603_Up implements CodeParse {
+
+    private static final Logger log = LogManager.getLogger(Cd_9603_Up.class);
+
+    /**
+     * 鍒嗘瀽涓婅鏁版嵁
+     */
+    @Override
+    public MidResult[] parse(Boolean isLowPower, CodeParseParams params, CodeParseCallback callback)throws Exception {
+        ParseParamsForUpV2 para = (ParseParamsForUpV2)params ;
+        int bsLen = new CommonV2().parseDataLen4Ug(para.upBuffer) ;
+        if(bsLen > 0){
+            this.doParse(para.upBuffer,
+                    bsLen,
+                    para.upCode,
+                    para.data) ;
+        }
+        log.info("\n鍒嗘瀽鍛戒护搴旂瓟鏁版嵁<" + CodeV2.getCodeName(para.upCode) + " RTU鍦板潃=" + para.rtuAddr + ">:\n" + para.data.toString());
+
+        MidResultFromRtu midRs = new MidResultFromRtu() ;
+        midRs.protocolName = para.protocolName ;//鍗忚鍚嶇О
+        midRs.protocolVersion = para.protocolVersion; //鍗忚鐗堟湰鍙�
+        midRs.rtuAddr = para.rtuAddr ;//Rtu鍦板潃
+        midRs.upCode = para.upCode ;//涓婅鏁版嵁涓殑鍔熻兘鐮�
+        midRs.upHex = para.upHex ;//涓婅鏁版嵁鍗佸叚杩涘埗褰㈠紡
+        midRs.upBuffer = para.upBuffer ;//涓婅鏁版嵁瀛楄妭鏁扮粍
+        midRs.data = para.data ;//瑙f瀽鍚庣殑鏁版嵁
+
+        midRs.reportOrResponse_trueOrFalse = false ;//涓诲姩涓婃姤
+
+        callback.callback(midRs.reportOrResponse_trueOrFalse);
+        if(para.data != null && para.data.getSubData() != null){
+            DataCd960XVo subData = (DataCd960XVo)((DataV2)para.data.getSubData()).subData ;
+            callback.notify(new UpgradeStateInfo(subData.success));
+        }
+        return new MidResult[]{midRs} ;
+    }
+    /**
+     * 鎵ц鍒嗘瀽
+     * @param bs 瀛楄妭鏁扮粍
+     * @param bsLen 瀛楄妭闀垮害锛堟�诲寘闀匡紝鍖呮嫭鍖呭ご鍜屽寘灏撅級
+     * @param dataCode 鍔熻兘鐮�
+     * @param data 鏁版嵁
+     * @throws Exception 寮傚父
+     */
+    protected void doParse(byte[] bs, int bsLen, String dataCode, Data data) throws Exception {
+        DataV2 dV2 = (DataV2)data.getSubData() ;
+        DataCd960XVo cdData = new DataCd960XVo() ;
+        dV2.subData = cdData ;
+        if(bs[ProtocolConstantV206V2.UG_dataIndex] == (byte)0x00){
+            cdData.success = true ;
+        }else{
+            cdData.success = false ;
+        }
+    }
+}
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_97_Down.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_97_Down.java
index 076681a..5e3516c 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_97_Down.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_97_Down.java
@@ -66,7 +66,7 @@
         bsHead[index] = commonV_1.createCtrl((byte)0, (byte)0) ;
 
         index++ ;
-        GlCreate.createRtuAddr(para.rtuAddr, bsHead, index);
+        GlCreate.createRtuAddr4P206(para.rtuAddr, bsHead, index);
         index += 5 ;
 
         ByteUtil.hex2Bytes(para.commandCode, bsHead, index) ;
@@ -132,7 +132,7 @@
 
         GlCreate.createLen(bytes);//闀垮害鏀惧瓧鑺傛暟缁勪腑
 
-        byte[] bsTail = GlCreate.createCrcTail(bytes) ;//CRC鍜屽熬鍙犲姞瀛楄妭鏁扮粍涓�
+        byte[] bsTail = GlCreate.createCrcTail4P206(bytes) ;//CRC鍜屽熬鍙犲姞瀛楄妭鏁扮粍涓�
 
         bytes = ByteUtil.bytesMerge(bytes, bsTail) ;
 
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_97_Up.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_97_Up.java
index 795a6ab..ab95db3 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_97_Up.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_97_Up.java
@@ -28,7 +28,7 @@
     @Override
     public MidResult[] parse(Boolean isLowPower, CodeParseParams params, CodeParseCallback callback)throws Exception {
         ParseParamsForUpV2 para = (ParseParamsForUpV2)params ;
-        int bsLen = new CommonV2().parseDataLen(para.upBuffer) ;
+        int bsLen = new CommonV2().parseDataLen4P206(para.upBuffer) ;
         if(bsLen > 0){
             this.doParse(para.upBuffer,
                     bsLen,
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_98_Down.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_98_Down.java
index 6408217..6a6fd48 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_98_Down.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_98_Down.java
@@ -66,7 +66,7 @@
         bsHead[index] = commonV_1.createCtrl((byte)0, (byte)0) ;
 
         index++ ;
-        GlCreate.createRtuAddr(para.rtuAddr, bsHead, index);
+        GlCreate.createRtuAddr4P206(para.rtuAddr, bsHead, index);
         index += 5 ;
 
         ByteUtil.hex2Bytes(para.commandCode, bsHead, index) ;
@@ -95,7 +95,7 @@
 
         GlCreate.createLen(bytes);//闀垮害鏀惧瓧鑺傛暟缁勪腑
 
-        byte[] bsTail = GlCreate.createCrcTail(bytes) ;//CRC鍜屽熬鍙犲姞瀛楄妭鏁扮粍涓�
+        byte[] bsTail = GlCreate.createCrcTail4P206(bytes) ;//CRC鍜屽熬鍙犲姞瀛楄妭鏁扮粍涓�
 
         bytes = ByteUtil.bytesMerge(bytes, bsTail) ;
 
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_98_Up.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_98_Up.java
index c677074..ff1853f 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_98_Up.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_98_Up.java
@@ -28,7 +28,7 @@
     @Override
     public MidResult[] parse(Boolean isLowPower, CodeParseParams params, CodeParseCallback callback)throws Exception {
         ParseParamsForUpV2 para = (ParseParamsForUpV2)params ;
-        int bsLen = new CommonV2().parseDataLen(para.upBuffer) ;
+        int bsLen = new CommonV2().parseDataLen4P206(para.upBuffer) ;
         if(bsLen > 0){
             this.doParse(para.upBuffer,
                     bsLen,
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_99_Down.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_99_Down.java
index 4bb9ed4..bf48896 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_99_Down.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_99_Down.java
@@ -65,7 +65,7 @@
         bsHead[index] = commonV_1.createCtrl((byte)0, (byte)0) ;
 
         index++ ;
-        GlCreate.createRtuAddr(para.rtuAddr, bsHead, index);
+        GlCreate.createRtuAddr4P206(para.rtuAddr, bsHead, index);
         index += 5 ;
 
         ByteUtil.hex2Bytes(para.commandCode, bsHead, index) ;
@@ -160,7 +160,7 @@
 
         GlCreate.createLen(bytes);//闀垮害鏀惧瓧鑺傛暟缁勪腑
 
-        byte[] bsTail = GlCreate.createCrcTail(bytes) ;//CRC鍜屽熬鍙犲姞瀛楄妭鏁扮粍涓�
+        byte[] bsTail = GlCreate.createCrcTail4P206(bytes) ;//CRC鍜屽熬鍙犲姞瀛楄妭鏁扮粍涓�
 
         bytes = ByteUtil.bytesMerge(bytes, bsTail) ;
 
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_99_Up.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_99_Up.java
index 6a17419..3348654 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_99_Up.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_99_Up.java
@@ -27,7 +27,7 @@
     @Override
     public MidResult[] parse(Boolean isLowPower, CodeParseParams params, CodeParseCallback callback)throws Exception {
         ParseParamsForUpV2 para = (ParseParamsForUpV2)params ;
-        int bsLen = new CommonV2().parseDataLen(para.upBuffer) ;
+        int bsLen = new CommonV2().parseDataLen4P206(para.upBuffer) ;
         if(bsLen > 0){
             this.doParse(para.upBuffer,
                     bsLen,
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_A0_Down.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_A0_Down.java
index e3ab9ca..eb10e1b 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_A0_Down.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_A0_Down.java
@@ -65,7 +65,7 @@
         bsHead[index] = commonV_1.createCtrl((byte)0, (byte)0) ;
 
         index++ ;
-        GlCreate.createRtuAddr(para.rtuAddr, bsHead, index);
+        GlCreate.createRtuAddr4P206(para.rtuAddr, bsHead, index);
         index += 5 ;
 
         ByteUtil.hex2Bytes(para.commandCode, bsHead, index) ;
@@ -158,7 +158,7 @@
 
         GlCreate.createLen(bytes);//闀垮害鏀惧瓧鑺傛暟缁勪腑
 
-        byte[] bsTail = GlCreate.createCrcTail(bytes) ;//CRC鍜屽熬鍙犲姞瀛楄妭鏁扮粍涓�
+        byte[] bsTail = GlCreate.createCrcTail4P206(bytes) ;//CRC鍜屽熬鍙犲姞瀛楄妭鏁扮粍涓�
 
         bytes = ByteUtil.bytesMerge(bytes, bsTail) ;
 
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_A0_Up.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_A0_Up.java
index 4f06338..7923e9e 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_A0_Up.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_A0_Up.java
@@ -27,7 +27,7 @@
     @Override
     public MidResult[] parse(Boolean isLowPower, CodeParseParams params, CodeParseCallback callback)throws Exception {
         ParseParamsForUpV2 para = (ParseParamsForUpV2)params ;
-        int bsLen = new CommonV2().parseDataLen(para.upBuffer) ;
+        int bsLen = new CommonV2().parseDataLen4P206(para.upBuffer) ;
         if(bsLen > 0){
             this.doParse(para.upBuffer,
                     bsLen,
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_A1_Down.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_A1_Down.java
index 2806208..071ee91 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_A1_Down.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_A1_Down.java
@@ -65,7 +65,7 @@
         bsHead[index] = commonV_1.createCtrl((byte)0, (byte)0) ;
 
         index++ ;
-        GlCreate.createRtuAddr(para.rtuAddr, bsHead, index);
+        GlCreate.createRtuAddr4P206(para.rtuAddr, bsHead, index);
         index += 5 ;
 
         ByteUtil.hex2Bytes(para.commandCode, bsHead, index) ;
@@ -197,7 +197,7 @@
 
         GlCreate.createLen(bytes);//闀垮害鏀惧瓧鑺傛暟缁勪腑
 
-        byte[] bsTail = GlCreate.createCrcTail(bytes) ;//CRC鍜屽熬鍙犲姞瀛楄妭鏁扮粍涓�
+        byte[] bsTail = GlCreate.createCrcTail4P206(bytes) ;//CRC鍜屽熬鍙犲姞瀛楄妭鏁扮粍涓�
 
         bytes = ByteUtil.bytesMerge(bytes, bsTail) ;
 
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_A1_Up.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_A1_Up.java
index 9b1767e..9fbb025 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_A1_Up.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_A1_Up.java
@@ -26,7 +26,7 @@
     @Override
     public MidResult[] parse(Boolean isLowPower, CodeParseParams params, CodeParseCallback callback)throws Exception {
         ParseParamsForUpV2 para = (ParseParamsForUpV2)params ;
-        int bsLen = new CommonV2().parseDataLen(para.upBuffer) ;
+        int bsLen = new CommonV2().parseDataLen4P206(para.upBuffer) ;
         if(bsLen > 0){
             this.doParse(para.upBuffer,
                     bsLen,
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_A2_Down.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_A2_Down.java
index 45f6d92..993e94d 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_A2_Down.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_A2_Down.java
@@ -65,7 +65,7 @@
         bsHead[index] = commonV_1.createCtrl((byte)0, (byte)0) ;
 
         index++ ;
-        GlCreate.createRtuAddr(para.rtuAddr, bsHead, index);
+        GlCreate.createRtuAddr4P206(para.rtuAddr, bsHead, index);
         index += 5 ;
 
         ByteUtil.hex2Bytes(para.commandCode, bsHead, index) ;
@@ -204,7 +204,7 @@
 
         GlCreate.createLen(bytes);//闀垮害鏀惧瓧鑺傛暟缁勪腑
 
-        byte[] bsTail = GlCreate.createCrcTail(bytes) ;//CRC鍜屽熬鍙犲姞瀛楄妭鏁扮粍涓�
+        byte[] bsTail = GlCreate.createCrcTail4P206(bytes) ;//CRC鍜屽熬鍙犲姞瀛楄妭鏁扮粍涓�
 
         bytes = ByteUtil.bytesMerge(bytes, bsTail) ;
 
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_A2_Up.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_A2_Up.java
index 10f3160..7102c8a 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_A2_Up.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_A2_Up.java
@@ -26,7 +26,7 @@
     @Override
     public MidResult[] parse(Boolean isLowPower, CodeParseParams params, CodeParseCallback callback)throws Exception {
         ParseParamsForUpV2 para = (ParseParamsForUpV2)params ;
-        int bsLen = new CommonV2().parseDataLen(para.upBuffer) ;
+        int bsLen = new CommonV2().parseDataLen4P206(para.upBuffer) ;
         if(bsLen > 0){
             this.doParse(para.upBuffer,
                     bsLen,
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_B0_Down.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_B0_Down.java
index 0eda84c..114d48f 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_B0_Down.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_B0_Down.java
@@ -62,7 +62,7 @@
         bsHead[index] = commonV_1.createCtrl((byte)0, (byte)0) ;
 
         index++ ;
-        GlCreate.createRtuAddr(para.rtuAddr, bsHead, index);
+        GlCreate.createRtuAddr4P206(para.rtuAddr, bsHead, index);
         index += 5 ;
 
         ByteUtil.hex2Bytes(para.commandCode, bsHead, index) ;
@@ -78,7 +78,7 @@
 
         GlCreate.createLen(bytes);//闀垮害鏀惧瓧鑺傛暟缁勪腑
 
-        byte[] bsTail = GlCreate.createCrcTail(bytes) ;//CRC鍜屽熬鍙犲姞瀛楄妭鏁扮粍涓�
+        byte[] bsTail = GlCreate.createCrcTail4P206(bytes) ;//CRC鍜屽熬鍙犲姞瀛楄妭鏁扮粍涓�
 
         bytes = ByteUtil.bytesMerge(bytes, bsTail) ;
 
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_C0_Down.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_C0_Down.java
index e7515db..32227f8 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_C0_Down.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_C0_Down.java
@@ -59,7 +59,7 @@
         bsHead[index] = commonV_1.createCtrl((byte)0, (byte)0) ;
 
         index++ ;
-        GlCreate.createRtuAddr(para.rtuAddr, bsHead, index);
+        GlCreate.createRtuAddr4P206(para.rtuAddr, bsHead, index);
         index += 5 ;
 
         ByteUtil.hex2Bytes(para.commandCode, bsHead, index) ;
@@ -75,7 +75,7 @@
 
         GlCreate.createLen(bytes);//闀垮害鏀惧瓧鑺傛暟缁勪腑
 
-        byte[] bsTail = GlCreate.createCrcTail(bytes) ;//CRC鍜屽熬鍙犲姞瀛楄妭鏁扮粍涓�
+        byte[] bsTail = GlCreate.createCrcTail4P206(bytes) ;//CRC鍜屽熬鍙犲姞瀛楄妭鏁扮粍涓�
 
         bytes = ByteUtil.bytesMerge(bytes, bsTail) ;
 
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_C0_Up.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_C0_Up.java
index 24a2992..655c0b5 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_C0_Up.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_C0_Up.java
@@ -1,11 +1,8 @@
 package com.dy.common.mw.protocol.p206V2.parse;
 
 import com.dy.common.mw.protocol.*;
-import com.dy.common.mw.protocol.p206V1.CommonV1;
 import com.dy.common.mw.protocol.p206V2.*;
 import com.dy.common.mw.protocol.p206V2.parse.global.GlParse;
-import com.dy.common.mw.protocol.p206V2.upVos.DataCd81Vo;
-import com.dy.common.mw.protocol.p206V2.upVos.DataCd84Vo;
 import com.dy.common.mw.protocol.p206V2.upVos.DataCdC0Vo;
 import com.dy.common.mw.protocol.rtuState.ValveStateInfo;
 import com.dy.common.util.ByteUtil;
@@ -26,7 +23,7 @@
     @Override
     public MidResult[] parse(Boolean isLowPower, CodeParseParams params, CodeParseCallback callback)throws Exception {
         ParseParamsForUpV2 para = (ParseParamsForUpV2)params ;
-        int bsLen = new CommonV2().parseDataLen(para.upBuffer) ;
+        int bsLen = new CommonV2().parseDataLen4P206(para.upBuffer) ;
         if(bsLen > 0){
             this.doParse(para.upBuffer,
                     bsLen,
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/global/GlCreate.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/global/GlCreate.java
index d57ca14..9875718 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/global/GlCreate.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/global/GlCreate.java
@@ -1,10 +1,7 @@
 package com.dy.common.mw.protocol.p206V2.parse.global;
 
 import com.dy.common.mw.protocol.p206V2.ProtocolConstantV206V2;
-import com.dy.common.util.ByteUtil;
-import com.dy.common.util.ByteUtilUnsigned;
-import com.dy.common.util.CRC8_for_2_0;
-import com.dy.common.util.DateTime;
+import com.dy.common.util.*;
 
 public class GlCreate {
 
@@ -17,7 +14,7 @@
         return index ;
     }
 
-    public static void createRtuAddr(String rtuAddr, byte[] bs, int index) throws Exception {
+    public static void createRtuAddr4P206(String rtuAddr, byte[] bs, int index) throws Exception {
         String rtuAddr1 = rtuAddr.substring(0, 6) ;
         String rtuAddr2 = rtuAddr.substring(6) ;
 
@@ -26,6 +23,17 @@
 
         Integer rtuAddr2Int = Integer.parseInt(rtuAddr2) ;
         ByteUtilUnsigned.short2Bytes_LE(bs, rtuAddr2Int.shortValue(), index);
+    }
+
+    /**
+     * 涓哄崌绾у崗璁�
+     * @param rtuAddr
+     * @param bs
+     * @param index
+     * @throws Exception
+     */
+    public static void createRtuAddr4PUg(String rtuAddr, byte[] bs, int index) throws Exception {
+        ByteUtil.string2BCD_BE(bs, rtuAddr, index) ;
     }
 
     public static void createPw(byte[] bs, int index) throws Exception {
@@ -66,11 +74,19 @@
         ByteUtil.string2BCD_LE(bs, icCardNo1, index) ;
     }
 
-    public static byte[] createCrcTail(byte[] bsNoTail) throws Exception {
+    public static byte[] createCrcTail4P206(byte[] bsNoTail) throws Exception {
         int crc = new CRC8_for_2_0().CRC8(bsNoTail, ProtocolConstantV206V2.ctrlIndex, bsNoTail.length -1) ;
         byte[] bytes = new byte[ProtocolConstantV206V2.lenTail] ;
         bytes[0] = (byte)crc ;
         bytes[1] = ProtocolConstantV206V2.P_Tail_Byte ;
         return bytes ;
     }
+
+    public static byte[] createCrcTail4Ug(byte[] bsNoTail) throws Exception {
+        int crc = new CRC16().CRC(bsNoTail, 0, bsNoTail.length -1) ;
+        byte[] bytes = new byte[ProtocolConstantV206V2.UG_lenTail] ;
+        ByteUtilUnsigned.short2Bytes_BE(bytes, crc, 0);
+        bytes[2] = ProtocolConstantV206V2.P_Tail_Byte ;
+        return bytes ;
+    }
 }
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/upVos/DataCd960XVo.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/upVos/DataCd960XVo.java
new file mode 100644
index 0000000..a6707ba
--- /dev/null
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/upVos/DataCd960XVo.java
@@ -0,0 +1,23 @@
+package com.dy.common.mw.protocol.p206V2.upVos;
+
+import com.dy.common.mw.protocol.UpDataVo;
+
+/**
+ * @Author: liurunyu
+ * @Date: 2024/11/4 11:14
+ * @Description
+ */
+public class DataCd960XVo implements UpDataVo {
+    public boolean success;
+
+    public String toString(){
+        StringBuilder sb = new StringBuilder() ;
+        sb.append("   鍗囩骇搴旂瓟:\n");
+        sb.append("      缁撴灉锛�");
+        sb.append(success?"姝g‘":"閿欒");
+        sb.append("\n");
+
+        return sb.toString() ;
+    }
+
+}
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/CommonV202404.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/CommonV202404.java
index 9918155..e5a19ef 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/CommonV202404.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/CommonV202404.java
@@ -39,26 +39,6 @@
         }
     }
 
-    /**
-     * 妫�鏌ュご
-     * @param bs 涓婅瀛楄妭鏁扮粍
-     * @throws Exception 寮傚父
-     */
-    public void checkHead(byte[] bs) throws Exception{
-        if(bs.length < ProtocolConstantV206V202404.lenHead2Code
-                || bs[0] != ProtocolConstantV206V202404.P_Head_Byte){
-            throw new Exception("涓婅鏁版嵁甯уご涓嶆纭紒") ;
-        }else{
-            if(bs.length >= ProtocolConstantV206V202404.lenHead2Code){
-                if(bs[2] != ProtocolConstantV206V202404.P_Head_Byte
-                    && (byte)(bs[2] & 0xF8) != ProtocolConstantV206V202404.P_Head_Byte){
-                    throw new Exception("涓婅鏁版嵁甯уご涓嶆纭紒") ;
-                }
-            }else{
-                throw new Exception("涓婅鏁版嵁甯уご涓嶆纭紒") ;
-            }
-        }
-    }
 
     /**
      * 妫�鏌ュ熬
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/DriverV202404.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/DriverV202404.java
index 8069bf4..3e77762 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/DriverV202404.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/DriverV202404.java
@@ -58,7 +58,6 @@
 		String upCode = null ;
 		try{
 			CommonV202404 cp = new CommonV202404() ;
-			cp.checkHead(upBuffer) ;
 			cp.checkTail(upBuffer) ;
 			String crcStr = cp.checkCrc_str(upBuffer) ;
 			if(crcStr != null){
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/rtuState/UpgradeStateInfo.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/rtuState/UpgradeStateInfo.java
new file mode 100644
index 0000000..215f3ab
--- /dev/null
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/rtuState/UpgradeStateInfo.java
@@ -0,0 +1,18 @@
+package com.dy.common.mw.protocol.rtuState;
+
+import com.dy.common.mw.protocol.NotifyInfo;
+
+/**
+ * @Author: liurunyu
+ * @Date: 2024/11/4 11:20
+ * @Description
+ */
+public class UpgradeStateInfo implements NotifyInfo {
+    /**
+     * RTU澶勭悊鍗囩骇鏁版嵁缁撴灉
+     */
+    public Boolean rtuDealResult ;
+    public UpgradeStateInfo(boolean rtuDealResult){
+        this.rtuDealResult = rtuDealResult ;
+    }
+}
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/softUpgrade/Com1601Vo.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/softUpgrade/Com1601Vo.java
new file mode 100644
index 0000000..6c4b339
--- /dev/null
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/softUpgrade/Com1601Vo.java
@@ -0,0 +1,16 @@
+package com.dy.common.softUpgrade;
+
+import lombok.Data;
+
+/**
+ * @Author: liurunyu
+ * @Date: 2024/11/04 21:05
+ * @Description
+ */
+@Data
+public class Com1601Vo {
+    public String softStoreAddr ;//鍗囩骇绋嬪簭瀛樻斁鍦板潃(4瀛楄妭锛�8瀛楃HEX瀛楃涓�)锛屽崌绾х▼搴忓湪FLASH涓瓨鏀惧湴鍧�
+    public int totalByte ;//鍗囩骇绋嬪簭瀛楄妭鏁帮紙512鏁存暟鍊嶏級
+    public int softCrc ;//鍗囩骇绋嬪簭鏍¢獙鐮� CRC16
+    public String softStartAddr ;//绋嬪簭瑕嗙洊璧峰鍦板潃(4瀛楄妭锛�8瀛楃HEX瀛楃涓�)锛岃鍒锋柊绋嬪簭鐨勮捣濮嬪湴鍧�楂樺瓧鑺傚湪鍓� 锛屼綆瀛楄妭鍦ㄥ悗
+}
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/softUpgrade/parse/HexFileParse.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/softUpgrade/parse/HexFileParse.java
index e2f09db..6e1bf56 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/softUpgrade/parse/HexFileParse.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/softUpgrade/parse/HexFileParse.java
@@ -16,7 +16,7 @@
 
     private static final int hexFileMinLine = 4 ;
     private static final int lineHeadEndIndex = 9 ;
-    private static final int bytesSplitUnit = 512 ;
+    private static final int bytesSplitUnit512 = 512 ;
 
     public static void main(String[] args) throws Exception{
         boolean fromBytes = true ;
@@ -149,6 +149,9 @@
             }
             counter ++ ;
         }
+        if(vo.bytes != null && vo.bytes.length > 0){
+            vo.bytesCrc16 = this.crc16(vo.bytes);
+        }
     }
 
     /**
@@ -161,15 +164,62 @@
             int index = 0 ;
             while (true){
                 if(index < vo.bytes.length){
-                    byte[] bytes = ByteUtil.bytesSplit(vo.bytes, index, bytesSplitUnit) ;
+                    byte[] bytes = ByteUtil.bytesSplit(vo.bytes, index, bytesSplitUnit512) ;
                     vo.listByte512.add(bytes) ;
                     vo.totalBytes512 += bytes.length ;
                 }else{
                     break ;
                 }
-                index += bytesSplitUnit ;
+                index += bytesSplitUnit512;
             }
         }
     }
 
+    /**
+     * CRC16璁$畻
+     * @param buf
+     * @return
+     */
+    private Integer crc16(byte[] buf){
+        int crc = -1 ;
+        for(int i = 0; i < buf.length; ++i) {
+            crc = (crc >> 8) ^ crc16_table[(crc ^ buf[i]) & 0x00FF];
+        }
+        return crc ;
+    }
+    private Integer[] crc16_table = new Integer[]{
+        0x0000, 0xC0C1, 0xC181, 0x0140, 0xC301, 0x03C0, 0x0280, 0xC241,
+        0xC601, 0x06C0, 0x0780, 0xC741, 0x0500, 0xC5C1, 0xC481, 0x0440,
+        0xCC01, 0x0CC0, 0x0D80, 0xCD41, 0x0F00, 0xCFC1, 0xCE81, 0x0E40,
+        0x0A00, 0xCAC1, 0xCB81, 0x0B40, 0xC901, 0x09C0, 0x0880, 0xC841,
+        0xD801, 0x18C0, 0x1980, 0xD941, 0x1B00, 0xDBC1, 0xDA81, 0x1A40,
+        0x1E00, 0xDEC1, 0xDF81, 0x1F40, 0xDD01, 0x1DC0, 0x1C80, 0xDC41,
+        0x1400, 0xD4C1, 0xD581, 0x1540, 0xD701, 0x17C0, 0x1680, 0xD641,
+        0xD201, 0x12C0, 0x1380, 0xD341, 0x1100, 0xD1C1, 0xD081, 0x1040,
+        0xF001, 0x30C0, 0x3180, 0xF141, 0x3300, 0xF3C1, 0xF281, 0x3240,
+        0x3600, 0xF6C1, 0xF781, 0x3740, 0xF501, 0x35C0, 0x3480, 0xF441,
+        0x3C00, 0xFCC1, 0xFD81, 0x3D40, 0xFF01, 0x3FC0, 0x3E80, 0xFE41,
+        0xFA01, 0x3AC0, 0x3B80, 0xFB41, 0x3900, 0xF9C1, 0xF881, 0x3840,
+        0x2800, 0xE8C1, 0xE981, 0x2940, 0xEB01, 0x2BC0, 0x2A80, 0xEA41,
+        0xEE01, 0x2EC0, 0x2F80, 0xEF41, 0x2D00, 0xEDC1, 0xEC81, 0x2C40,
+        0xE401, 0x24C0, 0x2580, 0xE541, 0x2700, 0xE7C1, 0xE681, 0x2640,
+        0x2200, 0xE2C1, 0xE381, 0x2340, 0xE101, 0x21C0, 0x2080, 0xE041,
+        0xA001, 0x60C0, 0x6180, 0xA141, 0x6300, 0xA3C1, 0xA281, 0x6240,
+        0x6600, 0xA6C1, 0xA781, 0x6740, 0xA501, 0x65C0, 0x6480, 0xA441,
+        0x6C00, 0xACC1, 0xAD81, 0x6D40, 0xAF01, 0x6FC0, 0x6E80, 0xAE41,
+        0xAA01, 0x6AC0, 0x6B80, 0xAB41, 0x6900, 0xA9C1, 0xA881, 0x6840,
+        0x7800, 0xB8C1, 0xB981, 0x7940, 0xBB01, 0x7BC0, 0x7A80, 0xBA41,
+        0xBE01, 0x7EC0, 0x7F80, 0xBF41, 0x7D00, 0xBDC1, 0xBC81, 0x7C40,
+        0xB401, 0x74C0, 0x7580, 0xB541, 0x7700, 0xB7C1, 0xB681, 0x7640,
+        0x7200, 0xB2C1, 0xB381, 0x7340, 0xB101, 0x71C0, 0x7080, 0xB041,
+        0x5000, 0x90C1, 0x9181, 0x5140, 0x9301, 0x53C0, 0x5280, 0x9241,
+        0x9601, 0x56C0, 0x5780, 0x9741, 0x5500, 0x95C1, 0x9481, 0x5440,
+        0x9C01, 0x5CC0, 0x5D80, 0x9D41, 0x5F00, 0x9FC1, 0x9E81, 0x5E40,
+        0x5A00, 0x9AC1, 0x9B81, 0x5B40, 0x9901, 0x59C0, 0x5880, 0x9841,
+        0x8801, 0x48C0, 0x4980, 0x8941, 0x4B00, 0x8BC1, 0x8A81, 0x4A40,
+        0x4E00, 0x8EC1, 0x8F81, 0x4F40, 0x8D01, 0x4DC0, 0x4C80, 0x8C41,
+        0x4400, 0x84C1, 0x8581, 0x4540, 0x8701, 0x47C0, 0x4680, 0x8641,
+        0x8201, 0x42C0, 0x4380, 0x8341, 0x4100, 0x81C1, 0x8081, 0x4040
+    };
+
 }
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/softUpgrade/parse/HexFileVo.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/softUpgrade/parse/HexFileVo.java
index ff9c96b..47e576b 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/softUpgrade/parse/HexFileVo.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/softUpgrade/parse/HexFileVo.java
@@ -19,6 +19,7 @@
     public byte[] bytes ;
     public List<byte[]> listByte512 ;
     public long totalBytes512 ;
+    public Integer bytesCrc16 ;
     public List<String> errors ;
 
     public HexFileVo() {
@@ -27,6 +28,7 @@
         bytes = new byte[0] ;
         listByte512 = new ArrayList<>() ;
         totalBytes512 = 0 ;
+        bytesCrc16 = 0 ;
         errors = new ArrayList<>() ;
     }
 
@@ -35,6 +37,7 @@
                 + "\ncalculateBytes:" + calculateBytes
                 + "\nrealBytes:" + realBytes
                 + "\ntotalBytes512:" + totalBytes512
+                + "\nbytesCrc16:" + bytesCrc16
                 + "\nerrors:" + errors ;
         if(listByte512.size() > 0){
             int counter = 0 ;
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/util/ByteUtilUnsigned.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/util/ByteUtilUnsigned.java
index 1a127c0..4a6e509 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/util/ByteUtilUnsigned.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/util/ByteUtilUnsigned.java
@@ -438,15 +438,18 @@
 			return true;
 		}
 	}
-	public static void main(String[] args) throws Exception{
-		byte[] bs = new byte[]{(byte)0x38,(byte)0x1d,(byte)0x00,(byte)0x00,(byte)0x00} ;
-		Long lg1 = ByteUtilUnsigned.bytes2Long_LE(bs, 0, 4) ;
-		Long lg2 = ByteUtilUnsigned.bytes2Long_BE(bs, 0, 4) ;
-		System.out.println(lg1);
-		System.out.println(lg2);
-	}
-
 //	public static void main(String[] args) throws Exception{
+//		byte[] bs = new byte[]{(byte)0x38,(byte)0x1d,(byte)0x00,(byte)0x00,(byte)0x00} ;
+//		Long lg1 = ByteUtilUnsigned.bytes2Long_LE(bs, 0, 4) ;
+//		Long lg2 = ByteUtilUnsigned.bytes2Long_BE(bs, 0, 4) ;
+//		System.out.println(lg1);
+//		System.out.println(lg2);
+//	}
+
+	public static void main(String[] args) throws Exception{
+		byte[] bs = new byte[]{0x02, 0x0C} ;
+		int s = ByteUtilUnsigned.bytes2Short_BE(bs, 0) ;
+		System.out.println(s);
 ////		int d = 123456;
 ////		byte[] bs = new byte[4] ;
 ////		int2Bytes_BE(bs, d, 0) ;
@@ -467,5 +470,5 @@
 //		System.out.println(s);
 //
 //
-//	}
+	}
 }
diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoOp/OpeProcessingResultMapper.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoOp/OpeProcessingResultMapper.java
index c3351f1..ad53364 100644
--- a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoOp/OpeProcessingResultMapper.java
+++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoOp/OpeProcessingResultMapper.java
@@ -24,4 +24,11 @@
     int updateByPrimaryKeySelective(OpeProcessingResult record);
 
     int updateByPrimaryKey(OpeProcessingResult record);
+
+    /**
+     * 鏍规嵁workOrderId鑾峰彇鏈垹闄ょ殑澶勭悊缁撴灉鏁伴噺锛屾坊鍔犵粨鏋滀笂鎶ュ墠鍒ゆ柇浣跨敤
+     * @param workOrderId
+     * @return
+     */
+    Integer getValidResultCount(Long workOrderId);
 }
\ No newline at end of file
diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoOp/OpeWorkOrderMapper.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoOp/OpeWorkOrderMapper.java
index 385896e..998ab45 100644
--- a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoOp/OpeWorkOrderMapper.java
+++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoOp/OpeWorkOrderMapper.java
@@ -2,12 +2,17 @@
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.dy.pipIrrGlobal.pojoOp.OpeWorkOrder;
+import com.dy.pipIrrGlobal.voOp.VoWorkOrder;
 import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+import java.util.Map;
 
 /**
  * @author ZhuBaoMin
- * @date 2024-11-06 11:33
- * @LastEditTime 2024-11-06 11:33
+ * @date 2024-11-07 15:38
+ * @LastEditTime 2024-11-07 15:38
  * @Description
  */
 
@@ -24,4 +29,41 @@
     int updateByPrimaryKeySelective(OpeWorkOrder record);
 
     int updateByPrimaryKey(OpeWorkOrder record);
+
+    /**
+     * 鏍规嵁涓婚敭鑾峰彇宸ュ崟瑙嗗浘瀵硅薄
+     * @param workOrderId
+     * @return
+     */
+    VoWorkOrder getWorkOrderById(Long workOrderId);
+
+    /**
+     * 鑾峰彇鎸囧畾娲惧崟浜虹殑鎸囧畾鏈垹闄ゅ伐鍗曪紝鍒犻櫎宸ュ崟鍓嶅垽鏂娇鐢ㄤ娇鐢�
+     * @param dispatcherId
+     * @param workOrderId
+     * @return
+     */
+    OpeWorkOrder getWorkOrder(@Param("dispatcherId")Long dispatcherId, @Param("workOrderId")Long workOrderId);
+
+    /**
+     * 閫昏緫鍒犻櫎涓�涓湭鍒犻櫎鐨勫伐鍗�
+     * @param workOrderId
+     * @return
+     */
+    Integer deleteWorkOrder(Long workOrderId);
+
+    /**
+     * 鏍规嵁鎸囧畾鏉′欢鑾峰彇宸ュ崟鏁伴噺
+     * @param params
+     * @return
+     */
+    Long getWorkOrdersCount(Map<?, ?> params);
+
+    /**
+     * 鏍规嵁鎸囧畾鏉′欢鑾峰彇宸ュ崟
+     * @param params
+     * @return
+     */
+    List<VoWorkOrder> getWorkOrders(Map<?, ?> params);
+
 }
\ No newline at end of file
diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoRm/UgRtuControllerMapper.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoRm/UgRtuControllerMapper.java
new file mode 100644
index 0000000..732c8a7
--- /dev/null
+++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoRm/UgRtuControllerMapper.java
@@ -0,0 +1,99 @@
+package com.dy.pipIrrGlobal.daoRm;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.dy.pipIrrGlobal.pojoRm.RmWorkReportHistory;
+import com.dy.pipIrrGlobal.pojoRm.UgRtuController;
+import com.dy.pipIrrGlobal.voPr.VoController;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @Author: liurunyu
+ * @Date: 2024/11/5 9:29
+ * @Description
+ */
+@Mapper
+public interface UgRtuControllerMapper extends BaseMapper<UgRtuController> {
+    /**
+     * delete by primary key
+     *
+     * @param id primaryKey
+     * @return deleteCount
+     */
+    int deleteByPrimaryKey(Long id);
+
+    /**
+     * insert record to table
+     *
+     * @param record the record
+     * @return insert count
+     */
+    int insert(UgRtuController record);
+
+    /**
+     * insert record to table selective
+     *
+     * @param record the record
+     * @return insert count
+     */
+    int insertSelective(UgRtuController record);
+
+    /**
+     * select by primary key
+     *
+     * @param id primary key
+     * @return object by primary key
+     */
+    UgRtuController selectByPrimaryKey(Long id);
+    /**
+     * 鏍规嵁鎸囧畾鑾峰彇鎺у埗鍣ㄨ褰曟暟
+     * @param params
+     * @return
+     */
+    Long selectRecordCount(Map<?, ?> params);
+
+    /**
+     * 鏍规嵁鎸囧畾鑾峰彇鎺у埗鍣ㄨ褰�
+     * @param params
+     * @return
+     */
+    List<VoController> selectControllers(Map<?, ?> params);
+
+
+    /**
+     * 寰楀埌鍗囩骇浠诲姟鐨勬墍鏈夊璞℃帶鍒跺櫒
+     *
+     * @param taskId 鍗囩骇浠诲姟id
+     * @return object by primary key
+     */
+    List<UgRtuController> selectAllConByTask(Long taskId) ;
+
+    /**
+     * 鏍规嵁浠诲姟id鍜屾帶鍒跺櫒id鏌ヨ鏁伴噺
+     *
+     * @param taskId 鍗囩骇浠诲姟id
+     * @param conId 鎺у埗鍣╥d
+     * @return object by primary key
+     */
+    Long selectCountByTaskAndCon(@Param("taskId") Long taskId, @Param("conId") Long conId) ;
+
+
+    /**
+     * update record selective
+     *
+     * @param record the updated record
+     * @return update count
+     */
+    int updateByPrimaryKeySelective(UgRtuController record);
+
+    /**
+     * update record
+     *
+     * @param record the updated record
+     * @return update count
+     */
+    int updateByPrimaryKey(UgRtuController record);
+}
\ No newline at end of file
diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoRm/UgRtuProgramMapper.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoRm/UgRtuProgramMapper.java
new file mode 100644
index 0000000..808d942
--- /dev/null
+++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoRm/UgRtuProgramMapper.java
@@ -0,0 +1,88 @@
+package com.dy.pipIrrGlobal.daoRm;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.dy.pipIrrGlobal.pojoRm.UgRtuProgram;
+import org.apache.ibatis.annotations.Mapper;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @Author: liurunyu
+ * @Date: 2024/11/5 8:52
+ * @Description
+ */
+@Mapper
+public interface UgRtuProgramMapper extends BaseMapper<UgRtuProgram> {
+
+    /**
+     * 閫昏緫鍒犻櫎
+     * @param id primaryKey
+     * @return update count
+     */
+    int deleteLogicById(Long id);
+
+    /**
+     * delete by primary key
+     * @param id primaryKey
+     * @return deleteCount
+     */
+    int deleteByPrimaryKey(Long id);
+
+    /**
+     * insert record to table
+     * @param record the record
+     * @return insert count
+     */
+    int insert(UgRtuProgram record);
+
+    /**
+     * insert record to table selective
+     * @param record the record
+     * @return insert count
+     */
+    int insertSelective(UgRtuProgram record);
+
+    /**
+     * select by primary key
+     * @param id primary key
+     * @return object by primary key
+     */
+    UgRtuProgram selectByPrimaryKey(Long id);
+
+
+    /**
+     * 鏌ヨ鎬绘暟
+     * @param params 鏌ヨ鏉′欢
+     * @return 鎬绘暟
+     * */
+    Long selectTotal(Map<?,?> params);
+
+    /**
+     * 鍒嗛〉鏌ヨ涓�浜�
+     * @param params 鏌ヨ鏉′欢
+     * @return 瀹炰綋闆嗗悎
+     * */
+    List<UgRtuProgram> selectSome(Map<?,?> params) ;
+
+
+    /**
+     * 寰楀埌鎵�鏈夊崌绾х▼搴忚褰旾D鍜屾枃浠跺悕绉�
+     * @return 瀹炰綋闆嗗悎
+     * */
+    List<UgRtuProgram> selectAll() ;
+
+    /**
+     * update record selective
+     * @param record the updated record
+     * @return update count
+     */
+    int updateByPrimaryKeySelective(UgRtuProgram record);
+
+    /**
+     * update record
+     * @param record the updated record
+     * @return update count
+     */
+    int updateByPrimaryKey(UgRtuProgram record);
+}
\ No newline at end of file
diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoRm/UgRtuTaskMapper.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoRm/UgRtuTaskMapper.java
new file mode 100644
index 0000000..d0f9f34
--- /dev/null
+++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoRm/UgRtuTaskMapper.java
@@ -0,0 +1,86 @@
+package com.dy.pipIrrGlobal.daoRm;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.dy.pipIrrGlobal.pojoRm.UgRtuProgram;
+import com.dy.pipIrrGlobal.pojoRm.UgRtuTask;
+import org.apache.ibatis.annotations.Mapper;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @Author: liurunyu
+ * @Date: 2024/11/5 9:09
+ * @Description
+ */
+@Mapper
+public interface UgRtuTaskMapper extends BaseMapper<UgRtuTask> {
+
+    /**
+     * 閫昏緫鍒犻櫎
+     * @param id primaryKey
+     * @return update count
+     */
+    int deleteLogicById(Long id);
+
+    /**
+     * delete by primary key
+     * @param id primaryKey
+     * @return deleteCount
+     */
+    int deleteByPrimaryKey(Long id);
+
+    /**
+     * insert record to table
+     * @param record the record
+     * @return insert count
+     */
+    int insert(UgRtuTask record);
+
+    /**
+     * insert record to table selective
+     * @param record the record
+     * @return insert count
+     */
+    int insertSelective(UgRtuTask record);
+
+    /**
+     * select by primary key
+     * @param id primary key
+     * @return object by primary key
+     */
+    UgRtuTask selectByPrimaryKey(Long id);
+    /**
+     * 鏌ヨ鎬绘暟
+     * @param params 鏌ヨ鏉′欢
+     * @return 鎬绘暟
+     * */
+    Long selectTotal(Map<?,?> params);
+
+    /**
+     * 鍒嗛〉鏌ヨ涓�浜�
+     * @param params 鏌ヨ鏉′欢
+     * @return 瀹炰綋闆嗗悎
+     * */
+    List<UgRtuTask> selectSome(Map<?,?> params) ;
+
+
+    /**
+     * 寰楀埌鎵�鏈夊崌绾х▼搴忚褰旾D鍜屾枃浠跺悕绉�
+     * @return 瀹炰綋闆嗗悎
+     * */
+    List<UgRtuTask> selectAll() ;
+    /**
+     * update record selective
+     * @param record the updated record
+     * @return update count
+     */
+    int updateByPrimaryKeySelective(UgRtuTask record);
+
+    /**
+     * update record
+     * @param record the updated record
+     * @return update count
+     */
+    int updateByPrimaryKey(UgRtuTask record);
+}
\ No newline at end of file
diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoOp/OpeProcessingResult.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoOp/OpeProcessingResult.java
index e6de5f7..9838e44 100644
--- a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoOp/OpeProcessingResult.java
+++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoOp/OpeProcessingResult.java
@@ -10,6 +10,7 @@
 import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
 import com.dy.common.po.BaseEntity;
 import com.fasterxml.jackson.annotation.JsonFormat;
+import jakarta.validation.constraints.NotNull;
 import lombok.*;
 
 import java.math.BigDecimal;
@@ -42,12 +43,14 @@
     * 宸ュ崟ID
     */
     @JSONField(serializeUsing= ObjectWriterImplToString.class)
+    @NotNull(message = "蹇呴』閫夋嫨涓�涓伐鍗�")
     private Long workOrderId;
 
     /**
     * 宸℃鍛業D
     */
     @JSONField(serializeUsing= ObjectWriterImplToString.class)
+    @NotNull(message = "宸℃鍛樹笉鑳戒负绌�")
     private Long inspectorId;
 
     /**
@@ -87,6 +90,7 @@
     * 浠诲姟瀹屾垚鏃堕棿;绮剧‘鍒板垎
     */
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm")
+    @NotNull(message = "浠诲姟瀹屾垚鏃堕棿涓嶈兘涓虹┖")
     private Date completeTime;
 
     /**
@@ -96,7 +100,7 @@
     private Date reportTime;
 
     /**
-    * 鐘舵��;1-鑽夌锛�2-宸蹭笂鎶ワ紝3-宸查�氳繃锛�4-宸查┏鍥�
+    * 鐘舵��;1-宸蹭笂鎶ワ紝2-宸查�氳繃锛�3-宸查┏鍥�
     */
     private Byte state;
 
diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoOp/OpeWorkOrder.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoOp/OpeWorkOrder.java
index ee6848d..b98ec7f 100644
--- a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoOp/OpeWorkOrder.java
+++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoOp/OpeWorkOrder.java
@@ -28,71 +28,81 @@
     public static final long serialVersionUID = 202411061136001L;
 
     /**
-    * 涓婚敭
-    */
+     * 涓婚敭
+     */
     @JSONField(serializeUsing= ObjectWriterImplToString.class)
     @TableId(type = IdType.INPUT)
     private Long id;
 
     /**
-    * 娲惧崟浜篒D
-    */
+     * 娲惧崟浜篒D
+     */
     @JSONField(serializeUsing= ObjectWriterImplToString.class)
     private Long dispatcherId;
 
     /**
-    * 宸℃鍛業D
-    */
+     * 宸℃鍛業D
+     */
     @JSONField(serializeUsing= ObjectWriterImplToString.class)
     private Long inspectorId;
 
     /**
-    * 浠诲姟绫诲瀷ID
-    */
+     * 浠诲姟绫诲瀷ID
+     */
     @JSONField(serializeUsing= ObjectWriterImplToString.class)
     private Long taskTypeId;
 
     /**
-    * 浠诲姟鍐呭
-    */
+     * 浠诲姟鍐呭
+     */
     private String taskContent;
 
     /**
-    * 瀹屾垚鏍囧噯
-    */
+     * 瀹屾垚鏍囧噯
+     */
     private String completeCriteria;
 
     /**
-    * 瑕佹眰瀹屾垚鏃堕棿;绮剧‘鍒板垎
-    */
+     * 瑕佹眰瀹屾垚鏃堕棿;绮剧‘鍒板垎
+     */
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm")
     private Date deadLine;
 
     /**
-    * 浠诲姟瀹屾垚鏃堕棿;绮剧‘鍒板垎
-    */
+     * 浠诲姟瀹屾垚鏃堕棿;绮剧‘鍒板垎
+     */
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm")
     private Date completeTime;
 
     /**
-    * 娲惧崟鏃堕棿
-    */
+     * 娲惧崟鏃堕棿
+     */
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     private Date dispatchTime;
 
     /**
-    * 鐘舵��;1-鏈畬鎴愶紝2-宸插畬鎴�
-    */
+     * 鍐滄埛闂涓婃姤ID
+     */
+    private Long clientReportId;
+
+    /**
+     * 宸℃鍛橀棶棰樹笂鎶D
+     */
+    private Long inspectorReportId;
+
+    /**
+     * 鐘舵��;1-鏈畬鎴愶紝2-宸插畬鎴�
+     */
     private Byte state;
 
     /**
-    * 椹冲洖娆℃暟
-    */
+     * 椹冲洖娆℃暟
+     */
     private Integer rejectTimes;
 
     /**
-    * 閫昏緫鍒犻櫎鏍囪瘑;鏈垹闄や负0锛屽凡鍒犻櫎涓哄垹闄ゆ椂闂�
-    */
+     * 閫昏緫鍒犻櫎鏍囪瘑;鏈垹闄や负0锛屽凡鍒犻櫎涓哄垹闄ゆ椂闂�
+     */
     @JSONField(serializeUsing= ObjectWriterImplToString.class)
     private Long deleted;
 }
\ No newline at end of file
diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoRm/UgRtuController.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoRm/UgRtuController.java
new file mode 100644
index 0000000..60d0287
--- /dev/null
+++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoRm/UgRtuController.java
@@ -0,0 +1,57 @@
+package com.dy.pipIrrGlobal.pojoRm;
+
+import com.alibaba.fastjson2.annotation.JSONField;
+import com.alibaba.fastjson2.writer.ObjectWriterImplToString;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.dy.common.po.BaseEntity;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.*;
+
+/**
+ * @Author: liurunyu
+ * @Date: 2024/11/5 9:29
+ * @Description
+ */
+
+@TableName(value="ug_rtu_controller", autoResultMap = true)
+@Data
+@Builder
+@ToString
+@NoArgsConstructor
+@AllArgsConstructor
+@Schema(name = "RTU杩滅▼鍗囩骇鎵�鍏宠仈鐨勬祴鎺т竴浣撻榾 ")
+public class UgRtuController implements BaseEntity {
+
+    public static final long serialVersionUID = 202411050918001L;
+    /**
+     * 涓婚敭
+     */
+    @Schema(description = "涓婚敭", requiredMode = Schema.RequiredMode.REQUIRED)
+    @JSONField(serializeUsing= ObjectWriterImplToString.class)
+    @TableId(type = IdType.INPUT)
+    public Long id;
+
+    /**
+     * 澶栭敭锛屾寚鍚戝崌绾т换鍔�
+     */
+    @Schema(description = "鍗囩骇浠诲姟瀹炰綋澶栭敭", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    @JSONField(serializeUsing= ObjectWriterImplToString.class)
+    public Long taskId;
+
+    /**
+     * 鎺у埗鍣ㄥ疄浣揑D锛堝閿級
+     */
+    @Schema(description = "鎺у埗鍣ㄥ疄浣撳閿�", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    @JSONField(serializeUsing= ObjectWriterImplToString.class)
+    public Long controllerId;
+
+    /**
+     * 鎺у埗鍣ㄥ湴鍧�
+     */
+    @Schema(description = "鎺у埗鍣ㄥ湴鍧�", requiredMode = Schema.RequiredMode.REQUIRED)
+    public String rtuAddr;
+
+
+}
\ No newline at end of file
diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoRm/UgRtuProgram.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoRm/UgRtuProgram.java
new file mode 100644
index 0000000..1cf4459
--- /dev/null
+++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoRm/UgRtuProgram.java
@@ -0,0 +1,114 @@
+package com.dy.pipIrrGlobal.pojoRm;
+
+import com.alibaba.fastjson2.annotation.JSONField;
+import com.alibaba.fastjson2.writer.ObjectWriterImplToString;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.dy.common.po.BaseEntity;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.*;
+import org.hibernate.validator.constraints.Length;
+
+import java.util.Date;
+
+/**
+ * @Author: liurunyu
+ * @Date: 2024/11/5 8:52
+ * @Description
+ */
+@TableName(value="ug_rtu_program", autoResultMap = true)
+@Data
+@Builder
+@ToString
+@NoArgsConstructor
+@AllArgsConstructor
+@Schema(name = "RTU杩滅▼鍗囩骇绋嬪簭")
+public class UgRtuProgram implements BaseEntity {
+
+    public static final long serialVersionUID = 202411050919001L;
+    /**
+     * 涓婚敭
+     */
+    @Schema(description = "涓婚敭", requiredMode = Schema.RequiredMode.REQUIRED)
+    @JSONField(serializeUsing= ObjectWriterImplToString.class)
+    @TableId(type = IdType.INPUT)
+    public Long id;
+
+    /**
+    * 鏂囦欢鍚�
+    */
+    @Schema(description = "鍗囩骇绋嬪簭鏂囦欢鍚�", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    public String hexFileName;
+
+    /**
+    * 鍗囩骇绋嬪簭瀛樻斁鍦板潃(4瀛楄妭锛�8浣嶅崄鍏繘鍒跺瓧绗�)
+    */
+    @Schema(description = "鍗囩骇绋嬪簭瀛樻斁鍦板潃", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    public String storeRamAddr;
+
+    /**
+    * 绋嬪簭瑕嗙洊瓒呭鍦板潃锛�4瀛楄妭锛�8浣嶅崄鍏繘鍒跺瓧绗︼級
+    */
+    @Schema(description = "绋嬪簭瑕嗙洊瓒呭鍦板潃", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    public String startRamAddr;
+
+    /**
+    * 鍗囩骇绋嬪簭璁$畻瀛楄妭鏁�
+    */
+    @Schema(description = "鍗囩骇绋嬪簭璁$畻瀛楄妭鏁�", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    public Integer programCalculateBytes;
+
+    /**
+    * 鍗囩骇绋嬪簭CRC16鏍¢獙鐮�
+    */
+    @Schema(description = "鍗囩骇绋嬪簭CRC16鏍¢獙鐮�", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    public Integer programCrc16;
+
+    /**
+    * 鍗囩骇绋嬪簭鍐呭锛堢▼搴忔枃浠跺唴瀹瑰瓧鑺傛暟缁勶級
+    */
+    @Schema(description = "绋嬪簭鏂囦欢鍐呭瀛楄妭鏁扮粍", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    @JSONField(serialize = false)
+    public byte[] programBytes;
+
+    @Schema(description = "绋嬪簭鏂囦欢鍐呭", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    @TableField(exist = false)
+    public String programString;
+
+    /**
+    * 鍗囩骇绋嬪簭鍐呭锛堣В鏋愬悗绋嬪簭鏈夋晥鍐呭瀛楄妭鏁扮粍锛�
+    */
+    @Schema(description = "鍗囩骇绋嬪簭鍐呭瀛楄妭鏁扮粍", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    @JSONField(serialize = false)
+    public byte[] fileBytes;
+
+    @Schema(description = "鍗囩骇绋嬪簭鍐呭", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    @TableField(exist = false)
+    public String fileString;
+
+    /**
+    * 澶囨敞
+    */
+    @Schema(description = "澶囨敞", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    @Length(message = "澶囨敞涓嶅ぇ浜巤max}瀛楋紝涓嶅皬浜巤min}瀛�", min = 1, max = 100)
+    public String remark;
+
+    /**
+    * 涓婁紶鏃堕棿
+    */
+    @Schema(description = "涓婁紶鏃堕棿", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:SS")
+    public Date dt;
+
+    /**
+     * 鍒犻櫎鏍囪瘑
+     */
+    @Schema(hidden=true)
+    @JSONField(serialize=false)
+    public Byte deleted;
+
+  
+}
\ No newline at end of file
diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoRm/UgRtuTask.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoRm/UgRtuTask.java
new file mode 100644
index 0000000..0abf832
--- /dev/null
+++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoRm/UgRtuTask.java
@@ -0,0 +1,80 @@
+package com.dy.pipIrrGlobal.pojoRm;
+
+import com.alibaba.fastjson2.annotation.JSONField;
+import com.alibaba.fastjson2.writer.ObjectWriterImplToString;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.dy.common.po.BaseEntity;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.*;
+import org.hibernate.validator.constraints.Length;
+
+import java.util.Date;
+
+/**
+ * @Author: liurunyu
+ * @Date: 2024/11/5 9:09
+ * @Description
+ */
+@TableName(value="ug_rtu_task", autoResultMap = true)
+@Data
+@Builder
+@ToString
+@NoArgsConstructor
+@AllArgsConstructor
+@Schema(name = "RTU杩滅▼鍗囩骇浠诲姟")
+public class UgRtuTask implements BaseEntity {
+
+    public static final long serialVersionUID = 202411050926001L;
+    /**
+     * 涓婚敭
+     */
+    @Schema(description = "涓婚敭", requiredMode = Schema.RequiredMode.REQUIRED)
+    @JSONField(serializeUsing= ObjectWriterImplToString.class)
+    @TableId(type = IdType.INPUT)
+    public Long id;
+
+    /**
+    * 澶栭敭锛屾寚鍚戝崌绾х▼搴�
+    */
+    @Schema(description = "澶栭敭锛屾寚鍚戝崌绾х▼搴�", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    @JSONField(serializeUsing= ObjectWriterImplToString.class)
+    public Long programId;
+
+    /**
+    * 鍒涘缓浜�
+    */
+    @Schema(description = "鍒涘缓浜�", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    @Length(message = "澶囨敞涓嶅ぇ浜巤max}瀛楋紝涓嶅皬浜巤min}瀛�", min = 1, max = 50)
+    public String creator;
+
+    /**
+    * 澶囨敞
+    */
+    @Schema(description = "澶囨敞", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    @Length(message = "澶囨敞涓嶅ぇ浜巤max}瀛楋紝涓嶅皬浜巤min}瀛�", min = 1, max = 100)
+    public String remark;
+
+    /**
+    * 鍒涘缓鏃堕棿
+    */
+    @Schema(description = "鍒涘缓鏃堕棿", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:SS")
+    public Date dt;
+
+    /**
+    * 鏄惁缁撴潫锛�1鏄紝0鍚︼級
+    */
+    @Schema(description = "鏄惁缁撴潫锛�1鏄紝0鍚︼級", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    public Byte isOver;
+
+    /**
+     * 鍒犻櫎鏍囪瘑
+     */
+    @Schema(hidden=true)
+    @JSONField(serialize=false)
+    public Byte deleted;
+
+}
\ No newline at end of file
diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voOp/VoWorkOrder.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voOp/VoWorkOrder.java
new file mode 100644
index 0000000..c0e4cd7
--- /dev/null
+++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voOp/VoWorkOrder.java
@@ -0,0 +1,117 @@
+package com.dy.pipIrrGlobal.voOp;
+
+import com.alibaba.fastjson2.annotation.JSONField;
+import com.alibaba.fastjson2.writer.ObjectWriterImplToString;
+import com.dy.common.po.BaseEntity;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.annotation.JsonPropertyOrder;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * @author ZhuBaoMin
+ * @date 2024-11-06 15:46
+ * @LastEditTime 2024-11-06 15:46
+ * @Description 宸ュ崟瑙嗗浘瀵硅薄
+ */
+
+@Data
+@JsonPropertyOrder({"workOrderId", "dispatcherId", "dispatcher", "inspectorId", "inspector", "taskTypeId", "taskType", "taskContent", "completeCriteria", "deadLine", "clientReportId", "inspectorReportId", "completeTime", "dispatchTime", "rejectTimes", "state", "processingState"})
+public class VoWorkOrder implements BaseEntity {
+    public static final long serialVersionUID = 202411061524001L;
+
+    /**
+     * 宸ュ崟ID
+     */
+    @JSONField(serializeUsing= ObjectWriterImplToString.class)
+    private Long workOrderId;
+
+    /**
+     * 娲惧崟浜篒D
+     */
+    @JSONField(serializeUsing= ObjectWriterImplToString.class)
+    private Long dispatcherId;
+
+    /**
+     * 娲惧崟浜哄鍚�
+     */
+    private String dispatcher;
+
+    /**
+     * 宸℃鍛業D
+     */
+    @JSONField(serializeUsing= ObjectWriterImplToString.class)
+    private Long inspectorId;
+
+    /**
+     * 宸℃鍛樺鍚�
+     */
+    private String inspector;
+
+    /**
+     * 浠诲姟绫诲瀷ID
+     */
+    //@JSONField(serializeUsing= ObjectWriterImplToString.class)
+    //private Long taskTypeId;
+
+    /**
+     * 浠诲姟绫诲瀷
+     */
+    private String taskType;
+
+    /**
+     * 浠诲姟鍐呭
+     */
+    private String taskContent;
+
+    /**
+     * 瀹屾垚鏍囧噯
+     */
+    private String completeCriteria;
+
+    /**
+     * 瑕佹眰瀹屾垚鏃堕棿;绮剧‘鍒板垎
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm")
+    private Date deadLine;
+
+    /**
+     * 鍐滄埛闂涓婃姤ID
+     */
+    @JSONField(serializeUsing= ObjectWriterImplToString.class)
+    private Long clientReportId;
+
+    /**
+     * 宸℃鍛橀棶棰樹笂鎶D
+     */
+    @JSONField(serializeUsing= ObjectWriterImplToString.class)
+    private Long inspectorReportId;
+
+    /**
+     * 浠诲姟瀹屾垚鏃堕棿;绮剧‘鍒板垎
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm")
+    private Date completeTime;
+
+    /**
+     * 娲惧崟鏃堕棿
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date dispatchTime;
+
+    /**
+     * 椹冲洖娆℃暟
+     */
+    private Integer rejectTimes;
+
+    /**
+     * 宸ュ崟鐘舵��
+     */
+    private String state;
+
+    /**
+     * 澶勭悊鐘舵��
+     */
+    private String processingState;
+}
diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voOp/Vofeedback.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voOp/Vofeedback.java
deleted file mode 100644
index 9617df7..0000000
--- a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voOp/Vofeedback.java
+++ /dev/null
@@ -1,63 +0,0 @@
-package com.dy.pipIrrGlobal.voOp;
-
-import com.dy.common.po.BaseEntity;
-import lombok.Data;
-
-/**
- * @author :WuZeYu
- * @Date :2024/7/30  9:48
- * @LastEditTime :2024/7/30  9:48
- * @Description
- */
-@Data
-public class Vofeedback implements BaseEntity {
-    private static final long serialVersionUID = 202407301133001L;
-    /**
-     * 涓婚敭id
-     */
-    private String id;
-    /**
-     * 鍙嶉鍐呭
-     */
-    private String content;
-    /**
-     * 鍙嶉鍥剧墖
-     */
-    private String image;
-    /**
-     * 鍙嶉闊抽
-     */
-    private String audio;
-    /**
-     * 鍙嶉瑙嗛
-     */
-    private String video;
-    /**
-     * 鍙嶉浜烘墜鏈哄彿
-     */
-    private String phone;
-    /**
-     * 鍙嶉浜篿d(鍐滄埛ID)
-     */
-    private String feedbackerId;
-    /**
-     * 鍙嶉浜哄悕绉�
-     */
-    private String feedbackerName;
-    /**
-     * 鍙嶉鏃堕棿
-     */
-    private String feedbackTime;
-    /**
-     * 鍙嶉鍦板潃
-     */
-    private String lng;//缁忓害
-    private String lat;//绾害
-    /**
-     * 鍙嶉鐘舵��
-     */
-    private Byte state;
-
-
-
-}
diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voOp/VofeedbackReply.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voOp/VofeedbackReply.java
deleted file mode 100644
index bc10947..0000000
--- a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voOp/VofeedbackReply.java
+++ /dev/null
@@ -1,40 +0,0 @@
-package com.dy.pipIrrGlobal.voOp;
-
-import com.dy.common.po.BaseEntity;
-import lombok.Data;
-
-import java.util.Date;
-
-/**
- * @author :WuZeYu
- * @Date :2024/8/1  20:07
- * @LastEditTime :2024/8/1  20:07
- * @Description
- */
-@Data
-public class VofeedbackReply implements BaseEntity {
-    private static final long serialVersionUID = 202408012009001L;
-    /**
-     * 涓婚敭id
-     */
-    private String id;
-    /**
-     * 鍙嶉缂栧彿
-     */
-    private String feedbackId;
-
-    /**
-     * 鍥炲鍐呭
-     */
-    private String replyContent;
-
-    /**
-     * 鍥炲鏃堕棿
-     */
-    private Date replyTime;
-
-    /**
-     * 鍥炲浜篒D
-     */
-    private String replierId;
-}
diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voRm/VoRtuProgram.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voRm/VoRtuProgram.java
new file mode 100644
index 0000000..2f7433b
--- /dev/null
+++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voRm/VoRtuProgram.java
@@ -0,0 +1,63 @@
+package com.dy.pipIrrGlobal.voRm;
+
+import com.alibaba.fastjson2.annotation.JSONField;
+import com.alibaba.fastjson2.writer.ObjectWriterImplToString;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.dy.common.po.BaseEntity;
+import com.dy.pipIrrGlobal.pojoRm.UgRtuProgram;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import org.hibernate.validator.constraints.Length;
+import org.springframework.web.multipart.MultipartFile;
+
+/**
+ * @Author: liurunyu
+ * @Date: 2024/11/5 11:24
+ * @Description
+ */
+@Data
+@Schema(title = "RTU绋嬪簭瑙嗗浘瀵硅薄")
+public class VoRtuProgram implements BaseEntity {
+
+    private static final long serialVersionUID = 202411061126001L;
+    /**
+     * 涓婚敭
+     */
+    @Schema(description = "涓婚敭", requiredMode = Schema.RequiredMode.REQUIRED)
+    @JSONField(serializeUsing= ObjectWriterImplToString.class)
+    public Long id;
+
+
+    /**
+     * 鍗囩骇绋嬪簭瀛樻斁鍦板潃(4瀛楄妭锛�8浣嶅崄鍏繘鍒跺瓧绗�)
+     */
+    @Schema(description = "鍗囩骇绋嬪簭瀛樻斁鍦板潃", requiredMode = Schema.RequiredMode.REQUIRED)
+    public String storeRamAddr;
+
+    /**
+     * 绋嬪簭瑕嗙洊瓒呭鍦板潃锛�4瀛楄妭锛�8浣嶅崄鍏繘鍒跺瓧绗︼級
+     */
+    @Schema(description = "绋嬪簭瑕嗙洊瓒呭鍦板潃", requiredMode = Schema.RequiredMode.REQUIRED)
+    public String startRamAddr;
+
+    /**
+     * 鍗囩骇绋嬪簭鍐呭锛堢▼搴忔枃浠跺唴瀹瑰瓧鑺傛暟缁勶級
+     */
+    @Schema(description = "绋嬪簭鏂囦欢", requiredMode = Schema.RequiredMode.REQUIRED)
+    public MultipartFile file;
+
+    /**
+     * 澶囨敞
+     */
+    @Schema(description = "澶囨敞", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    @Length(message = "澶囨敞涓嶅ぇ浜巤max}瀛楋紝涓嶅皬浜巤min}瀛�", min = 1, max = 100)
+    public String remark;
+
+    public void toPo(UgRtuProgram po){
+        po.storeRamAddr = this.storeRamAddr ;
+        po.startRamAddr = this.startRamAddr ;
+        po.remark = this.remark ;
+    }
+
+}
diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voRm/VoRtuTask.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voRm/VoRtuTask.java
new file mode 100644
index 0000000..a12aae5
--- /dev/null
+++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voRm/VoRtuTask.java
@@ -0,0 +1,58 @@
+package com.dy.pipIrrGlobal.voRm;
+
+import com.alibaba.fastjson2.annotation.JSONField;
+import com.alibaba.fastjson2.writer.ObjectWriterImplToString;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.dy.common.po.BaseEntity;
+import com.dy.pipIrrGlobal.pojoRm.UgRtuProgram;
+import com.dy.pipIrrGlobal.pojoRm.UgRtuTask;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import org.hibernate.validator.constraints.Length;
+import org.springframework.web.multipart.MultipartFile;
+
+/**
+ * @Author: liurunyu
+ * @Date: 2024/11/7 13:24
+ * @Description
+ */
+@Data
+@Schema(title = "RTU绋嬪簭瑙嗗浘瀵硅薄")
+public class VoRtuTask implements BaseEntity {
+
+    private static final long serialVersionUID = 202411071357001L;
+    /**
+     * 涓婚敭
+     */
+    @Schema(description = "涓婚敭", requiredMode = Schema.RequiredMode.REQUIRED)
+    @JSONField(serializeUsing= ObjectWriterImplToString.class)
+    public Long id;
+
+    /**
+     * 澶栭敭锛屾寚鍚戝崌绾х▼搴�
+     */
+    @Schema(description = "澶栭敭锛屾寚鍚戝崌绾х▼搴�", requiredMode = Schema.RequiredMode.REQUIRED)
+    @JSONField(serializeUsing= ObjectWriterImplToString.class)
+    public Long programId;
+
+    /**
+     * 鍒涘缓浜�
+     */
+    @Schema(description = "鍒涘缓浜�", requiredMode = Schema.RequiredMode.REQUIRED)
+    @Length(message = "澶囨敞涓嶅ぇ浜巤max}瀛楋紝涓嶅皬浜巤min}瀛�", min = 1, max = 50)
+    public String creator;
+    /**
+     * 澶囨敞
+     */
+    @Schema(description = "澶囨敞", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    @Length(message = "澶囨敞涓嶅ぇ浜巤max}瀛楋紝涓嶅皬浜巤min}瀛�", min = 1, max = 100)
+    public String remark;
+
+    public void toPo(UgRtuTask po){
+        po.programId = this.programId ;
+        po.creator = this.creator ;
+        po.remark = this.remark ;
+    }
+
+}
diff --git a/pipIrr-platform/pipIrr-global/src/main/resources/application-global.yml b/pipIrr-platform/pipIrr-global/src/main/resources/application-global.yml
index 8375871..7564bf5 100644
--- a/pipIrr-platform/pipIrr-global/src/main/resources/application-global.yml
+++ b/pipIrr-platform/pipIrr-global/src/main/resources/application-global.yml
@@ -381,4 +381,4 @@
 #铏氭嫙鍗¢厤缃弬鏁�
 vc:
     #铏氭嫙鍗℃渶浣庝綑棰濇姤璀﹀��
-    alarmValue: 10
+    alarmValue: 10
\ No newline at end of file
diff --git a/pipIrr-platform/pipIrr-global/src/main/resources/mapper/OpeProcessingResultMapper.xml b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/OpeProcessingResultMapper.xml
index 96a1a32..56a5430 100644
--- a/pipIrr-platform/pipIrr-global/src/main/resources/mapper/OpeProcessingResultMapper.xml
+++ b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/OpeProcessingResultMapper.xml
@@ -194,4 +194,9 @@
       deleted = #{deleted,jdbcType=BIGINT}
     where id = #{id,jdbcType=BIGINT}
   </update>
+
+  <!--鏍规嵁workOrderId鑾峰彇鏈垹闄ょ殑澶勭悊缁撴灉鏁伴噺锛屾坊鍔犵粨鏋滀笂鎶ュ墠鍒ゆ柇浣跨敤-->
+  <select id="getValidResultCount" resultType="java.lang.Integer">
+    SELECT COUNT(*) FROM  ope_processing_result WHERE deleted = 0 AND work_order_id = #{workOrderId}
+  </select>
 </mapper>
\ No newline at end of file
diff --git a/pipIrr-platform/pipIrr-global/src/main/resources/mapper/OpeWorkOrderMapper.xml b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/OpeWorkOrderMapper.xml
index ea42de9..9e2a155 100644
--- a/pipIrr-platform/pipIrr-global/src/main/resources/mapper/OpeWorkOrderMapper.xml
+++ b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/OpeWorkOrderMapper.xml
@@ -13,6 +13,8 @@
     <result column="dead_line" jdbcType="TIMESTAMP" property="deadLine" />
     <result column="complete_time" jdbcType="TIMESTAMP" property="completeTime" />
     <result column="dispatch_time" jdbcType="TIMESTAMP" property="dispatchTime" />
+    <result column="client_report_id" jdbcType="BIGINT" property="clientReportId" />
+    <result column="inspector_report_id" jdbcType="BIGINT" property="inspectorReportId" />
     <result column="state" jdbcType="TINYINT" property="state" />
     <result column="reject_times" jdbcType="INTEGER" property="rejectTimes" />
     <result column="deleted" jdbcType="BIGINT" property="deleted" />
@@ -20,7 +22,8 @@
   <sql id="Base_Column_List">
     <!--@mbg.generated-->
     id, dispatcher_id, inspector_id, task_type_id, task_content, complete_criteria, dead_line, 
-    complete_time, dispatch_time, `state`, reject_times, deleted
+    complete_time, dispatch_time, client_report_id, inspector_report_id, `state`, reject_times, 
+    deleted
   </sql>
   <select id="selectByPrimaryKey" parameterType="java.lang.Long" resultMap="BaseResultMap">
     <!--@mbg.generated-->
@@ -39,13 +42,13 @@
     insert into ope_work_order (id, dispatcher_id, inspector_id, 
       task_type_id, task_content, complete_criteria, 
       dead_line, complete_time, dispatch_time, 
-      `state`, reject_times, deleted
-      )
+      client_report_id, inspector_report_id, `state`, 
+      reject_times, deleted)
     values (#{id,jdbcType=BIGINT}, #{dispatcherId,jdbcType=BIGINT}, #{inspectorId,jdbcType=BIGINT}, 
       #{taskTypeId,jdbcType=BIGINT}, #{taskContent,jdbcType=VARCHAR}, #{completeCriteria,jdbcType=VARCHAR}, 
       #{deadLine,jdbcType=TIMESTAMP}, #{completeTime,jdbcType=TIMESTAMP}, #{dispatchTime,jdbcType=TIMESTAMP}, 
-      #{state,jdbcType=TINYINT}, #{rejectTimes,jdbcType=INTEGER}, #{deleted,jdbcType=BIGINT}
-      )
+      #{clientReportId,jdbcType=BIGINT}, #{inspectorReportId,jdbcType=BIGINT}, #{state,jdbcType=TINYINT}, 
+      #{rejectTimes,jdbcType=INTEGER}, #{deleted,jdbcType=BIGINT})
   </insert>
   <insert id="insertSelective" parameterType="com.dy.pipIrrGlobal.pojoOp.OpeWorkOrder">
     <!--@mbg.generated-->
@@ -77,6 +80,12 @@
       </if>
       <if test="dispatchTime != null">
         dispatch_time,
+      </if>
+      <if test="clientReportId != null">
+        client_report_id,
+      </if>
+      <if test="inspectorReportId != null">
+        inspector_report_id,
       </if>
       <if test="state != null">
         `state`,
@@ -115,6 +124,12 @@
       </if>
       <if test="dispatchTime != null">
         #{dispatchTime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="clientReportId != null">
+        #{clientReportId,jdbcType=BIGINT},
+      </if>
+      <if test="inspectorReportId != null">
+        #{inspectorReportId,jdbcType=BIGINT},
       </if>
       <if test="state != null">
         #{state,jdbcType=TINYINT},
@@ -155,6 +170,12 @@
       <if test="dispatchTime != null">
         dispatch_time = #{dispatchTime,jdbcType=TIMESTAMP},
       </if>
+      <if test="clientReportId != null">
+        client_report_id = #{clientReportId,jdbcType=BIGINT},
+      </if>
+      <if test="inspectorReportId != null">
+        inspector_report_id = #{inspectorReportId,jdbcType=BIGINT},
+      </if>
       <if test="state != null">
         `state` = #{state,jdbcType=TINYINT},
       </if>
@@ -178,9 +199,137 @@
       dead_line = #{deadLine,jdbcType=TIMESTAMP},
       complete_time = #{completeTime,jdbcType=TIMESTAMP},
       dispatch_time = #{dispatchTime,jdbcType=TIMESTAMP},
+      client_report_id = #{clientReportId,jdbcType=BIGINT},
+      inspector_report_id = #{inspectorReportId,jdbcType=BIGINT},
       `state` = #{state,jdbcType=TINYINT},
       reject_times = #{rejectTimes,jdbcType=INTEGER},
       deleted = #{deleted,jdbcType=BIGINT}
     where id = #{id,jdbcType=BIGINT}
   </update>
+
+  <!--鏍规嵁涓婚敭鑾峰彇宸ュ崟瑙嗗浘瀵硅薄-->
+  <select id="getWorkOrderById" resultType="com.dy.pipIrrGlobal.voOp.VoWorkOrder">
+    SELECT
+        ord.id AS workOrderId,
+        ord.dispatcher_id AS dispatcherId,
+        us1.name AS dispatcher,
+        ord.inspector_id AS inspectorId,
+        us2.name AS inspector,
+        typ.task_type AS taskType,
+        ord.task_content AS taskContent,
+        ord.complete_criteria AS completeCriteria,
+        ord.dead_line AS deadLine,
+        ord.client_report_id AS clientReportId,
+        ord.inspector_report_id AS inspectorReportId,
+        ord.complete_time AS completeTime,
+        ord.dispatch_time AS dispatchTime,
+        ord.reject_times AS rejectTimes,
+        CASE
+            WHEN ord.state = 1 THEN '鏈畬鎴�'
+            WHEN ord.state = 2 THEN '宸插畬鎴�'
+        END AS state,
+        CASE
+            WHEN res.state = 1 THEN	'宸蹭笂鎶�'
+            WHEN res.state = 2 THEN	'宸查�氳繃'
+            WHEN res.state = 3 THEN	'宸查┏鍥�'
+            ELSE '鏈笂鎶�'
+        END AS processingState
+    FROM ope_work_order ord
+        INNER JOIN ba_user us1 ON us1.id = ord.dispatcher_id
+        INNER JOIN ba_user us2 ON us2.id = ord.inspector_id
+        INNER JOIN ope_task_type typ ON typ.id = ord.task_type_id
+        LEFT JOIN ope_processing_result res ON res.work_order_id = ord.id
+    WHERE ord.deleted = 0 AND ord.id = #{workOrderId}
+  </select>
+
+  <!--鑾峰彇鎸囧畾娲惧崟浜虹殑鎸囧畾鏈垹闄ゅ伐鍗曪紝鍒犻櫎宸ュ崟鍓嶅垽鏂娇鐢ㄤ娇鐢�-->
+  <select id="getWorkOrder" resultType="com.dy.pipIrrGlobal.pojoOp.OpeWorkOrder">
+    SELECT * FROM ope_work_order
+    WHERE deleted = 0 AND id = #{workOrderId} AND dispatcher_id = #{dispatcherId} LIMIT 1
+  </select>
+
+  <!--閫昏緫鍒犻櫎涓�涓湭鍒犻櫎鐨勫伐鍗�-->
+  <update id="deleteWorkOrder">
+    UPDATE ope_work_order SET deleted = UNIX_TIMESTAMP() WHERE deleted = 0 AND id = #{workOrderId}
+  </update>
+
+<!--  鏍规嵁鎸囧畾鏉′欢鑾峰彇宸ュ崟鏁伴噺-->
+  <select id="getWorkOrdersCount" resultType="java.lang.Long">
+    select
+      COUNT(*) AS recordCount
+    FROM ope_work_order ord
+    INNER JOIN ba_user us1 ON us1.id = ord.dispatcher_id
+    INNER JOIN ba_user us2 ON us2.id = ord.inspector_id
+    INNER JOIN ope_task_type typ ON typ.id = ord.task_type_id
+    LEFT JOIN ope_processing_result res ON res.work_order_id = ord.id
+    <where>
+      AND ord.deleted = 0
+
+      <if test = "dispatcher != null and dispatcher !=''">
+        AND us1.name like CONCAT('%',#{dispatcher},'%')
+      </if>
+
+      <if test = "inspector != null and inspector !=''">
+        AND us2.name like CONCAT('%',#{inspector},'%')
+      </if>
+
+      <if test = "timeStart != null and timeStop != null">
+        AND ord.dispatch_time BETWEEN #{timeStart} AND #{timeStop}
+      </if>
+    </where>
+  </select>
+
+  <select id="getWorkOrders" resultType="com.dy.pipIrrGlobal.voOp.VoWorkOrder">
+    SELECT
+        ord.id AS workOrderId,
+        ord.dispatcher_id AS dispatcherId,
+        us1.name AS dispatcher,
+        ord.inspector_id AS inspectorId,
+        us2.name AS inspector,
+        typ.task_type AS taskType,
+        ord.task_content AS taskContent,
+        ord.complete_criteria AS completeCriteria,
+        ord.dead_line AS deadLine,
+        ord.client_report_id AS clientReportId,
+        ord.inspector_report_id AS inspectorReportId,
+        ord.complete_time AS completeTime,
+        ord.dispatch_time AS dispatchTime,
+        ord.reject_times AS rejectTimes,
+        CASE
+            WHEN ord.state = 1 THEN '鏈畬鎴�'
+            WHEN ord.state = 2 THEN '宸插畬鎴�'
+        END AS state,
+        CASE
+            WHEN res.state = 1 THEN	'宸蹭笂鎶�'
+            WHEN res.state = 2 THEN	'宸查�氳繃'
+            WHEN res.state = 3 THEN	'宸查┏鍥�'
+            ELSE '鏈笂鎶�'
+        END AS processingState
+    FROM ope_work_order ord
+        INNER JOIN ba_user us1 ON us1.id = ord.dispatcher_id
+        INNER JOIN ba_user us2 ON us2.id = ord.inspector_id
+        INNER JOIN ope_task_type typ ON typ.id = ord.task_type_id
+        LEFT JOIN ope_processing_result res ON res.work_order_id = ord.id
+    <where>
+      AND ord.deleted = 0
+
+      <if test = "dispatcher != null and dispatcher !=''">
+        AND us1.name like CONCAT('%',#{dispatcher},'%')
+      </if>
+
+      <if test = "inspector != null and inspector !=''">
+        AND us2.name like CONCAT('%',#{inspector},'%')
+      </if>
+
+      <if test = "timeStart != null and timeStop != null">
+        AND ord.dispatch_time BETWEEN #{timeStart} AND #{timeStop}
+      </if>
+    </where>
+    ORDER BY ord.dispatch_time DESC
+    <trim prefix="limit " >
+      <if test="start != null and count != null">
+        #{start,javaType=Integer,jdbcType=INTEGER}, #{count,javaType=Integer,jdbcType=INTEGER}
+      </if>
+    </trim>
+  </select>
 </mapper>
\ No newline at end of file
diff --git a/pipIrr-platform/pipIrr-global/src/main/resources/mapper/PrControllerMapper.xml b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/PrControllerMapper.xml
index b25dfc9..fe7b623 100644
--- a/pipIrr-platform/pipIrr-global/src/main/resources/mapper/PrControllerMapper.xml
+++ b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/PrControllerMapper.xml
@@ -191,16 +191,7 @@
     SELECT
         COUNT(*) AS recordCount
     FROM pr_controller con
-    LEFT JOIN pr_intake_controller ic ON ic.controllerId = con.id
     INNER JOIN pr_intake inta ON con.intakeId = inta.id
-    left JOIN JSON_TABLE(
-    <!--'[{"rtuAddr":"37142501020100215","isOnLine":true},{"rtuAddr":"4000004","isOnLine":true},{"rtuAddr":"dy20240325","isOnLine":false}]',-->
-        #{onLineMap},
-        '$[*]' COLUMNS(
-        rtuAddr VARCHAR(20) PATH '$.rtuAddr',
-        isOnLine BOOLEAN PATH '$.isOnLine'
-        )
-    ) rtus ON con.rtuAddr = rtus.rtuAddr
     <where>
       AND con.deleted = 0
 
@@ -208,15 +199,18 @@
         AND con.id = #{id}
       </if>
       <if test = "rtuAddr != null and rtuAddr !=''">
-        AND con.rtuAddr like CONCAT('%',#{rtuAddr},'%')
+        AND con.rtuAddr = #{rtuAddr}
       </if>
-      <if test="isOnLine != null and isOnLine !='' ">
-        AND rtus.isOnLine = #{isOnLine}
+      <if test = "intakeNum != null and intakeNum !=''">
+        AND inta.name like CONCAT('%',#{intakeNum},'%')
       </if>
-      <if test = "bindNumber != null and bindNumber > 0">
-        AND (SELECT COUNT(*) FROM pr_intake_controller WHERE controllerId = con.id AND intakeId = inta.id AND operateType = 1) = #{bindNumber}
+      <if test = "protocolName != null and protocolName !=''">
+        AND con.protocol = #{protocolName}
       </if>
-    </where>
+      <if test = "protocolVersion != null">
+        AND con.protocol_version = #{protocolVersion}
+      </if>
+     </where>
   </select>
 
   <!--鏍规嵁鎸囧畾鏉′欢鑾峰彇鎺у埗鍣ㄨ褰�-->
@@ -228,37 +222,28 @@
         con.protocol,
         con.protocol_version,
         inta.remarks,
-        rtus.isOnLine,
-        (SELECT COUNT(*) FROM pr_intake_controller WHERE controllerId = con.id AND operateType = 1) AS bindNumber,
         con.findDt AS findDt
     FROM pr_controller con
-        LEFT JOIN pr_intake_controller ic ON ic.controllerId = con.id
         INNER JOIN pr_intake inta ON con.intakeId = inta.id
-        left JOIN JSON_TABLE(
-        <!--'[{"rtuAddr":"37142501020100215","isOnLine":true},{"rtuAddr":"4000004","isOnLine":true},{"rtuAddr":"dy20240325","isOnLine":false}]',-->
-             #{onLineMap},
-             '$[*]' COLUMNS(
-             rtuAddr VARCHAR(20) PATH '$.rtuAddr',
-             isOnLine BOOLEAN PATH '$.isOnLine'
-             )
-        ) rtus ON con.rtuAddr = rtus.rtuAddr
     <where>
       AND con.deleted = 0
-
       <if test = "id != null and id > 0">
         AND con.id = #{id}
       </if>
       <if test = "rtuAddr != null and rtuAddr !=''">
-        AND con.rtuAddr like CONCAT('%',#{rtuAddr},'%')
+        AND con.rtuAddr = #{rtuAddr}
       </if>
-      <if test="isOnLine != null and isOnLine !='' ">
-        AND rtus.isOnLine = #{isOnLine}
+      <if test = "intakeNum != null and intakeNum !=''">
+        AND inta.name like CONCAT('%',#{intakeNum},'%')
       </if>
-      <if test = "bindNumber != null and bindNumber > 0">
-        AND (SELECT COUNT(*) FROM pr_intake_controller WHERE controllerId = con.id AND operateType = 1) = #{bindNumber}
+      <if test = "protocolName != null and protocolName !=''">
+        AND con.protocol = #{protocolName}
+      </if>
+      <if test = "protocolVersion != null">
+        AND con.protocol_version = #{protocolVersion}
       </if>
     </where>
-    ORDER BY con.operateDt DESC
+    ORDER BY con.id DESC
     <trim prefix="limit " >
       <if test="start != null and count != null">
         #{start,javaType=Integer,jdbcType=INTEGER}, #{count,javaType=Integer,jdbcType=INTEGER}
diff --git a/pipIrr-platform/pipIrr-global/src/main/resources/mapper/UgRtuControllerMapper.xml b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/UgRtuControllerMapper.xml
new file mode 100644
index 0000000..7618f96
--- /dev/null
+++ b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/UgRtuControllerMapper.xml
@@ -0,0 +1,180 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.dy.pipIrrGlobal.daoRm.UgRtuControllerMapper">
+  <resultMap id="BaseResultMap" type="com.dy.pipIrrGlobal.pojoRm.UgRtuController">
+    <!--@mbg.generated-->
+    <!--@Table ug_rtu_controller-->
+    <id column="id" jdbcType="BIGINT" property="id" />
+    <result column="task_id" jdbcType="BIGINT" property="taskId" />
+    <result column="controller_id" jdbcType="BIGINT" property="controllerId" />
+    <result column="rtu_addr" jdbcType="VARCHAR" property="rtuAddr" />
+  </resultMap>
+  <sql id="Base_Column_List">
+    <!--@mbg.generated-->
+    id, task_id, controller_id, rtu_addr
+  </sql>
+  <select id="selectByPrimaryKey" parameterType="java.lang.Long" resultMap="BaseResultMap">
+    <!--@mbg.generated-->
+    select 
+    <include refid="Base_Column_List" />
+    from ug_rtu_controller
+    where id = #{id,jdbcType=BIGINT}
+  </select>
+
+  <!--鏍规嵁鎸囧畾鏉′欢鑾峰彇鎺у埗鍣ㄨ褰曟暟-->
+  <select id="selectRecordCount" resultType="java.lang.Long">
+    SELECT
+    COUNT(*) AS recordCount
+    FROM pr_controller con
+    INNER JOIN ug_rtu_controller rc ON rc.controller_id = con.id
+    INNER JOIN pr_intake inta ON con.intakeId = inta.id
+    <where>
+      <if test = "taskId != null and taskId > 0">
+        AND rc.task_id = #{taskId}
+      </if>
+      <if test = "rtuAddr != null and rtuAddr !=''">
+        AND con.rtuAddr = #{rtuAddr}
+      </if>
+      <if test = "intakeNum != null and intakeNum !=''">
+        AND inta.name like CONCAT('%',#{intakeNum},'%')
+      </if>
+      <if test = "protocolName != null and protocolName !=''">
+        AND con.protocol = #{protocolName}
+      </if>
+      <if test = "protocolVersion != null">
+        AND con.protocol_version = #{protocolVersion}
+      </if>
+    </where>
+  </select>
+
+  <!--鏍规嵁鎸囧畾鏉′欢鑾峰彇鎺у埗鍣ㄨ褰�-->
+  <select id="selectControllers" resultType="com.dy.pipIrrGlobal.voPr.VoController">
+    SELECT
+    CAST(con.id AS char) AS id,
+    con.rtuAddr AS rtuAddr,
+    inta.name AS intakeName,
+    con.protocol,
+    con.protocol_version,
+    inta.remarks,
+    con.findDt AS findDt
+    FROM pr_controller con
+    INNER JOIN ug_rtu_controller rc ON rc.controller_id = con.id
+    INNER JOIN pr_intake inta ON con.intakeId = inta.id
+    <where>
+      AND con.deleted = 0
+      <if test = "taskId != null and taskId > 0">
+        AND rc.task_id = #{taskId}
+      </if>
+      <if test = "rtuAddr != null and rtuAddr !=''">
+        AND con.rtuAddr like CONCAT('%',#{rtuAddr},'%')
+      </if>
+      <if test = "intakeNum != null and intakeNum !=''">
+        AND inta.name like CONCAT('%',#{intakeNum},'%')
+      </if>
+      <if test = "protocolName != null and protocolName !=''">
+        AND con.protocol = #{protocolName}
+      </if>
+      <if test = "protocolVersion != null">
+        AND con.protocol_version = #{protocolVersion}
+      </if>
+    </where>
+    ORDER BY con.id DESC
+    <trim prefix="limit " >
+      <if test="start != null and count != null">
+        #{start,javaType=Integer,jdbcType=INTEGER}, #{count,javaType=Integer,jdbcType=INTEGER}
+      </if>
+    </trim>
+  </select>
+
+  <select id="selectAllConByTask" parameterType="java.lang.Long" resultMap="BaseResultMap">
+    <!--@mbg.generated-->
+    select
+    <include refid="Base_Column_List" />
+    from ug_rtu_controller
+    where task_id = #{taskId,jdbcType=BIGINT}
+  </select>
+
+  <select id="selectCountByTaskAndCon" resultType="java.lang.Long">
+    <!--@mbg.generated-->
+    select
+    count(*)
+    from ug_rtu_controller
+    <where>
+      <if test="taskId != null">
+        AND task_id = #{taskId,jdbcType=BIGINT}
+      </if>
+      <if test="conId != null">
+        AND controller_id =  #{conId,jdbcType=BIGINT}
+      </if>
+    </where>
+  </select>
+
+  <delete id="deleteByPrimaryKey" parameterType="java.lang.Long">
+    <!--@mbg.generated-->
+    delete from ug_rtu_controller
+    where id = #{id,jdbcType=BIGINT}
+  </delete>
+  <insert id="insert" parameterType="com.dy.pipIrrGlobal.pojoRm.UgRtuController">
+    <!--@mbg.generated-->
+    insert into ug_rtu_controller (id, task_id, controller_id, 
+      rtu_addr)
+    values (#{id,jdbcType=BIGINT}, #{taskId,jdbcType=BIGINT}, #{controllerId,jdbcType=BIGINT}, 
+      #{rtuAddr,jdbcType=VARCHAR})
+  </insert>
+  <insert id="insertSelective" parameterType="com.dy.pipIrrGlobal.pojoRm.UgRtuController">
+    <!--@mbg.generated-->
+    insert into ug_rtu_controller
+    <trim prefix="(" suffix=")" suffixOverrides=",">
+      <if test="id != null">
+        id,
+      </if>
+      <if test="taskId != null">
+        task_id,
+      </if>
+      <if test="controllerId != null">
+        controller_id,
+      </if>
+      <if test="rtuAddr != null">
+        rtu_addr,
+      </if>
+    </trim>
+    <trim prefix="values (" suffix=")" suffixOverrides=",">
+      <if test="id != null">
+        #{id,jdbcType=BIGINT},
+      </if>
+      <if test="taskId != null">
+        #{taskId,jdbcType=BIGINT},
+      </if>
+      <if test="controllerId != null">
+        #{controllerId,jdbcType=BIGINT},
+      </if>
+      <if test="rtuAddr != null">
+        #{rtuAddr,jdbcType=VARCHAR},
+      </if>
+    </trim>
+  </insert>
+  <update id="updateByPrimaryKeySelective" parameterType="com.dy.pipIrrGlobal.pojoRm.UgRtuController">
+    <!--@mbg.generated-->
+    update ug_rtu_controller
+    <set>
+      <if test="taskId != null">
+        task_id = #{taskId,jdbcType=BIGINT},
+      </if>
+      <if test="controllerId != null">
+        controller_id = #{controllerId,jdbcType=BIGINT},
+      </if>
+      <if test="rtuAddr != null">
+        rtu_addr = #{rtuAddr,jdbcType=VARCHAR},
+      </if>
+    </set>
+    where id = #{id,jdbcType=BIGINT}
+  </update>
+  <update id="updateByPrimaryKey" parameterType="com.dy.pipIrrGlobal.pojoRm.UgRtuController">
+    <!--@mbg.generated-->
+    update ug_rtu_controller
+    set task_id = #{taskId,jdbcType=BIGINT},
+      controller_id = #{controllerId,jdbcType=BIGINT},
+      rtu_addr = #{rtuAddr,jdbcType=VARCHAR}
+    where id = #{id,jdbcType=BIGINT}
+  </update>
+</mapper>
\ No newline at end of file
diff --git a/pipIrr-platform/pipIrr-global/src/main/resources/mapper/UgRtuProgramMapper.xml b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/UgRtuProgramMapper.xml
new file mode 100644
index 0000000..b281fdb
--- /dev/null
+++ b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/UgRtuProgramMapper.xml
@@ -0,0 +1,225 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.dy.pipIrrGlobal.daoRm.UgRtuProgramMapper">
+  <resultMap id="BaseResultMap" type="com.dy.pipIrrGlobal.pojoRm.UgRtuProgram">
+    <!--@mbg.generated-->
+    <!--@Table ug_rtu_program-->
+    <id column="id" jdbcType="BIGINT" property="id" />
+    <result column="hex_file_name" jdbcType="VARCHAR" property="hexFileName" />
+    <result column="store_ram_addr" jdbcType="VARCHAR" property="storeRamAddr" />
+    <result column="start_ram_addr" jdbcType="VARCHAR" property="startRamAddr" />
+    <result column="program_calculate_bytes" jdbcType="INTEGER" property="programCalculateBytes" />
+    <result column="program_crc16" jdbcType="INTEGER" property="programCrc16" />
+    <result column="program_bytes" jdbcType="BLOB" property="programBytes" />
+    <result column="file_bytes" jdbcType="BLOB" property="fileBytes" />
+    <result column="remark" jdbcType="VARCHAR" property="remark" />
+    <result column="dt" jdbcType="TIMESTAMP" property="dt" />
+    <result column="deleted" jdbcType="TINYINT" property="deleted" />
+  </resultMap>
+  <sql id="Base_Column_List">
+    <!--@mbg.generated-->
+    id, hex_file_name, store_ram_addr, start_ram_addr, program_calculate_bytes, program_crc16,
+    program_bytes, file_bytes, remark, dt, deleted
+  </sql>
+  <sql id="Base2_Column_List">
+    <!--@mbg.generated-->
+    id, hex_file_name, store_ram_addr, start_ram_addr, program_calculate_bytes, program_crc16,
+    remark, dt, deleted
+  </sql>
+  <select id="selectByPrimaryKey" parameterType="java.lang.Long" resultMap="BaseResultMap">
+    <!--@mbg.generated-->
+    select 
+    <include refid="Base_Column_List" />
+    from ug_rtu_program
+    where id = #{id,jdbcType=BIGINT}
+  </select>
+
+  <select id="selectTotal" parameterType="java.util.Map" resultType="java.lang.Long">
+    <!--@mbg.generated-->
+    select
+    count(*)
+    from ug_rtu_program bd
+    where bd.deleted != 1
+    <trim prefix="and" suffixOverrides="and">
+      <if test="name != null and name != ''">
+        bd.hex_file_name like concat('%', #{fileName}, '%') and
+      </if>
+    </trim>
+  </select>
+  <select id="selectSome" parameterType="java.util.Map" resultMap="BaseResultMap">
+    <!--@mbg.generated-->
+    select
+    <include refid="Base2_Column_List" >
+      <property name="alias" value="bd"/>
+    </include>
+    from ug_rtu_program bd
+    where bd.deleted != 1
+    <trim prefix="and" suffixOverrides="and">
+      <if test="name != null and name != ''">
+        bd.hex_file_name like concat('%', #{fileName}, '%') and
+      </if>
+    </trim>
+    order by bd.id DESC
+    <trim prefix="limit " >
+      <if test="start != null and count != null">
+        #{start,javaType=Integer,jdbcType=INTEGER}, #{count,javaType=Integer,jdbcType=INTEGER}
+      </if>
+    </trim>
+  </select>
+ <select id="selectAll" parameterType="java.util.Map" resultMap="BaseResultMap">
+    <!--@mbg.generated-->
+    select
+    id, hex_file_name
+    from ug_rtu_program bd
+    where bd.deleted != 1
+    order by bd.id DESC
+  </select>
+
+  <delete id="deleteByPrimaryKey" parameterType="java.lang.Long">
+    <!--@mbg.generated-->
+    delete from ug_rtu_program
+    where id = #{id,jdbcType=BIGINT}
+  </delete>
+  <delete id="deleteLogicById" parameterType="java.lang.Long">
+    <!--@mbg.generated-->
+    update ug_rtu_program set deleted = 1
+    where id = #{id,jdbcType=BIGINT}
+  </delete>
+  <insert id="insert" parameterType="com.dy.pipIrrGlobal.pojoRm.UgRtuProgram">
+    <!--@mbg.generated-->
+    insert into ug_rtu_program (id, hex_file_name, store_ram_addr, 
+      start_ram_addr, program_calculate_bytes, program_crc16, 
+      program_bytes,file_bytes, remark, dt,
+      deleted)
+    values (#{id,jdbcType=BIGINT}, #{hexFileName,jdbcType=VARCHAR}, #{storeRamAddr,jdbcType=VARCHAR}, 
+      #{startRamAddr,jdbcType=VARCHAR}, #{programCalculateBytes,jdbcType=INTEGER}, #{programCrc16,jdbcType=INTEGER},
+      #{programBytes,jdbcType=BLOB}, #{fileBytes,jdbcType=BLOB}, #{remark,jdbcType=VARCHAR}, #{dt,jdbcType=TIMESTAMP},
+      #{deleted,jdbcType=TINYINT})
+  </insert>
+  <insert id="insertSelective" parameterType="com.dy.pipIrrGlobal.pojoRm.UgRtuProgram">
+    <!--@mbg.generated-->
+    insert into ug_rtu_program
+    <trim prefix="(" suffix=")" suffixOverrides=",">
+      <if test="id != null">
+        id,
+      </if>
+      <if test="hexFileName != null">
+        hex_file_name,
+      </if>
+      <if test="storeRamAddr != null">
+        store_ram_addr,
+      </if>
+      <if test="startRamAddr != null">
+        start_ram_addr,
+      </if>
+      <if test="programCalculateBytes != null">
+        program_calculate_bytes,
+      </if>
+      <if test="programCrc16 != null">
+        program_crc16,
+      </if>
+      <if test="programBytes != null">
+        program_bytes,
+      </if>
+      <if test="fileBytes != null">
+        file_bytes,
+      </if>
+      <if test="remark != null">
+        remark,
+      </if>
+      <if test="dt != null">
+        dt,
+      </if>
+      <if test="deleted != null">
+        deleted,
+      </if>
+    </trim>
+    <trim prefix="values (" suffix=")" suffixOverrides=",">
+      <if test="id != null">
+        #{id,jdbcType=BIGINT},
+      </if>
+      <if test="hexFileName != null">
+        #{hexFileName,jdbcType=VARCHAR},
+      </if>
+      <if test="storeRamAddr != null">
+        #{storeRamAddr,jdbcType=VARCHAR},
+      </if>
+      <if test="startRamAddr != null">
+        #{startRamAddr,jdbcType=VARCHAR},
+      </if>
+      <if test="programCalculateBytes != null">
+        #{programCalculateBytes,jdbcType=INTEGER},
+      </if>
+      <if test="programCrc16 != null">
+        #{programCrc16,jdbcType=INTEGER},
+      </if>
+      <if test="programBytes != null">
+        #{programBytes,jdbcType=BLOB},
+      </if>
+      <if test="fileBytes != null">
+        #{fileBytes,jdbcType=BLOB},
+      </if>
+      <if test="remark != null">
+        #{remark,jdbcType=VARCHAR},
+      </if>
+      <if test="dt != null">
+        #{dt,jdbcType=TIMESTAMP},
+      </if>
+      <if test="deleted != null">
+        #{deleted,jdbcType=TINYINT},
+      </if>
+    </trim>
+  </insert>
+  <update id="updateByPrimaryKeySelective" parameterType="com.dy.pipIrrGlobal.pojoRm.UgRtuProgram">
+    <!--@mbg.generated-->
+    update ug_rtu_program
+    <set>
+      <if test="hexFileName != null">
+        hex_file_name = #{hexFileName,jdbcType=VARCHAR},
+      </if>
+      <if test="storeRamAddr != null">
+        store_ram_addr = #{storeRamAddr,jdbcType=VARCHAR},
+      </if>
+      <if test="startRamAddr != null">
+        start_ram_addr = #{startRamAddr,jdbcType=VARCHAR},
+      </if>
+      <if test="programCalculateBytes != null">
+        program_calculate_bytes = #{programCalculateBytes,jdbcType=INTEGER},
+      </if>
+      <if test="programCrc16 != null">
+        program_crc16 = #{programCrc16,jdbcType=INTEGER},
+      </if>
+      <if test="programBytes != null">
+        program_bytes = #{programBytes,jdbcType=BLOB},
+      </if>
+      <if test="fileBytes != null">
+        file_bytes = #{fileBytes,jdbcType=BLOB},
+      </if>
+      <if test="remark != null">
+        remark = #{remark,jdbcType=VARCHAR},
+      </if>
+      <if test="dt != null">
+        dt = #{dt,jdbcType=TIMESTAMP},
+      </if>
+      <if test="deleted != null">
+        deleted = #{deleted,jdbcType=TINYINT},
+      </if>
+    </set>
+    where id = #{id,jdbcType=BIGINT}
+  </update>
+  <update id="updateByPrimaryKey" parameterType="com.dy.pipIrrGlobal.pojoRm.UgRtuProgram">
+    <!--@mbg.generated-->
+    update ug_rtu_program
+    set hex_file_name = #{hexFileName,jdbcType=VARCHAR},
+      store_ram_addr = #{storeRamAddr,jdbcType=VARCHAR},
+      start_ram_addr = #{startRamAddr,jdbcType=VARCHAR},
+      program_calculate_bytes = #{programCalculateBytes,jdbcType=INTEGER},
+      program_crc16 = #{programCrc16,jdbcType=INTEGER},
+      program_bytes = #{programBytes,jdbcType=BLOB},
+      file_bytes = #{fileBytes,jdbcType=BLOB},
+      remark = #{remark,jdbcType=VARCHAR},
+      dt = #{dt,jdbcType=TIMESTAMP},
+      deleted = #{deleted,jdbcType=TINYINT}
+    where id = #{id,jdbcType=BIGINT}
+  </update>
+</mapper>
\ No newline at end of file
diff --git a/pipIrr-platform/pipIrr-global/src/main/resources/mapper/UgRtuTaskMapper.xml b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/UgRtuTaskMapper.xml
new file mode 100644
index 0000000..50752e7
--- /dev/null
+++ b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/UgRtuTaskMapper.xml
@@ -0,0 +1,181 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.dy.pipIrrGlobal.daoRm.UgRtuTaskMapper">
+  <resultMap id="BaseResultMap" type="com.dy.pipIrrGlobal.pojoRm.UgRtuTask">
+    <!--@mbg.generated-->
+    <!--@Table ug_rtu_task-->
+    <id column="id" jdbcType="BIGINT" property="id" />
+    <result column="program_id" jdbcType="BIGINT" property="programId" />
+    <result column="creator" jdbcType="VARCHAR" property="creator" />
+    <result column="remark" jdbcType="VARCHAR" property="remark" />
+    <result column="dt" jdbcType="TIMESTAMP" property="dt" />
+    <result column="is_over" jdbcType="TINYINT" property="isOver" />
+    <result column="deleted" jdbcType="TINYINT" property="deleted" />
+  </resultMap>
+  <sql id="Base_Column_List">
+    <!--@mbg.generated-->
+    id, program_id, creator, remark, dt, is_over, deleted
+  </sql>
+  <select id="selectByPrimaryKey" parameterType="java.lang.Long" resultMap="BaseResultMap">
+    <!--@mbg.generated-->
+    select 
+    <include refid="Base_Column_List" />
+    from ug_rtu_task
+    where id = #{id,jdbcType=BIGINT}
+  </select>
+  <delete id="deleteByPrimaryKey" parameterType="java.lang.Long">
+    <!--@mbg.generated-->
+    delete from ug_rtu_task
+    where id = #{id,jdbcType=BIGINT}
+  </delete>
+  <delete id="deleteLogicById" parameterType="java.lang.Long">
+    <!--@mbg.generated-->
+    update ug_rtu_task set deleted = 1
+    where id = #{id,jdbcType=BIGINT}
+  </delete>
+
+
+  <select id="selectTotal" parameterType="java.util.Map" resultType="java.lang.Long">
+    <!--@mbg.generated-->
+    select
+    count(*)
+    from ug_rtu_task bd
+    where bd.deleted != 1
+    <trim prefix="and" suffixOverrides="and">
+      <if test="programId != null and programId != ''">
+        bd.program_id = #{programId} and
+      </if>
+     <if test="creator != null and creator != ''">
+        bd.creator like concat('%', #{creator}, '%') and
+      </if>
+    </trim>
+  </select>
+  <select id="selectSome" parameterType="java.util.Map" resultMap="BaseResultMap">
+    <!--@mbg.generated-->
+    select
+    <include refid="Base_Column_List" >
+      <property name="alias" value="bd"/>
+    </include>
+    from ug_rtu_task bd
+    where bd.deleted != 1
+    <trim prefix="and" suffixOverrides="and">
+      <if test="programId != null and programId != ''">
+        bd.program_id = #{programId} and
+      </if>
+      <if test="creator != null and creator != ''">
+        bd.creator like concat('%', #{creator}, '%') and
+      </if>
+    </trim>
+    order by bd.id DESC
+    <trim prefix="limit " >
+      <if test="start != null and count != null">
+        #{start,javaType=Integer,jdbcType=INTEGER}, #{count,javaType=Integer,jdbcType=INTEGER}
+      </if>
+    </trim>
+  </select>
+  <select id="selectAll" parameterType="java.util.Map" resultMap="BaseResultMap">
+    <!--@mbg.generated-->
+    select
+    id, hex_file_name
+    from ug_rtu_program bd
+    where bd.deleted != 1
+    order by bd.id DESC
+  </select>
+
+
+  <insert id="insert" parameterType="com.dy.pipIrrGlobal.pojoRm.UgRtuTask">
+    <!--@mbg.generated-->
+    insert into ug_rtu_task (id, program_id, creator, 
+      remark, dt, is_over, deleted
+      )
+    values (#{id,jdbcType=BIGINT}, #{programId,jdbcType=BIGINT}, #{creator,jdbcType=VARCHAR}, 
+      #{remark,jdbcType=VARCHAR}, #{dt,jdbcType=TIMESTAMP}, #{isOver,jdbcType=TINYINT}, #{deleted,jdbcType=TINYINT}
+      )
+  </insert>
+  <insert id="insertSelective" parameterType="com.dy.pipIrrGlobal.pojoRm.UgRtuTask">
+    <!--@mbg.generated-->
+    insert into ug_rtu_task
+    <trim prefix="(" suffix=")" suffixOverrides=",">
+      <if test="id != null">
+        id,
+      </if>
+      <if test="programId != null">
+        program_id,
+      </if>
+      <if test="creator != null">
+        creator,
+      </if>
+      <if test="remark != null">
+        remark,
+      </if>
+      <if test="dt != null">
+        dt,
+      </if>
+      <if test="isOver != null">
+        is_over,
+      </if>
+     <if test="deleted != null">
+       deleted,
+      </if>
+    </trim>
+    <trim prefix="values (" suffix=")" suffixOverrides=",">
+      <if test="id != null">
+        #{id,jdbcType=BIGINT},
+      </if>
+      <if test="programId != null">
+        #{programId,jdbcType=BIGINT},
+      </if>
+      <if test="creator != null">
+        #{creator,jdbcType=VARCHAR},
+      </if>
+      <if test="remark != null">
+        #{remark,jdbcType=VARCHAR},
+      </if>
+      <if test="dt != null">
+        #{dt,jdbcType=TIMESTAMP},
+      </if>
+      <if test="isOver != null">
+        #{isOver,jdbcType=TINYINT},
+      </if>
+     <if test="deleted != null">
+        #{deleted,jdbcType=TINYINT},
+      </if>
+    </trim>
+  </insert>
+  <update id="updateByPrimaryKeySelective" parameterType="com.dy.pipIrrGlobal.pojoRm.UgRtuTask">
+    <!--@mbg.generated-->
+    update ug_rtu_task
+    <set>
+      <if test="programId != null">
+        program_id = #{programId,jdbcType=BIGINT},
+      </if>
+      <if test="creator != null">
+        creator = #{creator,jdbcType=VARCHAR},
+      </if>
+      <if test="remark != null">
+        remark = #{remark,jdbcType=VARCHAR},
+      </if>
+      <if test="dt != null">
+        dt = #{dt,jdbcType=TIMESTAMP},
+      </if>
+      <if test="isOver != null">
+        is_over = #{isOver,jdbcType=TINYINT},
+      </if>
+      <if test="deleted != null">
+        deleted = #{deleted,jdbcType=TINYINT},
+      </if>
+    </set>
+    where id = #{id,jdbcType=BIGINT}
+  </update>
+  <update id="updateByPrimaryKey" parameterType="com.dy.pipIrrGlobal.pojoRm.UgRtuTask">
+    <!--@mbg.generated-->
+    update ug_rtu_task
+    set program_id = #{programId,jdbcType=BIGINT},
+      creator = #{creator,jdbcType=VARCHAR},
+      remark = #{remark,jdbcType=VARCHAR},
+      dt = #{dt,jdbcType=TIMESTAMP},
+      is_over = #{isOver,jdbcType=TINYINT},
+      deleted = #{deleted,jdbcType=TINYINT}
+    where id = #{id,jdbcType=BIGINT}
+  </update>
+</mapper>
\ No newline at end of file
diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/Server.java b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/Server.java
index 6cfbdba..5813c26 100644
--- a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/Server.java
+++ b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/Server.java
@@ -25,6 +25,8 @@
 import com.dy.common.util.ConfigXml4Springboot;
 import com.dy.common.util.IDLongGenerator;
 
+import com.dy.rtuMw.server.upgrade.UpgradeUnit;
+import com.dy.rtuMw.server.upgrade.UpgradeUnitConfigVo;
 import org.jdom2.Document;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
@@ -331,6 +333,21 @@
 			*/
 
 			/////////////////
+			//RTU杩滅▼鍗囩骇妯″潡
+			UpgradeUnitConfigVo ugVo = new UpgradeUnitConfigVo();
+			ugVo.enable = conf.getSetAttrBoolean(doc, "config.upgrade", "enable", null, null) ;
+			ugVo.failTryTimes = conf.getSetAttrPlusInt(doc, "config.upgrade", "failTryTimes", null, 0, 100, null);
+			ugVo.ugMaxRtuSameTime = conf.getSetAttrPlusInt(doc, "config.upgrade", "ugMaxRtuSameTime", null, 1, 1000000, null);
+			ugVo.showStartInfo = showStartInfo ;
+			AdapterImp_UpgradeUnit ugAdap = new AdapterImp_UpgradeUnit();
+			ugAdap.setConfig(ugVo);
+			UpgradeUnit ugUnit = UpgradeUnit.getInstance();
+			ugUnit.setAdapter(ugAdap);
+			ugUnit.start(obj -> {
+			});
+			units.add(ugUnit) ;
+
+			/////////////////
 			//RTU涓婅鏁版嵁澶勭悊妯″潡锛堜换鍔℃爲锛�
 			RtuDataUnitConfigVo rducVo = new RtuDataUnitConfigVo();
 			rducVo.resourceLoader = this.resourceLoader ;
diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/AdapterImp_UpgradeUnit.java b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/AdapterImp_UpgradeUnit.java
new file mode 100644
index 0000000..ecf5a22
--- /dev/null
+++ b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/AdapterImp_UpgradeUnit.java
@@ -0,0 +1,19 @@
+package com.dy.rtuMw.server;
+
+
+import com.dy.rtuMw.server.upgrade.UpgradeUnitAdapter;
+import com.dy.rtuMw.server.upgrade.UpgradeUnitConfigVo;
+
+public class AdapterImp_UpgradeUnit implements UpgradeUnitAdapter {
+	
+	private UpgradeUnitConfigVo configVo ;
+
+	public UpgradeUnitConfigVo getConfig() {
+		return configVo;
+	}
+	
+	public void setConfig(UpgradeUnitConfigVo configVo){
+		this.configVo = configVo ;
+	}
+
+}
diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/tasks/RtuUpTask.java b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/tasks/RtuUpTask.java
index 643ce6d..fe6e49c 100644
--- a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/tasks/RtuUpTask.java
+++ b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/tasks/RtuUpTask.java
@@ -2,6 +2,11 @@
 
 import java.net.InetSocketAddress;
 
+import com.dy.common.mw.protocol.*;
+import com.dy.common.springUtil.SpringContextUtil;
+import com.dy.common.util.Callback;
+import com.dy.rtuMw.server.upgrade.UpgradeUnit;
+import com.dy.rtuMw.web.com.CommandCtrl;
 import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
 import org.apache.mina.core.session.IoSession;
@@ -9,12 +14,6 @@
 import com.dy.common.mw.channel.tcp.TcpIoSessionAttrIdIsRtuAddr;
 import com.dy.common.mw.channel.tcp.TcpUnit;
 import com.dy.common.mw.core.CoreTask;
-import com.dy.common.mw.protocol.DriverParserDataCallback;
-import com.dy.common.mw.protocol.MidResult;
-import com.dy.common.mw.protocol.Driver;
-import com.dy.common.mw.protocol.OnLine;
-import com.dy.common.mw.protocol.OnLineHandle;
-import com.dy.common.mw.protocol.ProtocolCache;
 import com.dy.rtuMw.server.ServerProperties;
 import com.dy.rtuMw.server.forTcp.RtuLogDealer;
 import com.dy.rtuMw.server.forTcp.RtuStatusDealer;
@@ -210,6 +209,26 @@
 					}else{
 						RtuLogDealer.log(rtuAddr, (isOnLine?"涓婄嚎鏁版嵁 ":"涓婅鏁版嵁 ") +  code + ("锛�" + codeName + "锛�") + "锛�" + upHex);
 					}
+
+					//瑙﹀彂杩滅▼RTU杞欢鍗囩骇
+					UpgradeUnit.getInstance().trigger(rtuAddr, code, protocolName, protocolVersion, new Callback() {
+						@Override
+						public void call(Object obj) {
+							if(obj != null){
+								Command com = (Command)obj ;
+								CommandCtrl comCtrl = SpringContextUtil.getBean(CommandCtrl.class) ;
+								if(comCtrl != null){
+									comCtrl.sendOutComFromLocal(com) ;
+								}
+							}
+						}
+						@Override
+						public void call(Object... objs) {
+						}
+						@Override
+						public void exception(Exception e) {
+						}
+					});
 				}
 			}) ;
 			if(midRs != null){
diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/upgrade/UpgradeCode.java b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/upgrade/UpgradeCode.java
new file mode 100644
index 0000000..018829a
--- /dev/null
+++ b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/upgrade/UpgradeCode.java
@@ -0,0 +1,28 @@
+package com.dy.rtuMw.server.upgrade;
+
+/**
+ * @Author: liurunyu
+ * @Date: 2024/11/4 16:54
+ * @Description
+ */
+public class UpgradeCode {
+
+    public static final String cd_1600 = "1600" ;//鍗囩骇澶嶄綅
+    public static final String cd_1601 = "1601" ;//鍗囩骇閰嶇疆
+    public static final String cd_1602 = "1602" ;//鍗囩骇鏁版嵁
+    public static final String cd_1603 = "1603" ;//鍗囩骇鏍¢獙
+    public static final String cd_9601 = "9601" ;//鍗囩骇閰嶇疆
+    public static final String cd_9602 = "9602" ;//鍗囩骇鏁版嵁
+    public static final String cd_9603 = "9603" ;//鍗囩骇鏍¢獙
+
+    public boolean isUpgradeCode(String code) {
+        return cd_1600.equals(code)
+                || cd_1601.equals(code)
+                || cd_1602.equals(code)
+                || cd_1603.equals(code)
+                || cd_9601.equals(code)
+                || cd_9602.equals(code)
+                || cd_9603.equals(code);
+    }
+
+}
diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/upgrade/UpgradeManager.java b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/upgrade/UpgradeManager.java
new file mode 100644
index 0000000..aff5c1b
--- /dev/null
+++ b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/upgrade/UpgradeManager.java
@@ -0,0 +1,147 @@
+package com.dy.rtuMw.server.upgrade;
+
+import com.dy.common.util.Callback;
+
+import java.util.List;
+
+/**
+ * @Author: liurunyu
+ * @Date: 2024/11/4 16:03
+ * @Description
+ */
+public class UpgradeManager {
+
+    private static final UpgradeManager INSTANCE = new UpgradeManager();
+
+    private Integer failTryTimes ;//鍗囩骇澶辫触鍚庯紝閲嶆柊鍋胯瘯鍗囩骇娆℃暟锛�0琛ㄧず涓嶉噸鏂板伩璇曞崌绾�
+    private Integer ugMaxRtuSameTime ;//鍚屾椂鍗囩骇RTU鏈�澶т釜鏁�
+
+    private UpgradeTask task ;//鍗囩骇浠诲姟
+
+    private boolean taskIsOver = false ;//鍗囩骇浠诲姟鏄惁缁撴潫
+    private int triggerTimes = 0 ;//杩炴帴瑙﹀彂娆℃暟
+
+    private UpgradeManager(){}
+
+    public static UpgradeManager getInstance() {
+        return UpgradeManager.INSTANCE;
+    }
+
+    /**
+     *  鍒濆鍖栭厤缃俊鎭�
+     */
+    public void initOption(UpgradeUnitConfigVo configVo) {
+        this.failTryTimes = configVo.failTryTimes;
+        this.ugMaxRtuSameTime = configVo.ugMaxRtuSameTime;
+    }
+
+    /**
+     * 璁剧疆鍗囩骇浠诲姟
+     * @param softFileName 鍗囩骇绋嬪簭鏂囦欢鍚�
+     * @param softStoreAddr 鍗囩骇绋嬪簭瀛樻斁鍦板潃
+     * @param softStartAddr 绋嬪簭瑕嗙洊璧峰鍦板潃
+     * @param softFileData 鍗囩骇绋嬪簭瀛楄妭鏁扮粍
+     * @param softBytesCalculate 鍗囩骇绋嬪簭瀛楄妭鏁�(鎸夊叕寮忚绠�)
+     * @param rtuAddrList 鍗囩骇RTU
+     * @throws Exception
+     */
+    public void setUpgradeTask(String softFileName,
+                               String softStoreAddr,
+                               String softStartAddr,
+                               byte[] softFileData,
+                               Integer softBytesCalculate,
+                               List<String> rtuAddrList) throws Exception {
+        if(this.task != null && !this.task.isOver()){
+            throw new Exception("褰撳墠瀛樺湪鍗囩骇浠诲姟锛岃绛夊緟褰撳墠浠诲姟鎵ц瀹屾垨寮哄埗鍋滄褰撳墠浠诲姟");
+        }else{
+            this.task.forceOver();
+            this.task = new UpgradeTask();
+            this.task.initOption(this.failTryTimes, this.ugMaxRtuSameTime);
+            this.task.setTask(softFileName,
+                    softStoreAddr,
+                    softStartAddr,
+                    softFileData,
+                    softBytesCalculate,
+                    rtuAddrList);
+        }
+    }
+
+    /**
+     * 鍋滄褰撳墠鍗囩骇浠诲姟
+     * @throws Exception
+     */
+    public void stopUpgradeTask() throws Exception {
+        if(this.task != null){
+            this.task.forceOver();
+        }
+        this.task = null ;
+    }
+
+    /**
+     * RTU鏈変笂琛屾暟鎹簡锛岃Е鍙戜笅鍙戝崌绾ф暟鎹�
+     * @param rtuAddr
+     * @param code
+     * @param protocolName
+     * @param protocolVersion
+     * @param callback
+     */
+    public void trigger(String rtuAddr, String code, String protocolName, Short protocolVersion, Callback callback){
+        if(task != null && !taskIsOver){
+            triggerTimes ++ ;
+            if(triggerTimes == 100){
+                triggerTimes = 0 ;
+                if(this.task.isOver()){
+                    taskIsOver = true ;
+                }
+            }
+            if(!taskIsOver){
+                this.task.trigger(rtuAddr, code, protocolName, protocolVersion, callback);
+            }
+        }
+    }
+
+    ////////////////////////////////////////////////////
+    //
+    // 鏌ヨ鍗囩骇鐘舵�佷俊鎭�
+    //
+    ////////////////////////////////////////////////////
+    /**
+     * 褰撳墠鍗囩骇鐘舵��
+     * @return
+     */
+    public UpgradeState currentUpgradeState() {
+        if(task != null){
+            return task.currentUpgradeState() ;
+        }else{
+            return null ;
+        }
+    }
+
+    /**
+     * Rtu鍗囩骇淇℃伅
+     * @param rtuAddr
+     * @return
+     */
+    public UpgradeRtu upgradeInfos(String rtuAddr){
+        if(task != null){
+            return task.upgradeInfos(rtuAddr) ;
+        }else{
+            return null ;
+        }
+    }
+
+    /**
+     * Rtu鍗囩骇淇℃伅
+     * @param rtuAddrList
+     * @return
+     */
+    public List<UpgradeRtu> upgradeInfos(List<String> rtuAddrList){
+        if(task != null){
+            return task.upgradeInfos(rtuAddrList) ;
+        }else{
+            return null ;
+        }
+    }
+
+
+}
diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/upgrade/UpgradeRtu.java b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/upgrade/UpgradeRtu.java
new file mode 100644
index 0000000..20bd36a
--- /dev/null
+++ b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/upgrade/UpgradeRtu.java
@@ -0,0 +1,178 @@
+package com.dy.rtuMw.server.upgrade;
+
+import com.alibaba.fastjson2.annotation.JSONField;
+import com.dy.common.mw.protocol.Command;
+import com.dy.common.mw.protocol.CommandType;
+import com.dy.common.softUpgrade.Com1601Vo;
+import com.dy.common.util.Callback;
+import com.dy.common.util.DateTime;
+import lombok.Data;
+
+/**
+ * @Author: liurunyu
+ * @Date: 2024/11/4 15:00
+ * @Description
+ */
+@Data
+public class UpgradeRtu {
+
+    @JSONField(serialize = false)
+    public static final int STATE_UNSTART = 0 ;
+    @JSONField(serialize = false)
+    public static final int STATE_RUNNING = 1 ;
+    @JSONField(serialize = false)
+    public static final int STATE_SUCCESS = 2 ;
+    @JSONField(serialize = false)
+    public static final int STATE_FAILONE = 3 ;
+    @JSONField(serialize = false)
+    public static final int STATE_FAIL = 4 ;
+    @JSONField(serialize = false)
+    public static final int RAMADDRADD = 0x20 ;//绋嬪簭瀛樺偍鍐呭瓨鍦ㄥ潃澧為噺
+
+    @JSONField(serialize = false)
+    private UpgradeTask task ;
+
+    public String rtuAddr ;
+    public int state ;// 0-鏈紑濮嬶紝1-鍗囩骇涓紝2-鍗囩骇鎴愬姛锛�3-鍗囩骇澶辫触锛�1鍖呮锛夛紝4-鍗囩骇澶辫触锛堥潪1鍖呮锛�
+    public int totalPackage ;// 鎬诲寘鏁�
+    public int currentPackage ;// 褰撳墠涓嬪彂鍗囩骇鍖呮暟
+    public int currentRamAddr ;// 褰撳墠涓嬪彂鍗囩骇鍖匯TU瀛樺偍鍦板潃
+    public String lastDownDt ;// 鏈�鍚庝笅鍙戝崌绾ф暟鎹寘鏃堕棿锛坹yyy-mm-dd HH:HH:SS锛�
+    public int reTryTimes ;//鍗囩骇涓嶆垚鍔燂紝閲嶈瘯娆℃暟
+
+    private UpgradeRtu(){
+    }
+
+    public UpgradeRtu(UpgradeTask task, String rtuAddr, int totalPackage) {
+        this.task = task ;
+        this.rtuAddr = rtuAddr ;
+        this.state = STATE_UNSTART ;
+        this.totalPackage = totalPackage ;
+        this.currentPackage = 0 ;
+        this.currentRamAddr = 0 ;
+        this.lastDownDt = "" ;
+        this.reTryTimes = 0 ;
+    }
+
+    /**
+     * 瑙﹀彂鍗囩骇
+     * @param code
+     * @param softData
+     * @param callback
+     */
+    public void trigger(String code, String protocolName, Short protocolVersion, byte[][] softData, Callback callback){
+        if(this.state == STATE_UNSTART){
+            //褰撳墠鏈紑濮嬪崌绾ц繃绋�
+            this.state = STATE_RUNNING;
+            this.lastDownDt = DateTime.yyyy_MM_dd_HH_mm_ss() ;
+            callback.call(createCommand1601(protocolName, protocolVersion));//涓嬪彂閰嶇疆鎸囦护
+        }else if(this.state == STATE_RUNNING){
+            //褰撳墠鍗囩骇杩囩▼涓�
+            if(code.equals(UpgradeCode.cd_1601)){
+                //涓嬪彂閰嶇疆杩斿洖
+                this.lastDownDt = DateTime.yyyy_MM_dd_HH_mm_ss() ;
+                callback.call(createCommand1602(protocolName, protocolVersion, currentPackage, currentRamAddr, softData));//涓嬪彂鏁版嵁鍖呮寚浠�
+            }else if(code.equals(UpgradeCode.cd_1602)){
+                //涓嬪彂鏁版嵁鍖呰繑鍥�
+                currentPackage++ ;
+                currentRamAddr += RAMADDRADD ;
+                if(currentPackage < totalPackage){
+                    this.lastDownDt = DateTime.yyyy_MM_dd_HH_mm_ss() ;
+                    callback.call(createCommand1602(protocolName, protocolVersion, currentPackage, currentRamAddr, softData));
+                }else{
+                    this.lastDownDt = DateTime.yyyy_MM_dd_HH_mm_ss() ;
+                    callback.call(createCommand1603(protocolName, protocolVersion));//涓嬪彂鏍¢獙鎸囦护
+                }
+            }else if(code.equals(UpgradeCode.cd_1603)){
+                //涓嬪彂鏍¢獙杩斿洖
+                this.state = STATE_SUCCESS ;
+                this.lastDownDt = DateTime.yyyy_MM_dd_HH_mm_ss() ;
+                callback.call(createCommand1600(protocolName, protocolVersion));//涓嬪彂澶嶄綅鎸囦护锛屾鎸囦护鏃犲簲绛�
+            }else{
+                if(this.state == STATE_FAILONE || this.state == STATE_FAIL){
+                    //宸茬粡鏄崌绾уけ璐ユ��
+                    if(this.reTryTimes < task.failTryTimes){
+                        //褰撳墠鏈紑濮嬪崌绾ц繃绋�
+                        this.reTryTimes += 1 ;
+                        this.state = STATE_RUNNING;
+                        this.currentPackage = 0 ;
+                        this.lastDownDt = DateTime.yyyy_MM_dd_HH_mm_ss() ;
+                        callback.call(createCommand1601(protocolName, protocolVersion));//涓嬪彂閰嶇疆鎸囦护
+                    }
+                }else{
+                    //闈炲崌绾у姛鑳界爜锛屽鏋滃湪鍗囩骇杩囩▼涓敹鍒拌繖涓姛鑳界爜鐨勪笂琛屾暟鎹紝璇存槑鍗囩骇澶辫触浜�
+                    if(currentPackage == 0 || currentPackage == 1){
+                        //1鍖呮锛屽崌绾уけ璐�
+                        this.state = STATE_FAILONE ;
+                    }else{
+                        //闈�1鍖呮锛屽崌绾уけ璐�
+                        this.state = STATE_FAIL ;
+                    }
+                }
+            }
+        }else{
+            //鍦ㄥ叾浠栫姸鎬佷笅锛屼笉瑙﹀彂浠诲姟宸ヤ綔
+        }
+    }
+
+    public Command createCommand1601(String protocolName, Short protocolVersion){
+        Command com = new Command() ;
+        com.id = Command.defaultId ;
+        com.type = CommandType.outerCommand ;
+        com.rtuAddr = this.rtuAddr ;
+        com.code = UpgradeCode.cd_1601 ;
+        com.protocol = protocolName ;
+        com.protocolVersion = protocolVersion ;
+        com.rtuResultSendWebUrl = Command.ignoreRtuResultSendWebUrl ;
+
+        Com1601Vo vo = new Com1601Vo() ;
+        vo.softStoreAddr = this.task.softStoreAddr ;
+        vo.softStartAddr = this.task.softStartAddr ;
+        vo.totalByte =  this.task.softBytesCalculate ;
+        vo.softCrc = this.task.softByteSrc16;
+        com.param = vo ;
+        return com ;
+    }
+
+    public Command createCommand1602(String protocolName, Short protocolVersion, int currentPackage, Integer ramAddr, byte[][] softData){
+        Command com = new Command() ;
+        com.id = Command.defaultId ;
+        com.type = CommandType.outerCommand ;
+        com.rtuAddr = this.rtuAddr ;
+        com.code = UpgradeCode.cd_1602 ;
+        com.protocol = protocolName ;
+        com.protocolVersion = protocolVersion ;
+
+        com.param = ramAddr ;
+
+        if(currentPackage < softData.length){
+            com.attachment = softData[currentPackage] ;
+        }
+        com.rtuResultSendWebUrl = Command.ignoreRtuResultSendWebUrl ;
+        return com ;
+    }
+
+    public Command createCommand1603(String protocolName, Short protocolVersion){
+        Command com = new Command() ;
+        com.id = Command.defaultId ;
+        com.type = CommandType.outerCommand ;
+        com.rtuAddr = this.rtuAddr ;
+        com.code = UpgradeCode.cd_1603 ;
+        com.protocol = protocolName ;
+        com.protocolVersion = protocolVersion ;
+        com.rtuResultSendWebUrl = Command.ignoreRtuResultSendWebUrl ;
+        return com ;
+    }
+
+    public Command createCommand1600(String protocolName, Short protocolVersion){
+        Command com = new Command() ;
+        com.id = Command.defaultId ;
+        com.type = CommandType.outerCommand ;
+        com.rtuAddr = this.rtuAddr ;
+        com.code = UpgradeCode.cd_1600 ;
+        com.protocol = protocolName ;
+        com.protocolVersion = protocolVersion ;
+        com.rtuResultSendWebUrl = Command.ignoreRtuResultSendWebUrl ;
+        return com ;
+    }
+}
diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/upgrade/UpgradeState.java b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/upgrade/UpgradeState.java
new file mode 100644
index 0000000..5832d6a
--- /dev/null
+++ b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/upgrade/UpgradeState.java
@@ -0,0 +1,29 @@
+package com.dy.rtuMw.server.upgrade;
+
+import lombok.Data;
+
+/**
+ * @Author: liurunyu
+ * @Date: 2024/11/4 15:14
+ * @Description
+ */
+@Data
+public class UpgradeState {
+
+    public int rtuTotal ;
+    public int unStartTotal ;
+    public int runningTotal ;
+    public int overTotal ;//缁撴潫锛堝寘鎷垚鍔熶笌鎵�鏈夊け璐ワ級
+    public int successTotal ;//鎵�鏈夋垚鍔�
+    public int failTotal ;//鎵�鏈夊け璐�
+    public int failOneTotal ;//涓�鍖呮澶辫触
+
+    public UpgradeState() {
+        this.rtuTotal = 0;
+        this.unStartTotal = 0;
+        this.runningTotal = 0;
+        this.overTotal = 0;
+        this.successTotal = 0;
+        this.failTotal = 0;
+    }
+}
diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/upgrade/UpgradeTask.java b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/upgrade/UpgradeTask.java
new file mode 100644
index 0000000..631aacd
--- /dev/null
+++ b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/upgrade/UpgradeTask.java
@@ -0,0 +1,208 @@
+package com.dy.rtuMw.server.upgrade;
+
+import com.alibaba.fastjson2.annotation.JSONField;
+import com.dy.common.softUpgrade.parse.HexFileParse;
+import com.dy.common.softUpgrade.parse.HexFileVo;
+import com.dy.common.util.Callback;
+import com.dy.common.util.DateTime;
+import lombok.Data;
+
+import java.util.*;
+
+/**
+ * @Author: liurunyu
+ * @Date: 2024/11/4 14:52
+ * @Description
+ */
+@Data
+public class UpgradeTask {
+
+    @JSONField(serialize = false)
+    protected Integer failTryTimes ;//鍗囩骇澶辫触鍚庯紝閲嶆柊鍋胯瘯鍗囩骇娆℃暟锛�0琛ㄧず涓嶉噸鏂板伩璇曞崌绾�
+    @JSONField(serialize = false)
+    protected Integer ugMaxRtuSameTime ;//鍚屾椂鍗囩骇RTU鏈�澶т釜鏁�
+
+    public String setupDt ;//璁剧疆鏃堕棿(yyyy-mm-dd HH:MM:SS)
+
+    public String softFileName ;//鍗囩骇杞欢锛坔ex锛夋枃浠跺悕绉�
+    public String softStoreAddr ;//鍗囩骇绋嬪簭瀛樻斁鍦板潃(4瀛楄妭锛�8瀛楃HEX瀛楃涓�)锛屽崌绾х▼搴忓湪FLASH涓瓨鏀惧湴鍧�
+    public String softStartAddr ;//绋嬪簭瑕嗙洊璧峰鍦板潃(4瀛楄妭锛�8瀛楃HEX瀛楃涓�)锛岃鍒锋柊绋嬪簭鐨勮捣濮嬪湴鍧�楂樺瓧鑺傚湪鍓� 锛屼綆瀛楄妭鍦ㄥ悗
+
+    @JSONField(serialize = false)
+    public byte[][] softData ;//鍗囩骇绋嬪簭鏁版嵁(姣忓寘鏁版嵁鏄�512瀛楄妭)
+    @JSONField(serialize = false)
+    public int softByteSrc16;//鍗囩骇绋嬪簭鏍¢獙鐮� CRC16
+
+    public int softBytesCalculate;//鍗囩骇绋嬪簭瀛楄妭鏁�(鎸夊叕寮忚绠�)
+
+    public List<String> rtuAddrList ;//闇�瑕佸崌绾х殑RTU鍦板潃闆嗗悎
+
+    @JSONField(serialize = false)
+    public Map<String, UpgradeRtu> upgradeState ;//鍗囩骇鐘舵��
+
+    public UpgradeTask() {
+    }
+    /**
+     *  鍒濆鍖栭厤缃俊鎭�
+     */
+    public void initOption(Integer failTryTimes, Integer ugMaxRtuSameTime) {
+        this.failTryTimes = failTryTimes;
+        this.ugMaxRtuSameTime = ugMaxRtuSameTime;
+    }
+    /**
+     * 璁剧疆鍗囩骇浠诲姟
+     * @param softFileName 鍗囩骇绋嬪簭鏂囦欢鍚�
+     * @param softStoreAddr 鍗囩骇绋嬪簭瀛樻斁鍦板潃
+     * @param softStartAddr 绋嬪簭瑕嗙洊璧峰鍦板潃
+     * @param softFileData 鍗囩骇绋嬪簭瀛楄妭鏁扮粍
+     * @param softBytesCalculate 鍗囩骇绋嬪簭瀛楄妭鏁�(鎸夊叕寮忚绠�)
+     * @param rtuAddrList 鍗囩骇RTU
+     * @throws Exception
+     */
+    public void setTask(String softFileName,
+                       String softStoreAddr,
+                       String softStartAddr,
+                       byte[] softFileData,
+                       Integer softBytesCalculate,
+                       List<String> rtuAddrList) throws Exception {
+        if(softFileName == null || softFileName.trim().length() == 0){
+            throw new Exception("鍗囩骇杞欢锛坔ex锛夋枃浠跺悕绉板繀椤绘彁渚�") ;
+        }
+        if(softStoreAddr == null || softStoreAddr.trim().length() != 8){
+            throw new Exception("鍗囩骇绋嬪簭瀛樻斁鍦板潃涓嶅悎娉曪紝蹇呴』鏄�8瀛楃锛堝崄鍏繘鍒讹級鐨勫瓧绗︿覆") ;
+        }
+        if(softStartAddr == null || softStartAddr.trim().length() != 8){
+            throw new Exception("绋嬪簭瑕嗙洊璧峰鍦板潃涓嶅悎娉曪紝蹇呴』鏄�8瀛楃锛堝崄鍏繘鍒讹級鐨勫瓧绗︿覆") ;
+        }
+        if(softFileData == null || softFileData.length <= 0){
+            throw new Exception("鍗囩骇绋嬪簭鍐呭蹇呴』鎻愪緵") ;
+        }
+        if(rtuAddrList == null || rtuAddrList.size() <= 0){
+            throw new Exception("鍗囩骇璁惧RTU鍦板潃蹇呴』鎻愪緵") ;
+        }
+        this.setupDt = DateTime.yyyy_MM_dd_HH_mm_ss() ;
+        this.softFileName = softFileName;
+        this.softStoreAddr = softStoreAddr;
+        this.softStartAddr = softStartAddr;
+        this.softBytesCalculate = softBytesCalculate;
+        this.rtuAddrList = rtuAddrList;
+
+        this.upgradeState = new HashMap<>();
+        if(softFileData != null && softFileData.length >0){
+            HexFileVo vo = new HexFileParse().doParse(softFileData);
+            this.softData = vo.listByte512.toArray(new byte[0][]);
+            this.softByteSrc16 = vo.bytesCrc16 ;
+        }
+    }
+    /**
+     * RTU鏈変笂琛屾暟鎹簡锛岃Е鍙戜笅鍙戝崌绾ф暟鎹�
+     * @param rtuAddr
+     * @param code
+     * @param callback
+     */
+    public void trigger(String rtuAddr, String code, String protocolName, Short protocolVersion, Callback callback){
+        if(upgradeState != null && upgradeState.size() > 0
+                && rtuAddrList != null && rtuAddrList.size() > 0){
+            UpgradeRtu info = upgradeState.get(rtuAddr) ;
+            if(info == null){
+                if(rtuAddrList.contains(rtuAddr)){
+                    info = new UpgradeRtu(this, rtuAddr, softData.length) ;
+                    upgradeState.put(rtuAddr, info) ;
+                }else{
+                    //rtu涓嶅湪鍗囩骇涔嬪垪
+                    return ;
+                }
+            }
+            if(info != null){
+                info.trigger(code, protocolName, protocolVersion, this.softData, callback) ;
+            }
+        }
+    }
+
+    /**
+     * 寮哄埗缁撴潫鍗囩骇浠诲姟
+     */
+    public void forceOver(){
+        this.rtuAddrList.clear();
+        this.upgradeState.clear();
+    }
+
+    /**
+     * 鍗囩骇浠诲姟鏄惁瀹屾垚
+     * @return
+     */
+    public boolean isOver() {
+        boolean isOver = true ;
+        if(upgradeState != null && upgradeState.size() > 0){
+            Collection<UpgradeRtu> col = upgradeState.values() ;
+            for(UpgradeRtu info : col){
+                if(info.state == UpgradeRtu.STATE_UNSTART){
+                    isOver = false ;
+                    break ;
+                }else if(info.state == UpgradeRtu.STATE_RUNNING){
+                    isOver = false ;
+                    break ;
+                }
+            }
+        }
+        return isOver ;
+    }
+
+    /**
+     * 褰撳墠鍗囩骇鐘舵��
+     * @return
+     */
+    public UpgradeState currentUpgradeState() {
+        UpgradeState state = new UpgradeState() ;
+        if(rtuAddrList != null && rtuAddrList.size() > 0){
+            state.rtuTotal = rtuAddrList.size() ;
+            if(upgradeState != null && upgradeState.size() > 0){
+                Collection<UpgradeRtu> col = upgradeState.values() ;
+                for(UpgradeRtu info : col){
+                    if(info.state == UpgradeRtu.STATE_UNSTART){
+                        state.unStartTotal ++ ;
+                    }else if(info.state == UpgradeRtu.STATE_RUNNING){
+                        state.runningTotal ++ ;
+                    }else if(info.state == UpgradeRtu.STATE_SUCCESS) {
+                        state.successTotal++;
+                        state.overTotal++;
+                    }else if(info.state == UpgradeRtu.STATE_FAILONE) {
+                        state.failOneTotal++;
+                        state.failTotal++;
+                        state.overTotal++;
+                    }else if(info.state == UpgradeRtu.STATE_FAIL) {
+                        state.failTotal++;
+                        state.overTotal++;
+                    }
+                }
+            }
+        }
+        return state ;
+    }
+
+    /**
+     * Rtu鍗囩骇淇℃伅
+     * @param rtuAddr
+     * @return
+    */
+    public UpgradeRtu upgradeInfos(String rtuAddr){
+        return upgradeState.get(rtuAddr) ;
+    }
+
+    /**
+     * Rtu鍗囩骇淇℃伅
+     * @param rtuAddrList
+     * @return
+     */
+    public List<UpgradeRtu> upgradeInfos(List<String> rtuAddrList){
+        List<UpgradeRtu> list = new ArrayList<>() ;
+        for(String rtuAddr : rtuAddrList){
+            UpgradeRtu info = upgradeState.get(rtuAddr) ;
+            if(info != null){
+                list.add(info) ;
+            }
+        }
+        return list ;
+    }
+
+}
diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/upgrade/UpgradeUnit.java b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/upgrade/UpgradeUnit.java
new file mode 100644
index 0000000..9308d9d
--- /dev/null
+++ b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/upgrade/UpgradeUnit.java
@@ -0,0 +1,154 @@
+package com.dy.rtuMw.server.upgrade;
+
+import com.dy.common.mw.UnitAdapterInterface;
+import com.dy.common.mw.UnitCallbackInterface;
+import com.dy.common.mw.UnitInterface;
+import com.dy.common.util.Callback;
+
+import java.util.List;
+
+/**
+ * @Author: liurunyu
+ * @Date: 2024/11/4 14:16
+ * @Description
+ */
+public class UpgradeUnit implements UnitInterface {
+
+    private static UpgradeUnit instance = new UpgradeUnit() ;
+
+    public static UpgradeUnitAdapter adapter ;
+    public static UpgradeUnitConfigVo confVo ;
+
+    private static UpgradeManager manager ;
+
+    private UpgradeUnit(){} ;
+
+    public static UpgradeUnit getInstance(){
+        return instance ;
+    }
+
+    @Override
+    public void setAdapter(UnitAdapterInterface adapter) throws Exception {
+        if(adapter == null){
+            throw new Exception("RTU杩滅▼鍗囩骇妯″潡閫傞厤鍣ㄥ璞′笉鑳戒负绌猴紒") ;
+        }
+        UpgradeUnit.adapter = (UpgradeUnitAdapter)adapter ;
+        UpgradeUnit.confVo = UpgradeUnit.adapter.getConfig() ;
+        if(UpgradeUnit.confVo == null){
+            throw new Exception("RTU杩滅▼鍗囩骇妯″潡閰嶇疆瀵硅薄涓嶈兘涓虹┖锛�") ;
+        }
+    }
+
+    /**
+     * 鍒濆鍖栦笂琛屾暟鎹鐞嗕换鍔℃睜
+     */
+    @Override
+    public void start(UnitCallbackInterface callback) throws Exception {
+        if(confVo.enable){
+            manager = UpgradeManager.getInstance() ;
+            manager.initOption(confVo);
+            callback.call(null) ;
+            System.out.println("RTU杩滅▼鍗囩骇妯″潡鎴愬姛鍚姩");
+        }else{
+            System.out.println("RTU杩滅▼鍗囩骇妯″潡閰嶇疆涓嶅惎鍔�");
+        }
+
+    }
+
+    @Override
+    public void stop(UnitCallbackInterface callback) throws Exception {
+        stopUpgradeTask() ;
+    }
+
+
+
+    /**
+     * 璁剧疆鍗囩骇浠诲姟
+     * @param softFileName 鍗囩骇绋嬪簭鏂囦欢鍚�
+     * @param softStoreAddr 鍗囩骇绋嬪簭瀛樻斁鍦板潃
+     * @param softStartAddr 绋嬪簭瑕嗙洊璧峰鍦板潃
+     * @param softFileData 鍗囩骇绋嬪簭瀛楄妭鏁扮粍
+     * @param softBytesCalculate 鍗囩骇绋嬪簭瀛楄妭鏁�(鎸夊叕寮忚绠�)
+    * @param rtuAddrList 鍗囩骇RTU
+     * @throws Exception
+     */
+    public void setUpgradeTask(String softFileName,
+                               String softStoreAddr,
+                               String softStartAddr,
+                               byte[] softFileData,
+                               Integer softBytesCalculate,
+                               List<String> rtuAddrList) throws Exception {
+        if(manager != null ){
+            manager.setUpgradeTask(softFileName,
+                    softStoreAddr,
+                    softStartAddr,
+                    softFileData,
+                    softBytesCalculate,
+                    rtuAddrList) ;
+        }
+    }
+
+    /**
+     * 鍋滄褰撳墠鍗囩骇浠诲姟
+     * @throws Exception
+     */
+    public void stopUpgradeTask() throws Exception {
+        if(manager != null ){
+            manager.stopUpgradeTask() ;
+        }
+    }
+
+    /**
+     * RTU鏈変笂琛屾暟鎹簡锛岃Е鍙戜笅鍙戝崌绾ф暟鎹�
+     * @param rtuAddr
+     * @param code
+     * @param callback
+     */
+    public void trigger(String rtuAddr, String code, String protocolName, Short protocolVersion, Callback callback){
+        if(manager != null ){
+            manager.trigger(rtuAddr, code, protocolName, protocolVersion, callback);
+        }
+    }
+
+    ////////////////////////////////////////////////////
+    //
+    // 鏌ヨ鍗囩骇鐘舵�佷俊鎭�
+    //
+    ////////////////////////////////////////////////////
+    /**
+     * 褰撳墠鍗囩骇鐘舵��
+     * @return
+     */
+    public UpgradeState currentUpgradeState() {
+        if(manager != null ){
+            return manager.currentUpgradeState();
+        }
+        return null ;
+    }
+
+    /**
+     * Rtu鍗囩骇淇℃伅
+     * @param rtuAddr
+     * @return
+     */
+    public UpgradeRtu upgradeInfos(String rtuAddr){
+        if(manager != null ){
+            return manager.upgradeInfos(rtuAddr);
+        }
+        return null ;
+    }
+
+    /**
+     * Rtu鍗囩骇淇℃伅
+     * @param rtuAddrList
+     * @return
+     */
+    public List<UpgradeRtu> upgradeInfos(List<String> rtuAddrList){
+        if(manager != null ){
+            return manager.upgradeInfos(rtuAddrList);
+        }
+        return null ;
+    }
+
+}
+
diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/upgrade/UpgradeUnitAdapter.java b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/upgrade/UpgradeUnitAdapter.java
new file mode 100644
index 0000000..a1e8dd2
--- /dev/null
+++ b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/upgrade/UpgradeUnitAdapter.java
@@ -0,0 +1,14 @@
+package com.dy.rtuMw.server.upgrade;
+
+import com.dy.common.mw.UnitAdapterInterface;
+
+/**
+ * @Author: liurunyu
+ * @Date: 2024/11/4 14:15
+ * @Description
+ */
+public interface UpgradeUnitAdapter extends UnitAdapterInterface {
+
+    UpgradeUnitConfigVo getConfig();
+
+}
\ No newline at end of file
diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/upgrade/UpgradeUnitConfigVo.java b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/upgrade/UpgradeUnitConfigVo.java
new file mode 100644
index 0000000..13e8350
--- /dev/null
+++ b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/upgrade/UpgradeUnitConfigVo.java
@@ -0,0 +1,20 @@
+package com.dy.rtuMw.server.upgrade;
+
+/**
+ * @Author: liurunyu
+ * @Date: 2024/11/4 14:14
+ * @Description
+ */
+public class UpgradeUnitConfigVo {
+
+    public Boolean showStartInfo ;
+    public Boolean enable ;//妯″潡鏄惁鍚姩
+    public Integer failTryTimes ;//鍗囩骇澶辫触鍚庯紝閲嶆柊鍋胯瘯鍗囩骇娆℃暟锛�0琛ㄧず涓嶉噸鏂板伩璇曞崌绾�
+    public Integer ugMaxRtuSameTime ;//鍚屾椂鍗囩骇RTU鏈�澶т釜鏁�
+
+    public UpgradeUnitConfigVo(){
+        this.enable = false ;
+        this.failTryTimes = 0 ;
+        this.failTryTimes = 1000000 ;
+    }
+}
diff --git "a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/resources/config\050sp\346\262\231\347\233\230\051.xml" "b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/resources/config\050sp\346\262\231\347\233\230\051.xml"
index 28dad2f..5769897 100644
--- "a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/resources/config\050sp\346\262\231\347\233\230\051.xml"
+++ "b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/resources/config\050sp\346\262\231\347\233\230\051.xml"
@@ -54,19 +54,11 @@
 		synchroRtuClockTimepieces="300000"
 	/>
 
-
-	<!-- 2024-10-08 姝ら厤缃殏鏃舵湭搴旂敤
-     杞欢鍗囩骇 -->
-	<updateRtuSoft enable="true">
-		<soft1 enable="true" oldVersionName="meter_v2_0,meter_v1_0" >
-			<newVersion newVersionName="meter_v3_0" file="rtuSoft/meter_v3_0.txt"></newVersion>
-		</soft1>
-		<!--
-        <soft2 enable="false" oldVersionName="rtu_v1_0,rtu_v2_0,rtu_v3_0" >
-            <newVersion newVersionName="rtu_v4_0" file="rtuSoft/rtu_v4_0.txt"></newVersion>
-        </soft2>
-         -->
-	</updateRtuSoft>
+	<!-- RTU 杞欢鍗囩骇
+	enable: 妯″潡鏄惁鍚姩
+	failTryTimes锛氬崌绾уけ璐ュ悗锛岄噸鏂板伩璇曞崌绾ф鏁帮紝0琛ㄧず涓嶉噸鏂板伩璇曞崌绾�
+	-->
+	<upgrade enable="true" failTryTimes="0" ugMaxRtuSameTime="1000" />
 
 	<!--
     鏀寔妯″潡
diff --git "a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/resources/config\050test\346\265\213\350\257\225\051.xml" "b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/resources/config\050test\346\265\213\350\257\225\051.xml"
index 32a3a8f..c3ccca6 100644
--- "a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/resources/config\050test\346\265\213\350\257\225\051.xml"
+++ "b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/resources/config\050test\346\265\213\350\257\225\051.xml"
@@ -54,19 +54,11 @@
 		synchroRtuClockTimepieces="300000"
 	/>
 
-
-	<!-- 2024-10-08 姝ら厤缃殏鏃舵湭搴旂敤
-     杞欢鍗囩骇 -->
-	<updateRtuSoft enable="true">
-		<soft1 enable="true" oldVersionName="meter_v2_0,meter_v1_0" >
-			<newVersion newVersionName="meter_v3_0" file="rtuSoft/meter_v3_0.txt"></newVersion>
-		</soft1>
-		<!--
-        <soft2 enable="false" oldVersionName="rtu_v1_0,rtu_v2_0,rtu_v3_0" >
-            <newVersion newVersionName="rtu_v4_0" file="rtuSoft/rtu_v4_0.txt"></newVersion>
-        </soft2>
-         -->
-	</updateRtuSoft>
+	<!-- RTU 杞欢鍗囩骇
+	enable: 妯″潡鏄惁鍚姩
+	failTryTimes锛氬崌绾уけ璐ュ悗锛岄噸鏂板伩璇曞崌绾ф鏁帮紝0琛ㄧず涓嶉噸鏂板伩璇曞崌绾�
+	-->
+	<upgrade enable="true" failTryTimes="0" ugMaxRtuSameTime="1000" />
 
 	<!--
     鏀寔妯″潡
diff --git "a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/resources/config\050ym\345\205\203\350\260\213\051.xml" "b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/resources/config\050ym\345\205\203\350\260\213\051.xml"
index 6181178..fde36e9 100644
--- "a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/resources/config\050ym\345\205\203\350\260\213\051.xml"
+++ "b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/resources/config\050ym\345\205\203\350\260\213\051.xml"
@@ -54,19 +54,11 @@
 		synchroRtuClockTimepieces="300000"
 	/>
 
-
-	<!-- 2024-10-08 姝ら厤缃殏鏃舵湭搴旂敤
-     杞欢鍗囩骇 -->
-	<updateRtuSoft enable="true">
-		<soft1 enable="true" oldVersionName="meter_v2_0,meter_v1_0" >
-			<newVersion newVersionName="meter_v3_0" file="rtuSoft/meter_v3_0.txt"></newVersion>
-		</soft1>
-		<!--
-        <soft2 enable="false" oldVersionName="rtu_v1_0,rtu_v2_0,rtu_v3_0" >
-            <newVersion newVersionName="rtu_v4_0" file="rtuSoft/rtu_v4_0.txt"></newVersion>
-        </soft2>
-         -->
-	</updateRtuSoft>
+	<!-- RTU 杞欢鍗囩骇
+	enable: 妯″潡鏄惁鍚姩
+	failTryTimes锛氬崌绾уけ璐ュ悗锛岄噸鏂板伩璇曞崌绾ф鏁帮紝0琛ㄧず涓嶉噸鏂板伩璇曞崌绾�
+	-->
+	<upgrade enable="true" failTryTimes="0" ugMaxRtuSameTime="1000" />
 
 	<!--
     鏀寔妯″潡
diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/resources/config.xml b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/resources/config.xml
index c2f9f65..0211964 100644
--- a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/resources/config.xml
+++ b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/resources/config.xml
@@ -54,19 +54,11 @@
 			synchroRtuClockTimepieces="300000"
 	/>
 
-
-	<!-- 2024-10-08 姝ら厤缃殏鏃舵湭搴旂敤
-     杞欢鍗囩骇 -->
-	<updateRtuSoft enable="true">
-		<soft1 enable="true" oldVersionName="meter_v2_0,meter_v1_0" >
-			<newVersion newVersionName="meter_v3_0" file="rtuSoft/meter_v3_0.txt"></newVersion>
-		</soft1>
-		<!--
-        <soft2 enable="false" oldVersionName="rtu_v1_0,rtu_v2_0,rtu_v3_0" >
-            <newVersion newVersionName="rtu_v4_0" file="rtuSoft/rtu_v4_0.txt"></newVersion>
-        </soft2>
-         -->
-	</updateRtuSoft>
+	<!-- RTU 杞欢鍗囩骇
+	enable: 妯″潡鏄惁鍚姩
+	failTryTimes锛氬崌绾уけ璐ュ悗锛岄噸鏂板伩璇曞崌绾ф鏁帮紝0琛ㄧず涓嶉噸鏂板伩璇曞崌绾�
+	-->
+	<upgrade enable="true" failTryTimes="0" ugMaxRtuSameTime="1000" />
 
 	<!--
     鏀寔妯″潡
diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/tcpClient/RtuUpData.java b/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/tcpClient/RtuUpData.java
index 8318a46..37a0fc7 100644
--- a/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/tcpClient/RtuUpData.java
+++ b/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/tcpClient/RtuUpData.java
@@ -27,7 +27,7 @@
         bsHead[index] = ctrl; //鎺у埗鍩熷姛鑳界爜
 
         index++ ;
-        GlCreate.createRtuAddr(rtuAddr, bsHead, index);
+        GlCreate.createRtuAddr4P206(rtuAddr, bsHead, index);
         index += 5 ;
 
         ByteUtil.hex2Bytes(code, bsHead, index) ;
@@ -51,7 +51,7 @@
 
         GlCreate.createLen(bytes);//闀垮害鏀惧瓧鑺傛暟缁勪腑
 
-        byte[] bsTail = GlCreate.createCrcTail(bytes) ;//CRC鍜屽熬鍙犲姞瀛楄妭鏁扮粍涓�
+        byte[] bsTail = GlCreate.createCrcTail4P206(bytes) ;//CRC鍜屽熬鍙犲姞瀛楄妭鏁扮粍涓�
 
         bytes = ByteUtil.bytesMerge(bytes, bsTail) ;
 
@@ -104,7 +104,7 @@
 
         GlCreate.createLen(bytes);//闀垮害鏀惧瓧鑺傛暟缁勪腑
 
-        byte[] bsTail = GlCreate.createCrcTail(bytes) ;//CRC鍜屽熬鍙犲姞瀛楄妭鏁扮粍涓�
+        byte[] bsTail = GlCreate.createCrcTail4P206(bytes) ;//CRC鍜屽熬鍙犲姞瀛楄妭鏁扮粍涓�
 
         bytes = ByteUtil.bytesMerge(bytes, bsTail) ;
 
@@ -195,7 +195,7 @@
 
         GlCreate.createLen(bytes);//闀垮害鏀惧瓧鑺傛暟缁勪腑
 
-        byte[] bsTail = GlCreate.createCrcTail(bytes) ;//CRC鍜屽熬鍙犲姞瀛楄妭鏁扮粍涓�
+        byte[] bsTail = GlCreate.createCrcTail4P206(bytes) ;//CRC鍜屽熬鍙犲姞瀛楄妭鏁扮粍涓�
 
         bytes = ByteUtil.bytesMerge(bytes, bsTail) ;
 
@@ -224,7 +224,7 @@
         bsHead[index] = commonV_1.createCtrl((byte)0x80, (byte)3) ;//鎺у埗鍩熷姛鑳界爜3锛氳嚜鎶ュ抚锛屾祦閲忥紙姘撮噺锛夊弬鏁�
 
         index++ ;
-        GlCreate.createRtuAddr(rtuAddr, bsHead, index);
+        GlCreate.createRtuAddr4P206(rtuAddr, bsHead, index);
         index += 5 ;
 
         ByteUtil.hex2Bytes("C0", bsHead, index) ;
@@ -277,7 +277,7 @@
 
         GlCreate.createLen(bytes);//闀垮害鏀惧瓧鑺傛暟缁勪腑
 
-        byte[] bsTail = GlCreate.createCrcTail(bytes) ;//CRC鍜屽熬鍙犲姞瀛楄妭鏁扮粍涓�
+        byte[] bsTail = GlCreate.createCrcTail4P206(bytes) ;//CRC鍜屽熬鍙犲姞瀛楄妭鏁扮粍涓�
 
         bytes = ByteUtil.bytesMerge(bytes, bsTail) ;
 
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-mwTest-rtu/src/main/java/com/dy/pipIrrMwTestRtu/tcpClient/upData/UpCd38.java b/pipIrr-platform/pipIrr-web/pipIrr-mwTest-rtu/src/main/java/com/dy/pipIrrMwTestRtu/tcpClient/upData/UpCd38.java
index 3bb88bb..c64177c 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-mwTest-rtu/src/main/java/com/dy/pipIrrMwTestRtu/tcpClient/upData/UpCd38.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-mwTest-rtu/src/main/java/com/dy/pipIrrMwTestRtu/tcpClient/upData/UpCd38.java
@@ -69,7 +69,7 @@
 
         GlCreate.createLen(bytes);//闀垮害鏀惧瓧鑺傛暟缁勪腑
 
-        byte[] bsTail = GlCreate.createCrcTail(bytes) ;//CRC鍜屽熬鍙犲姞瀛楄妭鏁扮粍涓�
+        byte[] bsTail = GlCreate.createCrcTail4P206(bytes) ;//CRC鍜屽熬鍙犲姞瀛楄妭鏁扮粍涓�
 
         bytes = ByteUtil.bytesMerge(bytes, bsTail) ;
 
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-mwTest-rtu/src/main/java/com/dy/pipIrrMwTestRtu/tcpClient/upData/UpCd81.java b/pipIrr-platform/pipIrr-web/pipIrr-mwTest-rtu/src/main/java/com/dy/pipIrrMwTestRtu/tcpClient/upData/UpCd81.java
index 814d345..935cab7 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-mwTest-rtu/src/main/java/com/dy/pipIrrMwTestRtu/tcpClient/upData/UpCd81.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-mwTest-rtu/src/main/java/com/dy/pipIrrMwTestRtu/tcpClient/upData/UpCd81.java
@@ -50,7 +50,7 @@
 
         GlCreate.createLen(bytes);//闀垮害鏀惧瓧鑺傛暟缁勪腑
 
-        byte[] bsTail = GlCreate.createCrcTail(bytes) ;//CRC鍜屽熬鍙犲姞瀛楄妭鏁扮粍涓�
+        byte[] bsTail = GlCreate.createCrcTail4P206(bytes) ;//CRC鍜屽熬鍙犲姞瀛楄妭鏁扮粍涓�
 
         bytes = ByteUtil.bytesMerge(bytes, bsTail) ;
 
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-mwTest-rtu/src/main/java/com/dy/pipIrrMwTestRtu/tcpClient/upData/UpCd83Close.java b/pipIrr-platform/pipIrr-web/pipIrr-mwTest-rtu/src/main/java/com/dy/pipIrrMwTestRtu/tcpClient/upData/UpCd83Close.java
index 608d965..dfe1ecd 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-mwTest-rtu/src/main/java/com/dy/pipIrrMwTestRtu/tcpClient/upData/UpCd83Close.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-mwTest-rtu/src/main/java/com/dy/pipIrrMwTestRtu/tcpClient/upData/UpCd83Close.java
@@ -100,7 +100,7 @@
 
         GlCreate.createLen(bytes);//闀垮害鏀惧瓧鑺傛暟缁勪腑
 
-        byte[] bsTail = GlCreate.createCrcTail(bytes) ;//CRC鍜屽熬鍙犲姞瀛楄妭鏁扮粍涓�
+        byte[] bsTail = GlCreate.createCrcTail4P206(bytes) ;//CRC鍜屽熬鍙犲姞瀛楄妭鏁扮粍涓�
 
         bytes = ByteUtil.bytesMerge(bytes, bsTail) ;
 
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-mwTest-rtu/src/main/java/com/dy/pipIrrMwTestRtu/tcpClient/upData/UpCd83Open.java b/pipIrr-platform/pipIrr-web/pipIrr-mwTest-rtu/src/main/java/com/dy/pipIrrMwTestRtu/tcpClient/upData/UpCd83Open.java
index 9679c2f..eb1c429 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-mwTest-rtu/src/main/java/com/dy/pipIrrMwTestRtu/tcpClient/upData/UpCd83Open.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-mwTest-rtu/src/main/java/com/dy/pipIrrMwTestRtu/tcpClient/upData/UpCd83Open.java
@@ -69,7 +69,7 @@
 
         GlCreate.createLen(bytes);//闀垮害鏀惧瓧鑺傛暟缁勪腑
 
-        byte[] bsTail = GlCreate.createCrcTail(bytes) ;//CRC鍜屽熬鍙犲姞瀛楄妭鏁扮粍涓�
+        byte[] bsTail = GlCreate.createCrcTail4P206(bytes) ;//CRC鍜屽熬鍙犲姞瀛楄妭鏁扮粍涓�
 
         bytes = ByteUtil.bytesMerge(bytes, bsTail) ;
 
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-mwTest-rtu/src/main/java/com/dy/pipIrrMwTestRtu/tcpClient/upData/UpCd84.java b/pipIrr-platform/pipIrr-web/pipIrr-mwTest-rtu/src/main/java/com/dy/pipIrrMwTestRtu/tcpClient/upData/UpCd84.java
index 8c0b074..2e4c595 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-mwTest-rtu/src/main/java/com/dy/pipIrrMwTestRtu/tcpClient/upData/UpCd84.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-mwTest-rtu/src/main/java/com/dy/pipIrrMwTestRtu/tcpClient/upData/UpCd84.java
@@ -80,7 +80,7 @@
 
         GlCreate.createLen(bytes);//闀垮害鏀惧瓧鑺傛暟缁勪腑
 
-        byte[] bsTail = GlCreate.createCrcTail(bytes) ;//CRC鍜屽熬鍙犲姞瀛楄妭鏁扮粍涓�
+        byte[] bsTail = GlCreate.createCrcTail4P206(bytes) ;//CRC鍜屽熬鍙犲姞瀛楄妭鏁扮粍涓�
 
         bytes = ByteUtil.bytesMerge(bytes, bsTail) ;
 
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-mwTest-rtu/src/main/java/com/dy/pipIrrMwTestRtu/tcpClient/upData/UpData.java b/pipIrr-platform/pipIrr-web/pipIrr-mwTest-rtu/src/main/java/com/dy/pipIrrMwTestRtu/tcpClient/upData/UpData.java
index f0e68cd..1a89bd5 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-mwTest-rtu/src/main/java/com/dy/pipIrrMwTestRtu/tcpClient/upData/UpData.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-mwTest-rtu/src/main/java/com/dy/pipIrrMwTestRtu/tcpClient/upData/UpData.java
@@ -41,7 +41,7 @@
         bsHead[index] = ctrl; //鎺у埗鍩熷姛鑳界爜
 
         index++ ;
-        GlCreate.createRtuAddr(rtuAddr, bsHead, index);
+        GlCreate.createRtuAddr4P206(rtuAddr, bsHead, index);
         index += 5 ;
 
         ByteUtil.hex2Bytes(code, bsHead, index) ;
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-mwTest-rtu/src/main/java/com/dy/pipIrrMwTestRtu/tcpClient/upData/UpHeartBeat.java b/pipIrr-platform/pipIrr-web/pipIrr-mwTest-rtu/src/main/java/com/dy/pipIrrMwTestRtu/tcpClient/upData/UpHeartBeat.java
index 6fbe032..908e446 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-mwTest-rtu/src/main/java/com/dy/pipIrrMwTestRtu/tcpClient/upData/UpHeartBeat.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-mwTest-rtu/src/main/java/com/dy/pipIrrMwTestRtu/tcpClient/upData/UpHeartBeat.java
@@ -43,7 +43,7 @@
 
         GlCreate.createLen(bytes);//闀垮害鏀惧瓧鑺傛暟缁勪腑
 
-        byte[] bsTail = GlCreate.createCrcTail(bytes) ;//CRC鍜屽熬鍙犲姞瀛楄妭鏁扮粍涓�
+        byte[] bsTail = GlCreate.createCrcTail4P206(bytes) ;//CRC鍜屽熬鍙犲姞瀛楄妭鏁扮粍涓�
 
         bytes = ByteUtil.bytesMerge(bytes, bsTail) ;
 
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-app/src/main/java/com/dy/pipIrrApp/workOrder/ConsumerListener_push.java b/pipIrr-platform/pipIrr-web/pipIrr-web-app/src/main/java/com/dy/pipIrrApp/workOrder/ConsumerListener_push.java
deleted file mode 100644
index db86cf3..0000000
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-app/src/main/java/com/dy/pipIrrApp/workOrder/ConsumerListener_push.java
+++ /dev/null
@@ -1,37 +0,0 @@
-package com.dy.pipIrrApp.workOrder;
-
-import org.apache.rocketmq.client.consumer.DefaultMQPushConsumer;
-import org.apache.rocketmq.client.consumer.listener.ConsumeConcurrentlyStatus;
-import org.apache.rocketmq.client.consumer.listener.MessageListenerConcurrently;
-import org.apache.rocketmq.client.exception.MQClientException;
-import org.apache.rocketmq.common.message.MessageExt;
-import org.springframework.stereotype.Component;
-
-/**
- * @author ZhuBaoMin
- * @date 2024-11-04 15:02
- * @LastEditTime 2024-11-04 15:02
- * @Description
- */
-
-@Component
-public class ConsumerListener_push{
-    public void receiveMessage () throws MQClientException {
-        DefaultMQPushConsumer consumer = new DefaultMQPushConsumer("consumer_group");
-        consumer.setNamesrvAddr("127.0.0.1:9876");
-
-        // 璁剧疆娑堟伅鐩戝惉鍣�
-        consumer.registerMessageListener((MessageListenerConcurrently) (msgs, context) -> {
-            for (MessageExt msg : msgs) {
-                System.out.println("ConsumerListener_push receive message: " + new String(msg.getBody()));
-            }
-            return ConsumeConcurrentlyStatus.CONSUME_SUCCESS;
-        });
-
-        // 璁㈤槄涓婚鍜屾爣绛�
-        consumer.subscribe("workOrder", "鐜嬩簲");
-
-        // 鍚姩娑堣垂鑰�
-        consumer.start();
-    }
-}
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-app/src/main/java/com/dy/pipIrrApp/workOrder/WorkOrderCtrl.java b/pipIrr-platform/pipIrr-web/pipIrr-web-app/src/main/java/com/dy/pipIrrApp/workOrder/WorkOrderCtrl.java
index a20b809..dbf73c5 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-app/src/main/java/com/dy/pipIrrApp/workOrder/WorkOrderCtrl.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-app/src/main/java/com/dy/pipIrrApp/workOrder/WorkOrderCtrl.java
@@ -1,6 +1,15 @@
 package com.dy.pipIrrApp.workOrder;
 
 import com.dy.common.aop.SsoAop;
+import com.dy.common.webUtil.BaseResponse;
+import com.dy.common.webUtil.BaseResponseUtils;
+import com.dy.common.webUtil.QueryResultVo;
+import com.dy.pipIrrApp.workOrder.dto.DtoDeleteWorkOrder;
+import com.dy.pipIrrApp.workOrder.qo.QoWorkOrder;
+import com.dy.pipIrrGlobal.pojoOp.OpeProcessingResult;
+import com.dy.pipIrrGlobal.pojoOp.OpeWorkOrder;
+import com.dy.pipIrrGlobal.voOp.VoWorkOrder;
+import jakarta.validation.Valid;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.rocketmq.client.exception.MQBrokerException;
@@ -11,12 +20,15 @@
 import org.apache.rocketmq.remoting.exception.RemotingException;
 import org.apache.rocketmq.spring.core.RocketMQTemplate;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.http.MediaType;
 import org.springframework.transaction.annotation.Transactional;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.validation.BindingResult;
+import org.springframework.web.bind.annotation.*;
 
 import java.nio.charset.StandardCharsets;
+import java.util.List;
+import java.util.Objects;
 
 /**
  * @author ZhuBaoMin
@@ -35,26 +47,160 @@
     @Autowired
     private RocketMQTemplate rocketMQTemplate;
 
+    @Value("${rocketmq.name-server}")
+    protected String nameServer;
 
-    @GetMapping("/sendWorkOrder")
+    @Value("${rocketmq.producer.group}")
+    protected String producerGroup;
+
+    @Value("${rocketmq.topic}")
+    protected String topic;
+
+    /**
+     * 鍒涘缓宸ュ崟
+     * @param po
+     * @param bindingResult
+     * @return
+     */
+    @PostMapping(path = "addWorkOrder", consumes = MediaType.APPLICATION_JSON_VALUE)
     @Transactional(rollbackFor = Exception.class)
     @SsoAop()
-    public void sendWorkOrder() throws MQClientException, MQBrokerException, RemotingException, InterruptedException {
-        ConsumerListener_push ConsumerListener_push = new ConsumerListener_push();
-        ConsumerListener_push.receiveMessage();
+    public BaseResponse<Boolean> addWorkOrder(@RequestBody @Valid OpeWorkOrder po, BindingResult bindingResult) throws MQBrokerException, RemotingException, InterruptedException, MQClientException {
+        if(bindingResult != null && bindingResult.hasErrors()){
+            return BaseResponseUtils.buildErrorMsg(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage());
+        }
 
-        String topic = "workOrder";
-        String tag = "鐜嬩簲";
-        String key = "11";
-        String message = "Hello World";
-        //SendResult sendResult = rocketMQTemplate.syncSend(topic + ":" + tag, message);
-        //System.out.println("send result:" + sendResult.toString());
+        if(po.getClientReportId() != null && po.getInspectorReportId() != null) {
+            return BaseResponseUtils.buildErrorMsg("宸ュ崟浠呰兘鍏宠仈涓�涓棶棰樹笂鎶�");
+        }
 
-        DefaultMQProducer producer = new DefaultMQProducer("producer_group");
-        producer.setNamesrvAddr("127.0.0.1:9876");
-        producer.start();
-        Message msg = new Message(topic,tag,"11",message.getBytes(StandardCharsets.UTF_8));
-        SendResult approveSendResult = producer.send(msg);
-        System.out.println("send result:" + approveSendResult.toString());
+        Long workOrderId = workOrderSv.insertWorkOrder(po);
+        if(workOrderId == null || workOrderId == 0) {
+            return BaseResponseUtils.buildErrorMsg("鍒涘缓宸ュ崟澶辫触");
+        }
+
+        VoWorkOrder voWorkOrder = workOrderSv.getWorkOrderById(workOrderId);
+        if(voWorkOrder == null) {
+            return BaseResponseUtils.buildErrorMsg("鑾峰彇宸ュ崟澶辫触");
+        }
+
+        if(!sendWorkOrder(voWorkOrder, workOrderId)) {
+            return BaseResponseUtils.buildErrorMsg("宸ュ崟鎺ㄩ�佸け璐�");
+        }
+
+        return BaseResponseUtils.buildSuccess();
     }
+
+    /**
+     * 閫氳繃RocketMQ鎺ㄩ�佸伐鍗曚富閿�
+     * @param voWorkOrder 宸ュ崟瑙嗗浘瀵硅薄
+     * @param workOrderId 宸ュ崟ID
+     * @return
+     * @throws MQClientException
+     * @throws MQBrokerException
+     * @throws RemotingException
+     * @throws InterruptedException
+     */
+    private Boolean sendWorkOrder(VoWorkOrder voWorkOrder, Long workOrderId) throws MQClientException, MQBrokerException, RemotingException, InterruptedException {
+        String tag = voWorkOrder.getInspector();
+        String key = voWorkOrder.getInspectorId().toString();
+        //String message = JSON.toJSONString(voWorkOrder);
+        String message = workOrderId.toString();
+
+        DefaultMQProducer producer = new DefaultMQProducer(producerGroup);
+        producer.setNamesrvAddr(nameServer);
+        producer.start();
+        Message msg = new Message(topic, tag, key, message.getBytes(StandardCharsets.UTF_8));
+        SendResult approveSendResult = producer.send(msg);
+        if(!approveSendResult.getSendStatus().toString().equals("SEND_OK")) {
+            return false;
+        }
+
+        return true;
+    }
+
+    /**
+     * 閫昏緫鍒犻櫎鎸囧畾娲惧崟浜虹殑鎸囧畾鏈垹闄ゅ伐鍗�
+     * 鍏堝垽鏂寚瀹氭淳鍗曚汉銆佹湭鍒犻櫎鐨勬寚瀹氬伐鍗曟槸鍚﹀瓨鍦�
+     * @param deleteWorkOrder 鍒犻櫎宸ュ崟浼犺緭绫�
+     * @param bindingResult
+     * @return
+     */
+    @PostMapping(path = "deleteWorkOrder")
+    @SsoAop()
+    public BaseResponse<Boolean> deleteWorkOrder(@RequestBody @Valid DtoDeleteWorkOrder deleteWorkOrder, BindingResult bindingResult) {
+        if(bindingResult != null && bindingResult.hasErrors()){
+            return BaseResponseUtils.buildErrorMsg(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage());
+        }
+
+        OpeWorkOrder workOrder = workOrderSv.getWorkOrder(deleteWorkOrder.getDispatcherId(), deleteWorkOrder.getWorkOrderId());
+        if(workOrder == null) {
+            return BaseResponseUtils.buildErrorMsg("鎮ㄨ鍒犻櫎鐨勫伐鍗曚笉瀛樺湪");
+        }
+
+        if(workOrderSv.deleteWorkOrder(deleteWorkOrder.getWorkOrderId()) == 0) {
+            return BaseResponseUtils.buildErrorMsg("宸ュ崟鍒犻櫎澶辫触");
+        }
+
+
+        return BaseResponseUtils.buildSuccess();
+    }
+
+    /**
+     * 鏍规嵁鎸囧畾鏉′欢鑾峰彇鏈垹闄ょ殑宸ュ崟鍒楄〃
+     * @param qo
+     * @return
+     */
+    @GetMapping(path = "/getWorkOrders")
+    @SsoAop()
+    public BaseResponse<QueryResultVo<List<VoWorkOrder>>> getWorkOrders(QoWorkOrder qo){
+        try {
+            return BaseResponseUtils.buildSuccess(workOrderSv.getWorkOrders(qo));
+        } catch (Exception e) {
+            return BaseResponseUtils.buildException(e.getMessage()) ;
+        }
+    }
+
+    /**
+     * 鑾峰彇宸ュ崟璇︽儏
+     * @param workOrderId
+     * @return
+     */
+    @GetMapping(path = "/getOneWorkOrder")
+    public BaseResponse<VoWorkOrder> getOneWorkOrder(@RequestParam("workOrderId") Long workOrderId) {
+        try {
+            return BaseResponseUtils.buildSuccess(workOrderSv.getWorkOrderById(workOrderId));
+        } catch (Exception e) {
+            log.error("鑾峰彇宸ュ崟璇︽儏寮傚父", e);
+            return BaseResponseUtils.buildException(e.getMessage());
+        }
+    }
+
+    /**
+     * 涓婃姤宸ュ崟澶勭悊缁撴灉
+     *      鍒ゆ柇璇ュ伐鍗曟槸鍚﹀瓨鍦ㄦ湁鏁堢殑澶勭悊缁撴灉锛屽鏋滃瓨鍦ㄥ垯鎻愮ず鐢ㄦ埛璇ュ伐鍗曞凡瀛樺湪澶勭悊缁撴灉
+     *      娣诲姞澶勭悊缁撴灉鍥炲
+     * @param po
+     * @param bindingResult
+     * @return
+     */
+    @PostMapping(path = "addProcessingResult")
+    @Transactional(rollbackFor = Exception.class)
+    public BaseResponse<Boolean> addProcessingResult(@RequestBody @Valid OpeProcessingResult po, BindingResult bindingResult) {
+        if(bindingResult != null && bindingResult.hasErrors()){
+            return BaseResponseUtils.buildFail(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage());
+        }
+
+        if(workOrderSv.hasValidProcessingResult(po.getWorkOrderId())) {
+            return BaseResponseUtils.buildErrorMsg("璇ュ伐鍗曞瓨鍦ㄦ湁鏁堢殑澶勭悊缁撴灉");
+        }
+
+        Long processingResultId = workOrderSv.insertProcessingResult(po);
+        if(processingResultId == null) {
+            return BaseResponseUtils.buildErrorMsg("涓婃姤宸ュ崟澶勭悊缁撴灉澶辫触");
+        }
+
+        return BaseResponseUtils.buildSuccess(true) ;
+    }
+
 }
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-app/src/main/java/com/dy/pipIrrApp/workOrder/WorkOrderSv.java b/pipIrr-platform/pipIrr-web/pipIrr-web-app/src/main/java/com/dy/pipIrrApp/workOrder/WorkOrderSv.java
index c635d5e..34746ef 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-app/src/main/java/com/dy/pipIrrApp/workOrder/WorkOrderSv.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-app/src/main/java/com/dy/pipIrrApp/workOrder/WorkOrderSv.java
@@ -1,7 +1,20 @@
 package com.dy.pipIrrApp.workOrder;
 
+import com.dy.common.webUtil.QueryResultVo;
+import com.dy.pipIrrApp.workOrder.qo.QoWorkOrder;
+import com.dy.pipIrrGlobal.daoOp.OpeProcessingResultMapper;
+import com.dy.pipIrrGlobal.daoOp.OpeWorkOrderMapper;
+import com.dy.pipIrrGlobal.pojoOp.OpeProcessingResult;
+import com.dy.pipIrrGlobal.pojoOp.OpeWorkOrder;
+import com.dy.pipIrrGlobal.voOp.VoWorkOrder;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.dubbo.common.utils.PojoUtils;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
 
 /**
  * @author ZhuBaoMin
@@ -13,4 +26,97 @@
 @Slf4j
 @Service
 public class WorkOrderSv {
+    @Autowired
+    private OpeWorkOrderMapper opeWorkOrderMapper;
+
+    @Autowired
+    private OpeProcessingResultMapper opeProcessingResultMapper;
+
+    /**
+     * 娣诲姞宸ュ崟璁板綍
+     * @param po
+     * @return
+     */
+    public Long insertWorkOrder(OpeWorkOrder po) {
+        po.setDispatchTime(new Date());
+        po.setState((byte) 1);
+        po.setRejectTimes(0);
+        po.setDeleted(0L);
+
+        opeWorkOrderMapper.insert(po);
+        return po.getId();
+    }
+
+    /**
+     * 鑾峰彇鎸囧畾娲惧崟浜虹殑鎸囧畾鏈垹闄ゅ伐鍗曪紝鍒犻櫎宸ュ崟鍓嶅垽鏂娇鐢ㄤ娇鐢�
+     * @param dispatcherId
+     * @param workOrderId
+     * @return
+     */
+    public OpeWorkOrder getWorkOrder(Long dispatcherId, Long workOrderId) {
+        return opeWorkOrderMapper.getWorkOrder(dispatcherId, workOrderId);
+    }
+
+    /**
+     * 閫昏緫鍒犻櫎涓�涓湭鍒犻櫎鐨勫伐鍗�
+     * @param workOrderId
+     * @return
+     */
+    public Integer deleteWorkOrder(Long workOrderId) {
+        return opeWorkOrderMapper.deleteWorkOrder(workOrderId);
+    }
+
+    /**
+     * 鏍规嵁鎸囧畾鏉′欢鑾峰彇宸ュ崟
+     * @param qo
+     * @return
+     */
+    public QueryResultVo<List<VoWorkOrder>> getWorkOrders(QoWorkOrder qo) {
+        qo.completionTime() ;
+
+        Map<String, Object> params = (Map<String, Object>) PojoUtils.generalize(qo);
+        Long itemTotal = opeWorkOrderMapper.getWorkOrdersCount(params);
+
+        QueryResultVo<List<VoWorkOrder>> rsVo = new QueryResultVo<>() ;
+        rsVo.pageSize = qo.pageSize ;
+        rsVo.pageCurr = qo.pageCurr ;
+
+        rsVo.calculateAndSet(itemTotal, params);
+        rsVo.obj = opeWorkOrderMapper.getWorkOrders(params);
+        return rsVo ;
+    }
+
+    /**
+     * 鏍规嵁宸ュ崟涓婚敭鑾峰彇宸ュ崟瑙嗗浘瀵硅薄
+     * @param workOrderId
+     * @return
+     */
+    public VoWorkOrder getWorkOrderById(Long workOrderId) {
+        return opeWorkOrderMapper.getWorkOrderById(workOrderId);
+    }
+
+    /**
+     * 鏍规嵁workOrderId鑾峰彇鏈垹闄ょ殑澶勭悊缁撴灉鏁伴噺锛屾坊鍔犵粨鏋滀笂鎶ュ墠鍒ゆ柇浣跨敤
+     * @param workOrderId
+     * @return
+     */
+    public Boolean hasValidProcessingResult(Long workOrderId) {
+        if (opeProcessingResultMapper.getValidResultCount(workOrderId) == 0) {
+            return false;
+        }
+        return true;
+    }
+
+    /**
+     * 涓婃姤宸ュ崟澶勭悊缁撴灉
+     * @param po
+     * @return
+     */
+    public Long insertProcessingResult(OpeProcessingResult po) {
+        po.setReportTime(new Date());
+        po.setState((byte)1);
+        po.setDeleted(0L);
+        opeProcessingResultMapper.insert(po);
+        return po.getId();
+    }
 }
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-app/src/main/java/com/dy/pipIrrApp/workOrder/dto/DtoDeleteWorkOrder.java b/pipIrr-platform/pipIrr-web/pipIrr-web-app/src/main/java/com/dy/pipIrrApp/workOrder/dto/DtoDeleteWorkOrder.java
new file mode 100644
index 0000000..b0640cf
--- /dev/null
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-app/src/main/java/com/dy/pipIrrApp/workOrder/dto/DtoDeleteWorkOrder.java
@@ -0,0 +1,28 @@
+package com.dy.pipIrrApp.workOrder.dto;
+
+import jakarta.validation.constraints.NotNull;
+import lombok.Data;
+
+/**
+ * @author ZhuBaoMin
+ * @date 2024-11-07 13:43
+ * @LastEditTime 2024-11-07 13:43
+ * @Description 鍒犻櫎宸ュ崟浼犺緭绫�
+ */
+
+@Data
+public class DtoDeleteWorkOrder {
+    public static final long serialVersionUID = 202411071344001L;
+
+    /**
+     * 娲惧崟浜篒D
+     */
+    @NotNull(message = "娲惧崟浜轰笉鑳戒负绌�")
+    private Long dispatcherId;
+
+    /**
+     * 宸ュ崟ID
+     */
+    @NotNull(message = "宸ュ崟涓嶈兘涓虹┖")
+    private Long workOrderId;
+}
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-app/src/main/java/com/dy/pipIrrApp/workOrder/qo/QoWorkOrder.java b/pipIrr-platform/pipIrr-web/pipIrr-web-app/src/main/java/com/dy/pipIrrApp/workOrder/qo/QoWorkOrder.java
new file mode 100644
index 0000000..fb636a3
--- /dev/null
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-app/src/main/java/com/dy/pipIrrApp/workOrder/qo/QoWorkOrder.java
@@ -0,0 +1,44 @@
+package com.dy.pipIrrApp.workOrder.qo;
+
+import com.dy.common.webUtil.QueryConditionVo;
+import lombok.Data;
+
+/**
+ * @author ZhuBaoMin
+ * @date 2024-11-07 17:07
+ * @LastEditTime 2024-11-07 17:07
+ * @Description
+ */
+
+@Data
+public class QoWorkOrder extends QueryConditionVo {
+    /**
+     * 娲惧崟浜哄鍚�
+     */
+    private String dispatcher;
+
+    /**
+     * 宸℃鍛樺鍚�
+     */
+    private String inspector;
+
+    /**
+     * 鏌ヨ寮�濮嬫椂闂�
+     */
+    private String timeStart;
+
+    /**
+     * 鏌ヨ缁撴潫鏃堕棿
+     */
+    private String timeStop;
+
+    public void completionTime(){
+        if(this.timeStart != null && !this.timeStart.trim().equals("")) {
+            this.timeStart = timeStart + " 00:00:00";
+        }
+        if(this.timeStop != null && !this.timeStart.trim().equals("")) {
+            this.timeStop = timeStop + " 23:59:59";
+        }
+    }
+
+}
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-app/src/main/resources/application.yml b/pipIrr-platform/pipIrr-web/pipIrr-web-app/src/main/resources/application.yml
index 7c6f3fb..ec02f18 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-app/src/main/resources/application.yml
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-app/src/main/resources/application.yml
@@ -16,6 +16,7 @@
             idSuffix: ${pipIrr.app.idSuffix}
 
 rocketmq:
+    topic: "workOrder"
     consumer:
         group: consumer_group
         # 涓�娆℃媺鍙栨秷鎭渶澶у�硷紝娉ㄦ剰鏄媺鍙栨秷鎭殑鏈�澶у�艰�岄潪娑堣垂鏈�澶у��
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-base/src/main/java/com/dy/pipIrrBase/rtuUpgrade/program/QueryVo.java b/pipIrr-platform/pipIrr-web/pipIrr-web-base/src/main/java/com/dy/pipIrrBase/rtuUpgrade/program/QueryVo.java
new file mode 100644
index 0000000..6119026
--- /dev/null
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-base/src/main/java/com/dy/pipIrrBase/rtuUpgrade/program/QueryVo.java
@@ -0,0 +1,22 @@
+package com.dy.pipIrrBase.rtuUpgrade.program;
+
+import com.dy.common.webUtil.QueryConditionVo;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.*;
+
+/**
+ * @Author: liurunyu
+ * @Date: 2024/11/5 9:52
+ * @Description
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@ToString(callSuper = true)
+@NoArgsConstructor
+@AllArgsConstructor
+@Builder
+@Schema(name = "鍗囩骇绋嬪簭鏌ヨ鏉′欢")
+public class QueryVo extends QueryConditionVo {
+    @Schema(description = "绋嬪簭鏂囦欢鍚嶇О")
+    public String fileName;
+}
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-base/src/main/java/com/dy/pipIrrBase/rtuUpgrade/program/UgRtuProgramCtrl.java b/pipIrr-platform/pipIrr-web/pipIrr-web-base/src/main/java/com/dy/pipIrrBase/rtuUpgrade/program/UgRtuProgramCtrl.java
new file mode 100644
index 0000000..66872cd
--- /dev/null
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-base/src/main/java/com/dy/pipIrrBase/rtuUpgrade/program/UgRtuProgramCtrl.java
@@ -0,0 +1,248 @@
+package com.dy.pipIrrBase.rtuUpgrade.program;
+
+import cn.hutool.core.util.HexUtil;
+import com.dy.common.aop.SsoAop;
+import com.dy.common.softUpgrade.parse.HexFileParse;
+import com.dy.common.softUpgrade.parse.HexFileVo;
+import com.dy.common.util.DateTime;
+import com.dy.common.webUtil.BaseResponse;
+import com.dy.common.webUtil.BaseResponseUtils;
+import com.dy.common.webUtil.QueryResultVo;
+import com.dy.common.webUtil.ResultCodeMsg;
+import com.dy.pipIrrGlobal.pojoRm.UgRtuProgram;
+import com.dy.pipIrrGlobal.voRm.VoRtuProgram;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.media.Content;
+import io.swagger.v3.oas.annotations.media.Schema;
+import io.swagger.v3.oas.annotations.responses.ApiResponse;
+import io.swagger.v3.oas.annotations.responses.ApiResponses;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import jakarta.validation.Valid;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.MediaType;
+import org.springframework.validation.BindingResult;
+import org.springframework.web.bind.annotation.*;
+
+import java.io.UnsupportedEncodingException;
+import java.util.Date;
+import java.util.List;
+import java.util.Objects;
+
+/**
+ * @Author: liurunyu
+ * @Date: 2024/11/5 8:32
+ * @Description
+ */
+@Slf4j
+@Tag(name = "RTU鍗囩骇绋嬪簭绠$悊", description = "RTU鍗囩骇绋嬪簭澧炲垹鏀规煡绛夋搷浣�")
+@RestController
+@RequestMapping(path = "ugRtuProgram")
+@SuppressWarnings("unchecked")
+//java鐗堟湰瓒婇珮锛屽娉涘瀷绾︽潫瓒婁弗锛屾墍浠ラ厤缃甋uppressWarnings("unchecked")
+public class UgRtuProgramCtrl {
+
+    private UgRtuProgramSv sv;
+
+    @Autowired
+    private void setSv(UgRtuProgramSv sv) { this.sv = sv; }
+
+    /**
+     * 寰楀埌涓�涓猂TU鍗囩骇绋嬪簭鏁版嵁
+     * @return 涓�涓猂TU鍗囩骇绋嬪簭鏁版嵁
+     */
+    @Operation(summary = "涓�涓猂TU鍗囩骇绋嬪簭", description = "寰楀埌涓�涓猂TU鍗囩骇绋嬪簭鏁版嵁")
+    @ApiResponses(value = {
+            @ApiResponse(
+                    responseCode = ResultCodeMsg.RsCode.SUCCESS_CODE,
+                    description = "杩斿洖涓�涓猂TU鍗囩骇绋嬪簭鏁版嵁锛圔aseResponse.content:{}锛�",
+                    content = {@Content(mediaType = MediaType.APPLICATION_JSON_VALUE,
+                            schema = @Schema(implementation = UgRtuProgram.class))}
+            )
+    })
+    @GetMapping(path = "one")
+    @SsoAop()
+    public BaseResponse<UgRtuProgram> one(Long id) throws UnsupportedEncodingException {
+        UgRtuProgram po = this.sv.selectById(id) ;
+        if(po != null){
+            if(po.programBytes != null && po.programBytes.length > 0){
+                po.programString = HexUtil.encodeHexStr(po.programBytes) ;
+            }
+            if(po.fileBytes != null && po.fileBytes.length > 0){
+                po.fileString = new String(po.fileBytes) ;
+                po.fileString = po.fileString.replaceAll("\\r\\n", "<br/>") ;
+            }
+            return BaseResponseUtils.buildSuccess(po);
+        }else{
+            return BaseResponseUtils.buildException("鏈煡璇㈠埌瀵瑰簲鐨勮褰�") ;
+        }
+    }
+    /**
+     * 瀹㈡埛绔姹傚緱鍒颁竴浜汻TU鍗囩骇绋嬪簭鏁版嵁
+     * @return 涓�浜汻TU鍗囩骇绋嬪簭鏁版嵁
+     */
+    @Operation(summary = "鑾峰緱涓�浜汻TU鍗囩骇绋嬪簭", description = "杩斿洖涓�浜涘垎椤礡TU鍗囩骇绋嬪簭鏁版嵁")
+    @ApiResponses(value = {
+            @ApiResponse(
+                    responseCode = ResultCodeMsg.RsCode.SUCCESS_CODE,
+                    description = "杩斿洖涓�浜汻TU鍗囩骇绋嬪簭鏁版嵁锛圔aseResponse.content:QueryResultVo[{}]锛�",
+                    content = {@Content(mediaType = MediaType.APPLICATION_JSON_VALUE,
+                            schema = @Schema(implementation = UgRtuProgram.class))}
+            )
+    })
+    @GetMapping(path = "/some")
+    @SsoAop()
+    public BaseResponse<QueryResultVo<List<UgRtuProgram>>> some(QueryVo vo){
+        try {
+            QueryResultVo<List<UgRtuProgram>> res = this.sv.selectSome(vo) ;
+            return BaseResponseUtils.buildSuccess(res);
+        } catch (Exception e) {
+            log.error("鏌ヨRTU鍗囩骇绋嬪簭寮傚父", e);
+            return BaseResponseUtils.buildException(e.getMessage()) ;
+        }
+    }
+
+    /**
+     * 瀹㈡埛绔姹傚緱鍒版墍鏈夊崌绾х▼搴忚褰旾D鍜屾枃浠跺悕绉� 锛屼互渚涘叾浠栧簲鐢ㄤ笅鎷夐�夋嫨
+     * @return 鎵�RTU鍗囩骇绋嬪簭鏂囦欢鍚嶆暟鎹�
+     */
+    @Operation(summary = "鑾峰緱涓�浜汻TU鍗囩骇绋嬪簭", description = "杩斿洖涓�浜涘垎椤礡TU鍗囩骇绋嬪簭鏁版嵁")
+    @ApiResponses(value = {
+            @ApiResponse(
+                    responseCode = ResultCodeMsg.RsCode.SUCCESS_CODE,
+                    description = "杩斿洖涓�浜汻TU鍗囩骇绋嬪簭鏁版嵁锛圔aseResponse.content:QueryResultVo[{}]锛�",
+                    content = {@Content(mediaType = MediaType.APPLICATION_JSON_VALUE,
+                            schema = @Schema(implementation = UgRtuProgram.class))}
+            )
+    })
+    @GetMapping(path = "/all")
+    @SsoAop()
+    public BaseResponse<QueryResultVo<List<UgRtuProgram>>> all(){
+        try {
+            QueryResultVo<List<UgRtuProgram>> res = this.sv.selectAll() ;
+            return BaseResponseUtils.buildSuccess(res);
+        } catch (Exception e) {
+            log.error("鏌ヨRTU鍗囩骇绋嬪簭寮傚父", e);
+            return BaseResponseUtils.buildException(e.getMessage()) ;
+        }
+    }
+
+    /**
+     * 鏂板淇濆瓨RTU鍗囩骇绋嬪簭
+     * @param vo 鏂板淇濆瓨RTU鍗囩骇绋嬪簭form琛ㄥ崟瀵硅薄
+     * @return 鏄惁鎴愬姛
+     */
+    @Operation(summary = "淇濆瓨RTU鍗囩骇绋嬪簭", description = "鎻愪氦RTU鍗囩骇绋嬪簭鏁版嵁锛坒orm琛ㄥ崟锛夛紝杩涜淇濆瓨")
+    @ApiResponses(value = {
+            @ApiResponse(
+                    responseCode = ResultCodeMsg.RsCode.SUCCESS_CODE,
+                    description = "鎿嶄綔缁撴灉锛歵rue锛氭垚鍔燂紝false锛氬け璐ワ紙BaseResponse.content锛�",
+                    content = {@Content(mediaType = MediaType.APPLICATION_JSON_VALUE,
+                            schema = @Schema(implementation = Boolean.class))}
+            )
+    })
+    @PostMapping(path = "save", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
+    @SsoAop()
+    public BaseResponse<Boolean> save(@Parameter(description = "form琛ㄥ崟鏁版嵁", required = true) @Valid VoRtuProgram vo,  @Parameter(hidden = true) BindingResult bindingResult){
+        if(bindingResult != null && bindingResult.hasErrors()){
+            return BaseResponseUtils.buildFail(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage());
+        }
+        if(vo.file == null){
+            return BaseResponseUtils.buildFail("RTU绋嬪簭鏂囦欢蹇呴』涓婁紶") ;
+        }
+
+        HexFileVo fileVo = null ;
+        byte[] fileBytes = null ;
+        try{
+            fileBytes = vo.file.getBytes() ;
+            if(fileBytes != null) {
+                HexFileParse fileParse = new HexFileParse();
+                fileVo = fileParse.doParse(fileBytes);
+            }
+        }catch (Exception e){
+            fileVo = null ;
+            return BaseResponseUtils.buildFail("瑙f瀽RTU绋嬪簭鏂囦欢寮傚父锛�" + e.getMessage()) ;
+        }
+        if(fileVo != null){
+            UgRtuProgram po = new UgRtuProgram();
+            po.hexFileName = vo.file.getOriginalFilename() ;
+            po.programCalculateBytes = (int)fileVo.calculateBytes ;
+            po.programCrc16 = fileVo.bytesCrc16 ;
+            po.programBytes = fileVo.bytes;
+            po.fileBytes = fileBytes;
+            po.remark = vo.remark ;
+            po.dt = new Date();
+            po.deleted = 0 ;
+            vo.toPo(po);
+            po.id = null ;
+            int count;
+            try {
+                count = this.sv.save(po);
+            } catch (Exception e) {
+                log.error("淇濆瓨RTU鍗囩骇绋嬪簭寮傚父", e);
+                return BaseResponseUtils.buildException(e.getMessage()) ;
+            }
+            if(count <= 0){
+                return BaseResponseUtils.buildFail("鏁版嵁搴撳瓨鍌ㄥけ璐�") ;
+            }else{
+                return BaseResponseUtils.buildSuccess(true) ;
+            }
+        }else{
+            return BaseResponseUtils.buildFail("瑙f瀽RTU绋嬪簭鏂囦欢寮傚父") ;
+        }
+    }
+    /**
+     * 涓轰簡淇濊瘉鍗囩骇绋嬪簭鐨勬纭紝涓嶆彁渚涗慨鏀瑰姛鑳斤紝濡傛灉涓婁紶閿欎簡锛屽彧鑳藉垹闄ゅ悗閲嶆柊涓婁紶
+     * @param vo 淇濆瓨RTU鍗囩骇绋嬪簭form琛ㄥ崟瀵硅薄
+     * @return 鏄惁鎴愬姛
+    @Operation(summary = "缂栬緫淇敼鐗囧尯", description = "鎻愪氦鐗囧尯鏁版嵁锛坒orm琛ㄥ崟锛夛紝杩涜淇敼")
+    @ApiResponses(value = {
+            @ApiResponse(
+                    responseCode = ResultCodeMsg.RsCode.SUCCESS_CODE,
+                    description = "鎿嶄綔缁撴灉锛歵rue锛氭垚鍔燂紝false锛氬け璐ワ紙BaseResponse.content锛�",
+                    content = {@Content(mediaType = MediaType.APPLICATION_JSON_VALUE,
+                            schema = @Schema(implementation = Boolean.class))}
+            )
+    })
+    @PostMapping(path = "update", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
+    @SsoAop()
+    public BaseResponse<Boolean> update(@Parameter(description = "form琛ㄥ崟鏁版嵁", required = true) @Valid VoRtuProgram vo, @Parameter(hidden = true) BindingResult bindingResult){
+    }
+    */
+
+    /**
+     * 鍒犻櫎RTU鍗囩骇绋嬪簭
+     * @param id RTU鍗囩骇绋嬪簭ID
+     * @return 鏄惁鎴愬姛
+     */
+    @Operation(summary = "鍒犻櫎RTU鍗囩骇绋嬪簭", description = "鎻愪氦RTU鍗囩骇绋嬪簭ID锛岃繘琛岄�昏緫鍒犻櫎")
+    @ApiResponses(value = {
+            @ApiResponse(
+                    responseCode = ResultCodeMsg.RsCode.SUCCESS_CODE,
+                    description = "鎿嶄綔缁撴灉锛歵rue锛氭垚鍔燂紝false锛氬け璐ワ紙BaseResponse.content锛�",
+                    content = {@Content(mediaType = MediaType.APPLICATION_JSON_VALUE,
+                            schema = @Schema(implementation = Boolean.class))}
+            )
+    })
+    @GetMapping(path = "delete")
+    @SsoAop()
+    public BaseResponse<Boolean> delete(Long id){
+        if(id == null){
+            return BaseResponseUtils.buildFail("id涓嶈兘涓虹┖") ;
+        }
+        int count;
+        try {
+            count = this.sv.delete(id);
+        } catch (Exception e) {
+            log.error("鍒犻櫎RTU鍗囩骇绋嬪簭寮傚父", e);
+            return BaseResponseUtils.buildException(e.getMessage()) ;
+        }
+        if(count <= 0){
+            return BaseResponseUtils.buildFail("鏁版嵁搴撳瓨鍌ㄥけ璐�") ;
+        }else{
+            return BaseResponseUtils.buildSuccess(true) ;
+        }
+    }
+
+}
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-base/src/main/java/com/dy/pipIrrBase/rtuUpgrade/program/UgRtuProgramSv.java b/pipIrr-platform/pipIrr-web/pipIrr-web-base/src/main/java/com/dy/pipIrrBase/rtuUpgrade/program/UgRtuProgramSv.java
new file mode 100644
index 0000000..e61e65d
--- /dev/null
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-base/src/main/java/com/dy/pipIrrBase/rtuUpgrade/program/UgRtuProgramSv.java
@@ -0,0 +1,92 @@
+package com.dy.pipIrrBase.rtuUpgrade.program;
+
+import com.dy.common.webUtil.QueryResultVo;
+import com.dy.pipIrrGlobal.daoRm.UgRtuProgramMapper;
+import com.dy.pipIrrGlobal.pojoRm.UgRtuProgram;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.dubbo.common.utils.PojoUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @Author: liurunyu
+ * @Date: 2024/11/5 8:33
+ * @Description
+ */
+@Slf4j
+@Service
+public class UgRtuProgramSv {
+
+    @Autowired
+    private UgRtuProgramMapper dao ;
+
+    /**
+     * 寰楀埌涓�涓竴浜涘崌绾х▼搴�
+     * @param id 涓�浜涘崌绾х▼搴廔D
+     * @return 涓�浜涘崌绾х▼搴忓疄浣�
+     */
+    public UgRtuProgram selectById(Long id){
+        return this.dao.selectByPrimaryKey(id) ;
+    }
+
+    /**
+     * 寰楀埌涓�浜涘崌绾х▼搴�
+     * @return 涓�浜涘崌绾х▼搴�
+     */
+    public QueryResultVo<List<UgRtuProgram>> selectSome(QueryVo queryVo){
+        Map<String, Object> params = (Map<String, Object>) PojoUtils.generalize(queryVo) ;
+        Long itemTotal = this.dao.selectTotal(params) ;
+
+        QueryResultVo<List<UgRtuProgram>> rsVo = new QueryResultVo<>() ;
+        rsVo.pageSize = queryVo.pageSize ;
+        rsVo.pageCurr = queryVo.pageCurr ;
+        rsVo.calculateAndSet(itemTotal, params);
+        rsVo.obj = this.dao.selectSome(params) ;
+
+        return rsVo ;
+    }
+
+    /**
+     * 寰楀埌鎵�鏈夊崌绾х▼搴忚褰旾D鍜屾枃浠跺悕绉�
+     * @return 涓�浜涘崌绾х▼搴�
+     */
+    public QueryResultVo<List<UgRtuProgram>> selectAll(){
+        QueryResultVo<List<UgRtuProgram>> rsVo = new QueryResultVo<>() ;
+        rsVo.obj = this.dao.selectAll() ;
+        return rsVo ;
+    }
+
+    /**
+     * 鏂板淇濆瓨鍒嗘按鍙e疄浣�
+     * @param po 瀹炰綋
+     * @return 鏁伴噺
+     */
+    @Transactional
+    public int save(UgRtuProgram po){
+        return this.dao.insertSelective(po) ;
+    }
+    /**
+     * 淇濆瓨淇敼瀹炰綋
+     * @param po 瀹炰綋
+     * @return 鏁伴噺
+     */
+    @Transactional
+    public int update(UgRtuProgram po){
+        return this.dao.updateByPrimaryKeySelective(po) ;
+    }
+
+    /**
+     * 閫昏緫鍒犻櫎瀹炰綋
+     * @param id 瀹炰綋ID
+     * @return 鏁伴噺
+     */
+    @Transactional
+    public int delete(Long id){
+        return this.dao.deleteLogicById(id) ;
+    }
+
+}
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-base/src/main/java/com/dy/pipIrrBase/rtuUpgrade/task/QueryAddControllerVo.java b/pipIrr-platform/pipIrr-web/pipIrr-web-base/src/main/java/com/dy/pipIrrBase/rtuUpgrade/task/QueryAddControllerVo.java
new file mode 100644
index 0000000..fddd506
--- /dev/null
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-base/src/main/java/com/dy/pipIrrBase/rtuUpgrade/task/QueryAddControllerVo.java
@@ -0,0 +1,36 @@
+package com.dy.pipIrrBase.rtuUpgrade.task;
+
+import com.dy.common.webUtil.QueryConditionVo;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.*;
+
+/**
+ * @Author: liurunyu
+ * @Date: 2024/11/7 11:34
+ * @Description
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@ToString(callSuper = true)
+@NoArgsConstructor
+@AllArgsConstructor
+@Builder
+@Schema(name = "閫夋嫨鎺у埗鍣ㄦ煡璇㈡潯浠�")
+public class QueryAddControllerVo extends QueryConditionVo {
+
+    @Schema(description = "鍗囩骇浠诲姟id")
+    public Long taskId;
+
+    @Schema(description = "鍙栨按鍙g紪鍙�")
+    public String intakeNum;
+
+    @Schema(description = "鎺у埗鍣ㄥ湴鍧�")
+    public String rtuAddr;
+
+    @Schema(description = "閫氫俊鍗忚鍚嶇О")
+    public String protocolName;
+
+    @Schema(description = "閫氫俊鍗忚鐗堟湰鍙�")
+    public Integer protocolVersion;
+
+}
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-base/src/main/java/com/dy/pipIrrBase/rtuUpgrade/task/QueryControllerVo.java b/pipIrr-platform/pipIrr-web/pipIrr-web-base/src/main/java/com/dy/pipIrrBase/rtuUpgrade/task/QueryControllerVo.java
new file mode 100644
index 0000000..45a9615
--- /dev/null
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-base/src/main/java/com/dy/pipIrrBase/rtuUpgrade/task/QueryControllerVo.java
@@ -0,0 +1,36 @@
+package com.dy.pipIrrBase.rtuUpgrade.task;
+
+import com.dy.common.webUtil.QueryConditionVo;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.*;
+
+/**
+ * @Author: liurunyu
+ * @Date: 2024/11/7 11:34
+ * @Description
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@ToString(callSuper = true)
+@NoArgsConstructor
+@AllArgsConstructor
+@Builder
+@Schema(name = "鏌ヨ鍗囩骇浠诲姟鐨勬帶鍒跺櫒鏉′欢")
+public class QueryControllerVo extends QueryConditionVo {
+
+    @Schema(description = "鍗囩骇浠诲姟id")
+    public Long taskId;
+
+    @Schema(description = "鍙栨按鍙g紪鍙�")
+    public String intakeNum;
+
+    @Schema(description = "鎺у埗鍣ㄥ湴鍧�")
+    public String rtuAddr;
+
+    @Schema(description = "閫氫俊鍗忚鍚嶇О")
+    public String protocolName;
+
+    @Schema(description = "閫氫俊鍗忚鐗堟湰鍙�")
+    public Integer protocolVersion;
+
+}
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-base/src/main/java/com/dy/pipIrrBase/rtuUpgrade/task/QueryTaskVo.java b/pipIrr-platform/pipIrr-web/pipIrr-web-base/src/main/java/com/dy/pipIrrBase/rtuUpgrade/task/QueryTaskVo.java
new file mode 100644
index 0000000..8fb1843
--- /dev/null
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-base/src/main/java/com/dy/pipIrrBase/rtuUpgrade/task/QueryTaskVo.java
@@ -0,0 +1,27 @@
+package com.dy.pipIrrBase.rtuUpgrade.task;
+
+import com.dy.common.webUtil.QueryConditionVo;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.*;
+
+/**
+ * @Author: liurunyu
+ * @Date: 2024/11/7 11:34
+ * @Description
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@ToString(callSuper = true)
+@NoArgsConstructor
+@AllArgsConstructor
+@Builder
+@Schema(name = "鍗囩骇浠诲姟鏌ヨ鏉′欢")
+public class QueryTaskVo extends QueryConditionVo {
+
+    @Schema(description = "鍗囩骇绋嬪簭")
+    public String programId;
+
+    @Schema(description = "鍒涘缓浜�")
+    public String creator;
+
+}
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-base/src/main/java/com/dy/pipIrrBase/rtuUpgrade/task/UgRtuAddControllerCtrl.java b/pipIrr-platform/pipIrr-web/pipIrr-web-base/src/main/java/com/dy/pipIrrBase/rtuUpgrade/task/UgRtuAddControllerCtrl.java
new file mode 100644
index 0000000..8a8279a
--- /dev/null
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-base/src/main/java/com/dy/pipIrrBase/rtuUpgrade/task/UgRtuAddControllerCtrl.java
@@ -0,0 +1,178 @@
+package com.dy.pipIrrBase.rtuUpgrade.task;
+
+import com.dy.common.aop.SsoAop;
+import com.dy.common.webUtil.BaseResponse;
+import com.dy.common.webUtil.BaseResponseUtils;
+import com.dy.common.webUtil.QueryResultVo;
+import com.dy.common.webUtil.ResultCodeMsg;
+import com.dy.pipIrrGlobal.pojoRm.UgRtuController;
+import com.dy.pipIrrGlobal.voPr.VoController;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.media.Content;
+import io.swagger.v3.oas.annotations.media.Schema;
+import io.swagger.v3.oas.annotations.responses.ApiResponse;
+import io.swagger.v3.oas.annotations.responses.ApiResponses;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.MediaType;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
+
+/**
+ * @Author: liurunyu
+ * @Date: 2024/11/7 11:33
+ * @Description
+ */
+@Slf4j
+@Tag(name = "閫夋嫨RTU鍗囩骇浠诲姟瀵瑰簲鐨勬帶鍒跺櫒", description = "閫夋嫨RTU鍗囩骇浠诲姟瀵瑰簲鐨勬帶鍒跺櫒骞舵坊鍔犵瓑鎿嶄綔")
+@RestController
+@RequestMapping(path = "ugRtuAddController")
+@SuppressWarnings("unchecked")
+//java鐗堟湰瓒婇珮锛屽娉涘瀷绾︽潫瓒婁弗锛屾墍浠ラ厤缃甋uppressWarnings("unchecked")
+public class UgRtuAddControllerCtrl {
+
+    private UgRtuAddControllerSv addSv;
+    private UgRtuControllerSv addedSv;
+
+    @Autowired
+    private void setAddSv(UgRtuAddControllerSv addSv) { this.addSv = addSv; }
+
+    @Autowired
+    private void setSv(UgRtuControllerSv addedSv) { this.addedSv = addedSv; }
+
+    /**
+     * 瀹㈡埛绔姹傚緱鍒颁竴浜涙帶鍒跺櫒淇℃伅锛屼互渚涜閫夋嫨涓哄崌绾у璞�
+     * @return 涓�浜涙帶鍒跺櫒淇℃伅
+     */
+    @Operation(summary = "寰楀埌涓�浜涙帶鍒跺櫒淇℃伅锛屼互渚涜閫夋嫨涓哄崌绾у璞�", description = "寰楀埌涓�浜涙帶鍒跺櫒淇℃伅锛屼互渚涜閫夋嫨涓哄崌绾у璞�")
+    @ApiResponses(value = {
+            @ApiResponse(
+                    responseCode = ResultCodeMsg.RsCode.SUCCESS_CODE,
+                    description = "杩斿洖涓�浜汻TU鍗囩骇浠诲姟鏁版嵁锛圔aseResponse.content:QueryResultVo[{}]锛�",
+                    content = {@Content(mediaType = MediaType.APPLICATION_JSON_VALUE,
+                            schema = @Schema(implementation = VoController.class))}
+            )
+    })
+    @GetMapping(path = "/some")
+    @SsoAop()
+    public BaseResponse<QueryResultVo<List<VoController>>> some(QueryAddControllerVo vo){
+        try {
+            QueryResultVo<List<VoController>> res = this.addSv.selectSome(vo) ;
+            return BaseResponseUtils.buildSuccess(res);
+        } catch (Exception e) {
+            log.error("鏌ヨRTU鍗囩骇浠诲姟寮傚父", e);
+            return BaseResponseUtils.buildException(e.getMessage()) ;
+        }
+    }
+
+
+    /**
+     * 鎶婄鍚堟潯浠剁殑鎺у埗鍣ㄩ�夋嫨涓哄崌绾т换鍔″璞�
+     * @return 涓�浜汻TU鍗囩骇浠诲姟鏁版嵁
+     */
+    @Operation(summary = "鎶婄鍚堟潯浠剁殑鎺у埗鍣ㄩ�夋嫨涓哄崌绾т换鍔″璞�", description = "鎶婄鍚堟潯浠剁殑鎺у埗鍣ㄩ�夋嫨涓哄崌绾т换鍔″璞�")
+    @ApiResponses(value = {
+            @ApiResponse(
+                    responseCode = ResultCodeMsg.RsCode.SUCCESS_CODE,
+                    description = "杩斿洖涓�浜汻TU鍗囩骇浠诲姟鏁版嵁锛圔aseResponse.content:QueryResultVo[{}]锛�",
+                    content = {@Content(mediaType = MediaType.APPLICATION_JSON_VALUE,
+                            schema = @Schema(implementation = UgRtuAddSomeResVo.class))}
+            )
+    })
+    @GetMapping(path = "/addSome")
+    @SsoAop()
+    public BaseResponse<UgRtuAddSomeResVo> addSome(QueryAddControllerVo vo){
+        if(vo.taskId == null){
+            return BaseResponseUtils.buildErrorMsg("鍗囩骇浠诲姟id涓嶈兘涓虹┖") ;
+        }
+        UgRtuAddSomeResVo res = new UgRtuAddSomeResVo();
+        try {
+            List<VoController> list = this.addSv.selectAll(vo) ;
+            List<UgRtuController> addedList = this.addedSv.selectAllConByTask(vo.taskId) ;
+            if(list != null && list.size() > 0){
+                if(addedList == null || addedList.size() == 0){
+                    for(VoController voCon : list){
+                        UgRtuController ugRtuController = new UgRtuController();
+                        ugRtuController.setTaskId(vo.taskId);
+                        ugRtuController.setControllerId(Long.parseLong(voCon.getId())) ;
+                        ugRtuController.setRtuAddr(voCon.getRtuAddr()) ;
+                        this.addedSv.save(ugRtuController);
+                        res.successAddTotal += 1;
+                    }
+                }else{
+                    boolean exist = false ;
+                    for(VoController voCon : list){
+                        exist = false ;
+                        for(UgRtuController addedVo : addedList){
+                            if(addedVo.controllerId.longValue() == (Long.parseLong(voCon.getId()))){
+                                exist = true;
+                                break;
+                            }
+                        }
+                        if(!exist){
+                            UgRtuController ugRtuController = new UgRtuController();
+                            ugRtuController.setTaskId(vo.taskId);
+                            ugRtuController.setControllerId(Long.parseLong(voCon.getId())) ;
+                            ugRtuController.setRtuAddr(voCon.getRtuAddr()) ;
+                            this.addedSv.save(ugRtuController);
+                            res.successAddTotal += 1;
+                        }else{
+                            res.failRepeatAddTotal += 1;
+                        }
+                    }
+                }
+            }
+            return BaseResponseUtils.buildSuccess(res);
+        } catch (Exception e) {
+            log.error("鏌ヨRTU鍗囩骇浠诲姟寮傚父", e);
+            return BaseResponseUtils.buildException(e.getMessage()) ;
+        }
+    }
+
+
+    /**
+     * 鎶婁竴涓帶鍒跺櫒閫夋嫨涓哄崌绾т换鍔″璞�
+     * @return 涓�浜汻TU鍗囩骇浠诲姟鏁版嵁
+     */
+    @Operation(summary = "鎶婁竴涓帶鍒跺櫒閫夋嫨涓哄崌绾т换鍔″璞�", description = "鎶婁竴涓帶鍒跺櫒閫夋嫨涓哄崌绾т换鍔″璞�")
+    @ApiResponses(value = {
+            @ApiResponse(
+                    responseCode = ResultCodeMsg.RsCode.SUCCESS_CODE,
+                    description = "杩斿洖涓�浜汻TU鍗囩骇浠诲姟鏁版嵁锛圔aseResponse.content:QueryResultVo[{}]锛�",
+                    content = {@Content(mediaType = MediaType.APPLICATION_JSON_VALUE,
+                            schema = @Schema(implementation = Boolean.class))}
+            )
+    })
+    @GetMapping(path = "/addOne")
+    @SsoAop()
+    public BaseResponse<Boolean> addOne(String taskId, String controllerId, String rtuAddr){
+        if(taskId == null || taskId.trim().equals("")
+                || controllerId == null || controllerId.trim().equals("")
+                || rtuAddr == null || rtuAddr.trim().equals("")){
+            return BaseResponseUtils.buildErrorMsg("鍙傛暟蹇呴』鎻愪緵") ;
+        }
+        try {
+            if(this.addedSv.exist(Long.parseLong(taskId), Long.parseLong(controllerId))){
+                return BaseResponseUtils.buildErrorMsg("璇ユ帶鍒跺櫒宸茬粡娣诲姞杩囪浠诲姟") ;
+            }else{
+                UgRtuController ugRtuController = new UgRtuController();
+                ugRtuController.setTaskId(Long.parseLong(taskId));
+                ugRtuController.setControllerId(Long.parseLong(controllerId)) ;
+                ugRtuController.setRtuAddr(rtuAddr) ;
+                int count = this.addedSv.save(ugRtuController);
+                if(count <= 0){
+                    return BaseResponseUtils.buildFail("鏁版嵁搴撳瓨鍌ㄥけ璐�") ;
+                }else{
+                    return BaseResponseUtils.buildSuccess(true) ;
+                }
+            }
+        } catch (Exception e) {
+            log.error("鏌ヨRTU鍗囩骇浠诲姟寮傚父", e);
+            return BaseResponseUtils.buildException(e.getMessage()) ;
+        }
+    }
+}
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-base/src/main/java/com/dy/pipIrrBase/rtuUpgrade/task/UgRtuAddControllerSv.java b/pipIrr-platform/pipIrr-web/pipIrr-web-base/src/main/java/com/dy/pipIrrBase/rtuUpgrade/task/UgRtuAddControllerSv.java
new file mode 100644
index 0000000..6199d1c
--- /dev/null
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-base/src/main/java/com/dy/pipIrrBase/rtuUpgrade/task/UgRtuAddControllerSv.java
@@ -0,0 +1,58 @@
+package com.dy.pipIrrBase.rtuUpgrade.task;
+
+import com.dy.common.webUtil.QueryResultVo;
+import com.dy.pipIrrGlobal.daoPr.PrControllerMapper;
+import com.dy.pipIrrGlobal.daoRm.UgRtuControllerMapper;
+import com.dy.pipIrrGlobal.pojoRm.UgRtuTask;
+import com.dy.pipIrrGlobal.voPr.VoController;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.dubbo.common.utils.PojoUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @Author: liurunyu
+ * @Date: 2024/11/7 15:11
+ * @Description
+ */
+@Slf4j
+@Service
+public class UgRtuAddControllerSv {
+
+    @Autowired
+    private UgRtuControllerMapper dao ;
+
+    @Autowired
+    private PrControllerMapper prContrDao ;
+
+    /**
+     * 寰楀埌涓�浜涙帶鍒跺櫒淇℃伅锛屼互渚涜閫夋嫨涓哄崌绾у璞�
+     * @return 涓�浜涙帶鍒跺櫒淇℃伅
+     */
+    public QueryResultVo<List<VoController>> selectSome(QueryAddControllerVo queryVo){
+        Map<String, Object> params = (Map<String, Object>) PojoUtils.generalize(queryVo) ;
+        Long itemTotal = this.prContrDao.getRecordCount(params) ;
+
+        QueryResultVo<List<VoController>> rsVo = new QueryResultVo<>() ;
+        rsVo.pageSize = queryVo.pageSize ;
+        rsVo.pageCurr = queryVo.pageCurr ;
+        rsVo.calculateAndSet(itemTotal, params);
+        rsVo.obj = this.prContrDao.getControllers(params) ;
+
+        return rsVo ;
+    }
+
+
+    /**
+     * 寰楀埌涓�浜涙帶鍒跺櫒淇℃伅锛屼互渚涜閫夋嫨涓哄崌绾у璞�
+     * @return 涓�浜涗竴浜涙帶鍒跺櫒淇℃伅
+     */
+    public List<VoController> selectAll(QueryAddControllerVo queryVo){
+        Map<String, Object> params = (Map<String, Object>) PojoUtils.generalize(queryVo) ;
+        List<VoController> list = this.prContrDao.getControllers(params) ;
+        return list ;
+    }
+}
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-base/src/main/java/com/dy/pipIrrBase/rtuUpgrade/task/UgRtuAddSomeResVo.java b/pipIrr-platform/pipIrr-web/pipIrr-web-base/src/main/java/com/dy/pipIrrBase/rtuUpgrade/task/UgRtuAddSomeResVo.java
new file mode 100644
index 0000000..c2c93c6
--- /dev/null
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-base/src/main/java/com/dy/pipIrrBase/rtuUpgrade/task/UgRtuAddSomeResVo.java
@@ -0,0 +1,19 @@
+package com.dy.pipIrrBase.rtuUpgrade.task;
+
+import lombok.Data;
+
+/**
+ * @Author: liurunyu
+ * @Date: 2024/11/7 16:02
+ * @Description
+ */
+@Data
+public class UgRtuAddSomeResVo {
+    public Integer successAddTotal ;//娣诲姞鎴愬姛鏁�
+    public Integer failRepeatAddTotal ;//鍥犻噸澶嶆坊鍔犺�屽け璐ユ�绘暟
+
+    public UgRtuAddSomeResVo() {
+        this.successAddTotal = 0;
+        this.failRepeatAddTotal = 0;
+    }
+}
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-base/src/main/java/com/dy/pipIrrBase/rtuUpgrade/task/UgRtuControllerCtrl.java b/pipIrr-platform/pipIrr-web/pipIrr-web-base/src/main/java/com/dy/pipIrrBase/rtuUpgrade/task/UgRtuControllerCtrl.java
new file mode 100644
index 0000000..f2db173
--- /dev/null
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-base/src/main/java/com/dy/pipIrrBase/rtuUpgrade/task/UgRtuControllerCtrl.java
@@ -0,0 +1,77 @@
+package com.dy.pipIrrBase.rtuUpgrade.task;
+
+/**
+ * @Author: liurunyu
+ * @Date: 2024/11/7 14:48
+ * @Description
+ */
+
+import com.dy.common.aop.SsoAop;
+import com.dy.common.webUtil.BaseResponse;
+import com.dy.common.webUtil.BaseResponseUtils;
+import com.dy.common.webUtil.QueryResultVo;
+import com.dy.common.webUtil.ResultCodeMsg;
+import com.dy.pipIrrGlobal.pojoRm.UgRtuTask;
+import com.dy.pipIrrGlobal.voPr.VoController;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.media.Content;
+import io.swagger.v3.oas.annotations.media.Schema;
+import io.swagger.v3.oas.annotations.responses.ApiResponse;
+import io.swagger.v3.oas.annotations.responses.ApiResponses;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.MediaType;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
+
+/**
+ * @Author: liurunyu
+ * @Date: 2024/11/7 11:33
+ * @Description
+ */
+@Slf4j
+@Tag(name = "RTU鍗囩骇浠诲姟瀵瑰簲鐨勬帶鍒跺櫒", description = "RTU鍗囩骇浠诲姟瀵瑰簲鐨勬帶鍒跺櫒澧炲垹鏀规煡绛夋搷浣�")
+@RestController
+@RequestMapping(path = "ugRtuController")
+@SuppressWarnings("unchecked")
+//java鐗堟湰瓒婇珮锛屽娉涘瀷绾︽潫瓒婁弗锛屾墍浠ラ厤缃甋uppressWarnings("unchecked")
+public class UgRtuControllerCtrl {
+
+    private UgRtuControllerSv sv;
+
+    @Autowired
+    private void setAddSv(UgRtuControllerSv sv) { this.sv = sv; }
+
+    /**
+     * 瀹㈡埛绔垎椤垫煡璇竴涓崌绾т换鍔$殑鎵�鏈夋帶鍒跺櫒
+     * @return 涓�浜汻TU鍗囩骇浠诲姟鏁版嵁
+     */
+    @Operation(summary = "鍒嗛〉鏌ヨ涓�涓崌绾т换鍔$殑鎵�鏈夋帶鍒跺櫒", description = "瀹㈡埛绔垎椤垫煡璇竴涓崌绾т换鍔$殑鎵�鏈夋帶鍒跺櫒")
+    @ApiResponses(value = {
+            @ApiResponse(
+                    responseCode = ResultCodeMsg.RsCode.SUCCESS_CODE,
+                    description = "杩斿洖涓�浜汻TU鍗囩骇浠诲姟鎺у埗鍣ㄦ暟鎹紙BaseResponse.content:QueryResultVo[{}]锛�",
+                    content = {@Content(mediaType = MediaType.APPLICATION_JSON_VALUE,
+                            schema = @Schema(implementation = UgRtuTask.class))}
+            )
+    })
+    @GetMapping(path = "/some")
+    @SsoAop()
+    public BaseResponse<QueryResultVo<List<VoController>>> some(QueryControllerVo vo){
+        if(vo.taskId == null){
+            return BaseResponseUtils.buildErrorMsg("鍗囩骇浠诲姟id涓嶈兘涓虹┖") ;
+        }
+        try {
+            QueryResultVo<List<VoController>> res = this.sv.selectSome(vo) ;
+            return BaseResponseUtils.buildSuccess(res);
+        } catch (Exception e) {
+            log.error("鏌ヨRTU鍗囩骇浠诲姟寮傚父", e);
+            return BaseResponseUtils.buildException(e.getMessage()) ;
+        }
+    }
+
+}
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-base/src/main/java/com/dy/pipIrrBase/rtuUpgrade/task/UgRtuControllerSv.java b/pipIrr-platform/pipIrr-web/pipIrr-web-base/src/main/java/com/dy/pipIrrBase/rtuUpgrade/task/UgRtuControllerSv.java
new file mode 100644
index 0000000..02ca4b5
--- /dev/null
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-base/src/main/java/com/dy/pipIrrBase/rtuUpgrade/task/UgRtuControllerSv.java
@@ -0,0 +1,79 @@
+package com.dy.pipIrrBase.rtuUpgrade.task;
+
+import com.dy.common.webUtil.QueryResultVo;
+import com.dy.pipIrrGlobal.daoRm.UgRtuControllerMapper;
+import com.dy.pipIrrGlobal.pojoRm.UgRtuController;
+import com.dy.pipIrrGlobal.voPr.VoController;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.dubbo.common.utils.PojoUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @Author: liurunyu
+ * @Date: 2024/11/7 14:50
+ * @Description
+ */
+@Slf4j
+@Service
+public class UgRtuControllerSv {
+
+    @Autowired
+    private UgRtuControllerMapper dao ;
+
+
+    /**
+     * 鍒嗛〉鏌ヨ涓�涓崌绾т换鍔$殑鎵�鏈夋帶鍒跺櫒
+     * @return 涓�浜涙帶鍒跺櫒淇℃伅
+     */
+    public QueryResultVo<List<VoController>> selectSome(QueryControllerVo queryVo){
+        Map<String, Object> params = (Map<String, Object>) PojoUtils.generalize(queryVo) ;
+        Long itemTotal = this.dao.selectRecordCount(params) ;
+
+        QueryResultVo<List<VoController>> rsVo = new QueryResultVo<>() ;
+        rsVo.pageSize = queryVo.pageSize ;
+        rsVo.pageCurr = queryVo.pageCurr ;
+        rsVo.calculateAndSet(itemTotal, params);
+        rsVo.obj = this.dao.selectControllers(params) ;
+
+        return rsVo ;
+    }
+
+    /**
+     * 鏌ヨ涓�涓崌绾т换鍔℃墍鏈夋帶鍒跺櫒
+     * @return 涓�浜涗竴浜涙帶鍒跺櫒淇℃伅
+     */
+    public List<UgRtuController> selectAllConByTask(Long taskId){
+        List<UgRtuController> list = this.dao.selectAllConByTask(taskId) ;
+        return list ;
+    }
+
+    /**
+     * 鍒ゆ柇鏄惁瀛樺湪
+     * @param taskId 浠诲姟id
+     * @param controllerId 鎺у埗鍣↖D
+     * @return 瀛樺湪鍚�
+     */
+    public boolean exist(Long taskId, Long controllerId){
+        Long count = this.dao.selectCountByTaskAndCon(taskId, controllerId) ;
+        if(count== null || count == 0){
+            return false ;
+        }else{
+            return true ;
+        }
+    }
+
+    /**
+     * 鏂板
+     * @param po 瀹炰綋
+     * @return 鏁伴噺
+     */
+    @Transactional
+    public int save(UgRtuController po){
+        return this.dao.insertSelective(po) ;
+    }
+}
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-base/src/main/java/com/dy/pipIrrBase/rtuUpgrade/task/UgRtuTaskCtrl.java b/pipIrr-platform/pipIrr-web/pipIrr-web-base/src/main/java/com/dy/pipIrrBase/rtuUpgrade/task/UgRtuTaskCtrl.java
new file mode 100644
index 0000000..38822a4
--- /dev/null
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-base/src/main/java/com/dy/pipIrrBase/rtuUpgrade/task/UgRtuTaskCtrl.java
@@ -0,0 +1,228 @@
+package com.dy.pipIrrBase.rtuUpgrade.task;
+
+import com.dy.common.aop.SsoAop;
+import com.dy.common.webUtil.BaseResponse;
+import com.dy.common.webUtil.BaseResponseUtils;
+import com.dy.common.webUtil.QueryResultVo;
+import com.dy.common.webUtil.ResultCodeMsg;
+import com.dy.pipIrrGlobal.pojoRm.UgRtuTask;
+import com.dy.pipIrrGlobal.voRm.VoRtuTask;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.media.Content;
+import io.swagger.v3.oas.annotations.media.Schema;
+import io.swagger.v3.oas.annotations.responses.ApiResponse;
+import io.swagger.v3.oas.annotations.responses.ApiResponses;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import jakarta.validation.Valid;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.MediaType;
+import org.springframework.validation.BindingResult;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.io.UnsupportedEncodingException;
+import java.util.Date;
+import java.util.List;
+import java.util.Objects;
+
+/**
+ * @Author: liurunyu
+ * @Date: 2024/11/7 11:33
+ * @Description
+ */
+@Slf4j
+@Tag(name = "RTU鍗囩骇浠诲姟绠$悊", description = "RTU鍗囩骇浠诲姟澧炲垹鏀规煡绛夋搷浣�")
+@RestController
+@RequestMapping(path = "ugRtuTask")
+@SuppressWarnings("unchecked")
+//java鐗堟湰瓒婇珮锛屽娉涘瀷绾︽潫瓒婁弗锛屾墍浠ラ厤缃甋uppressWarnings("unchecked")
+public class UgRtuTaskCtrl {
+
+    private UgRtuTaskSv sv;
+
+    @Autowired
+    private void setSv(UgRtuTaskSv sv) { this.sv = sv; }
+
+    /**
+     * 寰楀埌涓�涓猂TU鍗囩骇浠诲姟鏁版嵁
+     * @return 涓�涓猂TU鍗囩骇浠诲姟鏁版嵁
+     */
+    @Operation(summary = "涓�涓猂TU鍗囩骇浠诲姟", description = "寰楀埌涓�涓猂TU鍗囩骇浠诲姟鏁版嵁")
+    @ApiResponses(value = {
+            @ApiResponse(
+                    responseCode = ResultCodeMsg.RsCode.SUCCESS_CODE,
+                    description = "杩斿洖涓�涓猂TU鍗囩骇浠诲姟鏁版嵁锛圔aseResponse.content:{}锛�",
+                    content = {@Content(mediaType = MediaType.APPLICATION_JSON_VALUE,
+                            schema = @Schema(implementation = UgRtuTask.class))}
+            )
+    })
+    @GetMapping(path = "one")
+    @SsoAop()
+    public BaseResponse<UgRtuTask> one(Long id) throws UnsupportedEncodingException {
+        return BaseResponseUtils.buildSuccess(this.sv.selectById(id) );
+    }
+    /**
+     * 瀹㈡埛绔姹傚緱鍒颁竴浜汻TU鍗囩骇浠诲姟鏁版嵁
+     * @return 涓�浜汻TU鍗囩骇浠诲姟鏁版嵁
+     */
+    @Operation(summary = "鑾峰緱涓�浜汻TU鍗囩骇浠诲姟", description = "杩斿洖涓�浜涘垎椤礡TU鍗囩骇浠诲姟鏁版嵁")
+    @ApiResponses(value = {
+            @ApiResponse(
+                    responseCode = ResultCodeMsg.RsCode.SUCCESS_CODE,
+                    description = "杩斿洖涓�浜汻TU鍗囩骇浠诲姟鏁版嵁锛圔aseResponse.content:QueryResultVo[{}]锛�",
+                    content = {@Content(mediaType = MediaType.APPLICATION_JSON_VALUE,
+                            schema = @Schema(implementation = UgRtuTask.class))}
+            )
+    })
+    @GetMapping(path = "/some")
+    @SsoAop()
+    public BaseResponse<QueryResultVo<List<UgRtuTask>>> some(QueryTaskVo vo){
+        try {
+            QueryResultVo<List<UgRtuTask>> res = this.sv.selectSome(vo) ;
+            return BaseResponseUtils.buildSuccess(res);
+        } catch (Exception e) {
+            log.error("鏌ヨRTU鍗囩骇浠诲姟寮傚父", e);
+            return BaseResponseUtils.buildException(e.getMessage()) ;
+        }
+    }
+
+    /**
+     * 瀹㈡埛绔姹傚緱鍒版墍鏈夊崌绾т换鍔¤褰旾D鍜屾枃浠跺悕绉� 锛屼互渚涘叾浠栧簲鐢ㄤ笅鎷夐�夋嫨
+     * @return 鎵�RTU鍗囩骇浠诲姟鏂囦欢鍚嶆暟鎹�
+     */
+    @Operation(summary = "鑾峰緱涓�浜汻TU鍗囩骇浠诲姟", description = "杩斿洖涓�浜涘垎椤礡TU鍗囩骇浠诲姟鏁版嵁")
+    @ApiResponses(value = {
+            @ApiResponse(
+                    responseCode = ResultCodeMsg.RsCode.SUCCESS_CODE,
+                    description = "杩斿洖涓�浜汻TU鍗囩骇浠诲姟鏁版嵁锛圔aseResponse.content:QueryResultVo[{}]锛�",
+                    content = {@Content(mediaType = MediaType.APPLICATION_JSON_VALUE,
+                            schema = @Schema(implementation = UgRtuTask.class))}
+            )
+    })
+    @GetMapping(path = "/all")
+    @SsoAop()
+    public BaseResponse<QueryResultVo<List<UgRtuTask>>> all(){
+        try {
+            QueryResultVo<List<UgRtuTask>> res = this.sv.selectAll() ;
+            return BaseResponseUtils.buildSuccess(res);
+        } catch (Exception e) {
+            log.error("鏌ヨRTU鍗囩骇浠诲姟寮傚父", e);
+            return BaseResponseUtils.buildException(e.getMessage()) ;
+        }
+    }
+
+    /**
+     * 鏂板淇濆瓨RTU鍗囩骇浠诲姟
+     * @param vo 鏂板淇濆瓨RTU鍗囩骇浠诲姟form琛ㄥ崟瀵硅薄
+     * @return 鏄惁鎴愬姛
+     */
+    @Operation(summary = "淇濆瓨RTU鍗囩骇浠诲姟", description = "鎻愪氦RTU鍗囩骇浠诲姟鏁版嵁锛坒orm琛ㄥ崟锛夛紝杩涜淇濆瓨")
+    @ApiResponses(value = {
+            @ApiResponse(
+                    responseCode = ResultCodeMsg.RsCode.SUCCESS_CODE,
+                    description = "鎿嶄綔缁撴灉锛歵rue锛氭垚鍔燂紝false锛氬け璐ワ紙BaseResponse.content锛�",
+                    content = {@Content(mediaType = MediaType.APPLICATION_JSON_VALUE,
+                            schema = @Schema(implementation = Boolean.class))}
+            )
+    })
+    @PostMapping(path = "save", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
+    @SsoAop()
+    public BaseResponse<Boolean> save(@Parameter(description = "form琛ㄥ崟鏁版嵁", required = true) @Valid VoRtuTask vo, @Parameter(hidden = true) BindingResult bindingResult){
+        if(bindingResult != null && bindingResult.hasErrors()){
+            return BaseResponseUtils.buildFail(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage());
+        }
+        UgRtuTask po = new UgRtuTask();
+        vo.toPo(po);
+        po.dt = new Date();
+        po.isOver = 0 ;
+        po.deleted = 0 ;
+        int count;
+        try {
+            count = this.sv.save(po);
+        } catch (Exception e) {
+            log.error("淇濆瓨RTU鍗囩骇浠诲姟寮傚父", e);
+            return BaseResponseUtils.buildException(e.getMessage()) ;
+        }
+        if(count <= 0){
+            return BaseResponseUtils.buildFail("鏁版嵁搴撳瓨鍌ㄥけ璐�") ;
+        }else{
+            return BaseResponseUtils.buildSuccess(true) ;
+        }
+    }
+    /**
+     * 涓轰簡淇濊瘉鍗囩骇浠诲姟鐨勬纭紝涓嶆彁渚涗慨鏀瑰姛鑳斤紝濡傛灉涓婁紶閿欎簡锛屽彧鑳藉垹闄ゅ悗閲嶆柊涓婁紶
+     * @param po 淇濆瓨RTU鍗囩骇浠诲姟form琛ㄥ崟瀵硅薄
+     * @return 鏄惁鎴愬姛
+     *  */
+     @Operation(summary = "缂栬緫淇敼鐗囧尯", description = "鎻愪氦鐗囧尯鏁版嵁锛坒orm琛ㄥ崟锛夛紝杩涜淇敼")
+     @ApiResponses(value = {
+     @ApiResponse(
+     responseCode = ResultCodeMsg.RsCode.SUCCESS_CODE,
+     description = "鎿嶄綔缁撴灉锛歵rue锛氭垚鍔燂紝false锛氬け璐ワ紙BaseResponse.content锛�",
+     content = {@Content(mediaType = MediaType.APPLICATION_JSON_VALUE,
+     schema = @Schema(implementation = Boolean.class))}
+     )
+     })
+     @PostMapping(path = "update", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
+     @SsoAop()
+     public BaseResponse<Boolean> update(@Parameter(description = "form琛ㄥ崟鏁版嵁", required = true) @Valid UgRtuTask po, @Parameter(hidden = true) BindingResult bindingResult){
+         if(bindingResult != null && bindingResult.hasErrors()){
+             return BaseResponseUtils.buildFail(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage());
+         }
+         if(po.id == null){
+             return BaseResponseUtils.buildFail("鏃犳暟鎹疄浣揑D") ;
+         }
+         int count;
+         try {
+             count = this.sv.update(po);
+         } catch (Exception e) {
+             log.error("淇濆瓨瀹炰綋鏁版嵁寮傚父", e);
+             return BaseResponseUtils.buildException(e.getMessage()) ;
+         }
+         if(count <= 0){
+             return BaseResponseUtils.buildFail("鏁版嵁搴撳瓨鍌ㄥけ璐�") ;
+         }else{
+             return BaseResponseUtils.buildSuccess(true) ;
+         }
+     }
+
+
+    /**
+     * 鍒犻櫎RTU鍗囩骇浠诲姟
+     * @param id RTU鍗囩骇浠诲姟ID
+     * @return 鏄惁鎴愬姛
+     */
+    @Operation(summary = "鍒犻櫎RTU鍗囩骇浠诲姟", description = "鎻愪氦RTU鍗囩骇浠诲姟ID锛岃繘琛岄�昏緫鍒犻櫎")
+    @ApiResponses(value = {
+            @ApiResponse(
+                    responseCode = ResultCodeMsg.RsCode.SUCCESS_CODE,
+                    description = "鎿嶄綔缁撴灉锛歵rue锛氭垚鍔燂紝false锛氬け璐ワ紙BaseResponse.content锛�",
+                    content = {@Content(mediaType = MediaType.APPLICATION_JSON_VALUE,
+                            schema = @Schema(implementation = Boolean.class))}
+            )
+    })
+    @GetMapping(path = "delete")
+    @SsoAop()
+    public BaseResponse<Boolean> delete(Long id){
+        if(id == null){
+            return BaseResponseUtils.buildFail("id涓嶈兘涓虹┖") ;
+        }
+        int count;
+        try {
+            count = this.sv.delete(id);
+        } catch (Exception e) {
+            log.error("鍒犻櫎RTU鍗囩骇浠诲姟寮傚父", e);
+            return BaseResponseUtils.buildException(e.getMessage()) ;
+        }
+        if(count <= 0){
+            return BaseResponseUtils.buildFail("鏁版嵁搴撳瓨鍌ㄥけ璐�") ;
+        }else{
+            return BaseResponseUtils.buildSuccess(true) ;
+        }
+    }
+
+}
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-base/src/main/java/com/dy/pipIrrBase/rtuUpgrade/task/UgRtuTaskSv.java b/pipIrr-platform/pipIrr-web/pipIrr-web-base/src/main/java/com/dy/pipIrrBase/rtuUpgrade/task/UgRtuTaskSv.java
new file mode 100644
index 0000000..4d974fc
--- /dev/null
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-base/src/main/java/com/dy/pipIrrBase/rtuUpgrade/task/UgRtuTaskSv.java
@@ -0,0 +1,92 @@
+package com.dy.pipIrrBase.rtuUpgrade.task;
+
+import com.dy.common.webUtil.QueryResultVo;
+import com.dy.pipIrrGlobal.daoRm.UgRtuTaskMapper;
+import com.dy.pipIrrGlobal.pojoRm.UgRtuTask;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.dubbo.common.utils.PojoUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @Author: liurunyu
+ * @Date: 2024/11/5 8:33
+ * @Description
+ */
+@Slf4j
+@Service
+public class UgRtuTaskSv {
+
+    @Autowired
+    private UgRtuTaskMapper dao ;
+
+    /**
+     * 寰楀埌涓�涓竴浜涘崌绾х▼搴�
+     * @param id 涓�浜涘崌绾х▼搴廔D
+     * @return 涓�浜涘崌绾х▼搴忓疄浣�
+     */
+    public UgRtuTask selectById(Long id){
+        return this.dao.selectByPrimaryKey(id) ;
+    }
+
+    /**
+     * 寰楀埌涓�浜涘崌绾х▼搴�
+     * @return 涓�浜涘崌绾х▼搴�
+     */
+    public QueryResultVo<List<UgRtuTask>> selectSome(QueryTaskVo queryVo){
+        Map<String, Object> params = (Map<String, Object>) PojoUtils.generalize(queryVo) ;
+        Long itemTotal = this.dao.selectTotal(params) ;
+
+        QueryResultVo<List<UgRtuTask>> rsVo = new QueryResultVo<>() ;
+        rsVo.pageSize = queryVo.pageSize ;
+        rsVo.pageCurr = queryVo.pageCurr ;
+        rsVo.calculateAndSet(itemTotal, params);
+        rsVo.obj = this.dao.selectSome(params) ;
+
+        return rsVo ;
+    }
+
+    /**
+     * 寰楀埌鎵�鏈夊崌绾х▼搴忚褰旾D鍜屾枃浠跺悕绉�
+     * @return 涓�浜涘崌绾х▼搴�
+     */
+    public QueryResultVo<List<UgRtuTask>> selectAll(){
+        QueryResultVo<List<UgRtuTask>> rsVo = new QueryResultVo<>() ;
+        rsVo.obj = this.dao.selectAll() ;
+        return rsVo ;
+    }
+
+    /**
+     * 鏂板淇濆瓨鍒嗘按鍙e疄浣�
+     * @param po 瀹炰綋
+     * @return 鏁伴噺
+     */
+    @Transactional
+    public int save(UgRtuTask po){
+        return this.dao.insertSelective(po) ;
+    }
+    /**
+     * 淇濆瓨淇敼瀹炰綋
+     * @param po 瀹炰綋
+     * @return 鏁伴噺
+     */
+    @Transactional
+    public int update(UgRtuTask po){
+        return this.dao.updateByPrimaryKeySelective(po) ;
+    }
+
+    /**
+     * 閫昏緫鍒犻櫎瀹炰綋
+     * @param id 瀹炰綋ID
+     * @return 鏁伴噺
+     */
+    @Transactional
+    public int delete(Long id){
+        return this.dao.deleteLogicById(id) ;
+    }
+
+}

--
Gitblit v1.8.0