领胜LDS 键盘AOI检测项目
xcd
2020-07-08 f39f00ee0ee41e169fa24ccb85b4af36090dbd25
Merge branch 'master' of http://gitblit.broconcentric.com:8088/r/M071
20 文件已重命名
7个文件已添加
1个文件已删除
18个文件已修改
3074 ■■■■ 已修改文件
M071.sln 140 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/Bro.Common.Device/DeviceBase/MotionCardBase.cs 44 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/Bro.Common.Model/Model/MotionCardRelated.cs 24 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/Bro.Device.GTSCard/GTSCardDriver.cs 235 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/Bro.M071.DBManager/App.config 补丁 | 查看 | 原始文档 | blame | 历史
src/Bro.M071.DBManager/Bro.M071.DBManager.csproj 18 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/Bro.M071.DBManager/ExcelExportHelper.cs 143 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/Bro.M071.DBManager/KeyUnitDataManager.cs 补丁 | 查看 | 原始文档 | blame | 历史
src/Bro.M071.DBManager/MeasurementAndKeyDataRelationManager.cs 补丁 | 查看 | 原始文档 | blame | 历史
src/Bro.M071.DBManager/MeasurementUnitResultManager.cs 57 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/Bro.M071.DBManager/ModelManager.cs 补丁 | 查看 | 原始文档 | blame | 历史
src/Bro.M071.DBManager/ProductionMeasurementRecordsManager.cs 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/Bro.M071.DBManager/Properties/AssemblyInfo.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/Bro.M071.DBManager/SQLiteHelper.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/Bro.M071.DBManager/packages.config 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/Bro.M071.Model/App.config 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/Bro.M071.Model/BaseModel.cs 补丁 | 查看 | 原始文档 | blame | 历史
src/Bro.M071.Model/Bro.M071.Model.csproj 25 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/Bro.M071.Model/DBModel.cs 补丁 | 查看 | 原始文档 | blame | 历史
src/Bro.M071.Model/Migrations/202007070851439_initDB.Designer.cs 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/Bro.M071.Model/Migrations/202007070851439_initDB.cs 92 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/Bro.M071.Model/Migrations/202007070851439_initDB.resx 126 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/Bro.M071.Model/Migrations/Configuration.cs 补丁 | 查看 | 原始文档 | blame | 历史
src/Bro.M071.Model/Model/KeyUnitData.cs 补丁 | 查看 | 原始文档 | blame | 历史
src/Bro.M071.Model/Model/MeasurementAndKeyDataRelation.cs 补丁 | 查看 | 原始文档 | blame | 历史
src/Bro.M071.Model/Model/MeasurementUnitResult.cs 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/Bro.M071.Model/Model/ProductionMeasurementRecords.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/Bro.M071.Model/Properties/AssemblyInfo.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/Bro.M071.Process.Model/packages.config 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/Bro.M071.Process/Bro.M071.Process.csproj 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/Bro.M071.Process/UI/M071_DataForm.Designer.cs 413 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/Bro.M071.Process/UI/M071_DataForm.cs 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/Bro.M071.Process/UI/M071_DataForm.resx 120 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/Bro.UI.Config/App.config 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/Bro.UI.Device.Winform/MotionCard/CtrlMotionCardAxisOperation.Designer.cs 396 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/Bro.UI.Device.Winform/MotionCard/CtrlMotionCardAxisOperation.cs 67 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/Bro.UI.Device.Winform/MotionCard/CtrlMotionCardAxisStatus.Designer.cs 89 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/Bro.UI.Device.Winform/MotionCard/CtrlMotionCardAxisStatus.cs 35 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/Bro.UI.Device.Winform/MotionCard/CtrlMotionCardAxisStatus.resx 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/Bro.UI.Device.Winform/MotionCard/CtrlMotionCardIOStatus.Designer.cs 701 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/Bro.UI.Device.Winform/MotionCard/CtrlMotionCardIOStatus.cs 37 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/Bro.UI.Device.Winform/MotionCard/CtrlMotionCardIOStatus.resx 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/Bro.UI.Device.Winform/MotionCard/CtrlMotionCardRunBase.Designer.cs 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/Bro.UI.Device.Winform/MotionCard/CtrlMotionCardRunBase.cs 25 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/Bro.UI.Device.Winform/MotionCard/FrmMotionCardOperationBase.Designer.cs 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/Bro.UI.Device.Winform/MotionCard/FrmMotionCardOperationBase.cs 64 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
M071.sln
@@ -21,10 +21,6 @@
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Bro.Device.GTSCard", "src\Bro.Device.GTSCard\Bro.Device.GTSCard.csproj", "{B536003E-70BA-4701-B8FD-BAFA303AB4E2}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Bro.M071.DBManager", "src\Bro.M071.Process.DBManager\Bro.M071.DBManager.csproj", "{230B0FFF-F6AF-45FE-AAF7-B4B66250DD58}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Bro.M071.Model", "src\Bro.M071.Process.Model\Bro.M071.Model.csproj", "{AD645C48-5811-4B1E-B81F-D35D5E6B577F}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Bro.Process.DataBase", "src\Bro.Process.DBManager\Bro.Process.DataBase.csproj", "{65302D6E-9918-4E4C-92B4-75C8830C6BA7}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Bro.M071.Process", "src\Bro.M071.Process\Bro.M071.Process.csproj", "{B50C1309-495C-4ADF-8A3D-6F6A06CCC4CC}"
@@ -33,72 +29,192 @@
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GocatorTest", "src\GocatorTest\GocatorTest.csproj", "{CD0809C4-6E03-4F04-8806-59C29A4C54CE}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Bro.M071.Model", "src\Bro.M071.Model\Bro.M071.Model.csproj", "{AD645C48-5811-4B1E-B81F-D35D5E6B577F}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Bro.M071.DBManager", "src\Bro.M071.DBManager\Bro.M071.DBManager.csproj", "{230B0FFF-F6AF-45FE-AAF7-B4B66250DD58}"
EndProject
Global
    GlobalSection(SolutionConfigurationPlatforms) = preSolution
        Debug|Any CPU = Debug|Any CPU
        Debug|x64 = Debug|x64
        Debug1|Any CPU = Debug1|Any CPU
        Debug1|x64 = Debug1|x64
        Release|Any CPU = Release|Any CPU
        Release|x64 = Release|x64
    EndGlobalSection
    GlobalSection(ProjectConfigurationPlatforms) = postSolution
        {987308DD-8BAA-463A-94E2-77D62E01A5BF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
        {987308DD-8BAA-463A-94E2-77D62E01A5BF}.Debug|Any CPU.Build.0 = Debug|Any CPU
        {987308DD-8BAA-463A-94E2-77D62E01A5BF}.Debug|x64.ActiveCfg = Debug|Any CPU
        {987308DD-8BAA-463A-94E2-77D62E01A5BF}.Debug|x64.Build.0 = Debug|Any CPU
        {987308DD-8BAA-463A-94E2-77D62E01A5BF}.Debug1|Any CPU.ActiveCfg = Debug1|Any CPU
        {987308DD-8BAA-463A-94E2-77D62E01A5BF}.Debug1|Any CPU.Build.0 = Debug1|Any CPU
        {987308DD-8BAA-463A-94E2-77D62E01A5BF}.Debug1|x64.ActiveCfg = Debug1|x64
        {987308DD-8BAA-463A-94E2-77D62E01A5BF}.Debug1|x64.Build.0 = Debug1|x64
        {987308DD-8BAA-463A-94E2-77D62E01A5BF}.Release|Any CPU.ActiveCfg = Release|Any CPU
        {987308DD-8BAA-463A-94E2-77D62E01A5BF}.Release|Any CPU.Build.0 = Release|Any CPU
        {987308DD-8BAA-463A-94E2-77D62E01A5BF}.Release|x64.ActiveCfg = Release|Any CPU
        {987308DD-8BAA-463A-94E2-77D62E01A5BF}.Release|x64.Build.0 = Release|Any CPU
        {1A3CBFE7-3F78-42C3-95C5-10360450DBEA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
        {1A3CBFE7-3F78-42C3-95C5-10360450DBEA}.Debug|Any CPU.Build.0 = Debug|Any CPU
        {1A3CBFE7-3F78-42C3-95C5-10360450DBEA}.Debug|x64.ActiveCfg = Debug|Any CPU
        {1A3CBFE7-3F78-42C3-95C5-10360450DBEA}.Debug|x64.Build.0 = Debug|Any CPU
        {1A3CBFE7-3F78-42C3-95C5-10360450DBEA}.Debug1|Any CPU.ActiveCfg = Debug1|Any CPU
        {1A3CBFE7-3F78-42C3-95C5-10360450DBEA}.Debug1|Any CPU.Build.0 = Debug1|Any CPU
        {1A3CBFE7-3F78-42C3-95C5-10360450DBEA}.Debug1|x64.ActiveCfg = Debug1|x64
        {1A3CBFE7-3F78-42C3-95C5-10360450DBEA}.Debug1|x64.Build.0 = Debug1|x64
        {1A3CBFE7-3F78-42C3-95C5-10360450DBEA}.Release|Any CPU.ActiveCfg = Release|Any CPU
        {1A3CBFE7-3F78-42C3-95C5-10360450DBEA}.Release|Any CPU.Build.0 = Release|Any CPU
        {1A3CBFE7-3F78-42C3-95C5-10360450DBEA}.Release|x64.ActiveCfg = Release|Any CPU
        {1A3CBFE7-3F78-42C3-95C5-10360450DBEA}.Release|x64.Build.0 = Release|Any CPU
        {5D6BD683-98B6-4D69-9FB7-7BC5AFF13FC4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
        {5D6BD683-98B6-4D69-9FB7-7BC5AFF13FC4}.Debug|Any CPU.Build.0 = Debug|Any CPU
        {5D6BD683-98B6-4D69-9FB7-7BC5AFF13FC4}.Debug|x64.ActiveCfg = Debug|Any CPU
        {5D6BD683-98B6-4D69-9FB7-7BC5AFF13FC4}.Debug|x64.Build.0 = Debug|Any CPU
        {5D6BD683-98B6-4D69-9FB7-7BC5AFF13FC4}.Debug1|Any CPU.ActiveCfg = Debug1|Any CPU
        {5D6BD683-98B6-4D69-9FB7-7BC5AFF13FC4}.Debug1|Any CPU.Build.0 = Debug1|Any CPU
        {5D6BD683-98B6-4D69-9FB7-7BC5AFF13FC4}.Debug1|x64.ActiveCfg = Debug1|x64
        {5D6BD683-98B6-4D69-9FB7-7BC5AFF13FC4}.Debug1|x64.Build.0 = Debug1|x64
        {5D6BD683-98B6-4D69-9FB7-7BC5AFF13FC4}.Release|Any CPU.ActiveCfg = Release|Any CPU
        {5D6BD683-98B6-4D69-9FB7-7BC5AFF13FC4}.Release|Any CPU.Build.0 = Release|Any CPU
        {5D6BD683-98B6-4D69-9FB7-7BC5AFF13FC4}.Release|x64.ActiveCfg = Release|Any CPU
        {5D6BD683-98B6-4D69-9FB7-7BC5AFF13FC4}.Release|x64.Build.0 = Release|Any CPU
        {45C51C86-9767-49C7-B2C3-2E9F60098E65}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
        {45C51C86-9767-49C7-B2C3-2E9F60098E65}.Debug|Any CPU.Build.0 = Debug|Any CPU
        {45C51C86-9767-49C7-B2C3-2E9F60098E65}.Debug|x64.ActiveCfg = Debug|Any CPU
        {45C51C86-9767-49C7-B2C3-2E9F60098E65}.Debug|x64.Build.0 = Debug|Any CPU
        {45C51C86-9767-49C7-B2C3-2E9F60098E65}.Debug1|Any CPU.ActiveCfg = Debug1|Any CPU
        {45C51C86-9767-49C7-B2C3-2E9F60098E65}.Debug1|Any CPU.Build.0 = Debug1|Any CPU
        {45C51C86-9767-49C7-B2C3-2E9F60098E65}.Debug1|x64.ActiveCfg = Debug1|x64
        {45C51C86-9767-49C7-B2C3-2E9F60098E65}.Debug1|x64.Build.0 = Debug1|x64
        {45C51C86-9767-49C7-B2C3-2E9F60098E65}.Release|Any CPU.ActiveCfg = Release|Any CPU
        {45C51C86-9767-49C7-B2C3-2E9F60098E65}.Release|Any CPU.Build.0 = Release|Any CPU
        {45C51C86-9767-49C7-B2C3-2E9F60098E65}.Release|x64.ActiveCfg = Release|Any CPU
        {45C51C86-9767-49C7-B2C3-2E9F60098E65}.Release|x64.Build.0 = Release|Any CPU
        {197C5AA8-9609-4D1C-B1E3-5879006EAAF4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
        {197C5AA8-9609-4D1C-B1E3-5879006EAAF4}.Debug|Any CPU.Build.0 = Debug|Any CPU
        {197C5AA8-9609-4D1C-B1E3-5879006EAAF4}.Debug|x64.ActiveCfg = Debug|Any CPU
        {197C5AA8-9609-4D1C-B1E3-5879006EAAF4}.Debug|x64.Build.0 = Debug|Any CPU
        {197C5AA8-9609-4D1C-B1E3-5879006EAAF4}.Debug1|Any CPU.ActiveCfg = Debug1|Any CPU
        {197C5AA8-9609-4D1C-B1E3-5879006EAAF4}.Debug1|Any CPU.Build.0 = Debug1|Any CPU
        {197C5AA8-9609-4D1C-B1E3-5879006EAAF4}.Debug1|x64.ActiveCfg = Debug1|x64
        {197C5AA8-9609-4D1C-B1E3-5879006EAAF4}.Debug1|x64.Build.0 = Debug1|x64
        {197C5AA8-9609-4D1C-B1E3-5879006EAAF4}.Release|Any CPU.ActiveCfg = Release|Any CPU
        {197C5AA8-9609-4D1C-B1E3-5879006EAAF4}.Release|Any CPU.Build.0 = Release|Any CPU
        {197C5AA8-9609-4D1C-B1E3-5879006EAAF4}.Release|x64.ActiveCfg = Release|Any CPU
        {197C5AA8-9609-4D1C-B1E3-5879006EAAF4}.Release|x64.Build.0 = Release|Any CPU
        {DD02C60E-560B-40C0-AD7F-523F0B4AA4FD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
        {DD02C60E-560B-40C0-AD7F-523F0B4AA4FD}.Debug|Any CPU.Build.0 = Debug|Any CPU
        {DD02C60E-560B-40C0-AD7F-523F0B4AA4FD}.Debug|x64.ActiveCfg = Debug|x64
        {DD02C60E-560B-40C0-AD7F-523F0B4AA4FD}.Debug|x64.Build.0 = Debug|x64
        {DD02C60E-560B-40C0-AD7F-523F0B4AA4FD}.Debug1|Any CPU.ActiveCfg = Debug1|Any CPU
        {DD02C60E-560B-40C0-AD7F-523F0B4AA4FD}.Debug1|Any CPU.Build.0 = Debug1|Any CPU
        {DD02C60E-560B-40C0-AD7F-523F0B4AA4FD}.Debug1|x64.ActiveCfg = Debug1|x64
        {DD02C60E-560B-40C0-AD7F-523F0B4AA4FD}.Debug1|x64.Build.0 = Debug1|x64
        {DD02C60E-560B-40C0-AD7F-523F0B4AA4FD}.Release|Any CPU.ActiveCfg = Release|Any CPU
        {DD02C60E-560B-40C0-AD7F-523F0B4AA4FD}.Release|Any CPU.Build.0 = Release|Any CPU
        {DD02C60E-560B-40C0-AD7F-523F0B4AA4FD}.Release|x64.ActiveCfg = Release|Any CPU
        {DD02C60E-560B-40C0-AD7F-523F0B4AA4FD}.Release|x64.Build.0 = Release|Any CPU
        {E6429C64-92B3-46A2-B35E-579856D47F62}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
        {E6429C64-92B3-46A2-B35E-579856D47F62}.Debug|Any CPU.Build.0 = Debug|Any CPU
        {E6429C64-92B3-46A2-B35E-579856D47F62}.Debug|x64.ActiveCfg = Debug|Any CPU
        {E6429C64-92B3-46A2-B35E-579856D47F62}.Debug|x64.Build.0 = Debug|Any CPU
        {E6429C64-92B3-46A2-B35E-579856D47F62}.Debug1|Any CPU.ActiveCfg = Debug1|Any CPU
        {E6429C64-92B3-46A2-B35E-579856D47F62}.Debug1|Any CPU.Build.0 = Debug1|Any CPU
        {E6429C64-92B3-46A2-B35E-579856D47F62}.Debug1|x64.ActiveCfg = Debug1|x64
        {E6429C64-92B3-46A2-B35E-579856D47F62}.Debug1|x64.Build.0 = Debug1|x64
        {E6429C64-92B3-46A2-B35E-579856D47F62}.Release|Any CPU.ActiveCfg = Release|Any CPU
        {E6429C64-92B3-46A2-B35E-579856D47F62}.Release|Any CPU.Build.0 = Release|Any CPU
        {E6429C64-92B3-46A2-B35E-579856D47F62}.Release|x64.ActiveCfg = Release|Any CPU
        {E6429C64-92B3-46A2-B35E-579856D47F62}.Release|x64.Build.0 = Release|Any CPU
        {741F6491-57C7-479A-B391-09BBA9FBA9DC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
        {741F6491-57C7-479A-B391-09BBA9FBA9DC}.Debug|Any CPU.Build.0 = Debug|Any CPU
        {741F6491-57C7-479A-B391-09BBA9FBA9DC}.Debug|x64.ActiveCfg = Debug|Any CPU
        {741F6491-57C7-479A-B391-09BBA9FBA9DC}.Debug|x64.Build.0 = Debug|Any CPU
        {741F6491-57C7-479A-B391-09BBA9FBA9DC}.Debug1|Any CPU.ActiveCfg = Debug1|Any CPU
        {741F6491-57C7-479A-B391-09BBA9FBA9DC}.Debug1|Any CPU.Build.0 = Debug1|Any CPU
        {741F6491-57C7-479A-B391-09BBA9FBA9DC}.Debug1|x64.ActiveCfg = Debug1|x64
        {741F6491-57C7-479A-B391-09BBA9FBA9DC}.Debug1|x64.Build.0 = Debug1|x64
        {741F6491-57C7-479A-B391-09BBA9FBA9DC}.Release|Any CPU.ActiveCfg = Release|Any CPU
        {741F6491-57C7-479A-B391-09BBA9FBA9DC}.Release|Any CPU.Build.0 = Release|Any CPU
        {741F6491-57C7-479A-B391-09BBA9FBA9DC}.Release|x64.ActiveCfg = Release|Any CPU
        {741F6491-57C7-479A-B391-09BBA9FBA9DC}.Release|x64.Build.0 = Release|Any CPU
        {B536003E-70BA-4701-B8FD-BAFA303AB4E2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
        {B536003E-70BA-4701-B8FD-BAFA303AB4E2}.Debug|x64.ActiveCfg = Debug|Any CPU
        {B536003E-70BA-4701-B8FD-BAFA303AB4E2}.Debug|x64.Build.0 = Debug|Any CPU
        {B536003E-70BA-4701-B8FD-BAFA303AB4E2}.Debug1|Any CPU.ActiveCfg = Debug|Any CPU
        {B536003E-70BA-4701-B8FD-BAFA303AB4E2}.Debug1|x64.ActiveCfg = Debug|Any CPU
        {B536003E-70BA-4701-B8FD-BAFA303AB4E2}.Release|Any CPU.ActiveCfg = Release|Any CPU
        {B536003E-70BA-4701-B8FD-BAFA303AB4E2}.Release|x64.ActiveCfg = Release|Any CPU
        {B536003E-70BA-4701-B8FD-BAFA303AB4E2}.Release|x64.Build.0 = Release|Any CPU
        {230B0FFF-F6AF-45FE-AAF7-B4B66250DD58}.Debug|x64.ActiveCfg = Debug|Any CPU
        {230B0FFF-F6AF-45FE-AAF7-B4B66250DD58}.Debug|x64.Build.0 = Debug|Any CPU
        {230B0FFF-F6AF-45FE-AAF7-B4B66250DD58}.Release|x64.ActiveCfg = Release|Any CPU
        {230B0FFF-F6AF-45FE-AAF7-B4B66250DD58}.Release|x64.Build.0 = Release|Any CPU
        {AD645C48-5811-4B1E-B81F-D35D5E6B577F}.Debug|x64.ActiveCfg = Debug|Any CPU
        {AD645C48-5811-4B1E-B81F-D35D5E6B577F}.Debug|x64.Build.0 = Debug|Any CPU
        {AD645C48-5811-4B1E-B81F-D35D5E6B577F}.Release|x64.ActiveCfg = Release|Any CPU
        {AD645C48-5811-4B1E-B81F-D35D5E6B577F}.Release|x64.Build.0 = Release|Any CPU
        {65302D6E-9918-4E4C-92B4-75C8830C6BA7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
        {65302D6E-9918-4E4C-92B4-75C8830C6BA7}.Debug|x64.ActiveCfg = Debug|Any CPU
        {65302D6E-9918-4E4C-92B4-75C8830C6BA7}.Debug|x64.Build.0 = Debug|Any CPU
        {65302D6E-9918-4E4C-92B4-75C8830C6BA7}.Debug1|Any CPU.ActiveCfg = Debug|Any CPU
        {65302D6E-9918-4E4C-92B4-75C8830C6BA7}.Debug1|x64.ActiveCfg = Debug|Any CPU
        {65302D6E-9918-4E4C-92B4-75C8830C6BA7}.Release|Any CPU.ActiveCfg = Release|Any CPU
        {65302D6E-9918-4E4C-92B4-75C8830C6BA7}.Release|x64.ActiveCfg = Release|Any CPU
        {65302D6E-9918-4E4C-92B4-75C8830C6BA7}.Release|x64.Build.0 = Release|Any CPU
        {B50C1309-495C-4ADF-8A3D-6F6A06CCC4CC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
        {B50C1309-495C-4ADF-8A3D-6F6A06CCC4CC}.Debug|Any CPU.Build.0 = Debug|Any CPU
        {B50C1309-495C-4ADF-8A3D-6F6A06CCC4CC}.Debug|x64.ActiveCfg = Debug|Any CPU
        {B50C1309-495C-4ADF-8A3D-6F6A06CCC4CC}.Debug|x64.Build.0 = Debug|Any CPU
        {B50C1309-495C-4ADF-8A3D-6F6A06CCC4CC}.Debug1|Any CPU.ActiveCfg = Debug1|Any CPU
        {B50C1309-495C-4ADF-8A3D-6F6A06CCC4CC}.Debug1|Any CPU.Build.0 = Debug1|Any CPU
        {B50C1309-495C-4ADF-8A3D-6F6A06CCC4CC}.Debug1|x64.ActiveCfg = Debug1|x64
        {B50C1309-495C-4ADF-8A3D-6F6A06CCC4CC}.Debug1|x64.Build.0 = Debug1|x64
        {B50C1309-495C-4ADF-8A3D-6F6A06CCC4CC}.Release|Any CPU.ActiveCfg = Release|Any CPU
        {B50C1309-495C-4ADF-8A3D-6F6A06CCC4CC}.Release|Any CPU.Build.0 = Release|Any CPU
        {B50C1309-495C-4ADF-8A3D-6F6A06CCC4CC}.Release|x64.ActiveCfg = Release|Any CPU
        {B50C1309-495C-4ADF-8A3D-6F6A06CCC4CC}.Release|x64.Build.0 = Release|Any CPU
        {112009F0-7902-454B-9A6C-A3AFC8FA8FFF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
        {112009F0-7902-454B-9A6C-A3AFC8FA8FFF}.Debug|Any CPU.Build.0 = Debug|Any CPU
        {112009F0-7902-454B-9A6C-A3AFC8FA8FFF}.Debug|x64.ActiveCfg = Debug|Any CPU
        {112009F0-7902-454B-9A6C-A3AFC8FA8FFF}.Debug|x64.Build.0 = Debug|Any CPU
        {112009F0-7902-454B-9A6C-A3AFC8FA8FFF}.Debug1|Any CPU.ActiveCfg = Debug1|Any CPU
        {112009F0-7902-454B-9A6C-A3AFC8FA8FFF}.Debug1|Any CPU.Build.0 = Debug1|Any CPU
        {112009F0-7902-454B-9A6C-A3AFC8FA8FFF}.Debug1|x64.ActiveCfg = Debug1|x64
        {112009F0-7902-454B-9A6C-A3AFC8FA8FFF}.Debug1|x64.Build.0 = Debug1|x64
        {112009F0-7902-454B-9A6C-A3AFC8FA8FFF}.Release|Any CPU.ActiveCfg = Release|Any CPU
        {112009F0-7902-454B-9A6C-A3AFC8FA8FFF}.Release|Any CPU.Build.0 = Release|Any CPU
        {112009F0-7902-454B-9A6C-A3AFC8FA8FFF}.Release|x64.ActiveCfg = Release|Any CPU
        {112009F0-7902-454B-9A6C-A3AFC8FA8FFF}.Release|x64.Build.0 = Release|Any CPU
        {CD0809C4-6E03-4F04-8806-59C29A4C54CE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
        {CD0809C4-6E03-4F04-8806-59C29A4C54CE}.Debug|Any CPU.Build.0 = Debug|Any CPU
        {CD0809C4-6E03-4F04-8806-59C29A4C54CE}.Debug|x64.ActiveCfg = Debug|x64
        {CD0809C4-6E03-4F04-8806-59C29A4C54CE}.Debug|x64.Build.0 = Debug|x64
        {CD0809C4-6E03-4F04-8806-59C29A4C54CE}.Debug1|Any CPU.ActiveCfg = Debug|Any CPU
        {CD0809C4-6E03-4F04-8806-59C29A4C54CE}.Debug1|Any CPU.Build.0 = Debug|Any CPU
        {CD0809C4-6E03-4F04-8806-59C29A4C54CE}.Debug1|x64.ActiveCfg = Debug|x64
        {CD0809C4-6E03-4F04-8806-59C29A4C54CE}.Debug1|x64.Build.0 = Debug|x64
        {CD0809C4-6E03-4F04-8806-59C29A4C54CE}.Release|Any CPU.ActiveCfg = Release|Any CPU
        {CD0809C4-6E03-4F04-8806-59C29A4C54CE}.Release|Any CPU.Build.0 = Release|Any CPU
        {CD0809C4-6E03-4F04-8806-59C29A4C54CE}.Release|x64.ActiveCfg = Release|x64
        {CD0809C4-6E03-4F04-8806-59C29A4C54CE}.Release|x64.Build.0 = Release|x64
        {AD645C48-5811-4B1E-B81F-D35D5E6B577F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
        {AD645C48-5811-4B1E-B81F-D35D5E6B577F}.Debug|Any CPU.Build.0 = Debug|Any CPU
        {AD645C48-5811-4B1E-B81F-D35D5E6B577F}.Debug|x64.ActiveCfg = Debug|x64
        {AD645C48-5811-4B1E-B81F-D35D5E6B577F}.Debug|x64.Build.0 = Debug|x64
        {AD645C48-5811-4B1E-B81F-D35D5E6B577F}.Debug1|Any CPU.ActiveCfg = Debug1|Any CPU
        {AD645C48-5811-4B1E-B81F-D35D5E6B577F}.Debug1|Any CPU.Build.0 = Debug1|Any CPU
        {AD645C48-5811-4B1E-B81F-D35D5E6B577F}.Debug1|x64.ActiveCfg = Debug1|x64
        {AD645C48-5811-4B1E-B81F-D35D5E6B577F}.Debug1|x64.Build.0 = Debug1|x64
        {AD645C48-5811-4B1E-B81F-D35D5E6B577F}.Release|Any CPU.ActiveCfg = Release|Any CPU
        {AD645C48-5811-4B1E-B81F-D35D5E6B577F}.Release|Any CPU.Build.0 = Release|Any CPU
        {AD645C48-5811-4B1E-B81F-D35D5E6B577F}.Release|x64.ActiveCfg = Release|x64
        {AD645C48-5811-4B1E-B81F-D35D5E6B577F}.Release|x64.Build.0 = Release|x64
        {230B0FFF-F6AF-45FE-AAF7-B4B66250DD58}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
        {230B0FFF-F6AF-45FE-AAF7-B4B66250DD58}.Debug|Any CPU.Build.0 = Debug|Any CPU
        {230B0FFF-F6AF-45FE-AAF7-B4B66250DD58}.Debug|x64.ActiveCfg = Debug|x64
        {230B0FFF-F6AF-45FE-AAF7-B4B66250DD58}.Debug|x64.Build.0 = Debug|x64
        {230B0FFF-F6AF-45FE-AAF7-B4B66250DD58}.Debug1|Any CPU.ActiveCfg = Debug1|Any CPU
        {230B0FFF-F6AF-45FE-AAF7-B4B66250DD58}.Debug1|Any CPU.Build.0 = Debug1|Any CPU
        {230B0FFF-F6AF-45FE-AAF7-B4B66250DD58}.Debug1|x64.ActiveCfg = Debug1|x64
        {230B0FFF-F6AF-45FE-AAF7-B4B66250DD58}.Debug1|x64.Build.0 = Debug1|x64
        {230B0FFF-F6AF-45FE-AAF7-B4B66250DD58}.Release|Any CPU.ActiveCfg = Release|Any CPU
        {230B0FFF-F6AF-45FE-AAF7-B4B66250DD58}.Release|Any CPU.Build.0 = Release|Any CPU
        {230B0FFF-F6AF-45FE-AAF7-B4B66250DD58}.Release|x64.ActiveCfg = Release|x64
        {230B0FFF-F6AF-45FE-AAF7-B4B66250DD58}.Release|x64.Build.0 = Release|x64
    EndGlobalSection
    GlobalSection(SolutionProperties) = preSolution
        HideSolutionNode = FALSE
src/Bro.Common.Device/DeviceBase/MotionCardBase.cs
@@ -26,6 +26,50 @@
        public abstract ResponseMessage MoveToPoint(IOperationConfig opConfig);
        public abstract void ResetAlarm();
        public abstract ResponseMessage Run(IOperationConfig config);
        /// <summary>
        /// 清除状态
        /// </summary>
        /// <param name="startAxisIndex">起始轴号</param>
        /// <param name="count">数量</param>
        /// <returns></returns>
        public abstract bool ClearStatus(int startAxisIndex, int count);
        /// <summary>
        /// 读取轴状态
        /// </summary>
        /// <param name="axisNum">轴号</param>
        /// <returns></returns>
        public abstract int GetAxisStatus(int axisNum);
        /// <summary>
        /// 位置清零
        /// </summary>
        /// <param name="startAxisIndex">起始轴号</param>
        /// <param name="count">数量</param>
        /// <returns></returns>
        public abstract bool PositionReset(int startAxisIndex, int count);
        public abstract bool AllAxisOn();
        public abstract bool AllAxisOff();
        public abstract Task<bool> AxisOnAsync(int axisNum);
        public abstract Task<bool> AxisOffAsync(int axisNum);
        /// <summary>
        /// 单个轴 运动(点到点 jog 回零...)
        /// </summary>
        /// <param name="optionPara">运动参数对象</param>
        public abstract Task<bool> SingleAxisMoving(MovingOption optionPara);
        /// <summary>
        /// 某个轴运动停止
        /// </summary>
        /// <param name="axisNum">轴号</param>
        /// <param name="option">0表示平滑停止,1表示紧急停止</param>
        /// <returns></returns>
        public abstract Task<bool> MoveStop(int axisNum, int option);
        public virtual void ExcuteMonitorInvoke(DateTime dateTime, string invokeDevice, IDevice device, IMonitorSet monitorSet)
        {
src/Bro.Common.Model/Model/MotionCardRelated.cs
@@ -84,10 +84,10 @@
        //[Description("IsUseWarning:是否启用报警")]
        //public bool IsUseWarning { get; set; } = false;
        //[Category("暂停配置")]
        //[DisplayName("是否启用立即暂停")]
        //[Description("IsImmediatePause:是否启用立即暂停")]
        //public bool IsImmediatePause { get; set; } = false;
        [Category("暂停配置")]
        [DisplayName("是否启用立即暂停")]
        [Description("IsImmediatePause:是否启用立即暂停")]
        public bool IsImmediatePause { get; set; } = false;
        //[Category("暂停配置")]
        //[DisplayName("轴位置处于区间内时适用的暂停操作")]
@@ -208,11 +208,6 @@
        public string AxisName { get; set; }
        /// <summary>
        /// 运动模式
        /// </summary>
        public MotionMode MoveMode { get; set; }
        /// <summary>
        /// 当前位置
        /// </summary>
        public int CurPosition { get; set; }
@@ -225,16 +220,21 @@
        /// <summary>
        /// 当前速度参数
        /// </summary>
        public VelocityPara CurVelocityPara { get; set; }
        public double CurVelocity { get; set; }
        /// <summary>
        /// 规划速度参数
        /// </summary>
        public VelocityPara VelocityPara { get; set; }
        public double PrfVelocity { get; set; }
        /// <summary>
        /// 轴状态
        /// </summary>
        public int AxisStatus { get; set; }
        public string GetDisplayText()
        {
            return $"轴{AxisIndex}:{AxisName}-{MoveMode.ToString()}-当前:{CurPosition}-规划:{Destination}";
            return $"轴{AxisIndex}:{AxisName}-当前:{CurPosition}-规划:{Destination}";
        }
    }
src/Bro.Device.GTSCard/GTSCardDriver.cs
@@ -37,6 +37,13 @@
        /// </summary>
        bool _isResetting = false;
        /// <summary>
        /// 运动轴立即暂停
        /// </summary>
        Dictionary<int, ManualResetEvent> axisImmediatePauseHandleDict = new Dictionary<int, ManualResetEvent>();
        Dictionary<int, CancellationTokenSource> axisMoveCancelDict = new Dictionary<int, CancellationTokenSource>();
        public void SetResetFlag(bool isReset)
        {
            _isResetting = isReset;
@@ -44,7 +51,17 @@
        public override List<AxisInfo> GetCurrentAxisInfo(params string[] axisName)
        {
            throw new NotImplementedException();
            List<AxisInfo> axisInfos = new List<AxisInfo>();
            IConfig.AxisSettings.FindAll(a => a.IsAxisEnabled).ForEach(axisSetting =>
            {
                AxisInfo axisInfo = new AxisInfo();
                axisInfo.AxisName = axisSetting.AxisName;
                var axisMovingStatus = AxisMovingOptionValues.FirstOrDefault(u => u.AxisIndex == axisSetting.AxisIndex);
                axisInfo.AxisLocation = axisMovingStatus == null ? 0 : Convert.ToDouble(axisMovingStatus.CurPosition);
                axisInfos.Add(axisInfo);
            });
            return axisInfos;
        }
        #region DeviceBase
@@ -52,16 +69,23 @@
        protected override void Init()
        {
            InitialMotionCard();
            axisImmediatePauseHandleDict = IConfig.AxisSettings.FindAll(a => a.IsAxisEnabled).ToDictionary(a => a.AxisIndex, a => new ManualResetEvent(true));
            axisMoveCancelDict = IConfig.AxisSettings.FindAll(a => a.IsAxisEnabled).ToDictionary(a => a.AxisIndex, a => new CancellationTokenSource());
            axisMoveCancelDict.Values.ToList().ForEach(c =>
            {
                c = new CancellationTokenSource();
            });
        }
        protected override void Pause()
        {
            throw new NotImplementedException();
        }
        protected override void Resume()
        {
            throw new NotImplementedException();
        }
        protected override void Start()
@@ -83,13 +107,15 @@
        public override ResponseMessage Run(IOperationConfig config)
        {
            ResponseMessage responseMessage = new ResponseMessage();
            var motionCardOperationConfig = config as MotionCardOperationConfigBase;
            if (config is MotionCardOperationConfigBase motionCardOperationConfig)
            {
            foreach (var operationSet in motionCardOperationConfig.OperationCollection)
            {
                responseMessage = RunOperationSet(operationSet);
                if (!responseMessage.Result)
                {
                    return responseMessage;
                    }
                }
            }
            return responseMessage;
@@ -185,6 +211,43 @@
        }
        #endregion
        #region ImmediatePause
        /// <summary>
        /// 启动立即暂停
        /// </summary>
        public void SetImmediatePause()
        {
            if (!_isResetting)
            {
                var immediatePauseAxis = IConfig.AxisSettings.FindAll(a => a.IsAxisEnabled && a.IsImmediatePause).Select(u => u.AxisIndex).ToList();
                immediatePauseAxis.ForEach(async axisIndex =>
                {
                    axisImmediatePauseHandleDict[axisIndex].Reset();
                    axisMoveCancelDict[axisIndex].Cancel();
                    await MoveStop(axisIndex, 0);
                });
            }
        }
        /// <summary>
        /// 恢复立即暂停
        /// </summary>
        public void ResetImmediatePause()
        {
            var immediatePauseAxis = IConfig.AxisSettings.FindAll(a => a.IsAxisEnabled && a.IsImmediatePause).Select(u => u.AxisIndex).ToList();
            immediatePauseAxis.ForEach(axisIndex =>
            {
                axisMoveCancelDict[axisIndex] = new CancellationTokenSource();
                axisImmediatePauseHandleDict[axisIndex].Set();
            });
        }
        #endregion
        #region GTSCard
        /// <summary>
@@ -196,7 +259,7 @@
        {
            var res = GTSCardAPI.GT_Open((short)IConfig.CardNum, 0, 1); //打开运动控制器。参数必须为(0,1),不能修改。     
            res += GTSCardAPI.GT_LoadConfig((short)IConfig.CardNum, IConfig.InitialConfigFilePath);
            res += GTSCardAPI.GT_ClrSts(0, 1, 8);
            ClearStatus(1, IConfig.AxisSettings.FindAll(u => u.IsAxisEnabled).Count);
            if (res != (short)GTSRetCode.GRCRunOK)
            {
                throw new Exception("板卡载入配置文件异常,错误码:" + res);
@@ -204,13 +267,13 @@
        }
        public bool AllAxisOn()
        public override bool AllAxisOn()
        {
            List<Task<bool>> taskList = new List<Task<bool>>(); ;
            // 如果是多个轴的运动 等每个轴开启
            IConfig.AxisSettings.Where(a => a.IsAxisEnabled).ToList().ForEach(axisNum =>
            IConfig.AxisSettings.FindAll(a => a.IsAxisEnabled).ForEach(axisNum =>
            {
                var task = AxisOnAsync((short)IConfig.CardNum, (short)axisNum.AxisIndex);
                var task = AxisOnAsync(axisNum.AxisIndex);
                taskList.Add(task);
            });
            Task.WaitAll(taskList.ToArray());
@@ -218,13 +281,13 @@
            return resultOK;
        }
        public bool AllAxisOff()
        public override bool AllAxisOff()
        {
            List<Task<bool>> taskList = new List<Task<bool>>(); ;
            // 如果是多个轴的运动 等每个轴关闭
            IConfig.AxisSettings.Where(a => a.IsAxisEnabled).ToList().ForEach(axisNum =>
            IConfig.AxisSettings.FindAll(a => a.IsAxisEnabled).ForEach(axisNum =>
            {
                var task = AxisOffAsync((short)IConfig.CardNum, (short)axisNum.AxisIndex);
                var task = AxisOffAsync(axisNum.AxisIndex);
                taskList.Add(task);
            });
            Task.WaitAll(taskList.ToArray());
@@ -236,11 +299,11 @@
        /// 单个轴开启
        /// </summary>
        /// <returns></returns>
        public async Task<bool> AxisOnAsync(short cardNum, short axisNum)
        public override async Task<bool> AxisOnAsync(int axisNum)
        {
            return await Task.Run(() =>
            {
                var ret = GTSCardAPI.GT_AxisOn(cardNum, axisNum);
                var ret = GTSCardAPI.GT_AxisOn((short)IConfig.CardNum, (short)axisNum);
                return ret == (short)GTSRetCode.GRCRunOK;
            });
        }
@@ -249,11 +312,11 @@
        /// 单个轴关闭
        /// </summary>
        /// <returns></returns>
        public async Task<bool> AxisOffAsync(short cardNum, short axisNum)
        public override async Task<bool> AxisOffAsync(int axisNum)
        {
            return await Task.Run(() =>
            {
                var ret = GTSCardAPI.GT_AxisOff(cardNum, axisNum);
                var ret = GTSCardAPI.GT_AxisOff((short)IConfig.CardNum, (short)axisNum);
                return ret == (short)GTSRetCode.GRCRunOK;
            });
        }
@@ -266,7 +329,8 @@
        public override ResponseMessage MoveToPoint(IOperationConfig opConfig)
        {
            ResponseMessage responseMessage = new ResponseMessage();
            var gtsOperationCollection = opConfig as MotionOperationCollection;
            if (opConfig is MotionOperationCollection gtsOperationCollection)
            {
            List<Task<bool>> taskList = new List<Task<bool>>();
            foreach (var movingOp in gtsOperationCollection.MovingOps)
            {
@@ -279,6 +343,7 @@
            if (!responseMessage.Result)
            {
                responseMessage.Message = $"点位运动异常";
                }
            }
            return responseMessage;
        }
@@ -313,7 +378,7 @@
        /// 单个轴 运动(点到点 jog 回零...)
        /// </summary>
        /// <param name="optionPara">运动参数对象</param>
        public async Task<bool> SingleAxisMoving(MovingOption optionPara)
        public override async Task<bool> SingleAxisMoving(MovingOption optionPara)
        {
            return await Task.Run(() =>
            {
@@ -322,6 +387,8 @@
                {
                    if (IConfig.AxisSettings.FirstOrDefault(a => a.AxisIndex == optionPara.AxisIndex)?.IsAxisEnabled ?? false)
                    {
                        axisImmediatePauseHandleDict[optionPara.AxisIndex].WaitOne();
                        string _position = "";
                        string motionType = optionPara.MoveMode == EnumHelper.MotionMode.Normal ? (optionPara.IsAbsolute ? "Abs" : "Rel") : optionPara.MoveMode.ToString();
@@ -413,6 +480,41 @@
        }
        /// <summary>
        /// 获取规划速度
        /// </summary>
        /// <param name="axisNum">Axis number</param>
        /// <returns></returns>
        public double GetPrfVelocity(int axisNum)
        {
            double prfVel = 0;
            uint pclock = 0;
            var ret = GTSCardAPI.GT_GetPrfVel((short)IConfig.CardNum, (short)axisNum, out prfVel, 1, out pclock);
            if (ret != (short)GTSRetCode.GRCRunOK)
            {
                throw new Exception("轴" + axisNum + "获取规划速度异常,错误码:" + ret);
            }
            prfVel = prfVel / IConfig.AxisVelocityRatio;
            return prfVel;
        }
        /// <summary>
        /// 获取当前速度
        /// </summary>
        /// <param name="axisNum">Axis number</param>
        /// <returns></returns>
        public double GetVelocity(int axisNum)
        {
            double vel = 0;
            var ret = GTSCardAPI.GT_GetVel((short)IConfig.CardNum, (short)axisNum, out vel);
            if (ret != (short)GTSRetCode.GRCRunOK)
            {
                throw new Exception("轴" + axisNum + "获取当前速度异常,错误码:" + ret);
            }
            vel = vel / IConfig.AxisVelocityRatio;
            return vel;
        }
        /// <summary>
        /// Set Single Axis Do Jog Move  
        /// </summary>
        /// <param name="axisNum">AxisNo</param>
@@ -437,7 +539,7 @@
                    if (ret != (short)GTSRetCode.GRCRunOK)
                    {
                        LogAsync(DateTime.Now, "轴" + optionPara.AxisIndex + "APS_absolute_move异常", "错误码:" + ret + ";" + "重试次数:" + repeatTime);
                        LogAsync(DateTime.Now, "轴" + optionPara.AxisIndex + "JogMove异常", "错误码:" + ret + ";" + "重试次数:" + repeatTime);
                        Thread.Sleep(10);
                    }
                    repeatTime--;
@@ -450,29 +552,6 @@
                OnExceptionRaised?.Invoke(ex);
                return false;
            }
        }
        /// <summary>
        /// Set Single Axis Do stop Jog Move
        /// </summary>
        /// <param name="axisNum">AxisNo</param>
        /// <returns></returns>
        public bool StopJog(int axisNum)
        {
            //停止运动
            MoveStop(axisNum, 0);
            //运动开始后 检查运动是否停止
            bool isStop = false;
            int repeatTime = 1000;
            do
            {
                isStop = IsStop((short)IConfig.CardNum, (short)axisNum);
                Thread.Sleep(50);
                repeatTime--;
            } while (!isStop && repeatTime > 0);
            return isStop;
        }
        /// <summary>
@@ -540,7 +619,7 @@
                repeatTime = 1000;
                do
                {
                    isStop = IsStop((short)IConfig.CardNum, (short)optionPara.AxisIndex);
                    isStop = IsStop((short)optionPara.AxisIndex);
                    Thread.Sleep(50);
                    repeatTime--;
                } while (!isStop && repeatTime > 0);
@@ -563,6 +642,8 @@
        {
            try
            {
                axisImmediatePauseHandleDict[optionPara.AxisIndex].WaitOne();
                if (_isResetting)
                {
                    LogAsync(DateTime.Now, "复位过程异常", "轴" + optionPara.AxisIndex + "试图在复位过程中运动");
@@ -612,7 +693,7 @@
                repeatTime = 1000;
                do
                {
                    isStop = IsStop((short)IConfig.CardNum, (short)optionPara.AxisIndex);
                    isStop = IsStop((short)optionPara.AxisIndex);
                    Thread.Sleep(50);
                    repeatTime--;
                } while (!isStop && repeatTime > 0);
@@ -633,7 +714,7 @@
        /// <param name="axisNum">axisNo</param>
        /// <param name="option">0表示平滑停止,1表示紧急停止</param>
        /// <returns></returns>
        public async Task<bool> MoveStop(int axisNum, int option)
        public override async Task<bool> MoveStop(int axisNum, int option)
        {
            return await Task.Run(() =>
            {
@@ -655,7 +736,7 @@
                int repeatTime = 100;
                do
                {
                    isStop = IsStop((short)IConfig.CardNum, (short)axisNum);
                    isStop = IsStop((short)axisNum);
                    Thread.Sleep(10);
                    repeatTime--;
                } while (!isStop && repeatTime > 0);
@@ -787,23 +868,65 @@
        /// <param name="cardNum">板卡号</param>
        /// <param name="axisNum">轴号</param>
        /// <returns></returns>
        public bool IsStop(short cardNum, short axisNum)
        public bool IsStop(short axisNum)
        {
            int sts = GetAxisStatus(axisNum);
            if ((sts & 0x400) == 0) return true;//停止返回true
            else return false;              //运行中返回false
        }
        /// <summary>
        /// 读取轴状态
        /// </summary>
        /// <param name="axisNum">轴号</param>
        /// <returns></returns>
        public override int GetAxisStatus(int axisNum)
        {
            lock (moveLock)
            {
                int sts = 0;
                uint pclock = 0;
                GTSCardAPI.GT_GetSts(cardNum, axisNum, out sts, 1, out pclock);
                if ((sts & 0x400) == 0) return true;//停止返回true
                else return false;              //运行中返回false
                GTSCardAPI.GT_GetSts((short)IConfig.CardNum, (short)axisNum, out sts, 1, out pclock);
                return sts;
            }
        }
        public override bool ClearStatus(int startAxisIndex, int count)
        {
            var rtn = GTSCardAPI.GT_ClrSts((short)IConfig.CardNum, (short)startAxisIndex, (short)count);
            return rtn == (short)GTSRetCode.GRCRunOK;
        }
        public override bool PositionReset(int startAxisIndex, int count)
        {
            var rtn = GTSCardAPI.GT_ZeroPos((short)IConfig.CardNum, (short)startAxisIndex, (short)count);
            return rtn == (short)GTSRetCode.GRCRunOK;
        }
        #endregion
        #region IMonitor
        //public List<IOItem> MonitorValues { get; set; } = new List<IOItem>();
        public List<AxisMovingStatus> GetAxisMovingStatus()
        {
            List<AxisMovingStatus> axisMovingStatusesList = new List<AxisMovingStatus>();
            foreach (var axisConfig in IConfig.AxisSettings.FindAll(u => u.IsAxisEnabled))
            {
                AxisMovingStatus axisMovingStatus = new AxisMovingStatus();
                axisMovingStatus.AxisIndex = axisConfig.AxisIndex;
                axisMovingStatus.AxisName = axisConfig.AxisName;
                axisMovingStatus.CurPosition = Convert.ToInt32(GetPosition(axisMovingStatus.AxisIndex));
                axisMovingStatus.Destination = Convert.ToInt32(GetPrfPosition(axisMovingStatus.AxisIndex));
                axisMovingStatus.CurVelocity = GetVelocity(axisMovingStatus.AxisIndex);
                axisMovingStatus.PrfVelocity = GetPrfVelocity(axisMovingStatus.AxisIndex);
                axisMovingStatus.AxisStatus = GetAxisStatus(axisMovingStatus.AxisIndex);
                axisMovingStatusesList.Add(axisMovingStatus);
            }
            return axisMovingStatusesList;
        }
        public List<IOItem> GetMonitorValues()
@@ -849,7 +972,8 @@
                        if (!IConfig.IsEnableMonitor)
                            return;
                        var newValues = GetMonitorValues();
                        if (newValues == null || newValues.Count == 0)
                        var newAxisMovingStatus = GetAxisMovingStatus();
                        if (newValues == null || newValues.Count == 0 || newAxisMovingStatus == null || newAxisMovingStatus.Count == 0)
                            continue;
                        Stopwatch sw = new Stopwatch();
@@ -860,6 +984,8 @@
                            var tempOld = MonitorValues.DeepSerializeClone();
                            MonitorCheckAndInvoke(tempNew, tempOld);
                        }
                        AxisMovingOptionValues = new List<AxisMovingStatus>(newAxisMovingStatus);
                        MonitorValues = new List<IOItem>(newValues);
                        sw.Stop();
@@ -965,12 +1091,11 @@
        public override void ResetAlarm()
        {
            int axis_sts;
            uint clk;
            var axisSettings = IConfig.AxisSettings.FindAll(u => u.IsAxisEnabled);
            GTSCardAPI.GT_ClrSts((short)IConfig.CardNum, 1, (short)axisSettings.Count);
            ClearStatus(1, axisSettings.Count);
            foreach (var axisSetting in axisSettings)
            {
                GTSCardAPI.GT_GetSts((short)IConfig.CardNum, (short)axisSetting.AxisIndex, out axis_sts, 1, out clk);
                axis_sts = GetAxisStatus((short)axisSetting.AxisIndex);
                if ((axis_sts & 0x200) == 0)
                {
                    var rst = GTSCardAPI.GT_AxisOn((short)IConfig.CardNum, (short)axisSetting.AxisIndex);
@@ -1001,7 +1126,7 @@
            }
            // 清除状态
            GTSCardAPI.GT_ClrSts((short)IConfig.CardNum, 1, (short)IConfig.AxisSettings.FindAll(u => u.IsAxisEnabled).Count);
            ClearStatus(1, axisSettings.Count);
        }
        object _alarmLock = new object();
src/Bro.M071.DBManager/App.config
src/Bro.M071.DBManager/Bro.M071.DBManager.csproj
File was renamed from src/Bro.M071.Process.DBManager/Bro.M071.DBManager.csproj
@@ -8,8 +8,8 @@
    <ProjectGuid>{230B0FFF-F6AF-45FE-AAF7-B4B66250DD58}</ProjectGuid>
    <OutputType>Library</OutputType>
    <AppDesignerFolder>Properties</AppDesignerFolder>
    <RootNamespace>Bro.Process.DBManager</RootNamespace>
    <AssemblyName>Bro.Process.DBManager</AssemblyName>
    <RootNamespace>Bro.M071.DBManager</RootNamespace>
    <AssemblyName>Bro.M071.DBManager</AssemblyName>
    <TargetFrameworkVersion>v4.5.2</TargetFrameworkVersion>
    <FileAlignment>512</FileAlignment>
    <NuGetPackageImportStamp>
@@ -45,7 +45,7 @@
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
    <DebugSymbols>true</DebugSymbols>
    <OutputPath>bin\x64\Debug\</OutputPath>
    <OutputPath>..\Debug\</OutputPath>
    <DefineConstants>DEBUG;TRACE</DefineConstants>
    <DebugType>full</DebugType>
    <PlatformTarget>x64</PlatformTarget>
@@ -80,6 +80,10 @@
    <Reference Include="EntityFramework.SqlServer, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL">
      <HintPath>..\..\packages\EntityFramework.6.4.0\lib\net45\EntityFramework.SqlServer.dll</HintPath>
    </Reference>
    <Reference Include="EPPlus, Version=5.2.0.0, Culture=neutral, PublicKeyToken=ea159fdaa78159a1, processorArchitecture=MSIL">
      <HintPath>..\..\packages\EPPlus.5.2.0\lib\net45\EPPlus.dll</HintPath>
    </Reference>
    <Reference Include="PresentationCore" />
    <Reference Include="SQLite.CodeFirst, Version=1.5.3.29, Culture=neutral, PublicKeyToken=eb96ba0a78d831a7, processorArchitecture=MSIL">
      <HintPath>..\..\packages\SQLite.CodeFirst.1.5.3.29\lib\net45\SQLite.CodeFirst.dll</HintPath>
    </Reference>
@@ -99,6 +103,9 @@
    <Reference Include="System.Data.SQLite.Linq, Version=1.0.112.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139, processorArchitecture=MSIL">
      <HintPath>..\..\packages\System.Data.SQLite.Linq.1.0.112.0\lib\net451\System.Data.SQLite.Linq.dll</HintPath>
    </Reference>
    <Reference Include="System.Drawing" />
    <Reference Include="System.Security" />
    <Reference Include="System.Threading.Tasks" />
    <Reference Include="System.Xml.Linq" />
    <Reference Include="System.Data.DataSetExtensions" />
    <Reference Include="Microsoft.CSharp" />
@@ -107,6 +114,7 @@
    <Reference Include="System.Xml" />
  </ItemGroup>
  <ItemGroup>
    <Compile Include="ExcelExportHelper.cs" />
    <Compile Include="KeyUnitDataManager.cs" />
    <Compile Include="MeasurementAndKeyDataRelationManager.cs" />
    <Compile Include="ModelManager.cs" />
@@ -124,8 +132,8 @@
      <Project>{987308DD-8BAA-463A-94E2-77D62E01A5BF}</Project>
      <Name>Bro.Common.Device</Name>
    </ProjectReference>
    <ProjectReference Include="..\Bro.M071.Process.Model\Bro.M071.Model.csproj">
      <Project>{AD645C48-5811-4B1E-B81F-D35D5E6B577F}</Project>
    <ProjectReference Include="..\Bro.M071.Model\Bro.M071.Model.csproj">
      <Project>{ad645c48-5811-4b1e-b81f-d35d5e6b577f}</Project>
      <Name>Bro.M071.Model</Name>
    </ProjectReference>
  </ItemGroup>
src/Bro.M071.DBManager/ExcelExportHelper.cs
New file
@@ -0,0 +1,143 @@
using OfficeOpenXml;
using OfficeOpenXml.Style;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Linq;
namespace Bro.M071.DBManager
{
    /// <summary>
    /// Excel导出帮助类
    /// </summary>
    public class ExcelExportHelper
    {
        public static string ExcelContentType => "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
        /// <summary>
        /// List转DataTable
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="data"></param>
        /// <returns></returns>
        public static DataTable ListToDataTable<T>(List<T> data)
        {
            PropertyDescriptorCollection properties = TypeDescriptor.GetProperties(typeof(T));
            DataTable dataTable = new DataTable();
            for (int i = 0; i < properties.Count; i++)
            {
                PropertyDescriptor property = properties[i];
                dataTable.Columns.Add(property.Name, Nullable.GetUnderlyingType(property.PropertyType) ?? property.PropertyType);
            }
            object[] values = new object[properties.Count];
            foreach (T item in data)
            {
                for (int i = 0; i < values.Length; i++)
                {
                    values[i] = properties[i].GetValue(item);
                }
                dataTable.Rows.Add(values);
            }
            return dataTable;
        }
        /// <summary>
        /// 导出Excel
        /// </summary>
        /// <param name="dataTable">数据源</param>
        /// <param name="heading">工作簿Worksheet</param>
        /// <param name="showSrNo">//是否显示行编号</param>
        /// <param name="columnsToTake">要导出的列</param>
        /// <returns></returns>
        public static byte[] ExportExcel(DataTable dataTable, string heading = "", bool showSrNo = false, params string[] columnsToTake)
        {
            byte[] result;
            using (ExcelPackage package = new ExcelPackage())
            {
                ExcelWorksheet workSheet = package.Workbook.Worksheets.Add($"{heading}Data");
                int startRowFrom = string.IsNullOrEmpty(heading) ? 1 : 3;  //开始的行
                //是否显示行编号
                if (showSrNo)
                {
                    DataColumn dataColumn = dataTable.Columns.Add("#", typeof(int));
                    dataColumn.SetOrdinal(0);
                    int index = 1;
                    foreach (DataRow item in dataTable.Rows)
                    {
                        item[0] = index;
                        index++;
                    }
                }
                //Add Content Into the Excel File
                workSheet.Cells["A" + startRowFrom].LoadFromDataTable(dataTable, true);
                // autofit width of cells with small content
                int columnIndex = 1;
                foreach (DataColumn item in dataTable.Columns)
                {
                    ExcelRange columnCells = workSheet.Cells[workSheet.Dimension.Start.Row, columnIndex, workSheet.Dimension.End.Row, columnIndex];
                    int maxLength = columnCells.Max(cell => cell.Value.ToString().Count());
                    if (maxLength < 150)
                    {
                        workSheet.Column(columnIndex).AutoFit();
                    }
                    columnIndex++;
                }
                // format header - bold, yellow on black
                using (ExcelRange r = workSheet.Cells[startRowFrom, 1, startRowFrom, dataTable.Columns.Count])
                {
                    r.Style.Font.Color.SetColor(System.Drawing.Color.White);
                    r.Style.Font.Bold = true;
                    r.Style.Fill.PatternType = ExcelFillStyle.Solid;
                    r.Style.Fill.BackgroundColor.SetColor(System.Drawing.ColorTranslator.FromHtml("#1fb5ad"));
                }
                // format cells - add borders
                using (ExcelRange r = workSheet.Cells[startRowFrom + 1, 1, startRowFrom + dataTable.Rows.Count, dataTable.Columns.Count])
                {
                    r.Style.Border.Top.Style = ExcelBorderStyle.Thin;
                    r.Style.Border.Bottom.Style = ExcelBorderStyle.Thin;
                    r.Style.Border.Left.Style = ExcelBorderStyle.Thin;
                    r.Style.Border.Right.Style = ExcelBorderStyle.Thin;
                    r.Style.Border.Top.Color.SetColor(System.Drawing.Color.Black);
                    r.Style.Border.Bottom.Color.SetColor(System.Drawing.Color.Black);
                    r.Style.Border.Left.Color.SetColor(System.Drawing.Color.Black);
                    r.Style.Border.Right.Color.SetColor(System.Drawing.Color.Black);
                }
                // removed ignored columns
                for (int i = dataTable.Columns.Count - 1; i >= 0; i--)
                {
                    if (i == 0 && showSrNo)
                    {
                        continue;
                    }
                    if (!columnsToTake.Contains(dataTable.Columns[i].ColumnName))
                    {
                        workSheet.DeleteColumn(i + 1);
                    }
                }
                if (!string.IsNullOrEmpty(heading))
                {
                    workSheet.Cells["A1"].Value = heading;
                    workSheet.Cells["A1"].Style.Font.Size = 20;
                    workSheet.InsertColumn(1, 1);
                    workSheet.InsertRow(1, 1);
                    workSheet.Column(1).Width = 5;
                }
                result = package.GetAsByteArray();
            }
            return result;
        }
        /// <summary>
        /// 导出Excel
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="data"></param>
        /// <param name="heading"></param>
        /// <param name="isShowSlNo"></param>
        /// <param name="columnsToTake"></param>
        /// <returns></returns>
        public static byte[] ExportExcel<T>(List<T> data, string heading = "", bool isShowSlNo = false, params string[] columnsToTake)
        {
            return ExportExcel(ListToDataTable(data), heading, isShowSlNo, columnsToTake);
        }
    }
}
src/Bro.M071.DBManager/KeyUnitDataManager.cs
src/Bro.M071.DBManager/MeasurementAndKeyDataRelationManager.cs
src/Bro.M071.DBManager/MeasurementUnitResultManager.cs
File was renamed from src/Bro.M071.Process.DBManager/MeasurementUnitResultManager.cs
@@ -29,23 +29,56 @@
        {
        }
        public List<MeasurementUnitResult> GetMeasurementUnitResult()
        public List<MeasurementUnitResult_DTO> GetMeasurementUnitResult(MeasurementUnitResultRequest request)
        {
            using (DBModel context = new DBModel())
            {
                var list = context.MeasurementUnitResult.Where(u => u.IS_DELETED == 0);
                var mList = context.MeasurementUnitResult.Where(u => u.IS_DELETED == 0);
                var pList = context.ProductionMeasurementRecords.Where(u => u.IS_DELETED == 0);
                //if (!string.IsNullOrWhiteSpace(productionBatchNO))
                //{
                //    list = list.Where(u => u.ProductionBatchNO.Contains(productionBatchNO));
                //}
                //if (!string.IsNullOrWhiteSpace(pid))
                //{
                //    list = list.Where(u => u.PId.Contains(pid));
                //}
                if (!string.IsNullOrWhiteSpace(request.ProductionBarcode))
                {
                    pList = pList.Where(u => u.ProductionBarcode.Contains(request.ProductionBarcode));
                }
                if (!string.IsNullOrWhiteSpace(request.ProductionCode))
                {
                    pList = pList.Where(u => u.ProductionCode.Contains(request.ProductionCode));
                }
                if (request.StartTime != null)
                {
                    pList = pList.Where(u => u.OperationStartTime >= request.StartTime);
                }
                if (request.EndTime != null)
                {
                    pList = pList.Where(u => u.OperationStartTime <= request.EndTime);
                }
                //mList
                if (!string.IsNullOrWhiteSpace(request.MeasurementName))
                {
                    mList = mList.Where(u => u.MeasurementName.Contains(request.MeasurementName));
                }
                if (!string.IsNullOrWhiteSpace(request.MeasurementResult))
                {
                    mList = mList.Where(u => u.MeasurementResult==request.MeasurementResult);
                }
                if (!string.IsNullOrWhiteSpace(request.MeasurementType))
                {
                    mList = mList.Where(u => u.MeasurementType == request.MeasurementType);
                }
                var resultList = list.ToList();
                return resultList;
                var query = from productionMeasurementRecords in pList
                            join measurementUnitResult in mList
                            on productionMeasurementRecords.ID equals measurementUnitResult.ProductionMeasurementRecordsId
                            //into pmList
                            select new MeasurementUnitResult_DTO
                            {
                                ProductionMeasurementRecord= productionMeasurementRecords,
                                MeasurementUnitResult= measurementUnitResult
                            };
                var pageList = query.OrderBy(u => u.ProductionMeasurementRecord.OperationStartTime).ToPagedList(request);
                request.TotalNum = mList.Count();
                return pageList;
            }
        }
src/Bro.M071.DBManager/ModelManager.cs
src/Bro.M071.DBManager/ProductionMeasurementRecordsManager.cs
File was renamed from src/Bro.M071.Process.DBManager/ProductionMeasurementRecordsManager.cs
@@ -29,23 +29,31 @@
        {
        }
        public List<ProductionMeasurementRecords> GetProductionMeasurementRecords()
        public List<ProductionMeasurementRecords> GetProductionMeasurementRecords(ProductionMeasurementRecordsRequest request)
        {
            using (DBModel context = new DBModel())
            {
                var list = context.ProductionMeasurementRecords.Where(u => u.IS_DELETED == 0);
                var pList = context.ProductionMeasurementRecords.Where(u => u.IS_DELETED == 0);
                if (!string.IsNullOrWhiteSpace(request.ProductionBarcode))
                {
                    pList = pList.Where(u => u.ProductionBarcode.Contains(request.ProductionBarcode));
                }
                if (!string.IsNullOrWhiteSpace(request.ProductionCode))
                {
                    pList = pList.Where(u => u.ProductionCode.Contains(request.ProductionCode));
                }
                if (request.StartTime != null)
                {
                    pList = pList.Where(u => u.OperationStartTime >= request.StartTime);
                }
                if (request.EndTime != null)
                {
                    pList = pList.Where(u => u.OperationStartTime <= request.EndTime);
                }
                //if (!string.IsNullOrWhiteSpace(productionBatchNO))
                //{
                //    list = list.Where(u => u.ProductionBatchNO.Contains(productionBatchNO));
                //}
                //if (!string.IsNullOrWhiteSpace(pid))
                //{
                //    list = list.Where(u => u.PId.Contains(pid));
                //}
                var resultList = list.ToList();
                return resultList;
                var pageList = pList.OrderBy(u => u.OperationStartTime).ToPagedList(request);
                request.TotalNum = pList.Count();
                return pageList;
            }
        }
src/Bro.M071.DBManager/Properties/AssemblyInfo.cs
File was renamed from src/Bro.M071.Process.DBManager/Properties/AssemblyInfo.cs
@@ -5,11 +5,11 @@
// 有关程序集的一般信息由以下
// 控制。更改这些特性值可修改
// 与程序集关联的信息。
[assembly: AssemblyTitle("Bro.Process.DBManager")]
[assembly: AssemblyTitle("Bro.M071.DBManager")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("Bro.Process.DBManager")]
[assembly: AssemblyProduct("Bro.M071.DBManager")]
[assembly: AssemblyCopyright("Copyright ©  2018")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
src/Bro.M071.DBManager/SQLiteHelper.cs
File was renamed from src/Bro.M071.Process.DBManager/SQLiteHelper.cs
@@ -7,7 +7,7 @@
using System.Data.SQLite;
using System.Configuration;
namespace Bro.Process.DataBase
namespace Bro.M071.DBManager
{
    public class SQLiteHelper
    {
src/Bro.M071.DBManager/packages.config
File was renamed from src/Bro.M071.Process.DBManager/packages.config
@@ -1,6 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
  <package id="EntityFramework" version="6.4.0" targetFramework="net452" />
  <package id="EPPlus" version="5.2.0" targetFramework="net452" />
  <package id="SQLite.CodeFirst" version="1.5.3.29" targetFramework="net452" />
  <package id="System.Data.SQLite" version="1.0.112.0" targetFramework="net452" />
  <package id="System.Data.SQLite.Core" version="1.0.112.0" targetFramework="net452" />
src/Bro.M071.Model/App.config
File was renamed from src/Bro.M071.Process.Model/App.config
@@ -38,6 +38,6 @@
    </assemblyBinding>
  </runtime>
  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1" />
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" />
  </startup>
</configuration>
src/Bro.M071.Model/BaseModel.cs
src/Bro.M071.Model/Bro.M071.Model.csproj
File was renamed from src/Bro.M071.Process.Model/Bro.M071.Model.csproj
@@ -8,8 +8,8 @@
    <ProjectGuid>{AD645C48-5811-4B1E-B81F-D35D5E6B577F}</ProjectGuid>
    <OutputType>Library</OutputType>
    <AppDesignerFolder>Properties</AppDesignerFolder>
    <RootNamespace>Bro.Process.Model</RootNamespace>
    <AssemblyName>Bro.Process.Model</AssemblyName>
    <RootNamespace>Bro.M071.Model</RootNamespace>
    <AssemblyName>Bro.M071.Model</AssemblyName>
    <TargetFrameworkVersion>v4.5.2</TargetFrameworkVersion>
    <FileAlignment>512</FileAlignment>
    <NuGetPackageImportStamp>
@@ -46,7 +46,7 @@
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
    <DebugSymbols>true</DebugSymbols>
    <OutputPath>bin\x64\Debug\</OutputPath>
    <OutputPath>..\Debug\</OutputPath>
    <DefineConstants>DEBUG;TRACE</DefineConstants>
    <DebugType>full</DebugType>
    <PlatformTarget>x64</PlatformTarget>
@@ -108,6 +108,10 @@
  <ItemGroup>
    <Compile Include="BaseModel.cs" />
    <Compile Include="DBModel.cs" />
    <Compile Include="Migrations\202007070851439_initDB.cs" />
    <Compile Include="Migrations\202007070851439_initDB.designer.cs">
      <DependentUpon>202007070851439_initDB.cs</DependentUpon>
    </Compile>
    <Compile Include="Migrations\Configuration.cs" />
    <Compile Include="Model\KeyUnitData.cs" />
    <Compile Include="Model\MeasurementUnitResult.cs" />
@@ -120,7 +124,6 @@
      <SubType>Designer</SubType>
      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
    </None>
    <None Include="packages.config" />
  </ItemGroup>
  <ItemGroup>
    <ProjectReference Include="..\Bro.Common.Model\Bro.Common.Model.csproj">
@@ -128,14 +131,10 @@
      <Name>Bro.Common.Model</Name>
    </ProjectReference>
  </ItemGroup>
  <ItemGroup>
    <EmbeddedResource Include="Migrations\202007070851439_initDB.resx">
      <DependentUpon>202007070851439_initDB.cs</DependentUpon>
    </EmbeddedResource>
  </ItemGroup>
  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
  <Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
    <PropertyGroup>
    </PropertyGroup>
    <Error Condition="!Exists('..\..\packages\EntityFramework.6.4.0\build\EntityFramework.props')" Text="$([System.String]::Format('$(ErrorText)', '..\..\packages\EntityFramework.6.4.0\build\EntityFramework.props'))" />
    <Error Condition="!Exists('..\..\packages\EntityFramework.6.4.0\build\EntityFramework.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\packages\EntityFramework.6.4.0\build\EntityFramework.targets'))" />
    <Error Condition="!Exists('..\..\packages\System.Data.SQLite.Core.1.0.112.0\build\net451\System.Data.SQLite.Core.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\packages\System.Data.SQLite.Core.1.0.112.0\build\net451\System.Data.SQLite.Core.targets'))" />
  </Target>
  <Import Project="..\..\packages\EntityFramework.6.4.0\build\EntityFramework.targets" Condition="Exists('..\..\packages\EntityFramework.6.4.0\build\EntityFramework.targets')" />
  <Import Project="..\..\packages\System.Data.SQLite.Core.1.0.112.0\build\net451\System.Data.SQLite.Core.targets" Condition="Exists('..\..\packages\System.Data.SQLite.Core.1.0.112.0\build\net451\System.Data.SQLite.Core.targets')" />
</Project>
src/Bro.M071.Model/DBModel.cs
src/Bro.M071.Model/Migrations/202007070851439_initDB.Designer.cs
New file
@@ -0,0 +1,29 @@
// <auto-generated />
namespace Bro.M071.Model.Migrations
{
    using System.CodeDom.Compiler;
    using System.Data.Entity.Migrations;
    using System.Data.Entity.Migrations.Infrastructure;
    using System.Resources;
    [GeneratedCode("EntityFramework.Migrations", "6.4.0")]
    public sealed partial class initDB : IMigrationMetadata
    {
        private readonly ResourceManager Resources = new ResourceManager(typeof(initDB));
        string IMigrationMetadata.Id
        {
            get { return "202007070851439_initDB"; }
        }
        string IMigrationMetadata.Source
        {
            get { return null; }
        }
        string IMigrationMetadata.Target
        {
            get { return Resources.GetString("Target"); }
        }
    }
}
src/Bro.M071.Model/Migrations/202007070851439_initDB.cs
New file
@@ -0,0 +1,92 @@
namespace Bro.M071.Model.Migrations
{
    using System;
    using System.Data.Entity.Migrations;
    public partial class initDB : DbMigration
    {
        public override void Up()
        {
            CreateTable(
                "dbo.KeyUnitData",
                c => new
                    {
                        ID = c.String(nullable: false, maxLength: 64),
                        ProductionMeasurementRecordsId = c.String(maxLength: 64),
                        Key = c.String(maxLength: 64),
                        MeasurementItem = c.String(maxLength: 64),
                        ItemValue = c.String(maxLength: 64),
                        IS_DISABLED = c.Int(nullable: false),
                        IS_DELETED = c.Int(nullable: false),
                        CREATE_USER = c.String(maxLength: 64),
                        CREATE_TIME = c.DateTime(nullable: false),
                        UPDATE_USER = c.String(maxLength: 64),
                        UPDATE_TIME = c.DateTime(),
                    })
                .PrimaryKey(t => t.ID);
            CreateTable(
                "dbo.MeasurementAndKeyDataRelation",
                c => new
                    {
                        ID = c.String(nullable: false, maxLength: 64),
                        KeyUnitDataId = c.String(maxLength: 64),
                        MeasurementUnitResultId = c.String(maxLength: 64),
                        IS_DISABLED = c.Int(nullable: false),
                        IS_DELETED = c.Int(nullable: false),
                        CREATE_USER = c.String(maxLength: 64),
                        CREATE_TIME = c.DateTime(nullable: false),
                        UPDATE_USER = c.String(maxLength: 64),
                        UPDATE_TIME = c.DateTime(),
                    })
                .PrimaryKey(t => t.ID);
            CreateTable(
                "dbo.MeasurementUnitResult",
                c => new
                    {
                        ID = c.String(nullable: false, maxLength: 64),
                        ProductionMeasurementRecordsId = c.String(maxLength: 64),
                        MeasurementName = c.String(maxLength: 64),
                        MeasurementType = c.String(maxLength: 64),
                        MeasurementValue = c.String(maxLength: 64),
                        MeasurementResult = c.String(maxLength: 64),
                        IS_DISABLED = c.Int(nullable: false),
                        IS_DELETED = c.Int(nullable: false),
                        CREATE_USER = c.String(maxLength: 64),
                        CREATE_TIME = c.DateTime(nullable: false),
                        UPDATE_USER = c.String(maxLength: 64),
                        UPDATE_TIME = c.DateTime(),
                    })
                .PrimaryKey(t => t.ID);
            CreateTable(
                "dbo.ProductionMeasurementRecords",
                c => new
                    {
                        ID = c.String(nullable: false, maxLength: 64),
                        ProductionCode = c.String(maxLength: 64),
                        ProductionBarcode = c.String(maxLength: 64),
                        ProductionResult = c.String(maxLength: 64),
                        OperationStartTime = c.DateTime(nullable: false),
                        OperationEndTime = c.DateTime(nullable: false),
                        IS_DISABLED = c.Int(nullable: false),
                        IS_DELETED = c.Int(nullable: false),
                        CREATE_USER = c.String(maxLength: 64),
                        CREATE_TIME = c.DateTime(nullable: false),
                        UPDATE_USER = c.String(maxLength: 64),
                        UPDATE_TIME = c.DateTime(),
                    })
                .PrimaryKey(t => t.ID);
        }
        public override void Down()
        {
            DropTable("dbo.ProductionMeasurementRecords");
            DropTable("dbo.MeasurementUnitResult");
            DropTable("dbo.MeasurementAndKeyDataRelation");
            DropTable("dbo.KeyUnitData");
        }
    }
}
src/Bro.M071.Model/Migrations/202007070851439_initDB.resx
New file
@@ -0,0 +1,126 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
  <!--
    Microsoft ResX Schema
    Version 2.0
    The primary goals of this format is to allow a simple XML format
    that is mostly human readable. The generation and parsing of the
    various data types are done through the TypeConverter classes
    associated with the data types.
    Example:
    ... ado.net/XML headers & schema ...
    <resheader name="resmimetype">text/microsoft-resx</resheader>
    <resheader name="version">2.0</resheader>
    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
        <value>[base64 mime encoded serialized .NET Framework object]</value>
    </data>
    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
        <comment>This is a comment</comment>
    </data>
    There are any number of "resheader" rows that contain simple
    name/value pairs.
    Each data row contains a name, and value. The row also contains a
    type or mimetype. Type corresponds to a .NET class that support
    text/value conversion through the TypeConverter architecture.
    Classes that don't support this are serialized and stored with the
    mimetype set.
    The mimetype is used for serialized objects, and tells the
    ResXResourceReader how to depersist the object. This is currently not
    extensible. For a given mimetype the value must be set accordingly:
    Note - application/x-microsoft.net.object.binary.base64 is the format
    that the ResXResourceWriter will generate, however the reader can
    read any of the formats listed below.
    mimetype: application/x-microsoft.net.object.binary.base64
    value   : The object must be serialized with
            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
            : and then encoded with base64 encoding.
    mimetype: application/x-microsoft.net.object.soap.base64
    value   : The object must be serialized with
            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
            : and then encoded with base64 encoding.
    mimetype: application/x-microsoft.net.object.bytearray.base64
    value   : The object must be serialized into a byte array
            : using a System.ComponentModel.TypeConverter
            : and then encoded with base64 encoding.
    -->
  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
    <xsd:element name="root" msdata:IsDataSet="true">
      <xsd:complexType>
        <xsd:choice maxOccurs="unbounded">
          <xsd:element name="metadata">
            <xsd:complexType>
              <xsd:sequence>
                <xsd:element name="value" type="xsd:string" minOccurs="0" />
              </xsd:sequence>
              <xsd:attribute name="name" use="required" type="xsd:string" />
              <xsd:attribute name="type" type="xsd:string" />
              <xsd:attribute name="mimetype" type="xsd:string" />
              <xsd:attribute ref="xml:space" />
            </xsd:complexType>
          </xsd:element>
          <xsd:element name="assembly">
            <xsd:complexType>
              <xsd:attribute name="alias" type="xsd:string" />
              <xsd:attribute name="name" type="xsd:string" />
            </xsd:complexType>
          </xsd:element>
          <xsd:element name="data">
            <xsd:complexType>
              <xsd:sequence>
                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
              </xsd:sequence>
              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
              <xsd:attribute ref="xml:space" />
            </xsd:complexType>
          </xsd:element>
          <xsd:element name="resheader">
            <xsd:complexType>
              <xsd:sequence>
                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
              </xsd:sequence>
              <xsd:attribute name="name" type="xsd:string" use="required" />
            </xsd:complexType>
          </xsd:element>
        </xsd:choice>
      </xsd:complexType>
    </xsd:element>
  </xsd:schema>
  <resheader name="resmimetype">
    <value>text/microsoft-resx</value>
  </resheader>
  <resheader name="version">
    <value>2.0</value>
  </resheader>
  <resheader name="reader">
    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
  </resheader>
  <resheader name="writer">
    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
  </resheader>
  <data name="Target" xml:space="preserve">
    <value>H4sIAAAAAAAEAO1c227bOBB9X2D/QdBzaiXpYi9Zu0V8SeFu3GQtu08FCloaO8JKlCFSQfxt+7CftL+wpK7U1ZIsuZcVAjQVZ3hmSHEOqeEg//79z/Dti2VKz+AQw8Yj+WpwKUuANVs38G4ku3T76lf57ZsffxjOdOtF+hjqveZ6rCcmI/mJ0v2NohDtCSxEBpahOTaxt3Sg2ZaCdFu5vrz8Tbm6UoBByAxLkoZLF1PDAu+BPU5srMGeushc2DqYJGhnEtVDlT4gC8geaTCSx449WFz+cjXwVGXp1jQQ80IFcytLCGObIsp8vFkTUKlj4526Zw3IXB32wPS2yCQQ+H4Tq1cdxuU1H4YSdwyhNJdQ26oJePU6mBcl3b3R7MrRvLGZm7EZpgc+am/2RvIfcFhjg04RRbKUtnczMR2um57f4F+h74WU1LiIVgVbPPznQpq4JnUdGGFwqYOYxqO7MQ2NgazsvwCPsGuaoq/MWyZLNLCmR8feg0MPS9gGI5hPZUlJ9lPSHaNuQh9/YGw1sEUtSwv0cg94R59G8s8/ydKd8QJ62BCsDjZWFgKsD3Vc9viB+Ys2JkRypdQke9Rdjc/qAhBhE2EBpkvQbEcnc/10d8qtswnp2oQwrDkFq2tz3MZHZHLFjg2pn6dz9XZ8P4sWzRzT19e1VwAHmt3PVqfiTJaz29Xs81qdLbsee2BqNV/MQlMs2mHFWLq22+vH6bncDkzluy12HSoxIZbSpLC4b7HOoomT3hLMgJZrEmcpWk+lFcgs3He6Z07hXXGjSyBs8rs327NOzzr5a+8UtolRepb5ug9sgk3ecEZz3NAZzZ3lDJd4g34Q9fTd03fH9F3GILVZvAysJ/PqZD5hIF0vpdjaGDnaWQ2eh94e2IO3aFWKHOqHyImRHkHOsN4KYE/B/1cKntiYIgODE8BOx0FWOEO5awIB65LAw6R/Pp4KNC9bGrvgJ5oHCalSjnQkoZDBPqJf3Zr4IVFmRdQ7gl6+z2WMlKvnvebohcZXAIp/BxDeFSgFlwXDBdrv2VoVLg+CFkn1bw4mr9T6aXXLx1A0kpNdj7yNLFHbQTtISZlp5umd4RBvxWwQD5eJbmXUwuVb8BJCK9kVmt694zcR9uH/9/ulzhwlMPEU3rFR8XfnDRAih0qd8PqrGjKRk3MqmNima+Gik0VZ72NfayLyMd3qVr20ugjtNVTvn8mZi1gZYXVcITmemNK4uQaWuI8m0ERBPbxwO03Dhe3V0RKbqgiXENTG87egHDxfUB0vsXuKeAlBbbysfwlBFm+opII2TQ5Khh1Sp/o04VSio/Jt6wSCqgVcgbJq4nVDYqnEdopYRFEjiknmrwuoJqnU00RPE0l51zQhnDvboYdiwHq0UIbzPZ1pMpnnAqLwhY1w/RRzAa4vbISbc+TJShshh19CBdD5H0qlK6Ony54um9Jl6Rf0CaxZB7cCedaD65pD/cRvPmf6siaoUYI3HzgSN8HOI52stDpyXtZWxM6TN0CPEri52JG058qeK5PyE7gykylMq0TWo4xhKjM4DLJ0x2uNM2k7X0WW2EQ9GzpP2akHQsEacIWB+ue9QSGWLhA2tkCof+8m60xHIrbrMOjpzafH5cP72WSlfuK0/IkDjJkF72mgb34fGxg5h3fr+XR05yfYE5XOX0/VsUKIblYvPT77zSN+Zsz8hJzMJUYnVSIVrNWs4m0JsaBotyX0TI1uW7jZqz0D0xYu9pqg5FzrtTTMnFs8xhZAW7rFa8nLnEu7PC+zUC0V336z1JFbxtp+XOdVrfZx2MfhSXFYlAz7luLvrFt3QT1n++hi+Wb76F3s5oXFmT1L9SxVn6WqZ52+TbISCxhbeimF9Yqt43cS4MXViI0DoKgasTFgT0LfPwml6w6z9V0F2f361YV+yom5vbHZCHx3v2D5YZ47X7Ri8YhDX6q4Mc+tTsohs8nMoSL+eYXhFIixiyH4H1vA4HkRg4Y6c7y1wwhiEyN6FKpkjnQU8cTmrUONLdIoE2tAiFc07B0hR/LM2oA+xw8u3bv0lhCwNmaidm6olNv3aj6TPg8f9vyJtDEE5qbBSeEBj13D1CO/77LUVQTB4/8d4GhzYr9hd4iQPti4IlAwfVPYA9b5GR+sPYsjIA9YRc/QxLc1gXvYIe0QpqWLQY6/iOS0D6cG2jnIIgFG3J89sjWsWy9v/gNA/V6hZUQAAA==</value>
  </data>
  <data name="DefaultSchema" xml:space="preserve">
    <value>dbo</value>
  </data>
</root>
src/Bro.M071.Model/Migrations/Configuration.cs
src/Bro.M071.Model/Model/KeyUnitData.cs
src/Bro.M071.Model/Model/MeasurementAndKeyDataRelation.cs
src/Bro.M071.Model/Model/MeasurementUnitResult.cs
File was renamed from src/Bro.M071.Process.Model/Model/MeasurementUnitResult.cs
@@ -43,6 +43,16 @@
    public class MeasurementUnitResultRequest : BaseRequest
    {
        /// <summary>
        /// 产品编码
        /// </summary>
        public string ProductionCode { get; set; }
        /// <summary>
        /// 产品条码
        /// </summary>
        public string ProductionBarcode { get; set; }
        /// <summary>
        /// 检测名称
        /// </summary>
        public string MeasurementName { get; set; }
@@ -50,7 +60,26 @@
        /// <summary>
        ///  检测和标准类型
        /// </summary>
        public string MeasureType { get; set; }
        public string MeasurementType { get; set; }
        /// <summary>
        ///  检测结果 ok ng
        /// </summary>
        public string MeasurementResult { get; set; }
    }
    public class MeasurementUnitResult_DTO
    {
        /// <summary>
        /// 产品记录
        /// </summary>
        public ProductionMeasurementRecords ProductionMeasurementRecord { get; set; }
        /// <summary>
        /// 检测结果
        /// </summary>
        public MeasurementUnitResult MeasurementUnitResult { get; set; }
    }
}
src/Bro.M071.Model/Model/ProductionMeasurementRecords.cs
File was renamed from src/Bro.M071.Process.Model/Model/ProductionMeasurementRecords.cs
@@ -55,7 +55,7 @@
        /// <summary>
        ///  产品结果
        /// </summary>
        public OutputResult ProductionResult { get; set; }
        public string ProductionResult { get; set; }
    }
}
src/Bro.M071.Model/Properties/AssemblyInfo.cs
File was renamed from src/Bro.M071.Process.Model/Properties/AssemblyInfo.cs
@@ -5,11 +5,11 @@
// 有关程序集的一般信息由以下
// 控制。更改这些特性值可修改
// 与程序集关联的信息。
[assembly: AssemblyTitle("Bro.Process.Model")]
[assembly: AssemblyTitle("Bro.M071.Model")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("Bro.Process.Model")]
[assembly: AssemblyProduct("Bro.M071.Model")]
[assembly: AssemblyCopyright("Copyright ©  2018")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
src/Bro.M071.Process.Model/packages.config
File was deleted
src/Bro.M071.Process/Bro.M071.Process.csproj
@@ -119,6 +119,12 @@
    <Compile Include="Properties\AssemblyInfo.cs" />
    <Compile Include="UI\KeyIndicator.cs" />
    <Compile Include="UI\M071Node.cs" />
    <Compile Include="UI\M071_DataForm.cs">
      <SubType>Form</SubType>
    </Compile>
    <Compile Include="UI\M071_DataForm.Designer.cs">
      <DependentUpon>M071_DataForm.cs</DependentUpon>
    </Compile>
    <Compile Include="UI\M071_MainForm.cs">
      <SubType>Form</SubType>
    </Compile>
@@ -140,6 +146,9 @@
      <AutoGen>True</AutoGen>
      <DependentUpon>Resources.resx</DependentUpon>
    </Compile>
    <EmbeddedResource Include="UI\M071_DataForm.resx">
      <DependentUpon>M071_DataForm.cs</DependentUpon>
    </EmbeddedResource>
    <EmbeddedResource Include="UI\M071_MainForm.resx">
      <DependentUpon>M071_MainForm.cs</DependentUpon>
    </EmbeddedResource>
@@ -167,7 +176,7 @@
      <Project>{1A3CBFE7-3F78-42C3-95C5-10360450DBEA}</Project>
      <Name>Bro.Common.Model</Name>
    </ProjectReference>
    <ProjectReference Include="..\Bro.M071.Process.Model\Bro.M071.Model.csproj">
    <ProjectReference Include="..\Bro.M071.Model\Bro.M071.Model.csproj">
      <Project>{AD645C48-5811-4B1E-B81F-D35D5E6B577F}</Project>
      <Name>Bro.M071.Model</Name>
    </ProjectReference>
src/Bro.M071.Process/UI/M071_DataForm.Designer.cs
New file
@@ -0,0 +1,413 @@
namespace Bro.M071.Process.UI
{
    partial class M071_DataForm
    {
        /// <summary>
        /// Required designer variable.
        /// </summary>
        private System.ComponentModel.IContainer components = null;
        /// <summary>
        /// Clean up any resources being used.
        /// </summary>
        /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
        protected override void Dispose(bool disposing)
        {
            if (disposing && (components != null))
            {
                components.Dispose();
            }
            base.Dispose(disposing);
        }
        #region Windows Form Designer generated code
        /// <summary>
        /// Required method for Designer support - do not modify
        /// the contents of this method with the code editor.
        /// </summary>
        private void InitializeComponent()
        {
            this.tabControl1 = new System.Windows.Forms.TabControl();
            this.tabPage1 = new System.Windows.Forms.TabPage();
            this.tabPage2 = new System.Windows.Forms.TabPage();
            this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel();
            this.groupBox1 = new System.Windows.Forms.GroupBox();
            this.panel1 = new System.Windows.Forms.Panel();
            this.label1 = new System.Windows.Forms.Label();
            this.button1 = new System.Windows.Forms.Button();
            this.button2 = new System.Windows.Forms.Button();
            this.button3 = new System.Windows.Forms.Button();
            this.button4 = new System.Windows.Forms.Button();
            this.textBox1 = new System.Windows.Forms.TextBox();
            this.dataGridView1 = new System.Windows.Forms.DataGridView();
            this.tableLayoutPanel2 = new System.Windows.Forms.TableLayoutPanel();
            this.tableLayoutPanel3 = new System.Windows.Forms.TableLayoutPanel();
            this.groupBox2 = new System.Windows.Forms.GroupBox();
            this.panel2 = new System.Windows.Forms.Panel();
            this.textBox2 = new System.Windows.Forms.TextBox();
            this.button5 = new System.Windows.Forms.Button();
            this.button6 = new System.Windows.Forms.Button();
            this.button7 = new System.Windows.Forms.Button();
            this.button8 = new System.Windows.Forms.Button();
            this.label2 = new System.Windows.Forms.Label();
            this.dataGridView2 = new System.Windows.Forms.DataGridView();
            this.tableLayoutPanel4 = new System.Windows.Forms.TableLayoutPanel();
            this.tabControl1.SuspendLayout();
            this.tabPage1.SuspendLayout();
            this.tabPage2.SuspendLayout();
            this.tableLayoutPanel1.SuspendLayout();
            this.panel1.SuspendLayout();
            ((System.ComponentModel.ISupportInitialize)(this.dataGridView1)).BeginInit();
            this.tableLayoutPanel3.SuspendLayout();
            this.panel2.SuspendLayout();
            ((System.ComponentModel.ISupportInitialize)(this.dataGridView2)).BeginInit();
            this.SuspendLayout();
            //
            // tabControl1
            //
            this.tabControl1.Controls.Add(this.tabPage1);
            this.tabControl1.Controls.Add(this.tabPage2);
            this.tabControl1.Dock = System.Windows.Forms.DockStyle.Fill;
            this.tabControl1.Location = new System.Drawing.Point(0, 0);
            this.tabControl1.Name = "tabControl1";
            this.tabControl1.SelectedIndex = 0;
            this.tabControl1.Size = new System.Drawing.Size(1024, 717);
            this.tabControl1.TabIndex = 0;
            //
            // tabPage1
            //
            this.tabPage1.Controls.Add(this.tableLayoutPanel1);
            this.tabPage1.Location = new System.Drawing.Point(4, 22);
            this.tabPage1.Name = "tabPage1";
            this.tabPage1.Padding = new System.Windows.Forms.Padding(3);
            this.tabPage1.Size = new System.Drawing.Size(1016, 691);
            this.tabPage1.TabIndex = 0;
            this.tabPage1.Text = "产品生产记录";
            this.tabPage1.UseVisualStyleBackColor = true;
            //
            // tabPage2
            //
            this.tabPage2.Controls.Add(this.tableLayoutPanel3);
            this.tabPage2.Location = new System.Drawing.Point(4, 22);
            this.tabPage2.Name = "tabPage2";
            this.tabPage2.Padding = new System.Windows.Forms.Padding(3);
            this.tabPage2.Size = new System.Drawing.Size(1016, 691);
            this.tabPage2.TabIndex = 1;
            this.tabPage2.Text = "测量结果数据";
            this.tabPage2.UseVisualStyleBackColor = true;
            //
            // tableLayoutPanel1
            //
            this.tableLayoutPanel1.ColumnCount = 2;
            this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 75F));
            this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 25F));
            this.tableLayoutPanel1.Controls.Add(this.groupBox1, 1, 0);
            this.tableLayoutPanel1.Controls.Add(this.panel1, 0, 2);
            this.tableLayoutPanel1.Controls.Add(this.dataGridView1, 0, 1);
            this.tableLayoutPanel1.Controls.Add(this.tableLayoutPanel2, 0, 0);
            this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill;
            this.tableLayoutPanel1.Location = new System.Drawing.Point(3, 3);
            this.tableLayoutPanel1.Name = "tableLayoutPanel1";
            this.tableLayoutPanel1.RowCount = 3;
            this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 70F));
            this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F));
            this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 30F));
            this.tableLayoutPanel1.Size = new System.Drawing.Size(1010, 685);
            this.tableLayoutPanel1.TabIndex = 0;
            //
            // groupBox1
            //
            this.groupBox1.Dock = System.Windows.Forms.DockStyle.Fill;
            this.groupBox1.Location = new System.Drawing.Point(760, 3);
            this.groupBox1.Name = "groupBox1";
            this.tableLayoutPanel1.SetRowSpan(this.groupBox1, 3);
            this.groupBox1.Size = new System.Drawing.Size(247, 679);
            this.groupBox1.TabIndex = 0;
            this.groupBox1.TabStop = false;
            this.groupBox1.Text = "明细";
            //
            // panel1
            //
            this.panel1.Controls.Add(this.textBox1);
            this.panel1.Controls.Add(this.button4);
            this.panel1.Controls.Add(this.button3);
            this.panel1.Controls.Add(this.button2);
            this.panel1.Controls.Add(this.button1);
            this.panel1.Controls.Add(this.label1);
            this.panel1.Dock = System.Windows.Forms.DockStyle.Fill;
            this.panel1.Location = new System.Drawing.Point(3, 658);
            this.panel1.Name = "panel1";
            this.panel1.Size = new System.Drawing.Size(751, 24);
            this.panel1.TabIndex = 1;
            //
            // label1
            //
            this.label1.AutoSize = true;
            this.label1.Font = new System.Drawing.Font("Tahoma", 14F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.World, ((byte)(134)));
            this.label1.Location = new System.Drawing.Point(3, 3);
            this.label1.Name = "label1";
            this.label1.Size = new System.Drawing.Size(42, 17);
            this.label1.TabIndex = 0;
            this.label1.Text = "label1";
            //
            // button1
            //
            this.button1.Location = new System.Drawing.Point(416, 1);
            this.button1.Name = "button1";
            this.button1.Size = new System.Drawing.Size(55, 23);
            this.button1.TabIndex = 1;
            this.button1.Text = "第一页";
            this.button1.UseVisualStyleBackColor = true;
            //
            // button2
            //
            this.button2.Location = new System.Drawing.Point(477, 1);
            this.button2.Name = "button2";
            this.button2.Size = new System.Drawing.Size(55, 23);
            this.button2.TabIndex = 1;
            this.button2.Text = "前一页";
            this.button2.UseVisualStyleBackColor = true;
            //
            // button3
            //
            this.button3.Location = new System.Drawing.Point(632, 1);
            this.button3.Name = "button3";
            this.button3.Size = new System.Drawing.Size(55, 23);
            this.button3.TabIndex = 1;
            this.button3.Text = "后一页";
            this.button3.UseVisualStyleBackColor = true;
            //
            // button4
            //
            this.button4.Location = new System.Drawing.Point(693, 0);
            this.button4.Name = "button4";
            this.button4.Size = new System.Drawing.Size(55, 23);
            this.button4.TabIndex = 1;
            this.button4.Text = "最后页";
            this.button4.UseVisualStyleBackColor = true;
            //
            // textBox1
            //
            this.textBox1.Location = new System.Drawing.Point(542, 2);
            this.textBox1.Name = "textBox1";
            this.textBox1.Size = new System.Drawing.Size(80, 21);
            this.textBox1.TabIndex = 2;
            //
            // dataGridView1
            //
            this.dataGridView1.AllowUserToAddRows = false;
            this.dataGridView1.AllowUserToDeleteRows = false;
            this.dataGridView1.BackgroundColor = System.Drawing.SystemColors.MenuBar;
            this.dataGridView1.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
            this.dataGridView1.Dock = System.Windows.Forms.DockStyle.Fill;
            this.dataGridView1.Location = new System.Drawing.Point(3, 73);
            this.dataGridView1.Name = "dataGridView1";
            this.dataGridView1.ReadOnly = true;
            this.dataGridView1.RowTemplate.Height = 23;
            this.dataGridView1.Size = new System.Drawing.Size(751, 579);
            this.dataGridView1.TabIndex = 2;
            //
            // tableLayoutPanel2
            //
            this.tableLayoutPanel2.ColumnCount = 8;
            this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 9.375F));
            this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 15.625F));
            this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 9.375F));
            this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 15.625F));
            this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 9.375F));
            this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 15.625F));
            this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 9.375F));
            this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 15.625F));
            this.tableLayoutPanel2.Dock = System.Windows.Forms.DockStyle.Fill;
            this.tableLayoutPanel2.Location = new System.Drawing.Point(3, 3);
            this.tableLayoutPanel2.Name = "tableLayoutPanel2";
            this.tableLayoutPanel2.RowCount = 2;
            this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50F));
            this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50F));
            this.tableLayoutPanel2.Size = new System.Drawing.Size(751, 64);
            this.tableLayoutPanel2.TabIndex = 3;
            //
            // tableLayoutPanel3
            //
            this.tableLayoutPanel3.ColumnCount = 2;
            this.tableLayoutPanel3.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 75F));
            this.tableLayoutPanel3.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 25F));
            this.tableLayoutPanel3.Controls.Add(this.groupBox2, 1, 0);
            this.tableLayoutPanel3.Controls.Add(this.panel2, 0, 2);
            this.tableLayoutPanel3.Controls.Add(this.dataGridView2, 0, 1);
            this.tableLayoutPanel3.Controls.Add(this.tableLayoutPanel4, 0, 0);
            this.tableLayoutPanel3.Dock = System.Windows.Forms.DockStyle.Fill;
            this.tableLayoutPanel3.Location = new System.Drawing.Point(3, 3);
            this.tableLayoutPanel3.Name = "tableLayoutPanel3";
            this.tableLayoutPanel3.RowCount = 3;
            this.tableLayoutPanel3.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 70F));
            this.tableLayoutPanel3.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F));
            this.tableLayoutPanel3.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 30F));
            this.tableLayoutPanel3.Size = new System.Drawing.Size(1010, 685);
            this.tableLayoutPanel3.TabIndex = 1;
            //
            // groupBox2
            //
            this.groupBox2.Dock = System.Windows.Forms.DockStyle.Fill;
            this.groupBox2.Location = new System.Drawing.Point(760, 3);
            this.groupBox2.Name = "groupBox2";
            this.tableLayoutPanel3.SetRowSpan(this.groupBox2, 3);
            this.groupBox2.Size = new System.Drawing.Size(247, 679);
            this.groupBox2.TabIndex = 0;
            this.groupBox2.TabStop = false;
            this.groupBox2.Text = "明细";
            //
            // panel2
            //
            this.panel2.Controls.Add(this.textBox2);
            this.panel2.Controls.Add(this.button5);
            this.panel2.Controls.Add(this.button6);
            this.panel2.Controls.Add(this.button7);
            this.panel2.Controls.Add(this.button8);
            this.panel2.Controls.Add(this.label2);
            this.panel2.Dock = System.Windows.Forms.DockStyle.Fill;
            this.panel2.Location = new System.Drawing.Point(3, 658);
            this.panel2.Name = "panel2";
            this.panel2.Size = new System.Drawing.Size(751, 24);
            this.panel2.TabIndex = 1;
            //
            // textBox2
            //
            this.textBox2.Location = new System.Drawing.Point(542, 2);
            this.textBox2.Name = "textBox2";
            this.textBox2.Size = new System.Drawing.Size(80, 21);
            this.textBox2.TabIndex = 2;
            //
            // button5
            //
            this.button5.Location = new System.Drawing.Point(693, 0);
            this.button5.Name = "button5";
            this.button5.Size = new System.Drawing.Size(55, 23);
            this.button5.TabIndex = 1;
            this.button5.Text = "最后页";
            this.button5.UseVisualStyleBackColor = true;
            //
            // button6
            //
            this.button6.Location = new System.Drawing.Point(632, 1);
            this.button6.Name = "button6";
            this.button6.Size = new System.Drawing.Size(55, 23);
            this.button6.TabIndex = 1;
            this.button6.Text = "后一页";
            this.button6.UseVisualStyleBackColor = true;
            //
            // button7
            //
            this.button7.Location = new System.Drawing.Point(477, 1);
            this.button7.Name = "button7";
            this.button7.Size = new System.Drawing.Size(55, 23);
            this.button7.TabIndex = 1;
            this.button7.Text = "前一页";
            this.button7.UseVisualStyleBackColor = true;
            //
            // button8
            //
            this.button8.Location = new System.Drawing.Point(416, 1);
            this.button8.Name = "button8";
            this.button8.Size = new System.Drawing.Size(55, 23);
            this.button8.TabIndex = 1;
            this.button8.Text = "第一页";
            this.button8.UseVisualStyleBackColor = true;
            //
            // label2
            //
            this.label2.AutoSize = true;
            this.label2.Font = new System.Drawing.Font("Tahoma", 14F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.World, ((byte)(134)));
            this.label2.Location = new System.Drawing.Point(3, 3);
            this.label2.Name = "label2";
            this.label2.Size = new System.Drawing.Size(42, 17);
            this.label2.TabIndex = 0;
            this.label2.Text = "label2";
            //
            // dataGridView2
            //
            this.dataGridView2.AllowUserToAddRows = false;
            this.dataGridView2.AllowUserToDeleteRows = false;
            this.dataGridView2.BackgroundColor = System.Drawing.SystemColors.MenuBar;
            this.dataGridView2.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
            this.dataGridView2.Dock = System.Windows.Forms.DockStyle.Fill;
            this.dataGridView2.Location = new System.Drawing.Point(3, 73);
            this.dataGridView2.Name = "dataGridView2";
            this.dataGridView2.ReadOnly = true;
            this.dataGridView2.RowTemplate.Height = 23;
            this.dataGridView2.Size = new System.Drawing.Size(751, 579);
            this.dataGridView2.TabIndex = 2;
            //
            // tableLayoutPanel4
            //
            this.tableLayoutPanel4.ColumnCount = 8;
            this.tableLayoutPanel4.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 9.375F));
            this.tableLayoutPanel4.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 15.625F));
            this.tableLayoutPanel4.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 9.375F));
            this.tableLayoutPanel4.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 15.625F));
            this.tableLayoutPanel4.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 9.375F));
            this.tableLayoutPanel4.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 15.625F));
            this.tableLayoutPanel4.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 9.375F));
            this.tableLayoutPanel4.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 15.625F));
            this.tableLayoutPanel4.Dock = System.Windows.Forms.DockStyle.Fill;
            this.tableLayoutPanel4.Location = new System.Drawing.Point(3, 3);
            this.tableLayoutPanel4.Name = "tableLayoutPanel4";
            this.tableLayoutPanel4.RowCount = 2;
            this.tableLayoutPanel4.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50F));
            this.tableLayoutPanel4.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50F));
            this.tableLayoutPanel4.Size = new System.Drawing.Size(751, 64);
            this.tableLayoutPanel4.TabIndex = 3;
            //
            // M071_DataForm
            //
            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
            this.ClientSize = new System.Drawing.Size(1024, 717);
            this.Controls.Add(this.tabControl1);
            this.Name = "M071_DataForm";
            this.Text = "M071_DataFrm";
            this.tabControl1.ResumeLayout(false);
            this.tabPage1.ResumeLayout(false);
            this.tabPage2.ResumeLayout(false);
            this.tableLayoutPanel1.ResumeLayout(false);
            this.panel1.ResumeLayout(false);
            this.panel1.PerformLayout();
            ((System.ComponentModel.ISupportInitialize)(this.dataGridView1)).EndInit();
            this.tableLayoutPanel3.ResumeLayout(false);
            this.panel2.ResumeLayout(false);
            this.panel2.PerformLayout();
            ((System.ComponentModel.ISupportInitialize)(this.dataGridView2)).EndInit();
            this.ResumeLayout(false);
        }
        #endregion
        private System.Windows.Forms.TabControl tabControl1;
        private System.Windows.Forms.TabPage tabPage1;
        private System.Windows.Forms.TabPage tabPage2;
        private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1;
        private System.Windows.Forms.GroupBox groupBox1;
        private System.Windows.Forms.Panel panel1;
        private System.Windows.Forms.TextBox textBox1;
        private System.Windows.Forms.Button button4;
        private System.Windows.Forms.Button button3;
        private System.Windows.Forms.Button button2;
        private System.Windows.Forms.Button button1;
        private System.Windows.Forms.Label label1;
        private System.Windows.Forms.DataGridView dataGridView1;
        private System.Windows.Forms.TableLayoutPanel tableLayoutPanel2;
        private System.Windows.Forms.TableLayoutPanel tableLayoutPanel3;
        private System.Windows.Forms.GroupBox groupBox2;
        private System.Windows.Forms.Panel panel2;
        private System.Windows.Forms.TextBox textBox2;
        private System.Windows.Forms.Button button5;
        private System.Windows.Forms.Button button6;
        private System.Windows.Forms.Button button7;
        private System.Windows.Forms.Button button8;
        private System.Windows.Forms.Label label2;
        private System.Windows.Forms.DataGridView dataGridView2;
        private System.Windows.Forms.TableLayoutPanel tableLayoutPanel4;
    }
}
src/Bro.M071.Process/UI/M071_DataForm.cs
New file
@@ -0,0 +1,22 @@
using Bro.UI.Model.Winform;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace Bro.M071.Process.UI
{
    [MenuNode("M071_DataForm", "数据查询界面", 1, "M071Node", true)]
    public partial class M071_DataForm : MenuFrmBase
    {
        public M071_DataForm()
        {
            InitializeComponent();
        }
    }
}
src/Bro.M071.Process/UI/M071_DataForm.resx
New file
@@ -0,0 +1,120 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
  <!--
    Microsoft ResX Schema
    Version 2.0
    The primary goals of this format is to allow a simple XML format
    that is mostly human readable. The generation and parsing of the
    various data types are done through the TypeConverter classes
    associated with the data types.
    Example:
    ... ado.net/XML headers & schema ...
    <resheader name="resmimetype">text/microsoft-resx</resheader>
    <resheader name="version">2.0</resheader>
    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
        <value>[base64 mime encoded serialized .NET Framework object]</value>
    </data>
    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
        <comment>This is a comment</comment>
    </data>
    There are any number of "resheader" rows that contain simple
    name/value pairs.
    Each data row contains a name, and value. The row also contains a
    type or mimetype. Type corresponds to a .NET class that support
    text/value conversion through the TypeConverter architecture.
    Classes that don't support this are serialized and stored with the
    mimetype set.
    The mimetype is used for serialized objects, and tells the
    ResXResourceReader how to depersist the object. This is currently not
    extensible. For a given mimetype the value must be set accordingly:
    Note - application/x-microsoft.net.object.binary.base64 is the format
    that the ResXResourceWriter will generate, however the reader can
    read any of the formats listed below.
    mimetype: application/x-microsoft.net.object.binary.base64
    value   : The object must be serialized with
            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
            : and then encoded with base64 encoding.
    mimetype: application/x-microsoft.net.object.soap.base64
    value   : The object must be serialized with
            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
            : and then encoded with base64 encoding.
    mimetype: application/x-microsoft.net.object.bytearray.base64
    value   : The object must be serialized into a byte array
            : using a System.ComponentModel.TypeConverter
            : and then encoded with base64 encoding.
    -->
  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
    <xsd:element name="root" msdata:IsDataSet="true">
      <xsd:complexType>
        <xsd:choice maxOccurs="unbounded">
          <xsd:element name="metadata">
            <xsd:complexType>
              <xsd:sequence>
                <xsd:element name="value" type="xsd:string" minOccurs="0" />
              </xsd:sequence>
              <xsd:attribute name="name" use="required" type="xsd:string" />
              <xsd:attribute name="type" type="xsd:string" />
              <xsd:attribute name="mimetype" type="xsd:string" />
              <xsd:attribute ref="xml:space" />
            </xsd:complexType>
          </xsd:element>
          <xsd:element name="assembly">
            <xsd:complexType>
              <xsd:attribute name="alias" type="xsd:string" />
              <xsd:attribute name="name" type="xsd:string" />
            </xsd:complexType>
          </xsd:element>
          <xsd:element name="data">
            <xsd:complexType>
              <xsd:sequence>
                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
              </xsd:sequence>
              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
              <xsd:attribute ref="xml:space" />
            </xsd:complexType>
          </xsd:element>
          <xsd:element name="resheader">
            <xsd:complexType>
              <xsd:sequence>
                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
              </xsd:sequence>
              <xsd:attribute name="name" type="xsd:string" use="required" />
            </xsd:complexType>
          </xsd:element>
        </xsd:choice>
      </xsd:complexType>
    </xsd:element>
  </xsd:schema>
  <resheader name="resmimetype">
    <value>text/microsoft-resx</value>
  </resheader>
  <resheader name="version">
    <value>2.0</value>
  </resheader>
  <resheader name="reader">
    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
  </resheader>
  <resheader name="writer">
    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
  </resheader>
</root>
src/Bro.UI.Config/App.config
@@ -1,5 +1,39 @@
<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <configSections>
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
  </configSections>
  <entityFramework>
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" />
    <providers>
      <provider invariantName="System.Data.SQLite" type="System.Data.SQLite.EF6.SQLiteProviderServices, System.Data.SQLite.EF6" />
      <provider invariantName="System.Data.SQLite.EF6" type="System.Data.SQLite.EF6.SQLiteProviderServices, System.Data.SQLite.EF6" />
      <!--<provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />-->
    </providers>
  </entityFramework>
  <connectionStrings>
    <add name="DataBase" connectionString="data source=D:\PROJECTS\M071\DataBase\M071.db;BinaryGUID=False" providerName="System.Data.SQLite" />
  </connectionStrings>
  <system.data>
    <DbProviderFactories>
      <remove invariant="System.Data.SQLite.EF6" />
      <add name="SQLite Data Provider (Entity Framework 6)" invariant="System.Data.SQLite.EF6" description=".NET Framework Data Provider for SQLite (Entity Framework 6)" type="System.Data.SQLite.EF6.SQLiteProviderFactory, System.Data.SQLite.EF6" />
      <remove invariant="System.Data.SQLite" />
      <add name="SQLite Data Provider" invariant="System.Data.SQLite" description=".NET Framework Data Provider for SQLite" type="System.Data.SQLite.SQLiteFactory, System.Data.SQLite" />
    </DbProviderFactories>
  </system.data>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="System.Data.SQLite" publicKeyToken="db937bc2d44ff139" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-1.0.112.0" newVersion="1.0.112.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="System.Data.SQLite.EF6" publicKeyToken="db937bc2d44ff139" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-1.0.112.0" newVersion="1.0.112.0" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" />
  </startup>
src/Bro.UI.Device.Winform/MotionCard/CtrlMotionCardAxisOperation.Designer.cs
@@ -28,46 +28,46 @@
        /// </summary>
        private void InitializeComponent()
        {
            this.groupBoxAxisStatus = new System.Windows.Forms.GroupBox();
            this.groupBoxAxisOperration = new System.Windows.Forms.GroupBox();
            this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel();
            this.panel1 = new System.Windows.Forms.Panel();
            this.label2 = new System.Windows.Forms.Label();
            this.panel2 = new System.Windows.Forms.Panel();
            this.buttonStop = new System.Windows.Forms.Button();
            this.buttonStart = new System.Windows.Forms.Button();
            this.label1 = new System.Windows.Forms.Label();
            this.textBox1 = new System.Windows.Forms.TextBox();
            this.label3 = new System.Windows.Forms.Label();
            this.label4 = new System.Windows.Forms.Label();
            this.textBox2 = new System.Windows.Forms.TextBox();
            this.buttonClearStatus = new System.Windows.Forms.Button();
            this.button1 = new System.Windows.Forms.Button();
            this.label5 = new System.Windows.Forms.Label();
            this.textBox3 = new System.Windows.Forms.TextBox();
            this.label6 = new System.Windows.Forms.Label();
            this.textBox4 = new System.Windows.Forms.TextBox();
            this.textBoxP2PVel = new System.Windows.Forms.TextBox();
            this.textBoxP2PPrfPosition = new System.Windows.Forms.TextBox();
            this.textBoxP2PDec = new System.Windows.Forms.TextBox();
            this.textBoxP2PAcc = new System.Windows.Forms.TextBox();
            this.label7 = new System.Windows.Forms.Label();
            this.textBox5 = new System.Windows.Forms.TextBox();
            this.label8 = new System.Windows.Forms.Label();
            this.textBox6 = new System.Windows.Forms.TextBox();
            this.label6 = new System.Windows.Forms.Label();
            this.label9 = new System.Windows.Forms.Label();
            this.textBox7 = new System.Windows.Forms.TextBox();
            this.button2 = new System.Windows.Forms.Button();
            this.button3 = new System.Windows.Forms.Button();
            this.groupBoxAxisStatus.SuspendLayout();
            this.label8 = new System.Windows.Forms.Label();
            this.panel1 = new System.Windows.Forms.Panel();
            this.buttonNegative = new System.Windows.Forms.Button();
            this.textBoxJogDec = new System.Windows.Forms.TextBox();
            this.buttonPositive = new System.Windows.Forms.Button();
            this.textBoxJogAcc = new System.Windows.Forms.TextBox();
            this.label5 = new System.Windows.Forms.Label();
            this.textBoxJogVel = new System.Windows.Forms.TextBox();
            this.label4 = new System.Windows.Forms.Label();
            this.label3 = new System.Windows.Forms.Label();
            this.label2 = new System.Windows.Forms.Label();
            this.groupBoxAxisOperration.SuspendLayout();
            this.tableLayoutPanel1.SuspendLayout();
            this.panel1.SuspendLayout();
            this.panel2.SuspendLayout();
            this.panel1.SuspendLayout();
            this.SuspendLayout();
            // 
            // groupBoxAxisStatus
            // groupBoxAxisOperration
            // 
            this.groupBoxAxisStatus.Controls.Add(this.tableLayoutPanel1);
            this.groupBoxAxisStatus.Dock = System.Windows.Forms.DockStyle.Fill;
            this.groupBoxAxisStatus.Location = new System.Drawing.Point(0, 0);
            this.groupBoxAxisStatus.Name = "groupBoxAxisStatus";
            this.groupBoxAxisStatus.Size = new System.Drawing.Size(547, 148);
            this.groupBoxAxisStatus.TabIndex = 5;
            this.groupBoxAxisStatus.TabStop = false;
            this.groupBoxAxisStatus.Text = "轴操作";
            this.groupBoxAxisOperration.Controls.Add(this.tableLayoutPanel1);
            this.groupBoxAxisOperration.Dock = System.Windows.Forms.DockStyle.Fill;
            this.groupBoxAxisOperration.Location = new System.Drawing.Point(0, 0);
            this.groupBoxAxisOperration.Name = "groupBoxAxisOperration";
            this.groupBoxAxisOperration.Size = new System.Drawing.Size(547, 148);
            this.groupBoxAxisOperration.TabIndex = 5;
            this.groupBoxAxisOperration.TabStop = false;
            this.groupBoxAxisOperration.Text = "轴操作";
            // 
            // tableLayoutPanel1
            // 
@@ -86,45 +86,15 @@
            this.tableLayoutPanel1.Size = new System.Drawing.Size(541, 128);
            this.tableLayoutPanel1.TabIndex = 0;
            // 
            // panel1
            //
            this.panel1.Controls.Add(this.button1);
            this.panel1.Controls.Add(this.textBox3);
            this.panel1.Controls.Add(this.buttonClearStatus);
            this.panel1.Controls.Add(this.textBox2);
            this.panel1.Controls.Add(this.label5);
            this.panel1.Controls.Add(this.textBox1);
            this.panel1.Controls.Add(this.label4);
            this.panel1.Controls.Add(this.label3);
            this.panel1.Controls.Add(this.label2);
            this.panel1.Dock = System.Windows.Forms.DockStyle.Fill;
            this.panel1.Location = new System.Drawing.Point(3, 3);
            this.panel1.Name = "panel1";
            this.panel1.Size = new System.Drawing.Size(535, 58);
            this.panel1.TabIndex = 2;
            //
            // label2
            //
            this.label2.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
            | System.Windows.Forms.AnchorStyles.Left)));
            this.label2.AutoSize = true;
            this.label2.Font = new System.Drawing.Font("宋体", 14F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
            this.label2.Location = new System.Drawing.Point(0, 21);
            this.label2.Name = "label2";
            this.label2.Size = new System.Drawing.Size(77, 19);
            this.label2.TabIndex = 2;
            this.label2.Text = "Jog模式";
            this.label2.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
            //
            // panel2
            // 
            this.panel2.Controls.Add(this.button3);
            this.panel2.Controls.Add(this.button2);
            this.panel2.Controls.Add(this.buttonStop);
            this.panel2.Controls.Add(this.buttonStart);
            this.panel2.Controls.Add(this.label1);
            this.panel2.Controls.Add(this.textBox5);
            this.panel2.Controls.Add(this.textBox4);
            this.panel2.Controls.Add(this.textBox7);
            this.panel2.Controls.Add(this.textBox6);
            this.panel2.Controls.Add(this.textBoxP2PVel);
            this.panel2.Controls.Add(this.textBoxP2PPrfPosition);
            this.panel2.Controls.Add(this.textBoxP2PDec);
            this.panel2.Controls.Add(this.textBoxP2PAcc);
            this.panel2.Controls.Add(this.label7);
            this.panel2.Controls.Add(this.label6);
            this.panel2.Controls.Add(this.label9);
@@ -134,6 +104,26 @@
            this.panel2.Name = "panel2";
            this.panel2.Size = new System.Drawing.Size(535, 58);
            this.panel2.TabIndex = 3;
            //
            // buttonStop
            //
            this.buttonStop.Location = new System.Drawing.Point(462, 31);
            this.buttonStop.Name = "buttonStop";
            this.buttonStop.Size = new System.Drawing.Size(70, 25);
            this.buttonStop.TabIndex = 6;
            this.buttonStop.Text = "停止";
            this.buttonStop.UseVisualStyleBackColor = true;
            this.buttonStop.Click += new System.EventHandler(this.buttonStop_Click);
            //
            // buttonStart
            //
            this.buttonStart.Location = new System.Drawing.Point(462, 3);
            this.buttonStart.Name = "buttonStart";
            this.buttonStart.Size = new System.Drawing.Size(70, 25);
            this.buttonStart.TabIndex = 6;
            this.buttonStart.Text = "开始";
            this.buttonStart.UseVisualStyleBackColor = true;
            this.buttonStart.Click += new System.EventHandler(this.buttonStart_Click);
            // 
            // label1
            // 
@@ -148,87 +138,33 @@
            this.label1.Text = "P2P模式";
            this.label1.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
            // 
            // textBox1
            // textBoxP2PVel
            // 
            this.textBox1.Location = new System.Drawing.Point(154, 4);
            this.textBox1.Name = "textBox1";
            this.textBox1.Size = new System.Drawing.Size(116, 21);
            this.textBox1.TabIndex = 5;
            this.textBoxP2PVel.Location = new System.Drawing.Point(154, 34);
            this.textBoxP2PVel.Name = "textBoxP2PVel";
            this.textBoxP2PVel.Size = new System.Drawing.Size(116, 21);
            this.textBoxP2PVel.TabIndex = 5;
            // 
            // label3
            // textBoxP2PPrfPosition
            // 
            this.label3.AutoSize = true;
            this.label3.Location = new System.Drawing.Point(92, 7);
            this.label3.Name = "label3";
            this.label3.Size = new System.Drawing.Size(41, 12);
            this.label3.TabIndex = 4;
            this.label3.Text = "速度:";
            this.textBoxP2PPrfPosition.Location = new System.Drawing.Point(154, 4);
            this.textBoxP2PPrfPosition.Name = "textBoxP2PPrfPosition";
            this.textBoxP2PPrfPosition.Size = new System.Drawing.Size(116, 21);
            this.textBoxP2PPrfPosition.TabIndex = 5;
            // 
            // label4
            // textBoxP2PDec
            // 
            this.label4.AutoSize = true;
            this.label4.Location = new System.Drawing.Point(92, 38);
            this.label4.Name = "label4";
            this.label4.Size = new System.Drawing.Size(53, 12);
            this.label4.TabIndex = 4;
            this.label4.Text = "加速度:";
            this.textBoxP2PDec.Location = new System.Drawing.Point(340, 34);
            this.textBoxP2PDec.Name = "textBoxP2PDec";
            this.textBoxP2PDec.Size = new System.Drawing.Size(116, 21);
            this.textBoxP2PDec.TabIndex = 5;
            // 
            // textBox2
            // textBoxP2PAcc
            // 
            this.textBox2.Location = new System.Drawing.Point(154, 35);
            this.textBox2.Name = "textBox2";
            this.textBox2.Size = new System.Drawing.Size(116, 21);
            this.textBox2.TabIndex = 5;
            //
            // buttonClearStatus
            //
            this.buttonClearStatus.Location = new System.Drawing.Point(462, 3);
            this.buttonClearStatus.Name = "buttonClearStatus";
            this.buttonClearStatus.Size = new System.Drawing.Size(70, 25);
            this.buttonClearStatus.TabIndex = 6;
            this.buttonClearStatus.Text = "正向";
            this.buttonClearStatus.UseVisualStyleBackColor = true;
            //
            // button1
            //
            this.button1.Location = new System.Drawing.Point(462, 33);
            this.button1.Name = "button1";
            this.button1.Size = new System.Drawing.Size(70, 25);
            this.button1.TabIndex = 6;
            this.button1.Text = "负向";
            this.button1.UseVisualStyleBackColor = true;
            //
            // label5
            //
            this.label5.AutoSize = true;
            this.label5.Location = new System.Drawing.Point(278, 7);
            this.label5.Name = "label5";
            this.label5.Size = new System.Drawing.Size(53, 12);
            this.label5.TabIndex = 4;
            this.label5.Text = "减速度:";
            //
            // textBox3
            //
            this.textBox3.Location = new System.Drawing.Point(340, 4);
            this.textBox3.Name = "textBox3";
            this.textBox3.Size = new System.Drawing.Size(116, 21);
            this.textBox3.TabIndex = 5;
            //
            // label6
            //
            this.label6.AutoSize = true;
            this.label6.Location = new System.Drawing.Point(92, 7);
            this.label6.Name = "label6";
            this.label6.Size = new System.Drawing.Size(65, 12);
            this.label6.TabIndex = 4;
            this.label6.Text = "规划位置:";
            //
            // textBox4
            //
            this.textBox4.Location = new System.Drawing.Point(154, 4);
            this.textBox4.Name = "textBox4";
            this.textBox4.Size = new System.Drawing.Size(116, 21);
            this.textBox4.TabIndex = 5;
            this.textBoxP2PAcc.Location = new System.Drawing.Point(340, 4);
            this.textBoxP2PAcc.Name = "textBoxP2PAcc";
            this.textBoxP2PAcc.Size = new System.Drawing.Size(116, 21);
            this.textBoxP2PAcc.TabIndex = 5;
            // 
            // label7
            // 
@@ -239,28 +175,14 @@
            this.label7.TabIndex = 4;
            this.label7.Text = "速度:";
            // 
            // textBox5
            // label6
            // 
            this.textBox5.Location = new System.Drawing.Point(154, 34);
            this.textBox5.Name = "textBox5";
            this.textBox5.Size = new System.Drawing.Size(116, 21);
            this.textBox5.TabIndex = 5;
            //
            // label8
            //
            this.label8.AutoSize = true;
            this.label8.Location = new System.Drawing.Point(278, 7);
            this.label8.Name = "label8";
            this.label8.Size = new System.Drawing.Size(53, 12);
            this.label8.TabIndex = 4;
            this.label8.Text = "加速度:";
            //
            // textBox6
            //
            this.textBox6.Location = new System.Drawing.Point(340, 4);
            this.textBox6.Name = "textBox6";
            this.textBox6.Size = new System.Drawing.Size(116, 21);
            this.textBox6.TabIndex = 5;
            this.label6.AutoSize = true;
            this.label6.Location = new System.Drawing.Point(92, 7);
            this.label6.Name = "label6";
            this.label6.Size = new System.Drawing.Size(65, 12);
            this.label6.TabIndex = 4;
            this.label6.Text = "规划位置:";
            // 
            // label9
            // 
@@ -271,70 +193,152 @@
            this.label9.TabIndex = 4;
            this.label9.Text = "减速度:";
            // 
            // textBox7
            // label8
            // 
            this.textBox7.Location = new System.Drawing.Point(340, 34);
            this.textBox7.Name = "textBox7";
            this.textBox7.Size = new System.Drawing.Size(116, 21);
            this.textBox7.TabIndex = 5;
            this.label8.AutoSize = true;
            this.label8.Location = new System.Drawing.Point(278, 7);
            this.label8.Name = "label8";
            this.label8.Size = new System.Drawing.Size(53, 12);
            this.label8.TabIndex = 4;
            this.label8.Text = "加速度:";
            // 
            // button2
            // panel1
            // 
            this.button2.Location = new System.Drawing.Point(462, 3);
            this.button2.Name = "button2";
            this.button2.Size = new System.Drawing.Size(70, 25);
            this.button2.TabIndex = 6;
            this.button2.Text = "开始";
            this.button2.UseVisualStyleBackColor = true;
            this.panel1.Controls.Add(this.buttonNegative);
            this.panel1.Controls.Add(this.textBoxJogDec);
            this.panel1.Controls.Add(this.buttonPositive);
            this.panel1.Controls.Add(this.textBoxJogAcc);
            this.panel1.Controls.Add(this.label5);
            this.panel1.Controls.Add(this.textBoxJogVel);
            this.panel1.Controls.Add(this.label4);
            this.panel1.Controls.Add(this.label3);
            this.panel1.Controls.Add(this.label2);
            this.panel1.Dock = System.Windows.Forms.DockStyle.Fill;
            this.panel1.Location = new System.Drawing.Point(3, 3);
            this.panel1.Name = "panel1";
            this.panel1.Size = new System.Drawing.Size(535, 58);
            this.panel1.TabIndex = 2;
            // 
            // button3
            // buttonNegative
            // 
            this.button3.Location = new System.Drawing.Point(462, 31);
            this.button3.Name = "button3";
            this.button3.Size = new System.Drawing.Size(70, 25);
            this.button3.TabIndex = 6;
            this.button3.Text = "停止";
            this.button3.UseVisualStyleBackColor = true;
            this.buttonNegative.Location = new System.Drawing.Point(462, 33);
            this.buttonNegative.Name = "buttonNegative";
            this.buttonNegative.Size = new System.Drawing.Size(70, 25);
            this.buttonNegative.TabIndex = 6;
            this.buttonNegative.Text = "负向";
            this.buttonNegative.UseVisualStyleBackColor = true;
            this.buttonNegative.Click += new System.EventHandler(this.buttonNegative_Click);
            //
            // textBoxJogDec
            //
            this.textBoxJogDec.Location = new System.Drawing.Point(340, 4);
            this.textBoxJogDec.Name = "textBoxJogDec";
            this.textBoxJogDec.Size = new System.Drawing.Size(116, 21);
            this.textBoxJogDec.TabIndex = 5;
            //
            // buttonPositive
            //
            this.buttonPositive.Location = new System.Drawing.Point(462, 3);
            this.buttonPositive.Name = "buttonPositive";
            this.buttonPositive.Size = new System.Drawing.Size(70, 25);
            this.buttonPositive.TabIndex = 6;
            this.buttonPositive.Text = "正向";
            this.buttonPositive.UseVisualStyleBackColor = true;
            this.buttonPositive.Click += new System.EventHandler(this.buttonPositive_Click);
            //
            // textBoxJogAcc
            //
            this.textBoxJogAcc.Location = new System.Drawing.Point(154, 35);
            this.textBoxJogAcc.Name = "textBoxJogAcc";
            this.textBoxJogAcc.Size = new System.Drawing.Size(116, 21);
            this.textBoxJogAcc.TabIndex = 5;
            //
            // label5
            //
            this.label5.AutoSize = true;
            this.label5.Location = new System.Drawing.Point(278, 7);
            this.label5.Name = "label5";
            this.label5.Size = new System.Drawing.Size(53, 12);
            this.label5.TabIndex = 4;
            this.label5.Text = "减速度:";
            //
            // textBoxJogVel
            //
            this.textBoxJogVel.Location = new System.Drawing.Point(154, 4);
            this.textBoxJogVel.Name = "textBoxJogVel";
            this.textBoxJogVel.Size = new System.Drawing.Size(116, 21);
            this.textBoxJogVel.TabIndex = 5;
            //
            // label4
            //
            this.label4.AutoSize = true;
            this.label4.Location = new System.Drawing.Point(92, 38);
            this.label4.Name = "label4";
            this.label4.Size = new System.Drawing.Size(53, 12);
            this.label4.TabIndex = 4;
            this.label4.Text = "加速度:";
            //
            // label3
            //
            this.label3.AutoSize = true;
            this.label3.Location = new System.Drawing.Point(92, 7);
            this.label3.Name = "label3";
            this.label3.Size = new System.Drawing.Size(41, 12);
            this.label3.TabIndex = 4;
            this.label3.Text = "速度:";
            //
            // label2
            //
            this.label2.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
            | System.Windows.Forms.AnchorStyles.Left)));
            this.label2.AutoSize = true;
            this.label2.Font = new System.Drawing.Font("宋体", 14F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
            this.label2.Location = new System.Drawing.Point(0, 21);
            this.label2.Name = "label2";
            this.label2.Size = new System.Drawing.Size(77, 19);
            this.label2.TabIndex = 2;
            this.label2.Text = "Jog模式";
            this.label2.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
            // 
            // CtrlMotionCardAxisOperation
            // 
            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);
            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
            this.Controls.Add(this.groupBoxAxisStatus);
            this.Controls.Add(this.groupBoxAxisOperration);
            this.Name = "CtrlMotionCardAxisOperation";
            this.Size = new System.Drawing.Size(547, 148);
            this.groupBoxAxisStatus.ResumeLayout(false);
            this.groupBoxAxisOperration.ResumeLayout(false);
            this.tableLayoutPanel1.ResumeLayout(false);
            this.panel1.ResumeLayout(false);
            this.panel1.PerformLayout();
            this.panel2.ResumeLayout(false);
            this.panel2.PerformLayout();
            this.panel1.ResumeLayout(false);
            this.panel1.PerformLayout();
            this.ResumeLayout(false);
        }
        #endregion
        private System.Windows.Forms.GroupBox groupBoxAxisStatus;
        private System.Windows.Forms.GroupBox groupBoxAxisOperration;
        private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1;
        private System.Windows.Forms.Panel panel2;
        private System.Windows.Forms.Label label1;
        private System.Windows.Forms.Panel panel1;
        private System.Windows.Forms.Label label2;
        private System.Windows.Forms.TextBox textBox2;
        private System.Windows.Forms.TextBox textBox1;
        private System.Windows.Forms.TextBox textBoxJogAcc;
        private System.Windows.Forms.TextBox textBoxJogVel;
        private System.Windows.Forms.Label label4;
        private System.Windows.Forms.Label label3;
        private System.Windows.Forms.Button button1;
        private System.Windows.Forms.Button buttonClearStatus;
        private System.Windows.Forms.TextBox textBox3;
        private System.Windows.Forms.Button buttonNegative;
        private System.Windows.Forms.Button buttonPositive;
        private System.Windows.Forms.TextBox textBoxJogDec;
        private System.Windows.Forms.Label label5;
        private System.Windows.Forms.Button button3;
        private System.Windows.Forms.Button button2;
        private System.Windows.Forms.TextBox textBox5;
        private System.Windows.Forms.TextBox textBox4;
        private System.Windows.Forms.TextBox textBox7;
        private System.Windows.Forms.TextBox textBox6;
        private System.Windows.Forms.Button buttonStop;
        private System.Windows.Forms.Button buttonStart;
        private System.Windows.Forms.TextBox textBoxP2PVel;
        private System.Windows.Forms.TextBox textBoxP2PPrfPosition;
        private System.Windows.Forms.TextBox textBoxP2PDec;
        private System.Windows.Forms.TextBox textBoxP2PAcc;
        private System.Windows.Forms.Label label7;
        private System.Windows.Forms.Label label6;
        private System.Windows.Forms.Label label9;
src/Bro.UI.Device.Winform/MotionCard/CtrlMotionCardAxisOperation.cs
@@ -7,6 +7,10 @@
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Bro.Common.Interface;
using Bro.Common.Base;
using Bro.Common.Model;
using static Bro.Common.Helper.EnumHelper;
namespace Bro.UI.Device.Winform
{
@@ -17,5 +21,68 @@
            InitializeComponent();
        }
        private IDevice Device { get; set; }
        private int _axisIndex { get; set; }
        protected MotionCardBase MotionCard
        {
            get => Device as MotionCardBase;
        }
        public CtrlMotionCardAxisOperation(IDevice device, int axisIndex, string axisName)
        {
            InitializeComponent();
            Device = device;
            _axisIndex = axisIndex;
            groupBoxAxisOperration.Text = $"运动轴:{axisIndex}-{axisName}";
        }
        private void buttonPositive_Click(object sender, EventArgs e)
        {
            var opConfig = new MotionOperationCollection();
            MovingOption movingOption = new MovingOption();
            movingOption.AxisIndex = _axisIndex;
            movingOption.MoveMode = MotionMode.Jog;
            movingOption.VelocityPara.Acc = Convert.ToDouble(textBoxJogAcc.Text);
            movingOption.VelocityPara.Dec = Convert.ToDouble(textBoxJogDec.Text);
            movingOption.VelocityPara.Velocity= Convert.ToDouble(textBoxJogVel.Text);
            opConfig.MovingOps.Add(movingOption);
            MotionCard.MoveToPoint(opConfig);
        }
        private void buttonNegative_Click(object sender, EventArgs e)
        {
            var opConfig = new MotionOperationCollection();
            MovingOption movingOption = new MovingOption();
            movingOption.AxisIndex = _axisIndex;
            movingOption.MoveMode = MotionMode.Jog;
            movingOption.VelocityPara.Acc = Convert.ToDouble(textBoxJogAcc.Text);
            movingOption.VelocityPara.Dec = Convert.ToDouble(textBoxJogDec.Text);
            movingOption.VelocityPara.Velocity = Convert.ToDouble(textBoxJogVel.Text);
            opConfig.MovingOps.Add(movingOption);
            MotionCard.MoveToPoint(opConfig);
        }
        private void buttonStart_Click(object sender, EventArgs e)
        {
            var opConfig = new MotionOperationCollection();
            MovingOption movingOption = new MovingOption();
            movingOption.AxisIndex = _axisIndex;
            movingOption.Destination = Convert.ToInt32(textBoxP2PPrfPosition.Text);
            movingOption.MoveMode = MotionMode.Normal;
            movingOption.VelocityPara.Acc = Convert.ToDouble(textBoxP2PAcc.Text);
            movingOption.VelocityPara.Dec = Convert.ToDouble(textBoxP2PDec.Text);
            movingOption.VelocityPara.Velocity = Convert.ToDouble(textBoxP2PVel.Text);
            opConfig.MovingOps.Add(movingOption);
            MotionCard.MoveToPoint(opConfig);
        }
        private void buttonStop_Click(object sender, EventArgs e)
        {
            MotionCard.StateChange(DeviceState.DSPause);
        }
    }
}
src/Bro.UI.Device.Winform/MotionCard/CtrlMotionCardAxisStatus.Designer.cs
@@ -28,6 +28,7 @@
        /// </summary>
        private void InitializeComponent()
        {
            this.components = new System.ComponentModel.Container();
            this.groupBoxAxisStatus = new System.Windows.Forms.GroupBox();
            this.ioIndicatorCtrl2 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
            this.ioIndicatorCtrl10 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
@@ -35,14 +36,15 @@
            this.ioIndicatorCtrl8 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
            this.ioIndicatorCtrl6 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
            this.ioIndicatorCtrl1 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
            this.textBox4 = new System.Windows.Forms.TextBox();
            this.textBox3 = new System.Windows.Forms.TextBox();
            this.textBox2 = new System.Windows.Forms.TextBox();
            this.textBox1 = new System.Windows.Forms.TextBox();
            this.textBoxCurVel = new System.Windows.Forms.TextBox();
            this.textBoxPrfVel = new System.Windows.Forms.TextBox();
            this.textBoxCurPosition = new System.Windows.Forms.TextBox();
            this.textBoxPrfPositon = new System.Windows.Forms.TextBox();
            this.label5 = new System.Windows.Forms.Label();
            this.label4 = new System.Windows.Forms.Label();
            this.label3 = new System.Windows.Forms.Label();
            this.label2 = new System.Windows.Forms.Label();
            this.timer1 = new System.Windows.Forms.Timer(this.components);
            this.groupBoxAxisStatus.SuspendLayout();
            this.SuspendLayout();
            // 
@@ -54,10 +56,10 @@
            this.groupBoxAxisStatus.Controls.Add(this.ioIndicatorCtrl8);
            this.groupBoxAxisStatus.Controls.Add(this.ioIndicatorCtrl6);
            this.groupBoxAxisStatus.Controls.Add(this.ioIndicatorCtrl1);
            this.groupBoxAxisStatus.Controls.Add(this.textBox4);
            this.groupBoxAxisStatus.Controls.Add(this.textBox3);
            this.groupBoxAxisStatus.Controls.Add(this.textBox2);
            this.groupBoxAxisStatus.Controls.Add(this.textBox1);
            this.groupBoxAxisStatus.Controls.Add(this.textBoxCurVel);
            this.groupBoxAxisStatus.Controls.Add(this.textBoxPrfVel);
            this.groupBoxAxisStatus.Controls.Add(this.textBoxCurPosition);
            this.groupBoxAxisStatus.Controls.Add(this.textBoxPrfPositon);
            this.groupBoxAxisStatus.Controls.Add(this.label5);
            this.groupBoxAxisStatus.Controls.Add(this.label4);
            this.groupBoxAxisStatus.Controls.Add(this.label3);
@@ -81,7 +83,7 @@
            // 
            // ioIndicatorCtrl10
            // 
            this.ioIndicatorCtrl10.Desc = "回零状态";
            this.ioIndicatorCtrl10.Desc = "运动出错";
            this.ioIndicatorCtrl10.IsOn = null;
            this.ioIndicatorCtrl10.Location = new System.Drawing.Point(328, 77);
            this.ioIndicatorCtrl10.Name = "ioIndicatorCtrl10";
@@ -124,42 +126,42 @@
            this.ioIndicatorCtrl1.Size = new System.Drawing.Size(90, 24);
            this.ioIndicatorCtrl1.TabIndex = 4;
            // 
            // textBox4
            // textBoxCurVel
            // 
            this.textBox4.Location = new System.Drawing.Point(85, 114);
            this.textBox4.Name = "textBox4";
            this.textBox4.ReadOnly = true;
            this.textBox4.Size = new System.Drawing.Size(116, 21);
            this.textBox4.TabIndex = 3;
            this.textBoxCurVel.Location = new System.Drawing.Point(85, 113);
            this.textBoxCurVel.Name = "textBoxCurVel";
            this.textBoxCurVel.ReadOnly = true;
            this.textBoxCurVel.Size = new System.Drawing.Size(116, 21);
            this.textBoxCurVel.TabIndex = 3;
            // 
            // textBox3
            // textBoxPrfVel
            // 
            this.textBox3.Location = new System.Drawing.Point(85, 53);
            this.textBox3.Name = "textBox3";
            this.textBox3.ReadOnly = true;
            this.textBox3.Size = new System.Drawing.Size(116, 21);
            this.textBox3.TabIndex = 3;
            this.textBoxPrfVel.Location = new System.Drawing.Point(85, 84);
            this.textBoxPrfVel.Name = "textBoxPrfVel";
            this.textBoxPrfVel.ReadOnly = true;
            this.textBoxPrfVel.Size = new System.Drawing.Size(116, 21);
            this.textBoxPrfVel.TabIndex = 3;
            // 
            // textBox2
            // textBoxCurPosition
            // 
            this.textBox2.Location = new System.Drawing.Point(85, 83);
            this.textBox2.Name = "textBox2";
            this.textBox2.ReadOnly = true;
            this.textBox2.Size = new System.Drawing.Size(116, 21);
            this.textBox2.TabIndex = 3;
            this.textBoxCurPosition.Location = new System.Drawing.Point(85, 55);
            this.textBoxCurPosition.Name = "textBoxCurPosition";
            this.textBoxCurPosition.ReadOnly = true;
            this.textBoxCurPosition.Size = new System.Drawing.Size(116, 21);
            this.textBoxCurPosition.TabIndex = 3;
            // 
            // textBox1
            // textBoxPrfPositon
            // 
            this.textBox1.Location = new System.Drawing.Point(85, 22);
            this.textBox1.Name = "textBox1";
            this.textBox1.ReadOnly = true;
            this.textBox1.Size = new System.Drawing.Size(116, 21);
            this.textBox1.TabIndex = 3;
            this.textBoxPrfPositon.Location = new System.Drawing.Point(85, 23);
            this.textBoxPrfPositon.Name = "textBoxPrfPositon";
            this.textBoxPrfPositon.ReadOnly = true;
            this.textBoxPrfPositon.Size = new System.Drawing.Size(116, 21);
            this.textBoxPrfPositon.TabIndex = 3;
            // 
            // label5
            // 
            this.label5.AutoSize = true;
            this.label5.Location = new System.Drawing.Point(23, 117);
            this.label5.Location = new System.Drawing.Point(23, 116);
            this.label5.Name = "label5";
            this.label5.Size = new System.Drawing.Size(65, 12);
            this.label5.TabIndex = 2;
@@ -168,7 +170,7 @@
            // label4
            // 
            this.label4.AutoSize = true;
            this.label4.Location = new System.Drawing.Point(23, 56);
            this.label4.Location = new System.Drawing.Point(23, 87);
            this.label4.Name = "label4";
            this.label4.Size = new System.Drawing.Size(65, 12);
            this.label4.TabIndex = 2;
@@ -177,7 +179,7 @@
            // label3
            // 
            this.label3.AutoSize = true;
            this.label3.Location = new System.Drawing.Point(23, 86);
            this.label3.Location = new System.Drawing.Point(23, 58);
            this.label3.Name = "label3";
            this.label3.Size = new System.Drawing.Size(65, 12);
            this.label3.TabIndex = 2;
@@ -186,11 +188,15 @@
            // label2
            // 
            this.label2.AutoSize = true;
            this.label2.Location = new System.Drawing.Point(23, 25);
            this.label2.Location = new System.Drawing.Point(23, 26);
            this.label2.Name = "label2";
            this.label2.Size = new System.Drawing.Size(65, 12);
            this.label2.TabIndex = 2;
            this.label2.Text = "规划位置:";
            //
            // timer1
            //
            this.timer1.Tick += new System.EventHandler(this.RefreshStatus);
            // 
            // CtrlMotionCardAxisStatus
            // 
@@ -214,13 +220,14 @@
        private Model.Winform.IOIndicatorCtrl ioIndicatorCtrl8;
        private Model.Winform.IOIndicatorCtrl ioIndicatorCtrl6;
        private Model.Winform.IOIndicatorCtrl ioIndicatorCtrl1;
        private System.Windows.Forms.TextBox textBox4;
        private System.Windows.Forms.TextBox textBox3;
        private System.Windows.Forms.TextBox textBox2;
        private System.Windows.Forms.TextBox textBox1;
        private System.Windows.Forms.TextBox textBoxCurVel;
        private System.Windows.Forms.TextBox textBoxPrfVel;
        private System.Windows.Forms.TextBox textBoxCurPosition;
        private System.Windows.Forms.TextBox textBoxPrfPositon;
        private System.Windows.Forms.Label label5;
        private System.Windows.Forms.Label label4;
        private System.Windows.Forms.Label label3;
        private System.Windows.Forms.Label label2;
        private System.Windows.Forms.Timer timer1;
    }
}
src/Bro.UI.Device.Winform/MotionCard/CtrlMotionCardAxisStatus.cs
@@ -1,11 +1,5 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Bro.Common.Model;
using System;
using System.Windows.Forms;
namespace Bro.UI.Device.Winform
@@ -16,5 +10,30 @@
        {
            InitializeComponent();
        }
        public AxisMovingStatus _axisMovingStatus = new AxisMovingStatus();
        public CtrlMotionCardAxisStatus(AxisMovingStatus axisMovingStatus)
        {
            InitializeComponent();
            _axisMovingStatus = axisMovingStatus;
            groupBoxAxisStatus.Text = $"运动轴:{_axisMovingStatus.AxisIndex}-{_axisMovingStatus.AxisName}";
        }
        private void RefreshStatus(object sender, EventArgs e)
        {
            textBoxPrfPositon.Text = _axisMovingStatus.Destination.ToString();
            textBoxCurPosition.Text = _axisMovingStatus.CurPosition.ToString();
            textBoxPrfVel.Text = _axisMovingStatus.PrfVelocity.ToString();
            textBoxCurVel.Text = _axisMovingStatus.CurVelocity.ToString();
            int axis_sts = _axisMovingStatus.AxisStatus;
            ioIndicatorCtrl1.IsOn = (axis_sts & 0x2) == 0;//驱动报警
            ioIndicatorCtrl2.IsOn = (axis_sts & 0x200) == 0;//伺服使能
            ioIndicatorCtrl6.IsOn = (axis_sts & 0x20) == 0;//正限位
            ioIndicatorCtrl8.IsOn = (axis_sts & 0x40) == 0;//负限位
            ioIndicatorCtrl9.IsOn =(axis_sts & 0x400) == 0;//运动状态
            ioIndicatorCtrl10.IsOn = (axis_sts & 0x10) == 0;//运动出错
        }
    }
}
src/Bro.UI.Device.Winform/MotionCard/CtrlMotionCardAxisStatus.resx
@@ -117,4 +117,7 @@
  <resheader name="writer">
    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
  </resheader>
  <metadata name="timer1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
    <value>17, 17</value>
  </metadata>
</root>
src/Bro.UI.Device.Winform/MotionCard/CtrlMotionCardIOStatus.Designer.cs
@@ -28,52 +28,54 @@
        /// </summary>
        private void InitializeComponent()
        {
            this.components = new System.ComponentModel.Container();
            this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel();
            this.groupBox5 = new System.Windows.Forms.GroupBox();
            this.ioIndicatorCtrl14 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
            this.ioIndicatorCtrl13 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
            this.ioIndicatorCtrl12 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
            this.ioIndicatorCtrl26 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
            this.ioIndicatorCtrl25 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
            this.ioIndicatorCtrl24 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
            this.ioIndicatorCtrl17 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
            this.ioIndicatorCtrl16 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
            this.ioIndicatorCtrl20 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
            this.ioIndicatorCtrl19 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
            this.ioIndicatorCtrl23 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
            this.ioIndicatorCtrl22 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
            this.ioIndicatorCtrl21 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
            this.ioIndicatorCtrl18 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
            this.ioIndicatorCtrl15 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
            this.ioIndicatorCtrl11 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
            this.groupBox6 = new System.Windows.Forms.GroupBox();
            this.ioIndicatorCtrl27 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
            this.ioIndicatorCtrl28 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
            this.ioIndicatorCtrl29 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
            this.ioIndicatorCtrl30 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
            this.ioIndicatorCtrl31 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
            this.ioIndicatorCtrl32 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
            this.ioIndicatorCtrl33 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
            this.ioIndicatorCtrl34 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
            this.ioIndicatorCtrl35 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
            this.ioIndicatorCtrl36 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
            this.ioIndicatorCtrl37 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
            this.ioIndicatorCtrl38 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
            this.ioIndicatorCtrl39 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
            this.ioIndicatorCtrl40 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
            this.ioIndicatorCtrl41 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
            this.ioIndicatorCtrl42 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
            this.groupBoxIOOut = new System.Windows.Forms.GroupBox();
            this.ioOut4 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
            this.ioOut3 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
            this.ioOut2 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
            this.ioOut16 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
            this.ioOut15 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
            this.ioOut14 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
            this.ioOut13 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
            this.ioOut9 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
            this.ioOut8 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
            this.ioOut7 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
            this.ioOut12 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
            this.ioOut11 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
            this.ioOut10 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
            this.ioOut6 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
            this.ioOut5 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
            this.ioOut1 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
            this.groupBoxIOIn = new System.Windows.Forms.GroupBox();
            this.ioIn4 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
            this.ioIn3 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
            this.ioIn2 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
            this.ioIn16 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
            this.ioIn15 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
            this.ioIn14 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
            this.ioIn13 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
            this.ioIn9 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
            this.ioIn8 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
            this.ioIn7 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
            this.ioIn12 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
            this.ioIn11 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
            this.ioIn10 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
            this.ioIn6 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
            this.ioIn5 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
            this.ioIn1 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
            this.timer1 = new System.Windows.Forms.Timer(this.components);
            this.tableLayoutPanel1.SuspendLayout();
            this.groupBox5.SuspendLayout();
            this.groupBox6.SuspendLayout();
            this.groupBoxIOOut.SuspendLayout();
            this.groupBoxIOIn.SuspendLayout();
            this.SuspendLayout();
            // 
            // tableLayoutPanel1
            // 
            this.tableLayoutPanel1.ColumnCount = 1;
            this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F));
            this.tableLayoutPanel1.Controls.Add(this.groupBox6, 0, 1);
            this.tableLayoutPanel1.Controls.Add(this.groupBox5, 0, 0);
            this.tableLayoutPanel1.Controls.Add(this.groupBoxIOOut, 0, 1);
            this.tableLayoutPanel1.Controls.Add(this.groupBoxIOIn, 0, 0);
            this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill;
            this.tableLayoutPanel1.Location = new System.Drawing.Point(0, 0);
            this.tableLayoutPanel1.Name = "tableLayoutPanel1";
@@ -83,345 +85,351 @@
            this.tableLayoutPanel1.Size = new System.Drawing.Size(580, 288);
            this.tableLayoutPanel1.TabIndex = 0;
            // 
            // groupBox5
            // groupBoxIOOut
            // 
            this.groupBox5.Controls.Add(this.ioIndicatorCtrl14);
            this.groupBox5.Controls.Add(this.ioIndicatorCtrl13);
            this.groupBox5.Controls.Add(this.ioIndicatorCtrl12);
            this.groupBox5.Controls.Add(this.ioIndicatorCtrl26);
            this.groupBox5.Controls.Add(this.ioIndicatorCtrl25);
            this.groupBox5.Controls.Add(this.ioIndicatorCtrl24);
            this.groupBox5.Controls.Add(this.ioIndicatorCtrl17);
            this.groupBox5.Controls.Add(this.ioIndicatorCtrl16);
            this.groupBox5.Controls.Add(this.ioIndicatorCtrl20);
            this.groupBox5.Controls.Add(this.ioIndicatorCtrl19);
            this.groupBox5.Controls.Add(this.ioIndicatorCtrl23);
            this.groupBox5.Controls.Add(this.ioIndicatorCtrl22);
            this.groupBox5.Controls.Add(this.ioIndicatorCtrl21);
            this.groupBox5.Controls.Add(this.ioIndicatorCtrl18);
            this.groupBox5.Controls.Add(this.ioIndicatorCtrl15);
            this.groupBox5.Controls.Add(this.ioIndicatorCtrl11);
            this.groupBox5.Dock = System.Windows.Forms.DockStyle.Fill;
            this.groupBox5.Location = new System.Drawing.Point(3, 3);
            this.groupBox5.Name = "groupBox5";
            this.groupBox5.Size = new System.Drawing.Size(574, 138);
            this.groupBox5.TabIndex = 7;
            this.groupBox5.TabStop = false;
            this.groupBox5.Text = "数字量输入";
            this.groupBoxIOOut.Controls.Add(this.ioOut4);
            this.groupBoxIOOut.Controls.Add(this.ioOut3);
            this.groupBoxIOOut.Controls.Add(this.ioOut2);
            this.groupBoxIOOut.Controls.Add(this.ioOut16);
            this.groupBoxIOOut.Controls.Add(this.ioOut15);
            this.groupBoxIOOut.Controls.Add(this.ioOut14);
            this.groupBoxIOOut.Controls.Add(this.ioOut13);
            this.groupBoxIOOut.Controls.Add(this.ioOut9);
            this.groupBoxIOOut.Controls.Add(this.ioOut8);
            this.groupBoxIOOut.Controls.Add(this.ioOut7);
            this.groupBoxIOOut.Controls.Add(this.ioOut12);
            this.groupBoxIOOut.Controls.Add(this.ioOut11);
            this.groupBoxIOOut.Controls.Add(this.ioOut10);
            this.groupBoxIOOut.Controls.Add(this.ioOut6);
            this.groupBoxIOOut.Controls.Add(this.ioOut5);
            this.groupBoxIOOut.Controls.Add(this.ioOut1);
            this.groupBoxIOOut.Dock = System.Windows.Forms.DockStyle.Fill;
            this.groupBoxIOOut.Location = new System.Drawing.Point(3, 147);
            this.groupBoxIOOut.Name = "groupBoxIOOut";
            this.groupBoxIOOut.Size = new System.Drawing.Size(574, 138);
            this.groupBoxIOOut.TabIndex = 8;
            this.groupBoxIOOut.TabStop = false;
            this.groupBoxIOOut.Text = "数字量输出";
            // 
            // ioIndicatorCtrl14
            // ioOut4
            // 
            this.ioIndicatorCtrl14.Desc = "IN 4";
            this.ioIndicatorCtrl14.IsOn = null;
            this.ioIndicatorCtrl14.Location = new System.Drawing.Point(477, 18);
            this.ioIndicatorCtrl14.Name = "ioIndicatorCtrl14";
            this.ioIndicatorCtrl14.Size = new System.Drawing.Size(90, 24);
            this.ioIndicatorCtrl14.TabIndex = 4;
            this.ioOut4.Desc = "OUT 4";
            this.ioOut4.IsOn = null;
            this.ioOut4.Location = new System.Drawing.Point(477, 18);
            this.ioOut4.Name = "ioOut4";
            this.ioOut4.Size = new System.Drawing.Size(90, 24);
            this.ioOut4.TabIndex = 4;
            // 
            // ioIndicatorCtrl13
            // ioOut3
            // 
            this.ioIndicatorCtrl13.Desc = "IN 3";
            this.ioIndicatorCtrl13.IsOn = null;
            this.ioIndicatorCtrl13.Location = new System.Drawing.Point(306, 18);
            this.ioIndicatorCtrl13.Name = "ioIndicatorCtrl13";
            this.ioIndicatorCtrl13.Size = new System.Drawing.Size(90, 24);
            this.ioIndicatorCtrl13.TabIndex = 4;
            this.ioOut3.Desc = "OUT 3";
            this.ioOut3.IsOn = null;
            this.ioOut3.Location = new System.Drawing.Point(306, 18);
            this.ioOut3.Name = "ioOut3";
            this.ioOut3.Size = new System.Drawing.Size(90, 24);
            this.ioOut3.TabIndex = 4;
            // 
            // ioIndicatorCtrl12
            // ioOut2
            // 
            this.ioIndicatorCtrl12.Desc = "IN 2";
            this.ioIndicatorCtrl12.IsOn = null;
            this.ioIndicatorCtrl12.Location = new System.Drawing.Point(145, 18);
            this.ioIndicatorCtrl12.Name = "ioIndicatorCtrl12";
            this.ioIndicatorCtrl12.Size = new System.Drawing.Size(90, 24);
            this.ioIndicatorCtrl12.TabIndex = 4;
            this.ioOut2.Desc = "OUT 2";
            this.ioOut2.IsOn = null;
            this.ioOut2.Location = new System.Drawing.Point(145, 18);
            this.ioOut2.Name = "ioOut2";
            this.ioOut2.Size = new System.Drawing.Size(90, 24);
            this.ioOut2.TabIndex = 4;
            // 
            // ioIndicatorCtrl26
            // ioOut16
            // 
            this.ioIndicatorCtrl26.Desc = "IN 16";
            this.ioIndicatorCtrl26.IsOn = null;
            this.ioIndicatorCtrl26.Location = new System.Drawing.Point(477, 107);
            this.ioIndicatorCtrl26.Name = "ioIndicatorCtrl26";
            this.ioIndicatorCtrl26.Size = new System.Drawing.Size(90, 24);
            this.ioIndicatorCtrl26.TabIndex = 4;
            this.ioOut16.Desc = "OUT 16";
            this.ioOut16.IsOn = null;
            this.ioOut16.Location = new System.Drawing.Point(477, 107);
            this.ioOut16.Name = "ioOut16";
            this.ioOut16.Size = new System.Drawing.Size(90, 24);
            this.ioOut16.TabIndex = 4;
            // 
            // ioIndicatorCtrl25
            // ioOut15
            // 
            this.ioIndicatorCtrl25.Desc = "IN 15";
            this.ioIndicatorCtrl25.IsOn = null;
            this.ioIndicatorCtrl25.Location = new System.Drawing.Point(306, 107);
            this.ioIndicatorCtrl25.Name = "ioIndicatorCtrl25";
            this.ioIndicatorCtrl25.Size = new System.Drawing.Size(90, 24);
            this.ioIndicatorCtrl25.TabIndex = 4;
            this.ioOut15.Desc = "OUT 15";
            this.ioOut15.IsOn = null;
            this.ioOut15.Location = new System.Drawing.Point(306, 107);
            this.ioOut15.Name = "ioOut15";
            this.ioOut15.Size = new System.Drawing.Size(90, 24);
            this.ioOut15.TabIndex = 4;
            // 
            // ioIndicatorCtrl24
            // ioOut14
            // 
            this.ioIndicatorCtrl24.Desc = "IN 14";
            this.ioIndicatorCtrl24.IsOn = null;
            this.ioIndicatorCtrl24.Location = new System.Drawing.Point(145, 107);
            this.ioIndicatorCtrl24.Name = "ioIndicatorCtrl24";
            this.ioIndicatorCtrl24.Size = new System.Drawing.Size(90, 24);
            this.ioIndicatorCtrl24.TabIndex = 4;
            this.ioOut14.Desc = "OUT 14";
            this.ioOut14.IsOn = null;
            this.ioOut14.Location = new System.Drawing.Point(145, 107);
            this.ioOut14.Name = "ioOut14";
            this.ioOut14.Size = new System.Drawing.Size(90, 24);
            this.ioOut14.TabIndex = 4;
            // 
            // ioIndicatorCtrl17
            // ioOut13
            // 
            this.ioIndicatorCtrl17.Desc = "IN 13";
            this.ioIndicatorCtrl17.IsOn = null;
            this.ioIndicatorCtrl17.Location = new System.Drawing.Point(9, 106);
            this.ioIndicatorCtrl17.Name = "ioIndicatorCtrl17";
            this.ioIndicatorCtrl17.Size = new System.Drawing.Size(90, 24);
            this.ioIndicatorCtrl17.TabIndex = 4;
            this.ioOut13.Desc = "OUT 13";
            this.ioOut13.IsOn = null;
            this.ioOut13.Location = new System.Drawing.Point(9, 106);
            this.ioOut13.Name = "ioOut13";
            this.ioOut13.Size = new System.Drawing.Size(90, 24);
            this.ioOut13.TabIndex = 4;
            // 
            // ioIndicatorCtrl16
            // ioOut9
            // 
            this.ioIndicatorCtrl16.Desc = "IN 9";
            this.ioIndicatorCtrl16.IsOn = null;
            this.ioIndicatorCtrl16.Location = new System.Drawing.Point(9, 77);
            this.ioIndicatorCtrl16.Name = "ioIndicatorCtrl16";
            this.ioIndicatorCtrl16.Size = new System.Drawing.Size(90, 24);
            this.ioIndicatorCtrl16.TabIndex = 4;
            this.ioOut9.Desc = "OUT 9";
            this.ioOut9.IsOn = null;
            this.ioOut9.Location = new System.Drawing.Point(9, 77);
            this.ioOut9.Name = "ioOut9";
            this.ioOut9.Size = new System.Drawing.Size(90, 24);
            this.ioOut9.TabIndex = 4;
            // 
            // ioIndicatorCtrl20
            // ioOut8
            // 
            this.ioIndicatorCtrl20.Desc = "IN 8";
            this.ioIndicatorCtrl20.IsOn = null;
            this.ioIndicatorCtrl20.Location = new System.Drawing.Point(477, 48);
            this.ioIndicatorCtrl20.Name = "ioIndicatorCtrl20";
            this.ioIndicatorCtrl20.Size = new System.Drawing.Size(90, 24);
            this.ioIndicatorCtrl20.TabIndex = 4;
            this.ioOut8.Desc = "OUT 8";
            this.ioOut8.IsOn = null;
            this.ioOut8.Location = new System.Drawing.Point(477, 48);
            this.ioOut8.Name = "ioOut8";
            this.ioOut8.Size = new System.Drawing.Size(90, 24);
            this.ioOut8.TabIndex = 4;
            // 
            // ioIndicatorCtrl19
            // ioOut7
            // 
            this.ioIndicatorCtrl19.Desc = "IN 7";
            this.ioIndicatorCtrl19.IsOn = null;
            this.ioIndicatorCtrl19.Location = new System.Drawing.Point(306, 48);
            this.ioIndicatorCtrl19.Name = "ioIndicatorCtrl19";
            this.ioIndicatorCtrl19.Size = new System.Drawing.Size(90, 24);
            this.ioIndicatorCtrl19.TabIndex = 4;
            this.ioOut7.Desc = "OUT 7";
            this.ioOut7.IsOn = null;
            this.ioOut7.Location = new System.Drawing.Point(306, 48);
            this.ioOut7.Name = "ioOut7";
            this.ioOut7.Size = new System.Drawing.Size(90, 24);
            this.ioOut7.TabIndex = 4;
            // 
            // ioIndicatorCtrl23
            // ioOut12
            // 
            this.ioIndicatorCtrl23.Desc = "IN 12";
            this.ioIndicatorCtrl23.IsOn = null;
            this.ioIndicatorCtrl23.Location = new System.Drawing.Point(477, 77);
            this.ioIndicatorCtrl23.Name = "ioIndicatorCtrl23";
            this.ioIndicatorCtrl23.Size = new System.Drawing.Size(90, 24);
            this.ioIndicatorCtrl23.TabIndex = 4;
            this.ioOut12.Desc = "OUT 12";
            this.ioOut12.IsOn = null;
            this.ioOut12.Location = new System.Drawing.Point(477, 77);
            this.ioOut12.Name = "ioOut12";
            this.ioOut12.Size = new System.Drawing.Size(90, 24);
            this.ioOut12.TabIndex = 4;
            // 
            // ioIndicatorCtrl22
            // ioOut11
            // 
            this.ioIndicatorCtrl22.Desc = "IN 11";
            this.ioIndicatorCtrl22.IsOn = null;
            this.ioIndicatorCtrl22.Location = new System.Drawing.Point(306, 77);
            this.ioIndicatorCtrl22.Name = "ioIndicatorCtrl22";
            this.ioIndicatorCtrl22.Size = new System.Drawing.Size(90, 24);
            this.ioIndicatorCtrl22.TabIndex = 4;
            this.ioOut11.Desc = "OUT 11";
            this.ioOut11.IsOn = null;
            this.ioOut11.Location = new System.Drawing.Point(306, 77);
            this.ioOut11.Name = "ioOut11";
            this.ioOut11.Size = new System.Drawing.Size(90, 24);
            this.ioOut11.TabIndex = 4;
            // 
            // ioIndicatorCtrl21
            // ioOut10
            // 
            this.ioIndicatorCtrl21.Desc = "IN 10";
            this.ioIndicatorCtrl21.IsOn = null;
            this.ioIndicatorCtrl21.Location = new System.Drawing.Point(145, 77);
            this.ioIndicatorCtrl21.Name = "ioIndicatorCtrl21";
            this.ioIndicatorCtrl21.Size = new System.Drawing.Size(90, 24);
            this.ioIndicatorCtrl21.TabIndex = 4;
            this.ioOut10.Desc = "OUT 10";
            this.ioOut10.IsOn = null;
            this.ioOut10.Location = new System.Drawing.Point(145, 77);
            this.ioOut10.Name = "ioOut10";
            this.ioOut10.Size = new System.Drawing.Size(90, 24);
            this.ioOut10.TabIndex = 4;
            // 
            // ioIndicatorCtrl18
            // ioOut6
            // 
            this.ioIndicatorCtrl18.Desc = "IN 6";
            this.ioIndicatorCtrl18.IsOn = null;
            this.ioIndicatorCtrl18.Location = new System.Drawing.Point(145, 48);
            this.ioIndicatorCtrl18.Name = "ioIndicatorCtrl18";
            this.ioIndicatorCtrl18.Size = new System.Drawing.Size(90, 24);
            this.ioIndicatorCtrl18.TabIndex = 4;
            this.ioOut6.Desc = "OUT 6";
            this.ioOut6.IsOn = null;
            this.ioOut6.Location = new System.Drawing.Point(145, 48);
            this.ioOut6.Name = "ioOut6";
            this.ioOut6.Size = new System.Drawing.Size(90, 24);
            this.ioOut6.TabIndex = 4;
            // 
            // ioIndicatorCtrl15
            // ioOut5
            // 
            this.ioIndicatorCtrl15.Desc = "IN 5";
            this.ioIndicatorCtrl15.IsOn = null;
            this.ioIndicatorCtrl15.Location = new System.Drawing.Point(9, 48);
            this.ioIndicatorCtrl15.Name = "ioIndicatorCtrl15";
            this.ioIndicatorCtrl15.Size = new System.Drawing.Size(90, 24);
            this.ioIndicatorCtrl15.TabIndex = 4;
            this.ioOut5.Desc = "OUT 5";
            this.ioOut5.IsOn = null;
            this.ioOut5.Location = new System.Drawing.Point(9, 48);
            this.ioOut5.Name = "ioOut5";
            this.ioOut5.Size = new System.Drawing.Size(90, 24);
            this.ioOut5.TabIndex = 4;
            // 
            // ioIndicatorCtrl11
            // ioOut1
            // 
            this.ioIndicatorCtrl11.Desc = "IN 1";
            this.ioIndicatorCtrl11.IsOn = null;
            this.ioIndicatorCtrl11.Location = new System.Drawing.Point(9, 18);
            this.ioIndicatorCtrl11.Name = "ioIndicatorCtrl11";
            this.ioIndicatorCtrl11.Size = new System.Drawing.Size(90, 24);
            this.ioIndicatorCtrl11.TabIndex = 4;
            this.ioOut1.Desc = "OUT 1";
            this.ioOut1.IsOn = null;
            this.ioOut1.Location = new System.Drawing.Point(9, 18);
            this.ioOut1.Name = "ioOut1";
            this.ioOut1.Size = new System.Drawing.Size(90, 24);
            this.ioOut1.TabIndex = 4;
            //
            // groupBoxIOIn
            //
            this.groupBoxIOIn.Controls.Add(this.ioIn4);
            this.groupBoxIOIn.Controls.Add(this.ioIn3);
            this.groupBoxIOIn.Controls.Add(this.ioIn2);
            this.groupBoxIOIn.Controls.Add(this.ioIn16);
            this.groupBoxIOIn.Controls.Add(this.ioIn15);
            this.groupBoxIOIn.Controls.Add(this.ioIn14);
            this.groupBoxIOIn.Controls.Add(this.ioIn13);
            this.groupBoxIOIn.Controls.Add(this.ioIn9);
            this.groupBoxIOIn.Controls.Add(this.ioIn8);
            this.groupBoxIOIn.Controls.Add(this.ioIn7);
            this.groupBoxIOIn.Controls.Add(this.ioIn12);
            this.groupBoxIOIn.Controls.Add(this.ioIn11);
            this.groupBoxIOIn.Controls.Add(this.ioIn10);
            this.groupBoxIOIn.Controls.Add(this.ioIn6);
            this.groupBoxIOIn.Controls.Add(this.ioIn5);
            this.groupBoxIOIn.Controls.Add(this.ioIn1);
            this.groupBoxIOIn.Dock = System.Windows.Forms.DockStyle.Fill;
            this.groupBoxIOIn.Location = new System.Drawing.Point(3, 3);
            this.groupBoxIOIn.Name = "groupBoxIOIn";
            this.groupBoxIOIn.Size = new System.Drawing.Size(574, 138);
            this.groupBoxIOIn.TabIndex = 7;
            this.groupBoxIOIn.TabStop = false;
            this.groupBoxIOIn.Text = "数字量输入";
            // 
            // groupBox6
            // ioIn4
            // 
            this.groupBox6.Controls.Add(this.ioIndicatorCtrl27);
            this.groupBox6.Controls.Add(this.ioIndicatorCtrl28);
            this.groupBox6.Controls.Add(this.ioIndicatorCtrl29);
            this.groupBox6.Controls.Add(this.ioIndicatorCtrl30);
            this.groupBox6.Controls.Add(this.ioIndicatorCtrl31);
            this.groupBox6.Controls.Add(this.ioIndicatorCtrl32);
            this.groupBox6.Controls.Add(this.ioIndicatorCtrl33);
            this.groupBox6.Controls.Add(this.ioIndicatorCtrl34);
            this.groupBox6.Controls.Add(this.ioIndicatorCtrl35);
            this.groupBox6.Controls.Add(this.ioIndicatorCtrl36);
            this.groupBox6.Controls.Add(this.ioIndicatorCtrl37);
            this.groupBox6.Controls.Add(this.ioIndicatorCtrl38);
            this.groupBox6.Controls.Add(this.ioIndicatorCtrl39);
            this.groupBox6.Controls.Add(this.ioIndicatorCtrl40);
            this.groupBox6.Controls.Add(this.ioIndicatorCtrl41);
            this.groupBox6.Controls.Add(this.ioIndicatorCtrl42);
            this.groupBox6.Dock = System.Windows.Forms.DockStyle.Fill;
            this.groupBox6.Location = new System.Drawing.Point(3, 147);
            this.groupBox6.Name = "groupBox6";
            this.groupBox6.Size = new System.Drawing.Size(574, 138);
            this.groupBox6.TabIndex = 8;
            this.groupBox6.TabStop = false;
            this.groupBox6.Text = "数字量输出";
            this.ioIn4.Desc = "IN 4";
            this.ioIn4.IsOn = null;
            this.ioIn4.Location = new System.Drawing.Point(477, 18);
            this.ioIn4.Name = "ioIn4";
            this.ioIn4.Size = new System.Drawing.Size(90, 24);
            this.ioIn4.TabIndex = 4;
            // 
            // ioIndicatorCtrl27
            // ioIn3
            // 
            this.ioIndicatorCtrl27.Desc = "OUT 4";
            this.ioIndicatorCtrl27.IsOn = null;
            this.ioIndicatorCtrl27.Location = new System.Drawing.Point(477, 18);
            this.ioIndicatorCtrl27.Name = "ioIndicatorCtrl27";
            this.ioIndicatorCtrl27.Size = new System.Drawing.Size(90, 24);
            this.ioIndicatorCtrl27.TabIndex = 4;
            this.ioIn3.Desc = "IN 3";
            this.ioIn3.IsOn = null;
            this.ioIn3.Location = new System.Drawing.Point(306, 18);
            this.ioIn3.Name = "ioIn3";
            this.ioIn3.Size = new System.Drawing.Size(90, 24);
            this.ioIn3.TabIndex = 4;
            // 
            // ioIndicatorCtrl28
            // ioIn2
            // 
            this.ioIndicatorCtrl28.Desc = "OUT 3";
            this.ioIndicatorCtrl28.IsOn = null;
            this.ioIndicatorCtrl28.Location = new System.Drawing.Point(306, 18);
            this.ioIndicatorCtrl28.Name = "ioIndicatorCtrl28";
            this.ioIndicatorCtrl28.Size = new System.Drawing.Size(90, 24);
            this.ioIndicatorCtrl28.TabIndex = 4;
            this.ioIn2.Desc = "IN 2";
            this.ioIn2.IsOn = null;
            this.ioIn2.Location = new System.Drawing.Point(145, 18);
            this.ioIn2.Name = "ioIn2";
            this.ioIn2.Size = new System.Drawing.Size(90, 24);
            this.ioIn2.TabIndex = 4;
            // 
            // ioIndicatorCtrl29
            // ioIn16
            // 
            this.ioIndicatorCtrl29.Desc = "OUT 2";
            this.ioIndicatorCtrl29.IsOn = null;
            this.ioIndicatorCtrl29.Location = new System.Drawing.Point(145, 18);
            this.ioIndicatorCtrl29.Name = "ioIndicatorCtrl29";
            this.ioIndicatorCtrl29.Size = new System.Drawing.Size(90, 24);
            this.ioIndicatorCtrl29.TabIndex = 4;
            this.ioIn16.Desc = "IN 16";
            this.ioIn16.IsOn = null;
            this.ioIn16.Location = new System.Drawing.Point(477, 107);
            this.ioIn16.Name = "ioIn16";
            this.ioIn16.Size = new System.Drawing.Size(90, 24);
            this.ioIn16.TabIndex = 4;
            // 
            // ioIndicatorCtrl30
            // ioIn15
            // 
            this.ioIndicatorCtrl30.Desc = "OUT 16";
            this.ioIndicatorCtrl30.IsOn = null;
            this.ioIndicatorCtrl30.Location = new System.Drawing.Point(477, 107);
            this.ioIndicatorCtrl30.Name = "ioIndicatorCtrl30";
            this.ioIndicatorCtrl30.Size = new System.Drawing.Size(90, 24);
            this.ioIndicatorCtrl30.TabIndex = 4;
            this.ioIn15.Desc = "IN 15";
            this.ioIn15.IsOn = null;
            this.ioIn15.Location = new System.Drawing.Point(306, 107);
            this.ioIn15.Name = "ioIn15";
            this.ioIn15.Size = new System.Drawing.Size(90, 24);
            this.ioIn15.TabIndex = 4;
            // 
            // ioIndicatorCtrl31
            // ioIn14
            // 
            this.ioIndicatorCtrl31.Desc = "OUT 15";
            this.ioIndicatorCtrl31.IsOn = null;
            this.ioIndicatorCtrl31.Location = new System.Drawing.Point(306, 107);
            this.ioIndicatorCtrl31.Name = "ioIndicatorCtrl31";
            this.ioIndicatorCtrl31.Size = new System.Drawing.Size(90, 24);
            this.ioIndicatorCtrl31.TabIndex = 4;
            this.ioIn14.Desc = "IN 14";
            this.ioIn14.IsOn = null;
            this.ioIn14.Location = new System.Drawing.Point(145, 107);
            this.ioIn14.Name = "ioIn14";
            this.ioIn14.Size = new System.Drawing.Size(90, 24);
            this.ioIn14.TabIndex = 4;
            // 
            // ioIndicatorCtrl32
            // ioIn13
            // 
            this.ioIndicatorCtrl32.Desc = "OUT 14";
            this.ioIndicatorCtrl32.IsOn = null;
            this.ioIndicatorCtrl32.Location = new System.Drawing.Point(145, 107);
            this.ioIndicatorCtrl32.Name = "ioIndicatorCtrl32";
            this.ioIndicatorCtrl32.Size = new System.Drawing.Size(90, 24);
            this.ioIndicatorCtrl32.TabIndex = 4;
            this.ioIn13.Desc = "IN 13";
            this.ioIn13.IsOn = null;
            this.ioIn13.Location = new System.Drawing.Point(9, 106);
            this.ioIn13.Name = "ioIn13";
            this.ioIn13.Size = new System.Drawing.Size(90, 24);
            this.ioIn13.TabIndex = 4;
            // 
            // ioIndicatorCtrl33
            // ioIn9
            // 
            this.ioIndicatorCtrl33.Desc = "OUT 13";
            this.ioIndicatorCtrl33.IsOn = null;
            this.ioIndicatorCtrl33.Location = new System.Drawing.Point(9, 106);
            this.ioIndicatorCtrl33.Name = "ioIndicatorCtrl33";
            this.ioIndicatorCtrl33.Size = new System.Drawing.Size(90, 24);
            this.ioIndicatorCtrl33.TabIndex = 4;
            this.ioIn9.Desc = "IN 9";
            this.ioIn9.IsOn = null;
            this.ioIn9.Location = new System.Drawing.Point(9, 77);
            this.ioIn9.Name = "ioIn9";
            this.ioIn9.Size = new System.Drawing.Size(90, 24);
            this.ioIn9.TabIndex = 4;
            // 
            // ioIndicatorCtrl34
            // ioIn8
            // 
            this.ioIndicatorCtrl34.Desc = "OUT 9";
            this.ioIndicatorCtrl34.IsOn = null;
            this.ioIndicatorCtrl34.Location = new System.Drawing.Point(9, 77);
            this.ioIndicatorCtrl34.Name = "ioIndicatorCtrl34";
            this.ioIndicatorCtrl34.Size = new System.Drawing.Size(90, 24);
            this.ioIndicatorCtrl34.TabIndex = 4;
            this.ioIn8.Desc = "IN 8";
            this.ioIn8.IsOn = null;
            this.ioIn8.Location = new System.Drawing.Point(477, 48);
            this.ioIn8.Name = "ioIn8";
            this.ioIn8.Size = new System.Drawing.Size(90, 24);
            this.ioIn8.TabIndex = 4;
            // 
            // ioIndicatorCtrl35
            // ioIn7
            // 
            this.ioIndicatorCtrl35.Desc = "OUT 8";
            this.ioIndicatorCtrl35.IsOn = null;
            this.ioIndicatorCtrl35.Location = new System.Drawing.Point(477, 48);
            this.ioIndicatorCtrl35.Name = "ioIndicatorCtrl35";
            this.ioIndicatorCtrl35.Size = new System.Drawing.Size(90, 24);
            this.ioIndicatorCtrl35.TabIndex = 4;
            this.ioIn7.Desc = "IN 7";
            this.ioIn7.IsOn = null;
            this.ioIn7.Location = new System.Drawing.Point(306, 48);
            this.ioIn7.Name = "ioIn7";
            this.ioIn7.Size = new System.Drawing.Size(90, 24);
            this.ioIn7.TabIndex = 4;
            // 
            // ioIndicatorCtrl36
            // ioIn12
            // 
            this.ioIndicatorCtrl36.Desc = "OUT 7";
            this.ioIndicatorCtrl36.IsOn = null;
            this.ioIndicatorCtrl36.Location = new System.Drawing.Point(306, 48);
            this.ioIndicatorCtrl36.Name = "ioIndicatorCtrl36";
            this.ioIndicatorCtrl36.Size = new System.Drawing.Size(90, 24);
            this.ioIndicatorCtrl36.TabIndex = 4;
            this.ioIn12.Desc = "IN 12";
            this.ioIn12.IsOn = null;
            this.ioIn12.Location = new System.Drawing.Point(477, 77);
            this.ioIn12.Name = "ioIn12";
            this.ioIn12.Size = new System.Drawing.Size(90, 24);
            this.ioIn12.TabIndex = 4;
            // 
            // ioIndicatorCtrl37
            // ioIn11
            // 
            this.ioIndicatorCtrl37.Desc = "OUT 12";
            this.ioIndicatorCtrl37.IsOn = null;
            this.ioIndicatorCtrl37.Location = new System.Drawing.Point(477, 77);
            this.ioIndicatorCtrl37.Name = "ioIndicatorCtrl37";
            this.ioIndicatorCtrl37.Size = new System.Drawing.Size(90, 24);
            this.ioIndicatorCtrl37.TabIndex = 4;
            this.ioIn11.Desc = "IN 11";
            this.ioIn11.IsOn = null;
            this.ioIn11.Location = new System.Drawing.Point(306, 77);
            this.ioIn11.Name = "ioIn11";
            this.ioIn11.Size = new System.Drawing.Size(90, 24);
            this.ioIn11.TabIndex = 4;
            // 
            // ioIndicatorCtrl38
            // ioIn10
            // 
            this.ioIndicatorCtrl38.Desc = "OUT 11";
            this.ioIndicatorCtrl38.IsOn = null;
            this.ioIndicatorCtrl38.Location = new System.Drawing.Point(306, 77);
            this.ioIndicatorCtrl38.Name = "ioIndicatorCtrl38";
            this.ioIndicatorCtrl38.Size = new System.Drawing.Size(90, 24);
            this.ioIndicatorCtrl38.TabIndex = 4;
            this.ioIn10.Desc = "IN 10";
            this.ioIn10.IsOn = null;
            this.ioIn10.Location = new System.Drawing.Point(145, 77);
            this.ioIn10.Name = "ioIn10";
            this.ioIn10.Size = new System.Drawing.Size(90, 24);
            this.ioIn10.TabIndex = 4;
            // 
            // ioIndicatorCtrl39
            // ioIn6
            // 
            this.ioIndicatorCtrl39.Desc = "OUT 10";
            this.ioIndicatorCtrl39.IsOn = null;
            this.ioIndicatorCtrl39.Location = new System.Drawing.Point(145, 77);
            this.ioIndicatorCtrl39.Name = "ioIndicatorCtrl39";
            this.ioIndicatorCtrl39.Size = new System.Drawing.Size(90, 24);
            this.ioIndicatorCtrl39.TabIndex = 4;
            this.ioIn6.Desc = "IN 6";
            this.ioIn6.IsOn = null;
            this.ioIn6.Location = new System.Drawing.Point(145, 48);
            this.ioIn6.Name = "ioIn6";
            this.ioIn6.Size = new System.Drawing.Size(90, 24);
            this.ioIn6.TabIndex = 4;
            // 
            // ioIndicatorCtrl40
            // ioIn5
            // 
            this.ioIndicatorCtrl40.Desc = "OUT 6";
            this.ioIndicatorCtrl40.IsOn = null;
            this.ioIndicatorCtrl40.Location = new System.Drawing.Point(145, 48);
            this.ioIndicatorCtrl40.Name = "ioIndicatorCtrl40";
            this.ioIndicatorCtrl40.Size = new System.Drawing.Size(90, 24);
            this.ioIndicatorCtrl40.TabIndex = 4;
            this.ioIn5.Desc = "IN 5";
            this.ioIn5.IsOn = null;
            this.ioIn5.Location = new System.Drawing.Point(9, 48);
            this.ioIn5.Name = "ioIn5";
            this.ioIn5.Size = new System.Drawing.Size(90, 24);
            this.ioIn5.TabIndex = 4;
            // 
            // ioIndicatorCtrl41
            // ioIn1
            // 
            this.ioIndicatorCtrl41.Desc = "OUT 5";
            this.ioIndicatorCtrl41.IsOn = null;
            this.ioIndicatorCtrl41.Location = new System.Drawing.Point(9, 48);
            this.ioIndicatorCtrl41.Name = "ioIndicatorCtrl41";
            this.ioIndicatorCtrl41.Size = new System.Drawing.Size(90, 24);
            this.ioIndicatorCtrl41.TabIndex = 4;
            this.ioIn1.Desc = "IN 1";
            this.ioIn1.IsOn = null;
            this.ioIn1.Location = new System.Drawing.Point(9, 18);
            this.ioIn1.Name = "ioIn1";
            this.ioIn1.Size = new System.Drawing.Size(90, 24);
            this.ioIn1.TabIndex = 4;
            // 
            // ioIndicatorCtrl42
            // timer1
            // 
            this.ioIndicatorCtrl42.Desc = "OUT 1";
            this.ioIndicatorCtrl42.IsOn = null;
            this.ioIndicatorCtrl42.Location = new System.Drawing.Point(9, 18);
            this.ioIndicatorCtrl42.Name = "ioIndicatorCtrl42";
            this.ioIndicatorCtrl42.Size = new System.Drawing.Size(90, 24);
            this.ioIndicatorCtrl42.TabIndex = 4;
            this.timer1.Enabled = true;
            this.timer1.Interval = 200;
            this.timer1.Tick += new System.EventHandler(this.RefreshIOStatus);
            // 
            // CtrlMotionCardIOStatus
            // 
@@ -431,8 +439,8 @@
            this.Name = "CtrlMotionCardIOStatus";
            this.Size = new System.Drawing.Size(580, 288);
            this.tableLayoutPanel1.ResumeLayout(false);
            this.groupBox5.ResumeLayout(false);
            this.groupBox6.ResumeLayout(false);
            this.groupBoxIOOut.ResumeLayout(false);
            this.groupBoxIOIn.ResumeLayout(false);
            this.ResumeLayout(false);
        }
@@ -440,39 +448,40 @@
        #endregion
        private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1;
        private System.Windows.Forms.GroupBox groupBox5;
        private Model.Winform.IOIndicatorCtrl ioIndicatorCtrl14;
        private Model.Winform.IOIndicatorCtrl ioIndicatorCtrl13;
        private Model.Winform.IOIndicatorCtrl ioIndicatorCtrl12;
        private Model.Winform.IOIndicatorCtrl ioIndicatorCtrl26;
        private Model.Winform.IOIndicatorCtrl ioIndicatorCtrl25;
        private Model.Winform.IOIndicatorCtrl ioIndicatorCtrl24;
        private Model.Winform.IOIndicatorCtrl ioIndicatorCtrl17;
        private Model.Winform.IOIndicatorCtrl ioIndicatorCtrl16;
        private Model.Winform.IOIndicatorCtrl ioIndicatorCtrl20;
        private Model.Winform.IOIndicatorCtrl ioIndicatorCtrl19;
        private Model.Winform.IOIndicatorCtrl ioIndicatorCtrl23;
        private Model.Winform.IOIndicatorCtrl ioIndicatorCtrl22;
        private Model.Winform.IOIndicatorCtrl ioIndicatorCtrl21;
        private Model.Winform.IOIndicatorCtrl ioIndicatorCtrl18;
        private Model.Winform.IOIndicatorCtrl ioIndicatorCtrl15;
        private Model.Winform.IOIndicatorCtrl ioIndicatorCtrl11;
        private System.Windows.Forms.GroupBox groupBox6;
        private Model.Winform.IOIndicatorCtrl ioIndicatorCtrl27;
        private Model.Winform.IOIndicatorCtrl ioIndicatorCtrl28;
        private Model.Winform.IOIndicatorCtrl ioIndicatorCtrl29;
        private Model.Winform.IOIndicatorCtrl ioIndicatorCtrl30;
        private Model.Winform.IOIndicatorCtrl ioIndicatorCtrl31;
        private Model.Winform.IOIndicatorCtrl ioIndicatorCtrl32;
        private Model.Winform.IOIndicatorCtrl ioIndicatorCtrl33;
        private Model.Winform.IOIndicatorCtrl ioIndicatorCtrl34;
        private Model.Winform.IOIndicatorCtrl ioIndicatorCtrl35;
        private Model.Winform.IOIndicatorCtrl ioIndicatorCtrl36;
        private Model.Winform.IOIndicatorCtrl ioIndicatorCtrl37;
        private Model.Winform.IOIndicatorCtrl ioIndicatorCtrl38;
        private Model.Winform.IOIndicatorCtrl ioIndicatorCtrl39;
        private Model.Winform.IOIndicatorCtrl ioIndicatorCtrl40;
        private Model.Winform.IOIndicatorCtrl ioIndicatorCtrl41;
        private Model.Winform.IOIndicatorCtrl ioIndicatorCtrl42;
        private System.Windows.Forms.GroupBox groupBoxIOIn;
        private Model.Winform.IOIndicatorCtrl ioIn4;
        private Model.Winform.IOIndicatorCtrl ioIn3;
        private Model.Winform.IOIndicatorCtrl ioIn2;
        private Model.Winform.IOIndicatorCtrl ioIn16;
        private Model.Winform.IOIndicatorCtrl ioIn15;
        private Model.Winform.IOIndicatorCtrl ioIn14;
        private Model.Winform.IOIndicatorCtrl ioIn13;
        private Model.Winform.IOIndicatorCtrl ioIn9;
        private Model.Winform.IOIndicatorCtrl ioIn8;
        private Model.Winform.IOIndicatorCtrl ioIn7;
        private Model.Winform.IOIndicatorCtrl ioIn12;
        private Model.Winform.IOIndicatorCtrl ioIn11;
        private Model.Winform.IOIndicatorCtrl ioIn10;
        private Model.Winform.IOIndicatorCtrl ioIn6;
        private Model.Winform.IOIndicatorCtrl ioIn5;
        private Model.Winform.IOIndicatorCtrl ioIn1;
        private System.Windows.Forms.GroupBox groupBoxIOOut;
        private Model.Winform.IOIndicatorCtrl ioOut4;
        private Model.Winform.IOIndicatorCtrl ioOut3;
        private Model.Winform.IOIndicatorCtrl ioOut2;
        private Model.Winform.IOIndicatorCtrl ioOut16;
        private Model.Winform.IOIndicatorCtrl ioOut15;
        private Model.Winform.IOIndicatorCtrl ioOut14;
        private Model.Winform.IOIndicatorCtrl ioOut13;
        private Model.Winform.IOIndicatorCtrl ioOut9;
        private Model.Winform.IOIndicatorCtrl ioOut8;
        private Model.Winform.IOIndicatorCtrl ioOut7;
        private Model.Winform.IOIndicatorCtrl ioOut12;
        private Model.Winform.IOIndicatorCtrl ioOut11;
        private Model.Winform.IOIndicatorCtrl ioOut10;
        private Model.Winform.IOIndicatorCtrl ioOut6;
        private Model.Winform.IOIndicatorCtrl ioOut5;
        private Model.Winform.IOIndicatorCtrl ioOut1;
        private System.Windows.Forms.Timer timer1;
    }
}
src/Bro.UI.Device.Winform/MotionCard/CtrlMotionCardIOStatus.cs
@@ -7,14 +7,51 @@
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Bro.Common.Model;
using Bro.UI.Model.Winform;
using static Bro.Common.Helper.EnumHelper;
namespace Bro.UI.Device.Winform
{
    public partial class CtrlMotionCardIOStatus : UserControl
    {
        public List<IOItem> _monitorValues { get; set; }
        public CtrlMotionCardIOStatus()
        {
            InitializeComponent();
        }
        public CtrlMotionCardIOStatus(List<IOItem> monitorValues)
        {
            InitializeComponent();
            _monitorValues = monitorValues;
        }
        private void RefreshIOStatus(object sender, EventArgs e)
        {
            foreach (var ioItem in _monitorValues)
            {
                if (ioItem.IOType == Common.Helper.EnumHelper.IOType.INPUT)
                {
                    var ioInArray = groupBoxIOIn.Controls.Find("ioIn" + ioItem.IONum, false);
                    if (ioInArray != null && ioInArray.Length == 1)
                    {
                        var ioIn = ioInArray[0] as IOIndicatorCtrl;
                        ioIn.IsOn = ioItem.Value == IOValue.TRUE;
                    }
                }
                else
                {
                    var ioOutArray = groupBoxIOOut.Controls.Find("ioOut" + ioItem.IONum, false);
                    if (ioOutArray != null && ioOutArray.Length == 1)
                    {
                        var ioOut = ioOutArray[0] as IOIndicatorCtrl;
                        ioOut.IsOn = ioItem.Value == IOValue.TRUE;
                    }
                }
            }
        }
    }
}
src/Bro.UI.Device.Winform/MotionCard/CtrlMotionCardIOStatus.resx
@@ -117,4 +117,7 @@
  <resheader name="writer">
    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
  </resheader>
  <metadata name="timer1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
    <value>17, 17</value>
  </metadata>
</root>
src/Bro.UI.Device.Winform/MotionCard/CtrlMotionCardRunBase.Designer.cs
@@ -33,6 +33,7 @@
            this.listBoxMsg = new System.Windows.Forms.ListBox();
            this.flowLayoutPanel1 = new System.Windows.Forms.FlowLayoutPanel();
            this.buttonMotionCardOperation = new System.Windows.Forms.Button();
            this.flowLayoutPanel2 = new System.Windows.Forms.FlowLayoutPanel();
            this.tableLayoutPanel1.SuspendLayout();
            this.groupBox2.SuspendLayout();
            this.SuspendLayout();
@@ -44,6 +45,7 @@
            this.tableLayoutPanel1.Controls.Add(this.groupBox2, 0, 3);
            this.tableLayoutPanel1.Controls.Add(this.flowLayoutPanel1, 0, 1);
            this.tableLayoutPanel1.Controls.Add(this.buttonMotionCardOperation, 0, 0);
            this.tableLayoutPanel1.Controls.Add(this.flowLayoutPanel2, 0, 2);
            this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill;
            this.tableLayoutPanel1.Location = new System.Drawing.Point(0, 0);
            this.tableLayoutPanel1.Name = "tableLayoutPanel1";
@@ -52,6 +54,7 @@
            this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50F));
            this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50F));
            this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 110F));
            this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F));
            this.tableLayoutPanel1.Size = new System.Drawing.Size(615, 587);
            this.tableLayoutPanel1.TabIndex = 5;
            // 
@@ -95,6 +98,14 @@
            this.buttonMotionCardOperation.UseVisualStyleBackColor = true;
            this.buttonMotionCardOperation.Click += new System.EventHandler(this.buttonMotionCardOperation_Click);
            // 
            // flowLayoutPanel2
            //
            this.flowLayoutPanel2.Dock = System.Windows.Forms.DockStyle.Fill;
            this.flowLayoutPanel2.Location = new System.Drawing.Point(3, 256);
            this.flowLayoutPanel2.Name = "flowLayoutPanel2";
            this.flowLayoutPanel2.Size = new System.Drawing.Size(609, 217);
            this.flowLayoutPanel2.TabIndex = 13;
            //
            // CtrlMotionCardRunBase
            // 
            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);
@@ -114,5 +125,6 @@
        private System.Windows.Forms.ListBox listBoxMsg;
        private System.Windows.Forms.FlowLayoutPanel flowLayoutPanel1;
        private System.Windows.Forms.Button buttonMotionCardOperation;
        private System.Windows.Forms.FlowLayoutPanel flowLayoutPanel2;
    }
}
src/Bro.UI.Device.Winform/MotionCard/CtrlMotionCardRunBase.cs
@@ -25,18 +25,6 @@
            Device = device;
            InitialLayout();
            MotionCard.OnMonitorInvoke += MotionCard_OnMonitorInvoke;
            //CvImage = new Canvas();
            //CvImage.IsShowElementList = false;
            //CvImage.IsShowROITool = false;
            //CvImage.Dock = DockStyle.Fill;
            //Controls.Add(CvImage);
            //Camera.OnImageUpdated += Camera_UpdateShowImage;
            //Camera.OnElementsUpdated += Camera_OnElementsUpdated;
            //Camera.OnCameraOpModeChanged += Camera_OnCameraOpModeChanged;
            //InitialToolBarVisible();
        }
        private void MotionCard_OnMonitorInvoke(DateTime arg1, string arg2, IDevice arg3, IMonitorSet arg4)
@@ -46,7 +34,19 @@
        private void InitialLayout()
        {
            foreach (var axisConfig in MotionCard.IConfig.AxisSettings.FindAll(u => u.IsAxisEnabled))
            {
                var axisMovingStatus = MotionCard.AxisMovingOptionValues.FirstOrDefault(u=>u.AxisIndex== axisConfig.AxisIndex);
                if (axisMovingStatus!=null)
                {
                    CtrlMotionCardAxisStatus ctrlMotionCardAxisStatus = new CtrlMotionCardAxisStatus(axisMovingStatus);
                    ctrlMotionCardAxisStatus.Dock = DockStyle.Fill;
                    flowLayoutPanel1.Controls.Add(ctrlMotionCardAxisStatus);
                }
            }
            CtrlMotionCardIOStatus ctrlMotionCardIOStatus = new CtrlMotionCardIOStatus();
            flowLayoutPanel2.Controls.Add(ctrlMotionCardIOStatus);
        }
        public IDevice Device { get; set; }
@@ -61,5 +61,6 @@
            FrmMotionCardOperationBase motionCardOperationBase = new FrmMotionCardOperationBase(Device);
            motionCardOperationBase.Show();
        }
    }
}
src/Bro.UI.Device.Winform/MotionCard/FrmMotionCardOperationBase.Designer.cs
@@ -32,6 +32,7 @@
            this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel();
            this.tabControl1 = new System.Windows.Forms.TabControl();
            this.tabPage1 = new System.Windows.Forms.TabPage();
            this.flowLayoutPanel1 = new System.Windows.Forms.FlowLayoutPanel();
            this.tabPage2 = new System.Windows.Forms.TabPage();
            this.tableLayoutPanel3 = new System.Windows.Forms.TableLayoutPanel();
            this.groupBoxPara = new System.Windows.Forms.GroupBox();
@@ -45,6 +46,7 @@
            this.buttonPositionReset = new System.Windows.Forms.Button();
            this.tableLayoutPanel1.SuspendLayout();
            this.tabControl1.SuspendLayout();
            this.tabPage1.SuspendLayout();
            this.tabPage2.SuspendLayout();
            this.tableLayoutPanel3.SuspendLayout();
            this.groupBoxPara.SuspendLayout();
@@ -77,6 +79,7 @@
            // 
            // tabPage1
            // 
            this.tabPage1.Controls.Add(this.flowLayoutPanel1);
            this.tabPage1.Location = new System.Drawing.Point(4, 22);
            this.tabPage1.Name = "tabPage1";
            this.tabPage1.Padding = new System.Windows.Forms.Padding(3);
@@ -84,6 +87,14 @@
            this.tabPage1.TabIndex = 0;
            this.tabPage1.Text = "快捷操作";
            this.tabPage1.UseVisualStyleBackColor = true;
            //
            // flowLayoutPanel1
            //
            this.flowLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill;
            this.flowLayoutPanel1.Location = new System.Drawing.Point(3, 3);
            this.flowLayoutPanel1.Name = "flowLayoutPanel1";
            this.flowLayoutPanel1.Size = new System.Drawing.Size(464, 643);
            this.flowLayoutPanel1.TabIndex = 0;
            // 
            // tabPage2
            // 
@@ -163,6 +174,7 @@
            this.btnStart.Text = "  启  动";
            this.btnStart.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageBeforeText;
            this.btnStart.UseVisualStyleBackColor = true;
            this.btnStart.Click += new System.EventHandler(this.btnStart_Click);
            // 
            // buttonClearStatus
            // 
@@ -172,6 +184,7 @@
            this.buttonClearStatus.TabIndex = 4;
            this.buttonClearStatus.Text = "清除状态";
            this.buttonClearStatus.UseVisualStyleBackColor = true;
            this.buttonClearStatus.Click += new System.EventHandler(this.buttonClearStatus_Click);
            // 
            // buttonEmergencyStop
            // 
@@ -181,6 +194,7 @@
            this.buttonEmergencyStop.TabIndex = 4;
            this.buttonEmergencyStop.Text = "紧急停止";
            this.buttonEmergencyStop.UseVisualStyleBackColor = true;
            this.buttonEmergencyStop.Click += new System.EventHandler(this.buttonEmergencyStop_Click);
            // 
            // buttonServoEnable
            // 
@@ -190,6 +204,7 @@
            this.buttonServoEnable.TabIndex = 4;
            this.buttonServoEnable.Text = "伺服使能";
            this.buttonServoEnable.UseVisualStyleBackColor = true;
            this.buttonServoEnable.Click += new System.EventHandler(this.buttonServoEnable_Click);
            // 
            // buttonSmoothStop
            // 
@@ -199,6 +214,7 @@
            this.buttonSmoothStop.TabIndex = 4;
            this.buttonSmoothStop.Text = "平滑停止";
            this.buttonSmoothStop.UseVisualStyleBackColor = true;
            this.buttonSmoothStop.Click += new System.EventHandler(this.buttonSmoothStop_Click);
            // 
            // buttonPositionReset
            // 
@@ -208,6 +224,7 @@
            this.buttonPositionReset.TabIndex = 4;
            this.buttonPositionReset.Text = "位置清零";
            this.buttonPositionReset.UseVisualStyleBackColor = true;
            this.buttonPositionReset.Click += new System.EventHandler(this.buttonPositionReset_Click);
            // 
            // FrmMotionCardOperationBase
            // 
@@ -218,6 +235,7 @@
            this.Name = "FrmMotionCardOperationBase";
            this.tableLayoutPanel1.ResumeLayout(false);
            this.tabControl1.ResumeLayout(false);
            this.tabPage1.ResumeLayout(false);
            this.tabPage2.ResumeLayout(false);
            this.tableLayoutPanel3.ResumeLayout(false);
            this.groupBoxPara.ResumeLayout(false);
@@ -243,5 +261,6 @@
        private System.Windows.Forms.Button buttonPositionReset;
        private System.Windows.Forms.GroupBox groupBoxPara;
        private System.Windows.Forms.PropertyGrid propGrid;
        private System.Windows.Forms.FlowLayoutPanel flowLayoutPanel1;
    }
}
src/Bro.UI.Device.Winform/MotionCard/FrmMotionCardOperationBase.cs
@@ -3,6 +3,7 @@
using Bro.Common.Interface;
using Bro.Common.Model;
using System;
using System.Linq;
using System.Windows.Forms;
namespace Bro.UI.Device.Winform
@@ -16,7 +17,7 @@
        public IDevice Device { get; set; }
        public MotionCardOperationConfigBase MotionCardOperationConfig { get; set; }
        public MovingOption MotionCardMovingOption { get; set; } = new MovingOption();
        /// <summary>
        /// 当前板卡实例
@@ -32,68 +33,59 @@
            InitializeComponent();
            Device = device;
            MotionCardOperationConfig = new MotionCardOperationConfigBase();
            InitialLayout();
        }
        private void InitialLayout()
        {
            foreach (var axisConfig in MotionCard.IConfig.AxisSettings.FindAll(u => u.IsAxisEnabled))
            {
                CtrlMotionCardAxisOperation axisOperation = new CtrlMotionCardAxisOperation(Device, axisConfig.AxisIndex, axisConfig.AxisName);
                axisOperation.Dock = DockStyle.Fill;
                flowLayoutPanel1.Controls.Add(axisOperation);
        }
        MovingOption movingConfig = null;
        #region ILogoutput
        public Action<LogMsg> OnLogMsgOutput { get; set; }
        public void LogDisplay(LogMsg msg)
        {
        }
        #endregion
        private void RadioButton_CheckedChanged(object sender, EventArgs e)
        {
            //加载对应运动的 movingConfig
            //if (radioP2P.Checked)
            //{
            //    movingConfig = MotionCardOperationConfig.MovingOps.FirstOrDefault(u => u.MoveMode == EnumHelper.MotorMoveMode.Normal);
            //}
            //else if (radioJog.Checked)
            //{
            //    movingConfig = MotionCardOperationConfig.MovingOps.FirstOrDefault(u => u.MoveMode == EnumHelper.MotorMoveMode.Jog);
            //}
            //else if (radioGoHome.Checked)
            //{
            //    movingConfig = MotionCardOperationConfig.MovingOps.FirstOrDefault(u => u.MoveMode == EnumHelper.MotorMoveMode.FindOri);
            //}
            propGrid.SelectedObject = movingConfig;
            propGrid.SelectedObject = MotionCardMovingOption;
        }
        private void buttonClearStatus_Click(object sender, EventArgs e)
        {
            MotionCard.ClearStatus(1, MotionCard.IConfig.AxisSettings.FindAll(u => u.IsAxisEnabled).Count);
        }
        private void buttonServoEnable_Click(object sender, EventArgs e)
        {
            int sts = MotionCard.GetAxisStatus(MotionCardMovingOption.AxisIndex);
            if ((sts & 0x200) == 0)//关闭状态
            {
                MotionCard.AxisOnAsync(MotionCardMovingOption.AxisIndex).GetAwaiter().GetResult();
                buttonServoEnable.Text = "伺服已开启";
            }
            else
            {
                MotionCard.AxisOffAsync(MotionCardMovingOption.AxisIndex).GetAwaiter().GetResult();
                buttonServoEnable.Text = "伺服已关闭";
            }
        }
        private void buttonPositionReset_Click(object sender, EventArgs e)
        {
            var res = MotionCard.PositionReset(MotionCardMovingOption.AxisIndex, 1);
        }
        private void btnStart_Click(object sender, EventArgs e)
        {
            MotionCard.SingleAxisMoving(MotionCardMovingOption).GetAwaiter().GetResult();
        }
        private void buttonSmoothStop_Click(object sender, EventArgs e)
        {
            MotionCard.MoveStop(MotionCardMovingOption.AxisIndex, 0).GetAwaiter().GetResult();
        }
        private void buttonEmergencyStop_Click(object sender, EventArgs e)
        {
            MotionCard.MoveStop(MotionCardMovingOption.AxisIndex, 1).GetAwaiter().GetResult();
        }
    }