diff --git a/A020.sln b/A020.sln index 224d38b..a2e337e 100644 --- a/A020.sln +++ b/A020.sln @@ -30,12 +30,10 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BRS.UI.Model.Winform", "src EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BRS.Process.A020", "src\BRS.Process.A020\BRS.Process.A020.csproj", "{9EB9DFC1-C78A-46C0-826A-5ED1A08232C0}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BRS.Device.OmronPLC", "src\BRS.Device.OmronPLC\BRS.Device.OmronPLC.csproj", "{560CC80B-389B-46FC-9B8C-DA1D62A555D9}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "XKRS.Device.NbtRobot", "src\BRS.Device.NbtRobot\XKRS.Device.NbtRobot.csproj", "{8FA74161-0D03-408F-811A-A244C9027BFB}" -EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "XKRS.Device.MelsecPLC", "src\XKRS.Device.MelsecPLC\XKRS.Device.MelsecPLC.csproj", "{887F9454-B1F3-47B8-B9F7-48BEBA47193D}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "XKRS.Device.TCPSever", "src\XKRS.Device.TCPSever\XKRS.Device.TCPSever.csproj", "{91739E90-6A8E-433D-B244-5325F8848064}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -47,6 +45,9 @@ Global Release|Any CPU = Release|Any CPU Release|x64 = Release|x64 Release|x86 = Release|x86 + ReleaseWithDbg|Any CPU = ReleaseWithDbg|Any CPU + ReleaseWithDbg|x64 = ReleaseWithDbg|x64 + ReleaseWithDbg|x86 = ReleaseWithDbg|x86 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {987308DD-8BAA-463A-94E2-77D62E01A5BF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU @@ -67,6 +68,12 @@ Global {987308DD-8BAA-463A-94E2-77D62E01A5BF}.Release|x64.Build.0 = Release|x64 {987308DD-8BAA-463A-94E2-77D62E01A5BF}.Release|x86.ActiveCfg = Release|Any CPU {987308DD-8BAA-463A-94E2-77D62E01A5BF}.Release|x86.Build.0 = Release|Any CPU + {987308DD-8BAA-463A-94E2-77D62E01A5BF}.ReleaseWithDbg|Any CPU.ActiveCfg = Release|Any CPU + {987308DD-8BAA-463A-94E2-77D62E01A5BF}.ReleaseWithDbg|Any CPU.Build.0 = Release|Any CPU + {987308DD-8BAA-463A-94E2-77D62E01A5BF}.ReleaseWithDbg|x64.ActiveCfg = Release|x64 + {987308DD-8BAA-463A-94E2-77D62E01A5BF}.ReleaseWithDbg|x64.Build.0 = Release|x64 + {987308DD-8BAA-463A-94E2-77D62E01A5BF}.ReleaseWithDbg|x86.ActiveCfg = Release|Any CPU + {987308DD-8BAA-463A-94E2-77D62E01A5BF}.ReleaseWithDbg|x86.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|x64 @@ -85,6 +92,12 @@ Global {1A3CBFE7-3F78-42C3-95C5-10360450DBEA}.Release|x64.Build.0 = Release|x64 {1A3CBFE7-3F78-42C3-95C5-10360450DBEA}.Release|x86.ActiveCfg = Release|Any CPU {1A3CBFE7-3F78-42C3-95C5-10360450DBEA}.Release|x86.Build.0 = Release|Any CPU + {1A3CBFE7-3F78-42C3-95C5-10360450DBEA}.ReleaseWithDbg|Any CPU.ActiveCfg = Release|Any CPU + {1A3CBFE7-3F78-42C3-95C5-10360450DBEA}.ReleaseWithDbg|Any CPU.Build.0 = Release|Any CPU + {1A3CBFE7-3F78-42C3-95C5-10360450DBEA}.ReleaseWithDbg|x64.ActiveCfg = Release|x64 + {1A3CBFE7-3F78-42C3-95C5-10360450DBEA}.ReleaseWithDbg|x64.Build.0 = Release|x64 + {1A3CBFE7-3F78-42C3-95C5-10360450DBEA}.ReleaseWithDbg|x86.ActiveCfg = Release|Any CPU + {1A3CBFE7-3F78-42C3-95C5-10360450DBEA}.ReleaseWithDbg|x86.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|x64 @@ -103,6 +116,12 @@ Global {197C5AA8-9609-4D1C-B1E3-5879006EAAF4}.Release|x64.Build.0 = Release|x64 {197C5AA8-9609-4D1C-B1E3-5879006EAAF4}.Release|x86.ActiveCfg = Release|Any CPU {197C5AA8-9609-4D1C-B1E3-5879006EAAF4}.Release|x86.Build.0 = Release|Any CPU + {197C5AA8-9609-4D1C-B1E3-5879006EAAF4}.ReleaseWithDbg|Any CPU.ActiveCfg = Release|Any CPU + {197C5AA8-9609-4D1C-B1E3-5879006EAAF4}.ReleaseWithDbg|Any CPU.Build.0 = Release|Any CPU + {197C5AA8-9609-4D1C-B1E3-5879006EAAF4}.ReleaseWithDbg|x64.ActiveCfg = Release|x64 + {197C5AA8-9609-4D1C-B1E3-5879006EAAF4}.ReleaseWithDbg|x64.Build.0 = Release|x64 + {197C5AA8-9609-4D1C-B1E3-5879006EAAF4}.ReleaseWithDbg|x86.ActiveCfg = Release|Any CPU + {197C5AA8-9609-4D1C-B1E3-5879006EAAF4}.ReleaseWithDbg|x86.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|x64 @@ -121,6 +140,12 @@ Global {E6429C64-92B3-46A2-B35E-579856D47F62}.Release|x64.Build.0 = Release|x64 {E6429C64-92B3-46A2-B35E-579856D47F62}.Release|x86.ActiveCfg = Release|Any CPU {E6429C64-92B3-46A2-B35E-579856D47F62}.Release|x86.Build.0 = Release|Any CPU + {E6429C64-92B3-46A2-B35E-579856D47F62}.ReleaseWithDbg|Any CPU.ActiveCfg = Release|Any CPU + {E6429C64-92B3-46A2-B35E-579856D47F62}.ReleaseWithDbg|Any CPU.Build.0 = Release|Any CPU + {E6429C64-92B3-46A2-B35E-579856D47F62}.ReleaseWithDbg|x64.ActiveCfg = Release|x64 + {E6429C64-92B3-46A2-B35E-579856D47F62}.ReleaseWithDbg|x64.Build.0 = Release|x64 + {E6429C64-92B3-46A2-B35E-579856D47F62}.ReleaseWithDbg|x86.ActiveCfg = Release|Any CPU + {E6429C64-92B3-46A2-B35E-579856D47F62}.ReleaseWithDbg|x86.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 @@ -139,6 +164,12 @@ Global {DD02C60E-560B-40C0-AD7F-523F0B4AA4FD}.Release|x64.Build.0 = Release|x64 {DD02C60E-560B-40C0-AD7F-523F0B4AA4FD}.Release|x86.ActiveCfg = Release|Any CPU {DD02C60E-560B-40C0-AD7F-523F0B4AA4FD}.Release|x86.Build.0 = Release|Any CPU + {DD02C60E-560B-40C0-AD7F-523F0B4AA4FD}.ReleaseWithDbg|Any CPU.ActiveCfg = Release|Any CPU + {DD02C60E-560B-40C0-AD7F-523F0B4AA4FD}.ReleaseWithDbg|Any CPU.Build.0 = Release|Any CPU + {DD02C60E-560B-40C0-AD7F-523F0B4AA4FD}.ReleaseWithDbg|x64.ActiveCfg = Release|x64 + {DD02C60E-560B-40C0-AD7F-523F0B4AA4FD}.ReleaseWithDbg|x64.Build.0 = Release|x64 + {DD02C60E-560B-40C0-AD7F-523F0B4AA4FD}.ReleaseWithDbg|x86.ActiveCfg = Release|Any CPU + {DD02C60E-560B-40C0-AD7F-523F0B4AA4FD}.ReleaseWithDbg|x86.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|x64 @@ -157,6 +188,12 @@ Global {741F6491-57C7-479A-B391-09BBA9FBA9DC}.Release|x64.Build.0 = Release|x64 {741F6491-57C7-479A-B391-09BBA9FBA9DC}.Release|x86.ActiveCfg = Release|Any CPU {741F6491-57C7-479A-B391-09BBA9FBA9DC}.Release|x86.Build.0 = Release|Any CPU + {741F6491-57C7-479A-B391-09BBA9FBA9DC}.ReleaseWithDbg|Any CPU.ActiveCfg = Release|Any CPU + {741F6491-57C7-479A-B391-09BBA9FBA9DC}.ReleaseWithDbg|Any CPU.Build.0 = Release|Any CPU + {741F6491-57C7-479A-B391-09BBA9FBA9DC}.ReleaseWithDbg|x64.ActiveCfg = Release|x64 + {741F6491-57C7-479A-B391-09BBA9FBA9DC}.ReleaseWithDbg|x64.Build.0 = Release|x64 + {741F6491-57C7-479A-B391-09BBA9FBA9DC}.ReleaseWithDbg|x86.ActiveCfg = Release|Any CPU + {741F6491-57C7-479A-B391-09BBA9FBA9DC}.ReleaseWithDbg|x86.Build.0 = Release|Any CPU {9EB9DFC1-C78A-46C0-826A-5ED1A08232C0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {9EB9DFC1-C78A-46C0-826A-5ED1A08232C0}.Debug|Any CPU.Build.0 = Debug|Any CPU {9EB9DFC1-C78A-46C0-826A-5ED1A08232C0}.Debug|x64.ActiveCfg = Debug|Any CPU @@ -175,42 +212,12 @@ Global {9EB9DFC1-C78A-46C0-826A-5ED1A08232C0}.Release|x64.Build.0 = Release|Any CPU {9EB9DFC1-C78A-46C0-826A-5ED1A08232C0}.Release|x86.ActiveCfg = Release|Any CPU {9EB9DFC1-C78A-46C0-826A-5ED1A08232C0}.Release|x86.Build.0 = Release|Any CPU - {560CC80B-389B-46FC-9B8C-DA1D62A555D9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {560CC80B-389B-46FC-9B8C-DA1D62A555D9}.Debug|Any CPU.Build.0 = Debug|Any CPU - {560CC80B-389B-46FC-9B8C-DA1D62A555D9}.Debug|x64.ActiveCfg = Debug|Any CPU - {560CC80B-389B-46FC-9B8C-DA1D62A555D9}.Debug|x64.Build.0 = Debug|Any CPU - {560CC80B-389B-46FC-9B8C-DA1D62A555D9}.Debug|x86.ActiveCfg = Debug|Any CPU - {560CC80B-389B-46FC-9B8C-DA1D62A555D9}.Debug|x86.Build.0 = Debug|Any CPU - {560CC80B-389B-46FC-9B8C-DA1D62A555D9}.Debug1|Any CPU.ActiveCfg = Debug|Any CPU - {560CC80B-389B-46FC-9B8C-DA1D62A555D9}.Debug1|Any CPU.Build.0 = Debug|Any CPU - {560CC80B-389B-46FC-9B8C-DA1D62A555D9}.Debug1|x64.ActiveCfg = Debug|Any CPU - {560CC80B-389B-46FC-9B8C-DA1D62A555D9}.Debug1|x64.Build.0 = Debug|Any CPU - {560CC80B-389B-46FC-9B8C-DA1D62A555D9}.Debug1|x86.ActiveCfg = Debug|Any CPU - {560CC80B-389B-46FC-9B8C-DA1D62A555D9}.Debug1|x86.Build.0 = Debug|Any CPU - {560CC80B-389B-46FC-9B8C-DA1D62A555D9}.Release|Any CPU.ActiveCfg = Release|Any CPU - {560CC80B-389B-46FC-9B8C-DA1D62A555D9}.Release|Any CPU.Build.0 = Release|Any CPU - {560CC80B-389B-46FC-9B8C-DA1D62A555D9}.Release|x64.ActiveCfg = Release|Any CPU - {560CC80B-389B-46FC-9B8C-DA1D62A555D9}.Release|x64.Build.0 = Release|Any CPU - {560CC80B-389B-46FC-9B8C-DA1D62A555D9}.Release|x86.ActiveCfg = Release|Any CPU - {560CC80B-389B-46FC-9B8C-DA1D62A555D9}.Release|x86.Build.0 = Release|Any CPU - {8FA74161-0D03-408F-811A-A244C9027BFB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {8FA74161-0D03-408F-811A-A244C9027BFB}.Debug|Any CPU.Build.0 = Debug|Any CPU - {8FA74161-0D03-408F-811A-A244C9027BFB}.Debug|x64.ActiveCfg = Debug|Any CPU - {8FA74161-0D03-408F-811A-A244C9027BFB}.Debug|x64.Build.0 = Debug|Any CPU - {8FA74161-0D03-408F-811A-A244C9027BFB}.Debug|x86.ActiveCfg = Debug|Any CPU - {8FA74161-0D03-408F-811A-A244C9027BFB}.Debug|x86.Build.0 = Debug|Any CPU - {8FA74161-0D03-408F-811A-A244C9027BFB}.Debug1|Any CPU.ActiveCfg = Debug|Any CPU - {8FA74161-0D03-408F-811A-A244C9027BFB}.Debug1|Any CPU.Build.0 = Debug|Any CPU - {8FA74161-0D03-408F-811A-A244C9027BFB}.Debug1|x64.ActiveCfg = Debug|Any CPU - {8FA74161-0D03-408F-811A-A244C9027BFB}.Debug1|x64.Build.0 = Debug|Any CPU - {8FA74161-0D03-408F-811A-A244C9027BFB}.Debug1|x86.ActiveCfg = Debug|Any CPU - {8FA74161-0D03-408F-811A-A244C9027BFB}.Debug1|x86.Build.0 = Debug|Any CPU - {8FA74161-0D03-408F-811A-A244C9027BFB}.Release|Any CPU.ActiveCfg = Release|Any CPU - {8FA74161-0D03-408F-811A-A244C9027BFB}.Release|Any CPU.Build.0 = Release|Any CPU - {8FA74161-0D03-408F-811A-A244C9027BFB}.Release|x64.ActiveCfg = Release|Any CPU - {8FA74161-0D03-408F-811A-A244C9027BFB}.Release|x64.Build.0 = Release|Any CPU - {8FA74161-0D03-408F-811A-A244C9027BFB}.Release|x86.ActiveCfg = Release|Any CPU - {8FA74161-0D03-408F-811A-A244C9027BFB}.Release|x86.Build.0 = Release|Any CPU + {9EB9DFC1-C78A-46C0-826A-5ED1A08232C0}.ReleaseWithDbg|Any CPU.ActiveCfg = Release|Any CPU + {9EB9DFC1-C78A-46C0-826A-5ED1A08232C0}.ReleaseWithDbg|Any CPU.Build.0 = Release|Any CPU + {9EB9DFC1-C78A-46C0-826A-5ED1A08232C0}.ReleaseWithDbg|x64.ActiveCfg = Release|Any CPU + {9EB9DFC1-C78A-46C0-826A-5ED1A08232C0}.ReleaseWithDbg|x64.Build.0 = Release|Any CPU + {9EB9DFC1-C78A-46C0-826A-5ED1A08232C0}.ReleaseWithDbg|x86.ActiveCfg = Release|Any CPU + {9EB9DFC1-C78A-46C0-826A-5ED1A08232C0}.ReleaseWithDbg|x86.Build.0 = Release|Any CPU {887F9454-B1F3-47B8-B9F7-48BEBA47193D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {887F9454-B1F3-47B8-B9F7-48BEBA47193D}.Debug|Any CPU.Build.0 = Debug|Any CPU {887F9454-B1F3-47B8-B9F7-48BEBA47193D}.Debug|x64.ActiveCfg = Debug|Any CPU @@ -229,6 +236,36 @@ Global {887F9454-B1F3-47B8-B9F7-48BEBA47193D}.Release|x64.Build.0 = Release|Any CPU {887F9454-B1F3-47B8-B9F7-48BEBA47193D}.Release|x86.ActiveCfg = Release|Any CPU {887F9454-B1F3-47B8-B9F7-48BEBA47193D}.Release|x86.Build.0 = Release|Any CPU + {887F9454-B1F3-47B8-B9F7-48BEBA47193D}.ReleaseWithDbg|Any CPU.ActiveCfg = Release|Any CPU + {887F9454-B1F3-47B8-B9F7-48BEBA47193D}.ReleaseWithDbg|Any CPU.Build.0 = Release|Any CPU + {887F9454-B1F3-47B8-B9F7-48BEBA47193D}.ReleaseWithDbg|x64.ActiveCfg = Release|Any CPU + {887F9454-B1F3-47B8-B9F7-48BEBA47193D}.ReleaseWithDbg|x64.Build.0 = Release|Any CPU + {887F9454-B1F3-47B8-B9F7-48BEBA47193D}.ReleaseWithDbg|x86.ActiveCfg = Release|Any CPU + {887F9454-B1F3-47B8-B9F7-48BEBA47193D}.ReleaseWithDbg|x86.Build.0 = Release|Any CPU + {91739E90-6A8E-433D-B244-5325F8848064}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {91739E90-6A8E-433D-B244-5325F8848064}.Debug|Any CPU.Build.0 = Debug|Any CPU + {91739E90-6A8E-433D-B244-5325F8848064}.Debug|x64.ActiveCfg = Debug|Any CPU + {91739E90-6A8E-433D-B244-5325F8848064}.Debug|x64.Build.0 = Debug|Any CPU + {91739E90-6A8E-433D-B244-5325F8848064}.Debug|x86.ActiveCfg = Debug|Any CPU + {91739E90-6A8E-433D-B244-5325F8848064}.Debug|x86.Build.0 = Debug|Any CPU + {91739E90-6A8E-433D-B244-5325F8848064}.Debug1|Any CPU.ActiveCfg = Debug|Any CPU + {91739E90-6A8E-433D-B244-5325F8848064}.Debug1|Any CPU.Build.0 = Debug|Any CPU + {91739E90-6A8E-433D-B244-5325F8848064}.Debug1|x64.ActiveCfg = Debug|Any CPU + {91739E90-6A8E-433D-B244-5325F8848064}.Debug1|x64.Build.0 = Debug|Any CPU + {91739E90-6A8E-433D-B244-5325F8848064}.Debug1|x86.ActiveCfg = Debug|Any CPU + {91739E90-6A8E-433D-B244-5325F8848064}.Debug1|x86.Build.0 = Debug|Any CPU + {91739E90-6A8E-433D-B244-5325F8848064}.Release|Any CPU.ActiveCfg = Release|Any CPU + {91739E90-6A8E-433D-B244-5325F8848064}.Release|Any CPU.Build.0 = Release|Any CPU + {91739E90-6A8E-433D-B244-5325F8848064}.Release|x64.ActiveCfg = Release|Any CPU + {91739E90-6A8E-433D-B244-5325F8848064}.Release|x64.Build.0 = Release|Any CPU + {91739E90-6A8E-433D-B244-5325F8848064}.Release|x86.ActiveCfg = Release|Any CPU + {91739E90-6A8E-433D-B244-5325F8848064}.Release|x86.Build.0 = Release|Any CPU + {91739E90-6A8E-433D-B244-5325F8848064}.ReleaseWithDbg|Any CPU.ActiveCfg = Release|Any CPU + {91739E90-6A8E-433D-B244-5325F8848064}.ReleaseWithDbg|Any CPU.Build.0 = Release|Any CPU + {91739E90-6A8E-433D-B244-5325F8848064}.ReleaseWithDbg|x64.ActiveCfg = Release|Any CPU + {91739E90-6A8E-433D-B244-5325F8848064}.ReleaseWithDbg|x64.Build.0 = Release|Any CPU + {91739E90-6A8E-433D-B244-5325F8848064}.ReleaseWithDbg|x86.ActiveCfg = Release|Any CPU + {91739E90-6A8E-433D-B244-5325F8848064}.ReleaseWithDbg|x86.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -241,9 +278,8 @@ Global {DD02C60E-560B-40C0-AD7F-523F0B4AA4FD} = {97C226B4-971C-4802-8D35-14E2980FF0C6} {741F6491-57C7-479A-B391-09BBA9FBA9DC} = {97C226B4-971C-4802-8D35-14E2980FF0C6} {9EB9DFC1-C78A-46C0-826A-5ED1A08232C0} = {DD1CE747-341A-4419-8398-0D482E02DE54} - {560CC80B-389B-46FC-9B8C-DA1D62A555D9} = {5DB27B2D-14A5-441F-A861-BAFDB7BAA05B} - {8FA74161-0D03-408F-811A-A244C9027BFB} = {5DB27B2D-14A5-441F-A861-BAFDB7BAA05B} {887F9454-B1F3-47B8-B9F7-48BEBA47193D} = {5DB27B2D-14A5-441F-A861-BAFDB7BAA05B} + {91739E90-6A8E-433D-B244-5325F8848064} = {5DB27B2D-14A5-441F-A861-BAFDB7BAA05B} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {4BF9CC66-BB0E-4400-BCF8-5BF7F5DA800A} diff --git a/src/BRS.Common.Device/BRS.Common.Device.csproj b/src/BRS.Common.Device/BRS.Common.Device.csproj index 22bdf4d..9bbf146 100644 --- a/src/BRS.Common.Device/BRS.Common.Device.csproj +++ b/src/BRS.Common.Device/BRS.Common.Device.csproj @@ -96,6 +96,15 @@ ..\..\packages\Newtonsoft.Json.12.0.3\lib\net45\Newtonsoft.Json.dll + + ..\..\packages\STTech.BytesIO.Core.2.9.3\lib\net45\STTech.BytesIO.Core.dll + + + ..\..\packages\STTech.BytesIO.Tcp.2.9.3\lib\net45\STTech.BytesIO.Tcp.dll + + + ..\..\packages\STTech.CodePlus.1.4.0\lib\net45\STTech.CodePlus.dll + ..\..\packages\System.Buffers.4.5.1\lib\net461\System.Buffers.dll @@ -147,6 +156,7 @@ + diff --git a/src/BRS.Common.Device/DeviceBase/RobotBase.cs b/src/BRS.Common.Device/DeviceBase/RobotBase.cs index 7e0eb10..94e4be4 100644 --- a/src/BRS.Common.Device/DeviceBase/RobotBase.cs +++ b/src/BRS.Common.Device/DeviceBase/RobotBase.cs @@ -135,587 +135,8 @@ namespace BRS.Common.Base public class RobotInitialConfigBase : InitialConfigBase//, IWarningSetCollection { - [Category("驱动类型")] - [Description("驱动类型")] - [DisplayName("驱动类型")] - //[TypeConverter(typeof(DeviceTypeConverter))] - [TypeConverter(typeof(DeviceTypeSelectorConverter))] - public override string DriverType { get; set; } - - - #region 上料关键点位 - [Category("1.机械臂关键点位")] - [Description("机械臂起始位置P0")] - [DisplayName("机械臂起始位置P0")] - [TypeConverter(typeof(ComplexObjectConvert))] - [Editor(typeof(PropertyObjectEditor), typeof(UITypeEditor))] - public RobotPoint RobotOriginPoint { get; set; } = new RobotPoint(); - - [Category("2.机械臂上料关键点位")] - [Description("1号机1号位抓取点位置P101")] - [DisplayName("1号机1号位抓取点位置P101")] - [TypeConverter(typeof(ComplexObjectConvert))] - [Editor(typeof(PropertyObjectEditor), typeof(UITypeEditor))] - public RobotPoint RobotMachine1Entrance1GrabPoint { get; set; } = new RobotPoint(); - - [Category("2.机械臂上料关键点位")] - [Description("1号机2号位抓取点位置P201")] - [DisplayName("1号机2号位抓取点位置P201")] - [TypeConverter(typeof(ComplexObjectConvert))] - [Editor(typeof(PropertyObjectEditor), typeof(UITypeEditor))] - public RobotPoint RobotMachine1Entrance2GrabPoint { get; set; } = new RobotPoint(); - - [Category("2.机械臂上料关键点位")] - [Description("2号机1号位抓取点位置P101")] - [DisplayName("2号机1号位抓取点位置P101")] - [TypeConverter(typeof(ComplexObjectConvert))] - [Editor(typeof(PropertyObjectEditor), typeof(UITypeEditor))] - public RobotPoint RobotMachine2Entrance1GrabPoint { get; set; } = new RobotPoint(); - - [Category("2.机械臂上料关键点位")] - [Description("1号机2号位抓取点位置P201")] - [DisplayName("2号机2号位抓取点位置P201")] - [TypeConverter(typeof(ComplexObjectConvert))] - [Editor(typeof(PropertyObjectEditor), typeof(UITypeEditor))] - public RobotPoint RobotMachine2Entrance2GrabPoint { get; set; } = new RobotPoint(); - - [Category("2.机械臂上料关键点位")] - [Description("1号机1号位放料位置P102")] - [DisplayName("1号机1号位放料位置P102")] - [TypeConverter(typeof(ComplexObjectConvert))] - [Editor(typeof(PropertyObjectEditor), typeof(UITypeEditor))] - public RobotPoint RobotMachine1Entrance1UpPlacePoint { get; set; } = new RobotPoint(); - - [Category("2.机械臂上料关键点位")] - [Description("1号机2号位放料位置P202")] - [DisplayName("1号机2号位放料位置P202")] - [TypeConverter(typeof(ComplexObjectConvert))] - [Editor(typeof(PropertyObjectEditor), typeof(UITypeEditor))] - public RobotPoint RobotMachine1Entrance2UpPlacePoint { get; set; } = new RobotPoint(); - - [Category("2.机械臂上料关键点位")] - [Description("2号机1号位放料位置P102")] - [DisplayName("2号机1号位放料位置P102")] - [TypeConverter(typeof(ComplexObjectConvert))] - [Editor(typeof(PropertyObjectEditor), typeof(UITypeEditor))] - public RobotPoint RobotMachine2Entrance1UpPlacePoint { get; set; } = new RobotPoint(); - - [Category("2.机械臂上料关键点位")] - [Description("2号机2号位放料位置P202")] - [DisplayName("2号机2号位放料位置P202")] - [TypeConverter(typeof(ComplexObjectConvert))] - [Editor(typeof(PropertyObjectEditor), typeof(UITypeEditor))] - public RobotPoint RobotMachine2Entrance2UpPlacePoint { get; set; } = new RobotPoint(); - #endregion - - - #region 上料点组 - [Category("3.机械臂上料项目")] - [Description("1号机1号位上料点组")] - [DisplayName("1号机1号位上料点组")] - [TypeConverter(typeof(CollectionCountConvert))] - [Editor(typeof(ComplexCollectionEditor), typeof(UITypeEditor))] - public List RobotMachine1Entrance1UpPoints { get; set; } = new List(); - - [Category("3.机械臂上料项目")] - [Description("1号机2号位上料点组")] - [DisplayName("1号机2号位上料点组")] - [TypeConverter(typeof(CollectionCountConvert))] - [Editor(typeof(ComplexCollectionEditor), typeof(UITypeEditor))] - public List RobotMachine1Entrance2UpPoints { get; set; } = new List(); - - [Category("3.机械臂上料项目")] - [Description("2号机1号位上料点组")] - [DisplayName("2号机1号位上料点组")] - [TypeConverter(typeof(CollectionCountConvert))] - [Editor(typeof(ComplexCollectionEditor), typeof(UITypeEditor))] - public List RobotMachine2Entrance1UpPoints { get; set; } = new List(); - - [Category("3.机械臂上料项目")] - [Description("2号机2号位上料点组")] - [DisplayName("2号机2号位上料点组")] - [TypeConverter(typeof(CollectionCountConvert))] - [Editor(typeof(ComplexCollectionEditor), typeof(UITypeEditor))] - public List RobotMachine2Entrance2UpPoints { get; set; } = new List(); - #endregion - - - #region 下料关键点位 - [Category("4.机械臂取料(下料)关键点位")] - [Description("1号机1号位取料(下料)点位置P107")] - [DisplayName("1号机1号位取料(下料)点位置P107")] - [TypeConverter(typeof(ComplexObjectConvert))] - [Editor(typeof(PropertyObjectEditor), typeof(UITypeEditor))] - public RobotPoint RobotMachine1Entrance1TakeTyrePoint { get; set; } = new RobotPoint(); - - //P107点位斜向上 - [Category("4.机械臂取料(下料)关键点位")] - [Description("1号机1号位取料(下料)点位置P107斜上方")] - [DisplayName("1号机1号位取料(下料)点位置P107斜上方")] - [TypeConverter(typeof(ComplexObjectConvert))] - [Editor(typeof(PropertyObjectEditor), typeof(UITypeEditor))] - public RobotPoint RobotMachine1Entrance1TakeTyreTiltUpperPoint { get; set; } = new RobotPoint(); - - [Category("4.机械臂取料(下料)关键点位")] - [Description("1号机2号位取料(下料)点位置P207")] - [DisplayName("1号机2号位取料(下料)点位置P207")] - [TypeConverter(typeof(ComplexObjectConvert))] - [Editor(typeof(PropertyObjectEditor), typeof(UITypeEditor))] - public RobotPoint RobotMachine1Entrance2TakeTyrePoint { get; set; } = new RobotPoint(); - - //P207斜上方 - [Category("4.机械臂取料(下料)关键点位")] - [Description("1号机2号位取料(下料)点位置P207斜上方")] - [DisplayName("1号机2号位取料(下料)点位置P207斜上方")] - [TypeConverter(typeof(ComplexObjectConvert))] - [Editor(typeof(PropertyObjectEditor), typeof(UITypeEditor))] - public RobotPoint RobotMachine1Entrance2TakeTyreTiltUpperPoint { get; set; } = new RobotPoint(); - - [Category("4.机械臂取料(下料)关键点位")] - [Description("2号机1号位取料(下料)点位置P107")] - [DisplayName("2号机1号位取料(下料)点位置P107")] - [TypeConverter(typeof(ComplexObjectConvert))] - [Editor(typeof(PropertyObjectEditor), typeof(UITypeEditor))] - public RobotPoint RobotMachine2Entrance1TakeTyrePoint { get; set; } = new RobotPoint(); - - //2号机1号位下料点斜上方 - [Category("4.机械臂取料(下料)关键点位")] - [Description("2号机1号位取料(下料)点位置P107斜上方")] - [DisplayName("2号机1号位取料(下料)点位置P107斜上方")] - [TypeConverter(typeof(ComplexObjectConvert))] - [Editor(typeof(PropertyObjectEditor), typeof(UITypeEditor))] - public RobotPoint RobotMachine2Entrance1TakeTyreTiltUpperPoint { get; set; } = new RobotPoint(); - - [Category("4.机械臂取料(下料)关键点位")] - [Description("1号机2号位取料(下料)点位置P207")] - [DisplayName("2号机2号位取料(下料)点位置P207")] - [TypeConverter(typeof(ComplexObjectConvert))] - [Editor(typeof(PropertyObjectEditor), typeof(UITypeEditor))] - public RobotPoint RobotMachine2Entrance2TakeTyrePoint { get; set; } = new RobotPoint(); - - //2号机1号位下料点斜上方 - [Category("4.机械臂取料(下料)关键点位")] - [Description("2号机2号位取料(下料)点位置P207斜上方")] - [DisplayName("2号机2号位取料(下料)点位置P207斜上方")] - [TypeConverter(typeof(ComplexObjectConvert))] - [Editor(typeof(PropertyObjectEditor), typeof(UITypeEditor))] - public RobotPoint RobotMachine2Entrance2TakeTyreTiltUpperPoint { get; set; } = new RobotPoint(); - - [Category("4.机械臂取料(下料)关键点位")] - [Description("1号机1号位放置点位置P108")] - [DisplayName("1号机1号位放置点位置P108")] - [TypeConverter(typeof(ComplexObjectConvert))] - [Editor(typeof(PropertyObjectEditor), typeof(UITypeEditor))] - public RobotPoint RobotMachine1Entrance1DownPlacePoint { get; set; } = new RobotPoint(); - - [Category("4.机械臂取料(下料)关键点位")] - [Description("1号机2号位放置点位置P208")] - [DisplayName("1号机2号位放置点位置P208")] - [TypeConverter(typeof(ComplexObjectConvert))] - [Editor(typeof(PropertyObjectEditor), typeof(UITypeEditor))] - public RobotPoint RobotMachine1Entrance2DownPlacePoint { get; set; } = new RobotPoint(); - - [Category("4.机械臂取料(下料)关键点位")] - [Description("2号机1号位放置点位置P108")] - [DisplayName("2号机1号位放置点位置P108")] - [TypeConverter(typeof(ComplexObjectConvert))] - [Editor(typeof(PropertyObjectEditor), typeof(UITypeEditor))] - public RobotPoint RobotMachine2Entrance1DownPlacePoint { get; set; } = new RobotPoint(); - - [Category("4.机械臂取料(下料)关键点位")] - [Description("1号机2号位放置点位置P208")] - [DisplayName("2号机2号位放置点位置P208")] - [TypeConverter(typeof(ComplexObjectConvert))] - [Editor(typeof(PropertyObjectEditor), typeof(UITypeEditor))] - public RobotPoint RobotMachine2Entrance2DownPlacePoint { get; set; } = new RobotPoint(); - - #endregion - - - #region 下料点组 - [Category("5.机械臂取料(下料)项目")] - [Description("1号机1号位取料(下料)点组")] - [DisplayName("1号机1号位取料(下料)点组")] - [TypeConverter(typeof(CollectionCountConvert))] - [Editor(typeof(ComplexCollectionEditor), typeof(UITypeEditor))] - public List RobotMachine1Entrance1DownPoints { get; set; } = new List(); - - [Category("5.机械臂取料(下料)项目")] - [Description("1号机2号位取料(下料)点组")] - [DisplayName("1号机2号位取料(下料)点组")] - [TypeConverter(typeof(CollectionCountConvert))] - [Editor(typeof(ComplexCollectionEditor), typeof(UITypeEditor))] - public List RobotMachine1Entrance2DownPoints { get; set; } = new List(); - - [Category("5.机械臂取料(下料)项目")] - [Description("2号机1号位取料(下料)点组")] - [DisplayName("2号机1号位取料(下料)点组")] - [TypeConverter(typeof(CollectionCountConvert))] - [Editor(typeof(ComplexCollectionEditor), typeof(UITypeEditor))] - public List RobotMachine2Entrance1DownPoints { get; set; } = new List(); - - [Category("5.机械臂取料(下料)项目")] - [Description("2号机2号位取料(下料)点组")] - [DisplayName("2号机2号位取料(下料)点组")] - [TypeConverter(typeof(CollectionCountConvert))] - [Editor(typeof(ComplexCollectionEditor), typeof(UITypeEditor))] - public List RobotMachine2Entrance2DownPoints { get; set; } = new List(); - #endregion - - - [Category("机械臂上料项目")] - [Description("路径上料移动点组")] - [DisplayName("路径上料移动点组")] - [TypeConverter(typeof(CollectionCountConvert))] - [Editor(typeof(ComplexCollectionEditor), typeof(UITypeEditor))] - public List RobotUpMovePoints { get; set; } = new List(); - - - [Category("机械臂上料项目")] - [Description("路径上料返回点组")] - [DisplayName("路径上料返回点组")] - [TypeConverter(typeof(CollectionCountConvert))] - [Editor(typeof(ComplexCollectionEditor), typeof(UITypeEditor))] - //[TypeConverter(typeof(SimpleCollectionConvert))] - public List RobotUPBackPoints { get; set; } = new List(); - - - [Category("机械臂下料项目")] - [Description("路径下料移动点组")] - [DisplayName("路径下料移动点组")] - [TypeConverter(typeof(CollectionCountConvert))] - [Editor(typeof(ComplexCollectionEditor), typeof(UITypeEditor))] - public List RobotDownMovePoints { get; set; } = new List(); - - - [Category("机械臂下料项目")] - [Description("路径下料返回点组")] - [DisplayName("路径下料返回点组")] - [TypeConverter(typeof(CollectionCountConvert))] - [Editor(typeof(ComplexCollectionEditor), typeof(UITypeEditor))] - //[TypeConverter(typeof(SimpleCollectionConvert))] - public List RobotDownBackPoints { get; set; } = new List(); - - - [Category("机械臂下料项目")] - [Description("路径下料返回f辅助点组")] - [DisplayName("路径下料返回f辅助点组")] - [TypeConverter(typeof(CollectionCountConvert))] - [Editor(typeof(ComplexCollectionEditor), typeof(UITypeEditor))] - //[TypeConverter(typeof(SimpleCollectionConvert))] - public List ConfigRobotDownBackPoints { get; set; } = new List(); - - - [Category("机械臂项目")] - [Description("机械臂起始位置")] - [DisplayName("机械臂起始位置")] - [TypeConverter(typeof(ComplexObjectConvert))] - [Editor(typeof(PropertyObjectEditor), typeof(UITypeEditor))] - public RobotPoint RobotInitPosition { get; set; } = new RobotPoint(); - - - [Category("机械臂项目")] - [Description("机械臂运动点X1位")] - [DisplayName("机械臂运动点X1位")] - [TypeConverter(typeof(ComplexObjectConvert))] - [Editor(typeof(PropertyObjectEditor), typeof(UITypeEditor))] - public RobotPoint X1Point { get; set; } = new RobotPoint(); - - [Category("机械臂项目")] - [Description("机械臂运动点X2位")] - [DisplayName("机械臂运动点X2位")] - [TypeConverter(typeof(ComplexObjectConvert))] - [Editor(typeof(PropertyObjectEditor), typeof(UITypeEditor))] - public RobotPoint X2Point { get; set; } = new RobotPoint(); - - [Category("机械臂项目")] - [Description("轮胎半径")] - [DisplayName("轮胎半径")] - public string RobotTyReRadius { get; set; } - - [Category("机械臂项目")] - [Description("轮胎尺寸")] - [DisplayName("轮胎尺寸")] - // [TypeConverter(typeof(CollectionCountConvert))] - // [Editor(typeof(ComplexCollectionEditor), typeof(UITypeEditor))] - //[TypeConverter(typeof(SimpleCollectionConvert))] - public string SetWhoolSize { get; set; } = "17"; - - [Category("机械臂夹爪项目")] - [Description("夹紧点")] - [DisplayName("夹紧点")] - public string GripperFastenPosition { get; set; } = "75000"; - - [Category("机械臂夹爪项目")] - [Description("放松点")] - [DisplayName("放松点")] - public string GripperLoosenPosition { get; set; } = "40000"; - - [Category("机械臂夹爪项目")] - [Description("全松点")] - [DisplayName("全松点")] - public string GripperAllLoosenPosition { get; set; } = "40000"; - - - [Category("机械臂夹爪项目")] - [Description("全紧点")] - [DisplayName("全紧点")] - public string GripperAllFastenPosition { get; set; } = "92000"; - - #region 12寸轮胎 - [Category("机械臂项目12寸轮胎")] - [Description("上料夹紧点")] - [DisplayName("上料夹紧点")] - public string Wheel12GripperUpFasten { get; set; } = "40000"; - - [Category("机械臂项目12寸轮胎")] - [Description("上料放松点")] - [DisplayName("上料放松点")] - public string Wheel12GripperUpLoosen { get; set; } = "75000"; - - [Category("机械臂项目12寸轮胎")] - [Description("下料夹紧点")] - [DisplayName("下料夹紧点")] - public string Wheel12GripperDownFasten { get; set; } = "40000"; - - [Category("机械臂项目12寸轮胎")] - [Description("下料放松点")] - [DisplayName("下料放松点")] - public string Wheel12GripperDownLoosen { get; set; } = "2000"; - #endregion - - #region 13寸轮胎 - [Category("机械臂项目13寸轮胎")] - [Description("上料夹紧点")] - [DisplayName("上料夹紧点")] - public string Wheel13GripperUpFasten { get; set; } = "40000"; - - [Category("机械臂项目13寸轮胎")] - [Description("上料放松点")] - [DisplayName("上料放松点")] - public string Wheel13GripperUpLoosen { get; set; } = "75000"; - - [Category("机械臂项目13寸轮胎")] - [Description("下料夹紧点")] - [DisplayName("下料夹紧点")] - public string Wheel13GripperDownFasten { get; set; } = "40000"; - - [Category("机械臂项目13寸轮胎")] - [Description("下料放松点")] - [DisplayName("下料放松点")] - public string Wheel13GripperDownLoosen { get; set; } = "2000"; - #endregion - - #region 14寸轮胎 - [Category("机械臂项目14寸轮胎")] - [Description("上料夹紧点")] - [DisplayName("上料夹紧点")] - public string Wheel14GripperUpFasten { get; set; } = "40000"; - - [Category("机械臂项目14寸轮胎")] - [Description("上料放松点")] - [DisplayName("上料放松点")] - public string Wheel14GripperUpLoosen { get; set; } = "75000"; - - [Category("机械臂项目14寸轮胎")] - [Description("下料夹紧点")] - [DisplayName("下料夹紧点")] - public string Wheel14GripperDownFasten { get; set; } = "40000"; - - [Category("机械臂项目14寸轮胎")] - [Description("下料放松点")] - [DisplayName("下料放松点")] - public string Wheel14GripperDownLoosen { get; set; } = "2000"; - #endregion - - #region 15寸轮胎 - [Category("机械臂项目15寸轮胎")] - [Description("上料夹紧点")] - [DisplayName("上料夹紧点")] - public string Wheel15GripperUpFasten { get; set; } = "40000"; - - [Category("机械臂项目15寸轮胎")] - [Description("上料放松点")] - [DisplayName("上料放松点")] - public string Wheel15GripperUpLoosen { get; set; } = "75000"; - - [Category("机械臂项目15寸轮胎")] - [Description("下料夹紧点")] - [DisplayName("下料夹紧点")] - public string Wheel15GripperDownFasten { get; set; } = "40000"; - - [Category("机械臂项目15寸轮胎")] - [Description("下料放松点")] - [DisplayName("下料放松点")] - public string Wheel15GripperDownLoosen { get; set; } = "2000"; - #endregion - - #region 16寸轮胎 - [Category("机械臂项目16寸轮胎")] - [Description("上料夹紧点")] - [DisplayName("上料夹紧点")] - public string Wheel16GripperUpFasten { get; set; } = "40000"; - - [Category("机械臂项目16寸轮胎")] - [Description("上料放松点")] - [DisplayName("上料放松点")] - public string Wheel16GripperUpLoosen { get; set; } = "75000"; - - - [Category("机械臂项目16寸轮胎")] - [Description("下料夹紧点")] - [DisplayName("下料夹紧点")] - public string Wheel16GripperDownFasten { get; set; } = "40000"; - - [Category("机械臂项目16寸轮胎")] - [Description("下料放松点")] - [DisplayName("下料放松点")] - public string Wheel16GripperDownLoosen { get; set; } = "2000"; - #endregion - - #region 17寸轮胎 - [Category("机械臂项目17寸轮胎")] - [Description("上料夹紧点")] - [DisplayName("上料夹紧点")] - public string Wheel17GripperUpFasten { get; set; } = "75000"; - - [Category("机械臂项目17寸轮胎")] - [Description("上料放松点")] - [DisplayName("上料放松点")] - public string Wheel17GripperUpLoosen { get; set; } = "75000"; - - [Category("机械臂项目17寸轮胎")] - [Description("下料夹紧点")] - [DisplayName("下料夹紧点")] - public string Wheel17GripperDownFasten { get; set; } = "40000"; - - [Category("机械臂项目17寸轮胎")] - [Description("下料放松点")] - [DisplayName("下料放松点")] - public string Wheel17GripperDownLoosen { get; set; } = "2000"; - #endregion - - #region 18寸轮胎 - [Category("机械臂项目18寸轮胎")] - [Description("上料夹紧点")] - [DisplayName("上料夹紧点")] - public string Wheel18GripperUpFasten { get; set; } = "75000"; - - [Category("机械臂项目18寸轮胎")] - [Description("上料放松点")] - [DisplayName("上料放松点")] - public string Wheel18GripperUpLoosen { get; set; } = "75000"; - - [Category("机械臂项目18寸轮胎")] - [Description("下料夹紧点")] - [DisplayName("下料夹紧点")] - public string Wheel18GripperDownFasten { get; set; } = "40000"; - - [Category("机械臂项目18寸轮胎")] - [Description("下料放松点")] - [DisplayName("下料放松点")] - public string Wheel18GripperDownLoosen { get; set; } = "2000"; - #endregion - - - [Category("机械臂项目")] - [Description("1号硫化机1号位")] - [DisplayName("1号硫化机1号位")] - [TypeConverter(typeof(ComplexObjectConvert))] - [Editor(typeof(PropertyObjectEditor), typeof(UITypeEditor))] - public RobotPoint X1_1Point { get; set; } = new RobotPoint(); - - [Category("机械臂项目")] - [Description("1号硫化机2号位")] - [DisplayName("1号硫化机2号位")] - [TypeConverter(typeof(ComplexObjectConvert))] - [Editor(typeof(PropertyObjectEditor), typeof(UITypeEditor))] - public RobotPoint X1_2Point { get; set; } = new RobotPoint(); - [Category("机械臂项目")] - [Description("2号硫化机1号位")] - [DisplayName("2号硫化机1号位")] - [TypeConverter(typeof(ComplexObjectConvert))] - [Editor(typeof(PropertyObjectEditor), typeof(UITypeEditor))] - public RobotPoint X2_1Point { get; set; } = new RobotPoint(); - [Category("机械臂项目")] - [Description("2号硫化机2号位")] - [DisplayName("2号硫化机2号位")] - [TypeConverter(typeof(ComplexObjectConvert))] - [Editor(typeof(PropertyObjectEditor), typeof(UITypeEditor))] - public RobotPoint X2_2Point { get; set; } = new RobotPoint(); - - [Category("机械臂项目")] - [Description("硫化轮胎取出位置")] - [DisplayName("硫化轮胎取出位置")] - [TypeConverter(typeof(ComplexObjectConvert))] - [Editor(typeof(PropertyObjectEditor), typeof(UITypeEditor))] - public RobotPoint TakeOutPoint { get; set; } = new RobotPoint(); - - - //[Category("机械臂项目")] - //[Description("路径移动")] - //[DisplayName("路径移动")] - - //[TypeConverter(typeof(CollectionCountConvert))] - //[Editor(typeof(ComplexCollectionEditor), typeof(UITypeEditor))] - //public List RobotMovePoints { get; set; } = new List(); - - //[Category("机械臂项目")] - //[Description("路径返回")] - //[DisplayName("路径返回")] - - //[TypeConverter(typeof(CollectionCountConvert))] - //[Editor(typeof(ComplexCollectionEditor), typeof(UITypeEditor))] - //public List RobotBackPoints { get; set; } = new List(); - - //[Category("驱动类型")] - //[Description("驱动类型")] - //[DisplayName("驱动类型")] - //[TypeConverter(typeof(DeviceTypeSelectorConverter))] - //public override string DriverType { get; set; } - - //[Category("机器人设置")] - //[Description("机器人通信IP")] - //[DisplayName("机器人通信IP")] - //public string RobotIP { get; set; } = "0.0.0.0"; - - //[Category("机器人设置")] - //[Description("机器人通信端口")] - //[DisplayName("机器人通信端口")] - //public int RobotPort { get; set; } - - //[Category("通信设置")] - //[Description("反馈超时设置,单位ms")] - //[DisplayName("反馈超时设置,单位ms")] - //public int ReplyTimeout { get; set; } = 1000; - - //[Category("通信设置")] - //[Description("反馈超时重试次数")] - //[DisplayName("反馈超时重试次数")] - //public int TimeoutRetryTimes { get; set; } = 5; - - //[Category("通信设置")] - //[Description("协议文本结束字符")] - //[DisplayName("协议文本结束字符")] - //public string EndChar { get; set; } = "#"; - - //[Category("通信设置")] - //[Description("协议内容分隔字符")] - //[DisplayName("协议内容分隔字符")] - //public string Seperator { get; set; } = ","; - - //[Category("动作设置")] - //[Description("动作超时设置,单位min")] - //[DisplayName("动作超时设置,单位min")] - //public float OperationTimeout { get; set; } = 1; - - - //[Category("警报配置")] - //[Description("警报配置列表")] - //[DisplayName("警报配置")] - //[TypeConverter(typeof(CollectionCountConvert))] - //[Editor(typeof(WarningSetsEditor), typeof(UITypeEditor))] - //public List WarningSetCollection { get; set; } = new List(); + + } diff --git a/src/BRS.Common.Device/DeviceBase/TCPSeverBase.cs b/src/BRS.Common.Device/DeviceBase/TCPSeverBase.cs new file mode 100644 index 0000000..5672523 --- /dev/null +++ b/src/BRS.Common.Device/DeviceBase/TCPSeverBase.cs @@ -0,0 +1,126 @@ +using BRS.Common.Base; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using STTech.BytesIO.Tcp; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace BRS.Common.Base +{ + public class TCPSeverInitialConfigBase : InitialConfigBase + { + [Category("连接配置")] + [Description("远程IP地址")] + [DisplayName("远程IP")] + public string RemoteIP { get; set; } + + [Category("连接配置")] + [Description("远程端口")] + [DisplayName("远程端口")] + public int RemotePort { get; set; } + } + public abstract class TCPSeverBase : DeviceBase + { + public TCPSeverInitialConfigBase IConfig + { + get => InitialConfig as TCPSeverInitialConfigBase; + } + + + /// + /// 创建临时变量 + /// + public string KawasakiRobotResponse; + + public TcpServer server; + public event Action OnTcpDataReceived; + public event Action OnTirggeredConnectClose; + public event Action OnTirggeredConnectOpen; + protected override void Init() + { + server = new TcpServer(); + server.Host = IConfig.RemoteIP; + server.Port = IConfig.RemotePort; + + } + + protected override void Start() + { + + server.StartAsync(); + + server.Started += Server_Started; + + server.ClientConnected += Server_ClientConnected; + server.ClientDisconnected += Server_ClientDisconnected; + server.Closed += Server_Closed; + } + + protected override void Stop() + { + server.CloseAsync(); + + } + + private void Server_ClientDisconnected(object sender, STTech.BytesIO.Tcp.Entity.ClientDisconnectedEventArgs e) + { + Print($"客户端[{e.Client.Host}:{e.Client.Port}]断开连接"); + OnTirggeredConnectClose?.Invoke(); + } + + private void Server_ClientConnected(object sender, STTech.BytesIO.Tcp.Entity.ClientConnectedEventArgs e) + { + Print($"客户端[{e.Client.Host}:{e.Client.Port}]连接成功"); + OnTirggeredConnectOpen?.Invoke(); + e.Client.OnDataReceived += Client_OnDataReceived; + // e.Client.UseHeartbeatTimeout(3000); + } + + private void Client_OnDataReceived(object sender, STTech.BytesIO.Core.Entity.DataReceivedEventArgs e) + { + TcpClient tcpClient = (TcpClient)sender; + //Print($"来自客户端[{tcpClient.RemoteEndPoint}]的消息: {e.Data.EncodeToString("GBK")}"); + OnTcpDataReceived?.Invoke(e.Data); + //foreach (TcpClient client in server.Clients) + //{ + // if (client != tcpClient) + // { + // client.SendAsync(e.Data); + // } + //} + } + + + + private void Server_Closed(object sender, EventArgs e) + { + // TcpClient tcpClient = (TcpClient)sender; + + // Print("停止监听"); + } + + private void Server_Started(object sender, EventArgs e) + { + TcpClient tcpClient = (TcpClient)sender; + // tcpClient.Connect(); + //Print("开始监听"); + } + + + private void Print(string msg) + { + //tbLog.AppendText($"[{DateTime.Now}] {msg}\r\n"); + } + public void SendMessage(string msg) + { + foreach (TcpClient client in server.Clients) + { + byte[] sendBuff = System.Text.Encoding.ASCII.GetBytes(msg); + client.SendAsync(sendBuff); + } + } + + } +} diff --git a/src/BRS.Common.Device/app.config b/src/BRS.Common.Device/app.config index 4cd8ed8..e26e9d3 100644 --- a/src/BRS.Common.Device/app.config +++ b/src/BRS.Common.Device/app.config @@ -1,19 +1,19 @@ - + - - + + - - + + - - + + - + diff --git a/src/BRS.Common.Device/packages.config b/src/BRS.Common.Device/packages.config index 2d58c8d..12d9610 100644 --- a/src/BRS.Common.Device/packages.config +++ b/src/BRS.Common.Device/packages.config @@ -4,6 +4,9 @@ + + + diff --git a/src/BRS.Common.Model/BRS.Common.Model.csproj b/src/BRS.Common.Model/BRS.Common.Model.csproj index d14bdd5..29d83bc 100644 --- a/src/BRS.Common.Model/BRS.Common.Model.csproj +++ b/src/BRS.Common.Model/BRS.Common.Model.csproj @@ -1,6 +1,6 @@  - + Debug @@ -95,7 +95,7 @@ ..\..\packages\OpenCvSharp4.4.6.0.20220608\lib\netstandard2.0\OpenCvSharp.dll - ..\..\packages\OpenCvSharp4.Extensions.4.6.0.20220608\lib\netstandard2.0\OpenCvSharp.Extensions.dll + ..\..\packages\OpenCvSharp4.Extensions.4.5.5.20211231\lib\netstandard2.0\OpenCvSharp.Extensions.dll @@ -259,6 +259,6 @@ 这台计算机上缺少此项目引用的 NuGet 程序包。使用“NuGet 程序包还原”可下载这些程序包。有关更多信息,请参见 http://go.microsoft.com/fwlink/?LinkID=322105。缺少的文件是 {0}。 - + \ No newline at end of file diff --git a/src/BRS.Common.Model/Helper/EnumHelper.cs b/src/BRS.Common.Model/Helper/EnumHelper.cs index 55f8d05..4b669b2 100644 --- a/src/BRS.Common.Model/Helper/EnumHelper.cs +++ b/src/BRS.Common.Model/Helper/EnumHelper.cs @@ -519,6 +519,19 @@ namespace BRS.Common.Model.Helper CameraRelativeMove = 12, } + public enum DownCirce + { + Unknown = 0, + /// + /// 标志着机械臂正在运动的状态 + /// + DownCirce, + /// + /// 标志着机械臂运动完成的状态 + /// + DownCirceRuning, + } + /// /// 马达/运动板卡运行模式 /// @@ -677,7 +690,67 @@ namespace BRS.Common.Model.Helper [Description("更新批次信息")] RequestBatchNO, } + public enum ProcessStatus + { + Unknown = 0, + PlcInit, + /// + /// 第七轴运动或者示教点移动 + /// + Init, + /// + /// 第七轴移动到位 + /// + InitPlc, + PMoldReady, + PPLCRobotInit, + MoveInit_Y, + MoveInit, + + /// + /// 机械臂相机离目标螺丝测距30CM + /// + Measure, + /// + /// 打开光源 + /// + OpenLight, + /// + /// 关闭光源 + /// + ClodeLight, + /// + /// 视觉定位 + /// + CVLocation, + /// + /// 拧紧轴发送启动命令 + /// + StartRun, + StartRunDown, + /// + /// 循环拧送螺丝 + /// + StartRuning, + Finish, + /// + /// 完成拧松螺丝并对下一螺丝做准备工作 + /// + RobotFinish, + /// + /// 机器人下电 所有第七轴回归初始位置 + /// + RobotPLCInit, + /// + /// 回归初始位置完成,流程结束 + /// + RobotPLCInitFinish, + ALLFinish, + Warning, + Waiting, + WaitingZLS, + } public enum MachineState { Unknown = 0, @@ -717,56 +790,68 @@ namespace BRS.Common.Model.Helper ClearProduct , } - + /// + /// 川崎机器人的状态,运动停止或者正在进行 + /// + public enum KawasakiRobotStatus + { + Unknown = 0, + /// + /// 机械臂正在运动的状态 + /// + Stoped, + /// + /// 机械臂运动完成的状态 + /// + Runing, + } public enum RobotsStatus { Unknown = 0, - Inplace , - Claming, - Relasing, - Moving , - Wating , - Pweroff, - Reset , - + PowerOn, + Move, + /// + /// 机械臂运动状态 + /// + Runing, + /// + /// 机械臂空闲状态 + /// + Release, + MoveInit, + PowerOff, + } - public enum ProcessStatus + public enum PLCStateWarm { Unknown = 0, /// - /// 初始化点 + /// 急停红灯 /// - Init, - - MesureingInit, - MesureingInitPLC, - Mesureing , - MesureingPLC, - Claim , - ClaimPLC, - Runing , - RunFinish, - Loosen, - LoosenPLC, - TakeOffMove, - TakeOffMovePLC, - TakeOffMovePLC_2, - TakeOff,/// - /// 取出轮胎 - /// - /// - TakeOffCaim, - TakeOffPLC, - TakeOffPoint, - TakeOffPointCaim, - TakeOffPointCaimFlag, - TakeOffWhool, - Resetting , - Closing , - ClearProduct , - } + ProStop, + /// + /// 程序运行绿灯 + /// + Running, + /// + /// 手动模式 + /// + HandModel, + /// + /// 自动模式 + /// + ResetModel, + /// + /// 程序不运行 + /// + Alarm, + XianWeiAram, + Robot1LeftAlarm, + Robot1RightAlarm, + + } public enum ResultState { diff --git a/src/BRS.Common.Model/Interface/IProcessConfig.cs b/src/BRS.Common.Model/Interface/IProcessConfig.cs index 3de7d95..b3bce79 100644 --- a/src/BRS.Common.Model/Interface/IProcessConfig.cs +++ b/src/BRS.Common.Model/Interface/IProcessConfig.cs @@ -38,8 +38,8 @@ namespace BRS.Common.Interface List PLCConfigCollection { get; set; } List DeviceConfigs { get; set; } - - List RobotConfigCollection { get; set; } + List KawasakiRobotConfigCollection { get; set; } + //List RobotConfigCollection { get; set; } #endregion diff --git a/src/BRS.Common.Model/Model/CustomizedPoint.cs b/src/BRS.Common.Model/Model/CustomizedPoint.cs index 537604d..eb0a9a5 100644 --- a/src/BRS.Common.Model/Model/CustomizedPoint.cs +++ b/src/BRS.Common.Model/Model/CustomizedPoint.cs @@ -7,6 +7,7 @@ using System.ComponentModel; using System.Drawing; using System.Threading.Tasks; using static BRS.Common.Model.Helper.EnumHelper; +using System.Drawing.Design; namespace BRS.Common.Model { @@ -716,6 +717,157 @@ namespace BRS.Common.Model public float B; public float C; } + public class CQRobotPoint : IComplexDisplay + { + [Category("点位信息")] + [Description("坐标X")] + public float X { get; set; } + + [Category("点位信息")] + [Description("坐标Y")] + public float Y { get; set; } + + [Category("点位信息")] + [Description("坐标Z")] + public float Z { get; set; } + + [Category("点位信息")] + [Description("角度O")] + public float O { get; set; } + + [Category("点位信息")] + [Description("角度A")] + public float A { get; set; } + + [Category("点位信息")] + [Description("角度T")] + public float T { get; set; } + + public string GetDisplayText() + { + return $"X:{X.ToString()} Y:{Y.ToString()} Z:{Z.ToString()} O:{O.ToString()} A:{A.ToString()} T:{T.ToString()}"; + } + + public double[] GetArray() + { + return new double[] { X, Y, Z, O, A, T }; + } + + public static CQRobotPoint GetRobotPointByArray(double[] array) + { + if (array.Length != 6) + { + return null; + } + + CQRobotPoint point = new CQRobotPoint + { + X = (float)array[0], + Y = (float)array[1], + Z = (float)array[2], + O = (float)array[3], + A = (float)array[4], + T = (float)array[5] + }; + + return point; + } + + public static float GetDistance(RobotPoint pointA, RobotPoint pointB) + { + return (float)Math.Sqrt(Math.Pow(pointA.X - pointB.X, 2) + Math.Pow(pointA.Y - pointB.Y, 2) + Math.Pow(pointA.Z - pointB.Z, 2)); + } + } + public class VPVRPoint : IComplexDisplay + { + + [Category("点位信息")] + [Description("坐标X")] + public float X { get; set; } + + [Category("点位信息")] + [Description("坐标Y")] + public float Y { get; set; } + + [Category("点位信息")] + [Description("坐标Z")] + public float Z { get; set; } + public string GetDisplayText() + { + return $"X:{X.ToString()} Y:{Y.ToString()} Z:{Z.ToString()}"; + } + } + public class XYPoint : IComplexDisplay + { + + [Category("点位信息")] + [Description("坐标X")] + public float X { get; set; } + + [Category("点位信息")] + [Description("坐标Y")] + public float Y { get; set; } + + + public string GetDisplayText() + { + return $"X:{X.ToString()} Y:{Y.ToString()} "; + } + } + public class DiffVPVRPoint : IComplexDisplay + { + [Category("标定组类型ID*")] + [Description("标定组类型ID")] + //[TypeConverter(typeof(DeviceIdSelectorConverter))] + [DisplayName("标定组类型ID")] + public int CVTypeID { get; set; } + + + [Category("点位信息")] + [Description("坐标X")] + public float X { get; set; } + + [Category("点位信息")] + [Description("坐标Y")] + public float Y { get; set; } + + [Category("点位信息")] + [Description("坐标Z")] + public float Z { get; set; } + + [Category("第七轴")] + [Description("第七轴")] + public float SevenDis { get; set; } + + [Category("是否启动第七轴配置")] + [Description("是否启用")] + [DisplayName("是否启用")] + public bool SevenDisIsLSEnabled { get; set; } = false; + + [Category("是否是两端特殊螺丝")] + [Description("是否启用")] + [DisplayName("是否启用")] + public bool SpecialIsLSEnabled { get; set; } = false; + + + [Category("特别螺丝配置")] + [Description("是否启用")] + [DisplayName("是否启用")] + public bool IsLSEnabled { get; set; } = false; + + [Category("特别螺丝配置")] + [Description("特别螺丝配置")] + [TypeConverter(typeof(CollectionCountConvert))] + [Editor(typeof(ComplexCollectionEditor), typeof(UITypeEditor))] + [DisplayName("特别螺丝配置")] + public List CVCalibrationConfig { get; set; } = new List(); + public string GetDisplayText() + { + return $"X:{X.ToString()} Y:{Y.ToString()} Z:{Z.ToString()}"; + } + } + + public class RobotPoint : IComplexDisplay { [Category("点位信息")] diff --git a/src/BRS.Common.Model/Model/DeviceOpBind.cs b/src/BRS.Common.Model/Model/DeviceOpBind.cs index aa3b86e..a25c220 100644 --- a/src/BRS.Common.Model/Model/DeviceOpBind.cs +++ b/src/BRS.Common.Model/Model/DeviceOpBind.cs @@ -14,8 +14,79 @@ using System.Windows.Forms.Design; namespace BRS.Common.Model { + public class CVCalibrationConfig : IComplexDisplay + { + + [Category("标定组类型ID")] + [Description("标定组类型ID")] + //[TypeConverter(typeof(DeviceIdSelectorConverter))] + [DisplayName("标定组类型ID")] + public int CVTypeID { get; set; } + + [Category("相机标定设置")] + [Description("示教拍摄点")] + [DisplayName("示教拍摄点")] + [TypeConverter(typeof(CollectionCountConvert))] + [Editor(typeof(ComplexCollectionEditor), typeof(UITypeEditor))] + //[TypeConverter(typeof(SimpleCollectionConvert))] + public List SHIJIao_deviation { get; set; } = new List(); + + [Category("相机标定设置")] + [Description("VP点组")] + [DisplayName("VP点组")] + [TypeConverter(typeof(CollectionCountConvert))] + [Editor(typeof(ComplexCollectionEditor), typeof(UITypeEditor))] + //[TypeConverter(typeof(SimpleCollectionConvert))] + public List VPPoints { get; set; } = new List(); + + + [Category("相机标定设置")] + [Description("VR点组")] + [DisplayName("VR点组")] + [TypeConverter(typeof(CollectionCountConvert))] + [Editor(typeof(ComplexCollectionEditor), typeof(UITypeEditor))] + //[TypeConverter(typeof(SimpleCollectionConvert))] + public List VRPoints { get; set; } = new List(); + + public string GetDisplayText() + { + return $"标定组类型ID:{CVTypeID.ToString()}"; + } + } + + public class DeviceModel : IComplexDisplay + { + [Category("模具类型")] + [Description("模具类型")] + //[TypeConverter(typeof(DeviceIdSelectorConverter))] + [DisplayName("模具类型")] + public string DeviceModelType { get; set; } + + [Category("视觉标定配置")] + [Description("视觉标定配置")] + [TypeConverter(typeof(CollectionCountConvert))] + [Editor(typeof(ComplexCollectionEditor), typeof(UITypeEditor))] + [DisplayName("视觉标定配置")] + public List CVCalibrationConfig { get; set; } = new List(); + + + [Category("机械臂A配置项")] + [Description("偏移量:标定点减去拍摄点的坐标是偏移量")] + [DisplayName("偏移量")] + [TypeConverter(typeof(CollectionCountConvert))] + [Editor(typeof(ComplexCollectionEditor), typeof(UITypeEditor))] + //[TypeConverter(typeof(SimpleCollectionConvert))] + public List A_deviation { get; set; } = new List(); + + public string GetDisplayText() + { + return $"模具类型:{DeviceModelType} "; + } + } + public class DeviceOpBind : IComplexDisplay { + [Category("设备名称")] [Description("设备名称")] [TypeConverter(typeof(DeviceIdSelectorConverter))] diff --git a/src/BRS.Common.Model/app.config b/src/BRS.Common.Model/app.config index 4cd8ed8..e26e9d3 100644 --- a/src/BRS.Common.Model/app.config +++ b/src/BRS.Common.Model/app.config @@ -1,19 +1,19 @@ - + - - + + - - + + - - + + - + diff --git a/src/BRS.Common.Model/packages.config b/src/BRS.Common.Model/packages.config index 3de1064..ab6c8fb 100644 --- a/src/BRS.Common.Model/packages.config +++ b/src/BRS.Common.Model/packages.config @@ -3,8 +3,9 @@ - - + + + diff --git a/src/BRS.Process.A020/A020Config.cs b/src/BRS.Process.A020/A020Config.cs index bf11f28..359c95a 100644 --- a/src/BRS.Process.A020/A020Config.cs +++ b/src/BRS.Process.A020/A020Config.cs @@ -22,7 +22,13 @@ namespace BRS.Process.A020 //[Description("OverdueDay:数据库保存天数,超出该值,则认为数据过期,会被清理")] //public int OverdueDay { get; set; } = 14; + [Category("流程动作配置")] + [Description("流程开始操作配置")] + [DisplayName("流程开始操作配置")] + [TypeConverter(typeof(CollectionCountConvert))] + [Editor(typeof(ComplexCollectionEditor), typeof(UITypeEditor))] + public List ProcessInitialOps { get; set; } = new List(); // [Category("触发配置")] //[Description("检测取像相关设置")] @@ -123,8 +129,8 @@ namespace BRS.Process.A020 //public int FullResetRequiredDuration { get; set; } = 3; - - + + } diff --git a/src/BRS.Process.A020/A020Process.cs b/src/BRS.Process.A020/A020Process.cs index ed43c8e..43a24f2 100644 --- a/src/BRS.Process.A020/A020Process.cs +++ b/src/BRS.Process.A020/A020Process.cs @@ -7,6 +7,7 @@ using System; using System.Collections.Concurrent; using System.Collections.Generic; using System.Diagnostics; +using System.Drawing; using System.IO; using System.Linq; using System.Text; @@ -91,6 +92,9 @@ namespace BRS.Process.A020 #region event public event Action OnMachineStateChanged; + public event Action OnPLCStateChanged; + + public event Action OnBitmapChanged; #endregion #region ProcessControl diff --git a/src/BRS.Process.A020/A020Process_MachineState.cs b/src/BRS.Process.A020/A020Process_MachineState.cs index 3c00901..bf9e6e8 100644 --- a/src/BRS.Process.A020/A020Process_MachineState.cs +++ b/src/BRS.Process.A020/A020Process_MachineState.cs @@ -15,7 +15,10 @@ namespace BRS.Process.A020 { object machineStateLock = new object(); //object machineStateLock_R = new object(); + PLCStateWarm pLCStateWarm = PLCStateWarm.Unknown; MachineState machineState = MachineState.Unknown; + + DownCirce downCirce = DownCirce.Unknown; //MachineState machineState_R = MachineState.Unknown; public MachineState MachineState { @@ -134,17 +137,24 @@ namespace BRS.Process.A020 } } - WhoolSize whoolSize = WhoolSize.Size17; - public WhoolSize WhoolSize + public PLCStateWarm PLCStateWarm { - get => whoolSize; + get => pLCStateWarm; set { - whoolSize = value; + pLCStateWarm = value; } } - + KawasakiRobotStatus kawasakiRobotStatus = KawasakiRobotStatus.Unknown; + public KawasakiRobotStatus KawasakiRobotStatus + { + get => kawasakiRobotStatus; + set + { + kawasakiRobotStatus = value; + } + } MachineStateStep machineStateStep = MachineStateStep.Unknown; @@ -344,6 +354,32 @@ namespace BRS.Process.A020 } #endregion + public string MoveMoreNContinueRobot(List strPoints, ref StrRobotPoint CurrentPoint) + { + string strPointsStr = null; + for (int i = 0; i < strPoints.Count; i++) + { + string pointsStr = Convert.ToString(strPoints[i].X) + "," + Convert.ToString(strPoints[i].Y) + "," + Convert.ToString(strPoints[i].Z) + "," + + Convert.ToString(strPoints[i].A) + "," + Convert.ToString(strPoints[i].B) + "," + Convert.ToString(strPoints[i].C); + strPointsStr += pointsStr + "_"; + } + CurrentPoint = strPoints[strPoints.Count - 1]; + // string pointsStr2 = Convert.ToString(strPoint2.X) + "," + Convert.ToString(strPoint2.Y) + "," + Convert.ToString(strPoint2.Z) + "," + + //Convert.ToString(strPoint2.O) + "," + Convert.ToString(strPoint2.A) + "," + Convert.ToString(strPoint2.T); + string STRMove = "MoveLine_NULL_" + strPoints.Count.ToString() + "_" + strPointsStr; + //string PointInit1 = "MoveLine_NULL_1_462.915,1119.150,1530.227,90.043,90.003,0.040_"; + return STRMove; + } + + + public DownCirce DownCirce + { + get => downCirce; + set + { + downCirce = value; + } + } public override async Task RaisedAlarm(IWarningSet warningSet) { @@ -407,7 +443,7 @@ namespace BRS.Process.A020 warningSet.WarningCode = "急停按钮被拍下"; warningSet.WarningLvl = -1; warningSet.WarningDescription = "急停按钮被拍下"; - RobotsStatus = RobotsStatus.Pweroff; + RobotsStatus = RobotsStatus.PowerOff; MachineStateStep = MachineStateStep.Pause; RaisedAlarm(warningSet); } diff --git a/src/BRS.Process.A020/A020Process_Operation.cs b/src/BRS.Process.A020/A020Process_Operation.cs index ab73594..7d1ba30 100644 --- a/src/BRS.Process.A020/A020Process_Operation.cs +++ b/src/BRS.Process.A020/A020Process_Operation.cs @@ -3,7 +3,6 @@ using BRS.Common.Interface; using BRS.Common.Model; using BRS.Common.Model.Helper; using BRS.Common.PubSub; -using BRS.Device.OmronPLC; using System; using System.Collections.Generic; using System.Linq; @@ -12,8 +11,11 @@ using Timer = System.Threading.Timer; using static BRS.Common.Model.Helper.EnumHelper; using System.Diagnostics; using System.Threading; - - +using HZH_Controls; +using XKRS.Device.TCPSever; +using OpenCvSharp; +using System.Drawing; +using ThridLibray; namespace BRS.Process.A020 { public partial class A020Process @@ -21,853 +23,400 @@ namespace BRS.Process.A020 private bool IsTesting { get; set; } = false; public bool IsSingleStepOperating { get; set; } = false; - //切换硫化机手自动状态 - public void Machine1SwitchAutoManual(bool isAuto) + int ShiJiaoVecCountFlag1 = 0;// 相机1的示教点索引 + float A_Distance_DisD = 0;//拧紧轴推进距离100 + + + DeviceModel AModeTypeRun = new DeviceModel();//相机机械臂全局配置(务必要有) + private void StopMachineClosing(PLCBase MelsecPlc, TCPSeverBase TcpSeverBase1) { - var OmronPlc = DeviceCollection.FirstOrDefault(u => u is PLCBase) as PLCBase; - if (OmronPlc == null) - return; - if (isAuto) - ProcessWriteInt(OmronPlc, "D103", "int", "1"); - else - ProcessWriteInt(OmronPlc, "D103", "int", "0"); - } -#if false - - public void Machine1Entrance1Up(int tyreSize) - { - // 设置设备 - var OmronPlc = DeviceCollection.FirstOrDefault(u => u is PLCBase) as PLCBase; - var NbtRobot = DeviceCollection.FirstOrDefault(u => u is RobotBase) as RobotBase; - - GripperInit(OmronPlc);//夹爪复位 - NbtRobotInit(NbtRobot);//机械臂复位 - - LogAsync(DateTime.Now, LogLevel.Detail, "开始进行上料过程"); - - PlcAddress addrs = new PlcAddress(); - string addrD09 = addrs.AddrMachine1MoldOpenInPlace;//1硫化机开模到位 - string addrD101 = addrs.AddrMachine1InnerPressureLight;//硫化完成 - string addrD81 = addrs.AddrMachine1Tyre1InPlace;//1号位轮胎就位 - - RobotPoint robotPointInitPos = NbtRobot.IConfig.RobotInitPosition;//初始位置 - StrRobotPoint initPoint = ClassChangeStruct(robotPointInitPos); - - RobotPoint robotPointMachine1Entrance1GrabPos = NbtRobot.IConfig.RobotMachine1Entrance1GrabPoint;//M1E1上料抓取点 - RobotPoint robotPointMachine1Entrance1UpPlacePos = NbtRobot.IConfig.RobotMachine1Entrance1UpPlacePoint;//M1E1上料放置点 - - //判断是否硫化完成 - string machine1VulcanStateD101 = ProcessReadInt(OmronPlc, addrD101, "int"); - //1号位硫化机开模到位状态,为1时:硫化机开模到位可以进行上下料动作 - string machine1OpenReadyStateD09 = ProcessReadInt(OmronPlc, addrD09, "int"); - - string machine1Entrance1TyreReadyStateD81 = ProcessReadInt(OmronPlc, addrD81, "int"); - - int Machine1Entrance1TyreSize = tyreSize; - - Task.Run(() => + if (MelsecPlc != null && MelsecPlc.InitialConfig.IsEnabled) { - //1号位上料,判断以下状态:D101:硫化完成、M1E1Enabled、D09:开模到位 - //if (machine1VulcanStateD101 == "0" && machine1OpenReadyStateD09 == "1") - if (machine1VulcanStateD101 == "0") + //Process_A020.ProcessWriteInt(MelsecPlc, "D241", "int", "0");//开始 + } + if (TcpSeverBase1 != null && TcpSeverBase1.InitialConfig.IsEnabled == true) + { + TcpSeverBase1.SendMessage("PowerOFF_");//机械臂获取状态 + } + } +#if true + #region 相机标定 + + MyPoint sswF = new MyPoint(); + List VP = new List(); + List VR = new List(); + #region 相机1 + /* 设备对象 */ + private ThridLibray.IDevice m_dev; + Mat Mat_CamA = new Mat(); + Bitmap Bit_Image = null; + // private ThridLibray.IDevice m_dev1; + // private ThridLibray.IDevice m_dev2; + List m_frameList = new List(); /* 图像缓存列表 */ + Thread renderThread = null; /* 显示线程 */ + bool m_bShowLoop = true; /* 线程控制变量 */ + Mutex m_mutex = new Mutex(); /* 锁,保证多线程安全 */ + // private Graphics _g = null; + bool m_bShowByGDI; + + public void OpenCam1() + { + + try + { + /* 设备搜索 */ + List li = Enumerator.EnumerateDevices(); + if (li.Count > 0) { - //读D81:1号上料抓取位胎坯就位,等待D81置1胎胚就位 - //while (machine1Entrance1TyreReadyStateD81 == "0") - //{ - // Thread.Sleep(1000); - // machine1Entrance1TyreReadyStateD81 = ProcessReadInt(OmronPlc, addrD81, "int"); - //} + string IP = "192.168.1.111"; + /* 获取搜索到的第一个设备 */ + // m_dev = Enumerator.GetDeviceByIndex(0); + m_dev = Enumerator.GetDeviceByGigeIP(IP); - LogAsync(DateTime.Now, LogLevel.Detail, "1号位胎胚就位,开始上料流程。"); - #region 1号机1号位上料流程 - //去抓料 - StrRobotPoint pointMachine1Entrance1GrabPos = ClassChangeStruct(robotPointMachine1Entrance1GrabPos); - StrRobotPoint pointMachine1Entrance1GrabPosUpper = pointMachine1Entrance1GrabPos; - pointMachine1Entrance1GrabPosUpper.Z = pointMachine1Entrance1GrabPos.Z + 200; - //运动到抓取点上方200 - NbtRobotMove(NbtRobot, pointMachine1Entrance1GrabPosUpper, 1000); - ////夹爪运动到全松点 - //GripperMove(OmronPlc, NbtRobot.IConfig.GripperAllLoosenPosition); - NbtRobotMove(NbtRobot, pointMachine1Entrance1GrabPos, 1000);//移动到抓取点 - //夹爪夹紧 - string M1E1UpFastenPos = GetGripperPosByTyreSize(NbtRobot, Machine1Entrance1TyreSize, MoveState.UpFasten);//获取上料夹紧点 - if (M1E1UpFastenPos == "error") + /* 打开设备 */ + if (!m_dev.Open()) { - LogAsync(DateTime.Now, LogLevel.Error, "夹爪位置错误,当前流程停止"); - IsSingleStepOperating = false; - return; - } - else - GripperMove(OmronPlc, M1E1UpFastenPos);//夹爪运动 - - //抓取轮胎后,根据预设点位移动到上料口 - NbtRobotMoves(NbtRobot, NbtRobot.IConfig.RobotMachine1Entrance1UpPoints, 1000, false); - LogAsync(DateTime.Now, LogLevel.Detail, "机械臂移动到Machine1Entrance1上料口"); - - //运动到放料点 - StrRobotPoint pointMachine1Entrance1UpPlace = ClassChangeStruct(robotPointMachine1Entrance1UpPlacePos);//放料点 - StrRobotPoint pointMachine1Entrance1UpPlaceUpper = pointMachine1Entrance1UpPlace;//放料点上方200 - pointMachine1Entrance1UpPlaceUpper.Z = pointMachine1Entrance1UpPlace.Z + 200; - //运动到放料点上方200 - NbtRobotMove(NbtRobot, pointMachine1Entrance1UpPlaceUpper, 1000); - //移动到放料点同时,硫化机上环升 - //VulcanizaMachineOperateOnce(OmronPlc, "D127", 5000);//上环升,硫化机程序内设置保持5S - - VulcanizaMachineOperateKeep(OmronPlc, "D127", "1");//上环保持上升状态 - Thread.Sleep(2000); - NbtRobotMove(NbtRobot, pointMachine1Entrance1UpPlace, 1000);//运动到放料点 - - //上定型5秒,其中第2秒时松夹爪、机械臂移动出 - ProcessWriteInt(OmronPlc, "D113", "int", "0");//115改为113 - Thread.Sleep(500); - ProcessWriteInt(OmronPlc, "D113", "int", "1"); - Thread.Sleep(500); - - //第2秒时,松夹爪、机械臂移动 - //夹爪放松 - string M1E1UpLoosenPos = GetGripperPosByTyreSize(NbtRobot, Machine1Entrance1TyreSize, MoveState.UpLoosen);//获取上料放松点 - if (M1E1UpLoosenPos == "error") - { - LogAsync(DateTime.Now, LogLevel.Error, "夹爪位置错误,当前流程停止"); - IsSingleStepOperating = false; - return; - } - else - GripperMove(OmronPlc, M1E1UpLoosenPos);//夹爪运动 - - - - //运动到放料点上方200 - NbtRobotMove(NbtRobot, pointMachine1Entrance1UpPlaceUpper, 1000); - - //上定型结束 - ProcessWriteInt(OmronPlc, "D113", "int", "0"); - Thread.Sleep(500); - - VulcanizaMachineOperateKeep(OmronPlc, "D127", "0");//定型结束后,上环降。 - - //硫化机停止 - VulcanizaMachineOperateOnce(OmronPlc, "D109", 500); - //料仓门口点 - StrRobotPoint pointM1E1SiloDoor = ClassChangeStruct(NbtRobot.IConfig.RobotMachine1Entrance1UpPoints[3]); - //运动到料仓门口 - NbtRobotMove(NbtRobot, pointM1E1SiloDoor, 1000); - - //检测机械臂是否移动到料仓外 - StrRobotPoint currentP; - if (IsTesting) - currentP = pointM1E1SiloDoor; - else - currentP = NbtRobot.GetPosition(); - - if (!IsNumApproximateEqual(currentP.X, pointM1E1SiloDoor.X, 0.5f) || - !IsNumApproximateEqual(currentP.Y, pointM1E1SiloDoor.Y, 0.5f) || - !IsNumApproximateEqual(currentP.Z, pointM1E1SiloDoor.Z, 0.5f) || - !IsNumApproximateEqual(currentP.A, pointM1E1SiloDoor.A, 0.5f) || - !IsNumApproximateEqual(currentP.B, pointM1E1SiloDoor.B, 0.5f) || - !IsNumApproximateEqual(currentP.C, pointM1E1SiloDoor.C, 0.5f)) - { - LogAsync(DateTime.Now, LogLevel.Exception, "机械臂位置错误,可能未移动出料仓,当前流程停止"); - IsSingleStepOperating = false; + // MessageBox.Show(@"连接相机失败"); return; } - //硫化机进入自动状态,0为手动,1为自动 - ProcessWriteInt(OmronPlc, "D103", "int", "1"); - //硫化机合模 - VulcanizaMachineOperateOnce(OmronPlc, "D105", 500); + /* 打开Software Trigger */ + m_dev.TriggerSet.Open(TriggerSourceEnum.Software); - NbtRobotMoves(NbtRobot, NbtRobot.IConfig.RobotMachine1Entrance1UpPoints, 1000, true);//从料仓门口回原点 - GripperInit(OmronPlc);//夹爪复位 - LogAsync(DateTime.Now, LogLevel.Detail, "夹爪复位"); - //二号位不可用时,只硫化一号位 - NbtRobotMove(NbtRobot, initPoint, 1000);//回原点 - LogAsync(DateTime.Now, LogLevel.Detail, "机械臂回原点,夹爪回原点。"); + /* 设置图像格式 */ + using (IEnumParameter p = m_dev.ParameterCollection[ParametrizeNameSet.ImagePixelFormat]) + { + p.SetValue("BayerRG8"); + } + + /* 设置曝光 */ + using (IFloatParameter p = m_dev.ParameterCollection[ParametrizeNameSet.ExposureTime]) + { + p.SetValue(1000); + } + + /* 设置增益 */ + using (IFloatParameter p = m_dev.ParameterCollection[ParametrizeNameSet.GainRaw]) + { + p.SetValue(1.0); + } + + /* 设置缓存个数为8(默认值为16) */ + m_dev.StreamGrabber.SetBufferCount(1); + + /* 注册码流回调事件 */ + m_dev.StreamGrabber.ImageGrabbed += OnImageGrabbed; + + /* 开启码流 */ + if (!m_dev.GrabUsingGrabLoopThread()) + { + // MessageBox.Show(@"开启码流失败"); + return; + } + } + } + catch (Exception exception) + { + Catcher.Show(exception); + } + } + + public void SoftTrigger1() + { + try + { + m_dev.ExecuteSoftwareTrigger(); + LogAsync(DateTime.Now, LogLevel.Action, $"SoftTrigger1——111111111111"); + } + catch (Exception exception) + { + Catcher.Show(exception); + } + } + bool CamA = false; + private void OnImageGrabbed(Object sender, GrabbedEventArgs e) + { + Mat_CamA = null; + m_mutex.WaitOne(); + m_frameList.Add(e.GrabResult.Clone()); + m_mutex.ReleaseMutex(); + + + IGrabbedRawData frame = m_frameList.ElementAt(m_frameList.Count - 1); + var bitmap = frame.ToBitmap(false); + Bit_Image = bitmap; + Mat mat = OpenCvSharp.Extensions.BitmapConverter.ToMat(bitmap);//用bitmap转换为mat + Mat_CamA = mat.Clone(); + LogAsync(DateTime.Now, LogLevel.Action, $"OnImageGrabbed Cam——222222222222"); + CamA = true; + + // Mat ss = Mat_CamA.Clone(); + // Cv2.ImWrite("D",ss); + + } #endregion - LogAsync(DateTime.Now, LogLevel.Detail, "1号位上料完成。"); - } - else - { - LogAsync(DateTime.Now, LogLevel.Error, "硫化未完成或硫化机未开模到位。"); - IsSingleStepOperating = false; - return; - } - IsSingleStepOperating = false; - }); - } - public void Machine1Entrance1Down(int tyreSize) + + public Mat AloghitomMat(Mat mat, ref MyPoint myPoint) { - // 设置设备 - var OmronPlc = DeviceCollection.FirstOrDefault(u => u is PLCBase) as PLCBase; - var NbtRobot = DeviceCollection.FirstOrDefault(u => u is RobotBase) as RobotBase; - GripperInit(OmronPlc);//夹爪复位 - NbtRobotInit(NbtRobot);//机械臂复位 + Mat src = mat.Clone(); + // Mat src = Cv2.ImRead("D:\\163033934.jpg"); + Mat[] channels; + Mat bChannel, gChannel, rChannel; - LogAsync(DateTime.Now, LogLevel.Detail, "开始进行下料过程"); - - PlcAddress addrs = new PlcAddress(); - string addrD101 = addrs.AddrMachine1InnerPressureLight;//硫化完成指示灯 - string addrD103 = addrs.AddrMachine1AutoManual;//切换手自动 - string addrD107 = addrs.AddrMachine1OpenMold;//开模 - string addrD109 = addrs.AddrMachine1Stop;//停止 - string addrD113 = addrs.AddrMachine1UpperStereotypes;//上定型 - string addrD117 = addrs.AddrMachine1AllStereotypes;//总定型 - string addrD125 = addrs.AddrMachine1Vacuumize;//抽真空 - string addrD127 = addrs.AddrMachine1UpperRingRise;//上环升 - - RobotPoint robotPointInitPos = NbtRobot.IConfig.RobotInitPosition;//初始位置 - StrRobotPoint initPoint = ClassChangeStruct(robotPointInitPos); - - RobotPoint robotPointMachine1Entrance1TakeTyrePos = NbtRobot.IConfig.RobotMachine1Entrance1TakeTyrePoint;//M1E1取料点 - RobotPoint robotPointMachine1Entrance1DownPlacePos = NbtRobot.IConfig.RobotMachine1Entrance1DownPlacePoint;//M1E1取料放置点 - RobotPoint robotPointMachine1Entrance1TakeTyreTiltUpperPos = NbtRobot.IConfig.RobotMachine1Entrance1TakeTyreTiltUpperPoint;//M1E1P107斜向上移动 + //float rr= src.At(1430, 888).Item0; + //float gg = src.At(1430, 888).Item1; + //float bb = src.At(1430, 888).Item2; + Cv2.Split(src, out channels); + bChannel = channels[0]; + gChannel = channels[1]; + rChannel = channels[2]; + Mat mDst = bChannel.Clone(); - //判断是否硫化完成 - string machine1VulcanStateD101 = ProcessReadInt(OmronPlc, addrD101, "int"); - - Task.Run(() => + for (int i = 0; i < bChannel.Height; i++)//遍历所有像素点 { - //开模,从界面操作,默认已处于开模状态,不再进行开模 - //VulcanizaMachineOperateOnce(OmronPlc, addrD107, 500); - //延时10秒 - //Thread.Sleep(10000); - //硫化机自动切换为手动,0为手动,1为自动 - ProcessWriteInt(OmronPlc, addrD103, "int", "0"); - //硫化机进行总定型动作,总定型3s - VulcanizaMachineOperateOnce(OmronPlc, addrD117, 3000); - //硫化机停止 - VulcanizaMachineOperateOnce(OmronPlc, addrD109, 500); - //硫化机进行抽真空动作,抽真空4s - VulcanizaMachineOperateOnce(OmronPlc, addrD125, 7000); - //硫化机停止 - VulcanizaMachineOperateOnce(OmronPlc, addrD109, 500); - - //移动到初始点 - NbtRobotMove(NbtRobot, initPoint, 1000); - - LogAsync(DateTime.Now, LogLevel.Detail, "开始1号位下料流程。"); - - //机械臂 从初始点移动到1号位料仓门口 - NbtRobotMoves(NbtRobot, NbtRobot.IConfig.RobotMachine1Entrance1DownPoints, 1000, false); - LogAsync(DateTime.Now, LogLevel.Detail, "机械臂移动到Machine1Entrance1料仓门口"); - - //移动到取料点上方220 - StrRobotPoint strM1E1TakePoint = ClassChangeStruct(robotPointMachine1Entrance1TakeTyrePos);//取料点 - StrRobotPoint strM1E1TakePointUpper = strM1E1TakePoint;//取料点上方 - strM1E1TakePointUpper.Z = strM1E1TakePoint.Z + 350; - NbtRobotMove(NbtRobot, strM1E1TakePointUpper, 1000);//移动到取料点上方220 - - LogAsync(DateTime.Now, LogLevel.Detail, $"当前轮胎尺寸:{tyreSize}"); - - //夹爪运动到下料夹紧点,夹爪(D31,D33)夹紧 - string M1E1DownFastenPos = GetGripperPosByTyreSize(NbtRobot, tyreSize, MoveState.DownFasten); - if (M1E1DownFastenPos == "error") + for (int j = 0; j < bChannel.Width; j++) { - LogAsync(DateTime.Now, LogLevel.Error, "夹爪位置错误,当前流程停止"); - IsSingleStepOperating = false; - - return; + Vec3b RGBColor = src.Get(i, j); + byte colorB = RGBColor.Item0; + byte colorR = RGBColor.Item2; + float iDif = colorB - colorR; + if (iDif > 100) + mDst.Set(i, j, 255); + else + mDst.Set(i, j, 0); } - else - GripperMove(OmronPlc, M1E1DownFastenPos);//夹爪运动 + } - //移动到取料点 - NbtRobotMove(NbtRobot, strM1E1TakePoint, 500); + //Cv2.Threshold(bChannel, mDst, 150, 255, 0);//todo - //夹爪运动到下料放松点,夹爪(D31,D33)扩张 - //同时开始上定型 - string M1E1DownLoosenPos = GetGripperPosByTyreSize(NbtRobot, tyreSize, MoveState.DownLoosen); - if (M1E1DownLoosenPos == "error") - { - LogAsync(DateTime.Now, LogLevel.Error, "夹爪位置错误,当前流程停止"); - IsSingleStepOperating = false; + OpenCvSharp.Point point = new OpenCvSharp.Point(-1, -1); - return; - } - else - GripperMove(OmronPlc, M1E1DownLoosenPos);//夹爪运动 + OpenCvSharp.Size size = new OpenCvSharp.Size(5, 5); + Mat element = Cv2.GetStructuringElement(MorphShapes.Rect, size, point); + //getStructuringElement(cv::MORPH_RECT, cv::Size(5, 5), cv::Point(-1, -1)); + Cv2.Dilate(mDst, mDst, element); + // cv::dilate(mDst, mDst, element); + Cv2.Erode(mDst, mDst, element); + Vec4i[] hierarchy; - //先移动到夹爪水平或上挑的点 - StrRobotPoint strM1E1TakeTiltUpperPoint = ClassChangeStruct(robotPointMachine1Entrance1TakeTyreTiltUpperPos); - NbtRobotMove(NbtRobot, strM1E1TakeTiltUpperPoint, 500); + //获得轮廓 + OpenCvSharp.Point[][] contours = null; + HierarchyIndex[] hierarchly; + Cv2.FindContours(mDst, out contours, out hierarchly, RetrievalModes.Tree, ContourApproximationModes.ApproxSimple, new OpenCvSharp.Point(0, 0)); + // public static HierarchyIndex FromVec4i(Vec4i vec); + // Cv2.FindContours(mDst, out contours,out HierarchyIndex(hierarchy), 0, 1); + // std::vector approx; + // 检测所找到的轮廓 + OpenCvSharp.Point2f center; float radius; + Array.Sort(contours, (x, y) => x.Length.CompareTo(y.Length)); - //硫化机进行上定型动作,上定型2s - VulcanizaMachineOperateOnce(OmronPlc, addrD113, 2000); - //硫化机停止 - VulcanizaMachineOperateOnce(OmronPlc, addrD109, 500); - //硫化机上环升,硫化机程序内设置保持5S - //VulcanizaMachineOperateOnce(OmronPlc, addrD127, 5000); - //硫化机上环升,并保持状态。 - VulcanizaMachineOperateKeep(OmronPlc, addrD127, "1"); + Cv2.MinEnclosingCircle(contours[contours.Length - 1], out center, out radius); - //水平放置点上方350 - StrRobotPoint strM1E1DownPlaceLevelPointUpper = strM1E1TakeTiltUpperPoint; - strM1E1DownPlaceLevelPointUpper.Z = strM1E1TakeTiltUpperPoint.Z + 350;//水平放置点上方 - //从取料点移出 - NbtRobotMove(NbtRobot, strM1E1DownPlaceLevelPointUpper, 1000); - // 降上环 - VulcanizaMachineOperateKeep(OmronPlc, addrD127, "0"); + // InputOutputArray data = src.; + InputOutputArray ss; + Scalar color = new Scalar(255, 255, 255); - //移动到放置点,反用DownPoints - NbtRobotMoves(NbtRobot, NbtRobot.IConfig.RobotMachine1Entrance1DownPoints, 1000, true); + OpenCvSharp.Point point1 = new OpenCvSharp.Point(center.X, center.Y); + // Cv2.Circle(src, (100, 60), 3, (0, 0, 213), -1); + Cv2.Circle(src, (int)center.X, (int)center.Y, (int)radius, color, 2, (LineTypes)8, 0); + Cv2.Circle(src, (int)center.X, (int)center.Y, (int)radius, color, 2, (LineTypes)8, 0); + myPoint.dX = center.X; + myPoint.dY = center.Y; - //移动到取料点上方220 - StrRobotPoint strM1E1DownPlacePoint = ClassChangeStruct(robotPointMachine1Entrance1DownPlacePos);//放置点 - StrRobotPoint strM1E1DownPlacePointUpper = strM1E1DownPlacePoint;//放置点上方 - strM1E1DownPlacePointUpper.Z = strM1E1DownPlacePoint.Z + 220; + return src; - - - //移动到放置点上方 - NbtRobotMove(NbtRobot, strM1E1DownPlacePointUpper, 1000); - LogAsync(DateTime.Now, LogLevel.Error, "是否在-<放置点>-加传感器,判断放置点是否已置空??"); - //移动到放置点 - NbtRobotMove(NbtRobot, strM1E1DownPlacePoint, 1000); - - LogAsync(DateTime.Now, LogLevel.Detail, "机械臂从Machine1Entrance1料仓门口移动到放置点"); - - //开始放料 - //夹爪运动到下料夹紧点,夹爪(D31,D33)夹紧 - if (M1E1DownFastenPos == "error") - { - LogAsync(DateTime.Now, LogLevel.Error, "夹爪位置错误,当前流程停止"); - IsSingleStepOperating = false; - - return; - } - else - GripperMove(OmronPlc, M1E1DownFastenPos);//夹爪运动 - Thread.Sleep(1000); - - //放料完,移走机械臂 - //移动到放置点上方 - NbtRobotMove(NbtRobot, strM1E1DownPlacePointUpper, 1000); - //夹爪运动到放松点 - GripperMove(OmronPlc, NbtRobot.IConfig.GripperLoosenPosition); - - LogAsync(DateTime.Now, LogLevel.Detail, "1号位下料完成。"); - - NbtRobotMove(NbtRobot, initPoint, 1000);//回原点 - LogAsync(DateTime.Now, LogLevel.Detail, "机械臂回原点,夹爪回原点。"); - - IsSingleStepOperating = false; - }); } - public void Machine1Entrance2Up(int tyreSize) + void genCalibratePts1() { - // 设置设备 - var OmronPlc = DeviceCollection.FirstOrDefault(u => u is PLCBase) as PLCBase; - var NbtRobot = DeviceCollection.FirstOrDefault(u => u is RobotBase) as RobotBase; - - GripperInit(OmronPlc);//夹爪复位 - NbtRobotInit(NbtRobot);//机械臂复位 - - LogAsync(DateTime.Now, LogLevel.Detail, "开始进行上料过程"); - - PlcAddress addrs = new PlcAddress(); - string addrD09 = addrs.AddrMachine1MoldOpenInPlace;//1硫化机开模到位 - string addrD101 = addrs.AddrMachine1InnerPressureLight;//硫化完成 - string addrD83 = addrs.AddrMachine1Tyre2InPlace;//2号位轮胎就位 - - RobotPoint robotPointInitPos = NbtRobot.IConfig.RobotInitPosition;//初始位置 - StrRobotPoint initPoint = ClassChangeStruct(robotPointInitPos); - - RobotPoint robotPointMachine1Entrance2GrabPos = NbtRobot.IConfig.RobotMachine1Entrance2GrabPoint;//M1E2上料抓取点 - RobotPoint robotPointMachine1Entrance2UpPlacePos = NbtRobot.IConfig.RobotMachine1Entrance2UpPlacePoint;//M1E2上料放置点 - - //判断是否硫化完成 - string machine1VulcanStateD101 = ProcessReadInt(OmronPlc, addrD101, "int"); - //1号位硫化机开模到位状态,为1时:硫化机开模到位可以进行上下料动作 - string machine1OpenReadyStateD09 = ProcessReadInt(OmronPlc, addrD09, "int"); - //胎胚就位状态 - string machine1Entrance2TyreReadyStateD83 = ProcessReadInt(OmronPlc, addrD83, "int"); - - int Machine1Entrance2TyreSize = tyreSize; - - Task.Run(() => + try { - //if (machine1VulcanStateD101 == "0" && machine1OpenReadyStateD09 == "1") - if (machine1VulcanStateD101 == "0") + CVCalibrationConfig AcVCalibrationConfig = new CVCalibrationConfig(); //每一组的标定配置务必要有 + DiffVPVRPoint A_ShiJIaoPoint = AModeTypeRun.A_deviation[ShiJiaoVecCountFlag1]; + //CVCalibrationConfig cVCalibrationConfig = ModeTypeRun.CVCalibrationConfig; + foreach (var CalNum in AModeTypeRun.CVCalibrationConfig) { - //读D83:1号上料抓取位胎坯就位,等待D83置1胎胚就位 - //while (machine1Entrance2TyreReadyStateD83 == "0") - //{ - // Thread.Sleep(1000); - // machine1Entrance2TyreReadyStateD83 = ProcessReadInt(OmronPlc, addrD83, "int"); - //} - LogAsync(DateTime.Now, LogLevel.Detail, "2号位胎胚就位,开始上料流程。"); - #region 1号机2号位上料流程 - - //去抓料 - StrRobotPoint pointMachine1Entrance2GrabPos = ClassChangeStruct(robotPointMachine1Entrance2GrabPos); - StrRobotPoint pointMachine1Entrance2GrabPosUpper = pointMachine1Entrance2GrabPos; - pointMachine1Entrance2GrabPosUpper.Z = pointMachine1Entrance2GrabPos.Z + 200; - //机械臂移动到抓取点上方200 - NbtRobotMove(NbtRobot, pointMachine1Entrance2GrabPosUpper, 1000); - ////夹爪运动到全松点 - //GripperMove(OmronPlc, NbtRobot.IConfig.GripperAllLoosenPosition); - //机械臂移动到抓取点 - NbtRobotMove(NbtRobot, pointMachine1Entrance2GrabPos, 1000); - - //夹爪夹紧 - string M1E2UpFastenPos = GetGripperPosByTyreSize(NbtRobot, Machine1Entrance2TyreSize, MoveState.UpFasten);//获取上料夹紧点 - if (M1E2UpFastenPos == "error") + if (CalNum.CVTypeID == A_ShiJIaoPoint.CVTypeID)//若这个螺丝的标定ID存在标定组 则使用标定组的各种信息 { - LogAsync(DateTime.Now, LogLevel.Error, "夹爪位置错误,当前流程停止"); - IsSingleStepOperating = false; - - return; + AcVCalibrationConfig = CalNum; } - else - GripperMove(OmronPlc, M1E2UpFastenPos);//夹爪运动 - - //抓取轮胎后,根据预设点位移动到上料口 - NbtRobotMoves(NbtRobot, NbtRobot.IConfig.RobotMachine1Entrance2UpPoints, 1000, false); - LogAsync(DateTime.Now, LogLevel.Detail, "机械臂移动到Machine1Entrance2上料口"); - - //运动到放料点 - StrRobotPoint pointMachine1Entrance2UpPlace = ClassChangeStruct(robotPointMachine1Entrance2UpPlacePos);//放料点 - StrRobotPoint pointMachine1Entrance2UpPlaceUpper = pointMachine1Entrance2UpPlace;//放料点上方200 - pointMachine1Entrance2UpPlaceUpper.Z = pointMachine1Entrance2UpPlace.Z + 200; - //运动到放料点上方200 - NbtRobotMove(NbtRobot, pointMachine1Entrance2UpPlaceUpper, 1000); - //移动到放料点同时,硫化机上环升 - //VulcanizaMachineOperateOnce(OmronPlc, "D127 ", 5000);//上环升,硫化机程序内设置保持5S - VulcanizaMachineOperateKeep(OmronPlc, "D127", "1");//上环保持上升状态 - Thread.Sleep(2000); - - NbtRobotMove(NbtRobot, pointMachine1Entrance2UpPlace, 1000);//运动到放料点 - - //下定型5秒,其中第2秒时松夹爪、机械臂移动出 - ProcessWriteInt(OmronPlc, "D115", "int", "0"); - Thread.Sleep(500); - ProcessWriteInt(OmronPlc, "D115", "int", "1"); - Thread.Sleep(500); - - //第2秒时,松夹爪、机械臂移动 - //夹爪放松 - string M1E2UpLoosenPos = GetGripperPosByTyreSize(NbtRobot, Machine1Entrance2TyreSize, MoveState.UpLoosen);//获取上料放松点 - if (M1E2UpLoosenPos == "error") - { - LogAsync(DateTime.Now, LogLevel.Error, "夹爪位置错误,当前流程停止"); - IsSingleStepOperating = false; - - return; - } - else - GripperMove(OmronPlc, M1E2UpLoosenPos); - //运动到放料点上方200 - NbtRobotMove(NbtRobot, pointMachine1Entrance2UpPlaceUpper, 1000); - - //下定型结束 - ProcessWriteInt(OmronPlc, "D115", "int", "0"); - Thread.Sleep(500); - - VulcanizaMachineOperateKeep(OmronPlc, "D127", "0");//定型结束后,上环降 - - //硫化机停止 - VulcanizaMachineOperateOnce(OmronPlc, "D109", 500); - - //料仓门口点 - StrRobotPoint pointM1E2SiloDoor = ClassChangeStruct(NbtRobot.IConfig.RobotMachine1Entrance2UpPoints[3]); - NbtRobotMove(NbtRobot, pointM1E2SiloDoor, 1000);//运动到料仓门口 - - //检测机械臂是否移动到料仓外 - StrRobotPoint currentP; - if (IsTesting) - currentP = pointM1E2SiloDoor; - else - currentP = NbtRobot.GetPosition(); - - if (!IsNumApproximateEqual(currentP.X, pointM1E2SiloDoor.X, 0.5f) || - !IsNumApproximateEqual(currentP.Y, pointM1E2SiloDoor.Y, 0.5f) || - !IsNumApproximateEqual(currentP.Z, pointM1E2SiloDoor.Z, 0.5f) || - !IsNumApproximateEqual(currentP.A, pointM1E2SiloDoor.A, 0.5f) || - !IsNumApproximateEqual(currentP.B, pointM1E2SiloDoor.B, 0.5f) || - !IsNumApproximateEqual(currentP.C, pointM1E2SiloDoor.C, 0.5f)) - { - LogAsync(DateTime.Now, LogLevel.Exception, "机械臂位置错误,可能未移动出料仓,当前流程停止"); - IsSingleStepOperating = false; - - return; - } - - NbtRobotMoves(NbtRobot, NbtRobot.IConfig.RobotMachine1Entrance2UpPoints, 1000, true);//从料仓门口回原点 - - GripperInit(OmronPlc);//夹爪复位 - LogAsync(DateTime.Now, LogLevel.Detail, "夹爪复位"); - - //硫化机进入自动状态,0为手动,1为自动 - ProcessWriteInt(OmronPlc, "D103", "int", "1"); - //硫化机合模 - VulcanizaMachineOperateOnce(OmronPlc, "D105", 500); - - //机械臂回原点 - NbtRobotMove(NbtRobot, initPoint, 1000);//回原点 - LogAsync(DateTime.Now, LogLevel.Detail, "机械臂回原点,夹爪回原点。"); - - #endregion - LogAsync(DateTime.Now, LogLevel.Detail, "2号位上料完成。"); } - else - { - LogAsync(DateTime.Now, LogLevel.Error, "硫化未完成或硫化机未开模到位。"); - IsSingleStepOperating = false; + List VPList = AcVCalibrationConfig.VPPoints; + List VRList = AcVCalibrationConfig.VRPoints; + VPVRPoint current_P = new VPVRPoint(); + current_P.X = A_ShiJIaoPoint.X; + current_P.Y = A_ShiJIaoPoint.Y; + current_P.Z = A_ShiJIaoPoint.Z; + float PYliangx = current_P.X; + float PYliangy = current_P.Z; - return; - } - IsSingleStepOperating = false; + VP.Clear(); + VR.Clear(); + /*************生成像素数据*********************/ + MyPoint tp; + tp.dX = VPList[0].X;//2054; + tp.dY = VPList[0].Y;// 1831; + VP.Add(tp); - }); + tp.dX = VPList[1].X;// 2033; + tp.dY = VPList[1].Y; //986; + VP.Add(tp); + + tp.dX = VPList[2].X;//2013; + tp.dY = VPList[2].Y;//168; + VP.Add(tp); + + tp.dX = VPList[3].X;// 1369; + tp.dY = VPList[3].Y; //235; + VP.Add(tp); + + + ////5-8 + tp.dX = VPList[4].X;// 1369; + tp.dY = VPList[4].Y; //235; + // tp.dX = 1403; + //tp.dY = 985; + VP.Add(tp); + + tp.dX = VPList[5].X;// 1327; + tp.dY = VPList[5].Y;// 1756; + VP.Add(tp); + + tp.dX = VPList[6].X;// 717; + tp.dY = VPList[6].Y;// 1701; + VP.Add(tp); + + tp.dX = VPList[7].X;// 879; + tp.dY = VPList[7].Y;// 947; + VP.Add(tp); + //// + + tp.dX = VPList[8].X;// 774; + tp.dY = VPList[8].Y;// 236; + VP.Add(tp); + + tp.dX = VPList[9].X;// 257; + tp.dY = VPList[9].Y;// ; + VP.Add(tp); + + tp.dX = VPList[10].X;// 307; + tp.dY = VPList[10].Y;// 994; + VP.Add(tp); + + tp.dX = VPList[11].X;// 303; + tp.dY = VPList[11].Y;// 1727; + VP.Add(tp); + + + + /*************生成三维数据*********************/ + + MyPoint tr; + tr.dX = VRList[0].X + PYliangx; + tr.dY = VRList[0].Y + PYliangy; + VR.Add(tr); + + + tr.dX = VRList[1].X + PYliangx; + tr.dY = VRList[1].Y + PYliangy; + VR.Add(tr); + + tr.dX = VRList[2].X + PYliangx; + tr.dY = VRList[2].Y + PYliangy; + VR.Add(tr); + + ////////////// + + tr.dX = VRList[3].X + PYliangx; + tr.dY = VRList[3].Y + PYliangy; + VR.Add(tr); + + tr.dX = VRList[4].X + PYliangx; + tr.dY = VRList[4].Y + PYliangy; + VR.Add(tr); + + + tr.dX = VRList[5].X + PYliangx; + tr.dY = VRList[5].Y + PYliangy; + VR.Add(tr); + + + //////////////7 + tr.dX = VRList[6].X + PYliangx; + tr.dY = VRList[6].Y + PYliangy; + VR.Add(tr); + + tr.dX = VRList[7].X + PYliangx; + tr.dY = VRList[7].Y + PYliangy; + VR.Add(tr); + + tr.dX = VRList[8].X + PYliangx; + tr.dY = VRList[8].Y + PYliangy; + VR.Add(tr); + + ////////////// + + tr.dX = VRList[9].X + PYliangx; + tr.dY = VRList[9].Y + PYliangy; + VR.Add(tr); + + tr.dX = VRList[10].X + PYliangx; + tr.dY = VRList[10].Y + PYliangy; + VR.Add(tr); + + tr.dX = VRList[11].X + PYliangx; + tr.dY = VRList[11].Y + PYliangy; + VR.Add(tr); + } + catch (Exception e) + { + + } } - public void Machine1Entrance2Down(int tyreSize) + private void OnCameraImageOutput(ref MyPoint ssw1, ref Mat dd, int Pro1) { - // 设置设备 - var OmronPlc = DeviceCollection.FirstOrDefault(u => u is PLCBase) as PLCBase; - var NbtRobot = DeviceCollection.FirstOrDefault(u => u is RobotBase) as RobotBase; + Stopwatch stopWatch2 = new Stopwatch(); + stopWatch2.Restart(); - GripperInit(OmronPlc);//夹爪复位 - NbtRobotInit(NbtRobot);//机械臂复位 + Stopwatch stopWatch = new Stopwatch(); + stopWatch.Restart(); - LogAsync(DateTime.Now, LogLevel.Detail, "开始进行下料过程"); +#if true + genCalibratePts1(); + stopWatch2.Stop(); + Console.WriteLine(DateTime.Now + "==========配置=================" + stopWatch2.ElapsedMilliseconds + "==========================="); - PlcAddress addrs = new PlcAddress(); - string addrD101 = addrs.AddrMachine1InnerPressureLight;//硫化完成指示灯 - string addrD103 = addrs.AddrMachine1AutoManual;//切换手自动 - string addrD107 = addrs.AddrMachine1OpenMold;//开模 - string addrD109 = addrs.AddrMachine1Stop;//停止 - string addrD115 = addrs.AddrMachine1LowerStereotypes;//下定型 - string addrD117 = addrs.AddrMachine1AllStereotypes;//总定型 - string addrD125 = addrs.AddrMachine1Vacuumize;//抽真空 - string addrD129 = addrs.AddrMachine1LowerRingRise;//下环升 + MyPoint ssw = new MyPoint(); - RobotPoint robotPointInitPos = NbtRobot.IConfig.RobotInitPosition;//初始位置 - StrRobotPoint initPoint = ClassChangeStruct(robotPointInitPos); + Mat _mat = dd.Clone(); + string ss = "D:\\QT1\\" + DateTime.Now.ToString("HHmmssfff") + ".jpg"; + Cv2.ImWrite(ss, _mat); + Mat _mat2 = AloghitomMat(_mat, ref ssw);//根据拍摄的白纸定标图片确定二维到三维转换的关系 + ssw1 = Interpolation(VP, VR, ssw, true);//实际坐标值 - RobotPoint robotPointMachine1Entrance2TakeTyrePos = NbtRobot.IConfig.RobotMachine1Entrance2TakeTyrePoint;//M1E2取料点 - RobotPoint robotPointMachine1Entrance2DownPlacePos = NbtRobot.IConfig.RobotMachine1Entrance2DownPlacePoint;//M1E2取料放置点 - RobotPoint robotPointMachine1Entrance2TakeTyreTiltUpperPos = NbtRobot.IConfig.RobotMachine1Entrance2TakeTyreTiltUpperPoint;//M1E2P207斜向上移动 + string ss2 = "D:\\QT\\" + DateTime.Now.ToString("HHmmssfff") + ".jpg"; + Cv2.ImWrite(ss2, _mat2); + stopWatch.Stop(); + Console.WriteLine(DateTime.Now + "==========标定算法=================" + stopWatch.ElapsedMilliseconds + "==========================="); - - //判断是否硫化完成 - string machine1VulcanStateD101 = ProcessReadInt(OmronPlc, addrD101, "int"); - - Task.Run(() => + if (Pro1 == 1) { - //开模 - VulcanizaMachineOperateOnce(OmronPlc, addrD107, 500); - //延时10秒 - Thread.Sleep(10000); - //硫化机自动切换为手动,0为手动,1为自动 - ProcessWriteInt(OmronPlc, addrD103, "int", "0"); - //硫化机进行总定型动作,总定型3s - VulcanizaMachineOperateOnce(OmronPlc, addrD117, 3000); - //硫化机停止 - VulcanizaMachineOperateOnce(OmronPlc, addrD109, 500); - //硫化机进行抽真空动作,抽真空4s - VulcanizaMachineOperateOnce(OmronPlc, addrD125, 4000); - //硫化机停止 - VulcanizaMachineOperateOnce(OmronPlc, addrD109, 500); - - //移动到初始点 - NbtRobotMove(NbtRobot, initPoint, 1000); - - LogAsync(DateTime.Now, LogLevel.Detail, "开始2号位下料流程。"); - - //机械臂移动到二号位料仓门口 - NbtRobotMoves(NbtRobot, NbtRobot.IConfig.RobotMachine1Entrance2DownPoints, 1000, false); - LogAsync(DateTime.Now, LogLevel.Detail, "机械臂移动到Machine1Entrance2料仓门口"); - - //移动到取料点上方220 - StrRobotPoint strM1E2TakePoint = ClassChangeStruct(robotPointMachine1Entrance2TakeTyrePos);//取料点 - StrRobotPoint strM1E2TakePointUpper = strM1E2TakePoint;//取料点上方 - strM1E2TakePointUpper.Z = strM1E2TakePoint.Z + 220; - NbtRobotMove(NbtRobot, strM1E2TakePointUpper, 1000);//移动到取料点上方220 - - LogAsync(DateTime.Now, LogLevel.Detail, $"当前轮胎尺寸:{tyreSize}"); - - //本台硫化机总定型1s,防止上环升不起来 - VulcanizaMachineOperateOnce(OmronPlc, "D117", 1000); - VulcanizaMachineOperateOnce(OmronPlc, "D123", 2000); - - //上环升保持 - VulcanizaMachineOperateKeep(OmronPlc, "D127", "1"); - Thread.Sleep(3000);//保持5s - - ////硫化机进行抽真空动作,抽真空2s,使轮胎落下,防止夹爪按压轮胎 - //VulcanizaMachineOperateOnce(OmronPlc, addrD125, 2000); - - //放料点上方65 - strM1E2TakePointUpper.Z = strM1E2TakePoint.Z + 65; - //移动到取料点上方65 - NbtRobotMove(NbtRobot, strM1E2TakePointUpper, 1000); - - //上环升保持 - VulcanizaMachineOperateKeep(OmronPlc, "D127", "1"); - - //硫化机进行抽真空动作,抽真空3s - VulcanizaMachineOperateOnce(OmronPlc, addrD125, 3000); - - //夹爪运动到下料夹紧点,夹爪(D31,D33)夹紧 - string M1E2DownFastenPos = GetGripperPosByTyreSize(NbtRobot, tyreSize, MoveState.DownFasten); - if (M1E2DownFastenPos == "error") - { - LogAsync(DateTime.Now, LogLevel.Error, "夹爪位置错误,当前流程停止"); - IsSingleStepOperating = false; - - return; - } - else - GripperMove(OmronPlc, M1E2DownFastenPos);//夹爪运动 - //上环升保持 - VulcanizaMachineOperateKeep(OmronPlc, "D127", "1"); - //移动到取料点 - NbtRobotMove(NbtRobot, strM1E2TakePoint, 1000); - - //夹爪运动到下料放松点,夹爪(D31,D33)扩张 - //同时开始上定型 - string M1E2DownLoosenPos = GetGripperPosByTyreSize(NbtRobot, tyreSize, MoveState.DownLoosen); - if (M1E2DownLoosenPos == "error") - { - LogAsync(DateTime.Now, LogLevel.Error, "夹爪位置错误,当前流程停止"); - IsSingleStepOperating = false; - - return; - } - else - GripperMove(OmronPlc, M1E2DownLoosenPos);//夹爪运动 - - - //先移动到夹爪水平或上挑的点 robotPointMachine1Entrance2TakeTyreTiltUpperPos - StrRobotPoint strM1E2TakeTiltUpperPoint = ClassChangeStruct(robotPointMachine1Entrance2TakeTyreTiltUpperPos); - NbtRobotMove(NbtRobot, strM1E2TakeTiltUpperPoint, 500); - - - ////上环升保持 - VulcanizaMachineOperateKeep(OmronPlc, "D127", "1"); - Thread.Sleep(3000);//保持3s - - //取出轮胎之前先抽真空硫化机进行抽真空动作,抽真空2s - VulcanizaMachineOperateOnce(OmronPlc, addrD125, 3000); - - //从水平点移动到 - StrRobotPoint strM1E2DownPlaceLevelPointUpper = strM1E2TakeTiltUpperPoint; - strM1E2DownPlaceLevelPointUpper.Z = strM1E2TakeTiltUpperPoint.Z + 350; - - //从水平点移出 - NbtRobotMove(NbtRobot, strM1E2DownPlaceLevelPointUpper, 1000); - //降上环 - VulcanizaMachineOperateKeep(OmronPlc, "D127", "0"); - - - ////上方220再斜向上移动一点 - //StrRobotPoint strM1E2TakeTiltUpperPoint = ClassChangeStruct(robotPointMachine1Entrance2TakeTyreTiltUpperPos); - //NbtRobotMove(NbtRobot, strM1E2TakeTiltUpperPoint, 1000); - - //移动到放置点,反用DownPoints - NbtRobotMoves(NbtRobot, NbtRobot.IConfig.RobotMachine1Entrance2DownPoints, 1000, true); - - //移动到取料点上方220 - StrRobotPoint strM1E2DownPlacePoint = ClassChangeStruct(robotPointMachine1Entrance2DownPlacePos);//放置点 - StrRobotPoint strM1E2DownPlacePointUpper = strM1E2DownPlacePoint;//放置点上方 - strM1E2DownPlacePointUpper.Z = strM1E2DownPlacePoint.Z + 220; - //移动到放置点上方 - NbtRobotMove(NbtRobot, strM1E2DownPlacePointUpper, 1000); - LogAsync(DateTime.Now, LogLevel.Error, "是否在-<放置点>-加传感器,判断放置点是否已置空??"); - //移动到放置点 - NbtRobotMove(NbtRobot, strM1E2DownPlacePoint, 1000); - - LogAsync(DateTime.Now, LogLevel.Detail, "机械臂从Machine1Entrance2料仓门口移动到放置点"); - - //开始放料 - //夹爪运动到下料夹紧点,夹爪(D31,D33)夹紧 - if (M1E2DownFastenPos == "error") - { - LogAsync(DateTime.Now, LogLevel.Error, "夹爪位置错误,当前流程停止"); - IsSingleStepOperating = false; - - return; - } - else - GripperMove(OmronPlc, M1E2DownFastenPos);//夹爪运动 - Thread.Sleep(1000); - - //放料完,移走机械臂 - //移动到放置点上方 - NbtRobotMove(NbtRobot, strM1E2DownPlacePointUpper, 1000); - //夹爪运动到放松点 - GripperMove(OmronPlc, NbtRobot.IConfig.GripperLoosenPosition); - - LogAsync(DateTime.Now, LogLevel.Detail, "2号位下料完成。"); - - NbtRobotMove(NbtRobot, initPoint, 1000);//回原点 - LogAsync(DateTime.Now, LogLevel.Detail, "机械臂回原点,夹爪回原点。"); - - IsSingleStepOperating = false; - }); - } + // SnapshotState = SnapshotState.Finish; + ProcessStatus = ProcessStatus.ClodeLight; + } #endif - //PLC地址 - public class PlcAddress - { - //硫化机 开模到位 - public string AddrMachine1MoldOpenInPlace { get; } = "D09"; - public string AddrMachine2MoldOpenInPlace { get; } = "D11"; - - //上料 胎胚就位 - public string AddrMachine1Tyre1InPlace { get; } = "D81"; - public string AddrMachine1Tyre2InPlace { get; } = "D83"; - - //硫化机 内压指示灯 - public string AddrMachine1InnerPressureLight { get; } = "D101"; - public string AddrMachine2InnerPressureLight { get; } = "D201"; - - //硫化机 手动or自动 - public string AddrMachine1AutoManual { get; } = "D103"; - public string AddrMachine2AutoManual { get; } = "D203"; - - //硫化机 合模 - public string AddrMachine1CloseMold { get; } = "D105"; - public string AddrMachine2CloseMold { get; } = "D205"; - - //硫化机 开模 - public string AddrMachine1OpenMold { get; } = "D107"; - public string AddrMachine2OpenMold { get; } = "D207"; - - //硫化机 停止 - public string AddrMachine1Stop { get; } = "D109"; - public string AddrMachine2Stop { get; } = "D209"; - - //硫化机 上定型 - public string AddrMachine1UpperStereotypes { get; } = "D113"; - public string AddrMachine2UpperStereotypes { get; } = "D213"; - - //硫化机 下定型 - public string AddrMachine1LowerStereotypes { get; } = "D115"; - public string AddrMachine2LowerStereotypes { get; } = "D215"; - - //硫化机 总定型 - public string AddrMachine1AllStereotypes { get; } = "D117"; - public string AddrMachine2AllStereotypes { get; } = "D217"; - - //硫化机 上排气 - public string AddrMachine1UpperExhaust { get; } = "D119"; - public string AddrMachine2UpperExhaust { get; } = "D219"; - - //硫化机 下排气 - public string AddrMachine1LowerExhaust { get; } = "D121"; - public string AddrMachine2LowerExhaust { get; } = "D221"; - - //硫化机 总排气 - public string AddrMachine1AllExhaust { get; } = "D123"; - public string AddrMachine2AllExhaust { get; } = "D223"; - - //硫化机 抽真空 - public string AddrMachine1Vacuumize { get; } = "D125"; - public string AddrMachine2Vacuumize { get; } = "D225"; - - //硫化机 上环升 - public string AddrMachine1UpperRingRise { get; } = "D127"; - public string AddrMachine2UpperRingRise { get; } = "D227"; - - //硫化机 下环升 - public string AddrMachine1LowerRingRise { get; } = "D129"; - public string AddrMachine2LowerRingRise { get; } = "D229"; - - - - - - - } - public class DistanceRobot - { - public double testDs { get; set; } - public double x { get; set; } - public double y { get; set; } + #endregion +#endif - public DistanceRobot(double _testDs, double _x, double _y) - { - this.testDs = _testDs; - this.x = _x; - this.y = _y; - } - } - public double MoniToRealJS(double moni) - { - //cout << moni << endl; - moni = (moni - 819.0) * (16.0 / (4095.0 - 819.0)) + 4; - //cout << moni; - moni = (moni - 4) * ((5000.0 - 60.0) / 16.0) + 60; - //cout << moni; - return moni; - } - /// - /// - /// - /// 设备PLC - /// PLC写入的地址 - /// 地址初始值 - /// 地址结束值 - public void PcToPlcWrite(PLCBase PLCB, string adress, string original, string end) - { - string readinitrobot = ProcessReadInt(PLCB, adress, "int"); - if (readinitrobot == original) - { - ProcessWriteInt(PLCB, adress, "int", end); - } - } - public StrRobotPoint ComputeClampoint(StrRobotPoint x1, StrRobotPoint x2, List DistanceTyre, double time) - { - // 算出抓取点 - List keyValuePairs = new List(); - double x1d = x1.X; - double y1d = x1.Y; - - double x2d = x2.X; - double y2d = x2.Y; - - // double k = (y2d - y1d) / (x2d - x1d); - //double distancepow= Math.Pow((y2d - y1d), 2) + Math.Pow((x2d - x1d), 2); - // double distance = Math.Pow(distancepow, 1.0 / 2); - // time = sw.ElapsedMilliseconds; - double dV1 = (x2d - x1d) / time; - double dT1 = time / DistanceTyre.Count(); - double dV2 = (y2d - y1d) / time; - double dT2 = time / DistanceTyre.Count(); - - for (int i = 0; i < DistanceTyre.Count(); i++) - { - double dxTmp = x1d + dV1 * (dT1 * i); - double dyTmp = y1d + dV2 * (dT2 * i); - double dtestDs = DistanceTyre[i]; - //DistanceRobot distanceRobot = ; - //distanceRobot.testDs = DistanceTyre[i]; - //distanceRobot.x = dxTmp; - //distanceRobot.y = dyTmp; - keyValuePairs.Add(new DistanceRobot(dtestDs, dxTmp, dyTmp)); - Debug.WriteLine(i); - } - List dic1Ascsort = keyValuePairs.OrderBy(a => a.testDs).ToList(); - StrRobotPoint clamPoint = x1; - clamPoint.Z = x1.Z; ;// x1.Z; - clamPoint.A = x1.A; - clamPoint.B = x1.B; - clamPoint.C = x1.C; - clamPoint.X = (float)dic1Ascsort[0].x; - clamPoint.Y = (float)dic1Ascsort[0].y - (float)dic1Ascsort[0].testDs + 125; - return clamPoint; - } #region 流程操作 [BRS.Common.Model.Helper.ProcessMethod("", "StartProcess", "主流程启动", InvokeType.TestInvoke)] @@ -883,786 +432,198 @@ namespace BRS.Process.A020 return strRobotPoint; } - //private void Pause() - //{ - // while (MachineState == MachineState.Pause) - // { - // Thread.Sleep(50); - // continue; - // } - //} - private bool isMachineRobotRunning() + public ProcessResponse StartProcess(IOperationConfig config, Common.Interface.IDevice invokeDevice, Common.Interface.IDevice sourceDevice) { - //if(MachineState == MachineState.Running && RobotsStatus != RobotsStatus.Pweroff) - // LogAsync(DateTime.Now, LogLevel.Action, "硫化机、机械臂正常运行中。。。"); - //else - // LogAsync(DateTime.Now, LogLevel.Error, "硫化机或机械臂停止运行!!!"); - if (MachineState != MachineState.Running || RobotsStatus == RobotsStatus.Pweroff) - LogAsync(DateTime.Now, LogLevel.Error, "硫化机或机械臂停止运行!!!"); - return MachineState == MachineState.Running && RobotsStatus != RobotsStatus.Pweroff; - } - - /// - /// 两数是否约等于,在tolerance的容许范围内 - /// - /// - /// - /// 数值比较所容许的范围 - private bool IsNumApproximateEqual(float num1, float num2, float tolerance) - { - float differ = num1 - num2; - if (Math.Abs(differ) <= Math.Abs(tolerance)) - return true; - else - return false; - } - - public ProcessResponse StartProcess(IOperationConfig config, IDevice invokeDevice, IDevice sourceDevice) - { - LogAsync(DateTime.Now, LogLevel.Action, "流程启动完成!"); - PubSubCenter.GetInstance().Publish(PubSubCenterMessageType.IsProcessOpened.ToString(), true, null); - return new ProcessResponse(true); - - //if (MachineState != MachineState.Ready) - //{ - // LogAsync(DateTime.Now, LogLevel.Error, "机台不在就绪状态,无法启动"); - // return new ProcessResponse(false); - //} + if (MachineState != MachineState.Ready) + { + LogAsync(DateTime.Now, LogLevel.Error, "机台不在就绪状态,无法启动"); + return new ProcessResponse(false); + } LogAsync(DateTime.Now, LogLevel.Information, "流程启动中,请稍候..."); - - PrepareBatchNO(); + var MelsecPLC = DeviceCollection.FirstOrDefault(u => u is PLCBase) as PLCBase; + var KawasakiRobot = DeviceCollection.Find(d => d is KawasakiTCPSeverRobotDriver) as KawasakiTCPSeverRobotDriver; + StrRobotPoint strPointInitA; + strPointInitA.X = 847.462F; + strPointInitA.Y = 891.623F; + strPointInitA.Z = 803.067F; + strPointInitA.A = 90F; + strPointInitA.B = 180F; + strPointInitA.C = 90F; - _productQueue = new List(); + + RobotPoint robotInitPoint = KawasakiRobot.IIConfig.RobotInitPosition;//机械臂初始点位 - // 触发配置 - //var temp = new List(); - //temp.AddRange(A020Config.TriggerConfigCollection); - //temp.AddRange(A020Config.DetectionTriggerConfigCollection); - //_triggerList = new List(); - //_triggerList.AddRange(temp.OrderBy(t => t.TriggerSort)); - //var firstDetection = _triggerList.FirstOrDefault(t => t.TriggerType == TriggerType.DetectionResultTrigger && t.IsEnableTrigger) as DetectionTrigger; - //var lastDetection = _triggerList.LastOrDefault(t => t.TriggerType == TriggerType.DetectionResultTrigger && t.IsEnableTrigger) as DetectionTrigger; - //_firstCameraId = firstDetection?.CameraId; - //_lastCameraId = lastDetection?.CameraId; + #region 驱动委托 + if (KawasakiRobot != null) + { + KawasakiRobot.OnTcpDataReceived -= TCPseverDriver_OnDataReceived; + KawasakiRobot.OnTcpDataReceived += TCPseverDriver_OnDataReceived; + } + #endregion - - // PrepareMLEngine(); - int TyrePos = 0; - var OmronPlc = DeviceCollection.FirstOrDefault(u => u is PLCBase) as PLCBase; - var NbtRobot = DeviceCollection.FirstOrDefault(u => u is RobotBase) as RobotBase; - RobotPoint x1 = NbtRobot.IConfig.RobotInitPosition; //NbtRobot.IConfig.X1Point; - RobotPoint x2 = NbtRobot.IConfig.X2Point; - RobotPoint robotPoint = NbtRobot.IConfig.RobotInitPosition;//初始点 - - RobotPoint robotPointTyrePos1 = NbtRobot.IConfig.X1_1Point; //1号硫化机1号位 - RobotPoint robotPointTyrePos2 = NbtRobot.IConfig.X1_2Point; //1号硫化机2号位 - RobotPoint robotPointTyrePos3 = NbtRobot.IConfig.X2_1Point; //2号硫化机1号位 - RobotPoint robotPointTyrePos4 = NbtRobot.IConfig.X2_2Point; //2号硫化机2号位 - - RobotPoint RelaserobotPointTyrePos = NbtRobot.IConfig.TakeOutPoint; ;//1号硫化机1号位取出放置位置 - //RobotPoint RelaserobotPointTyrePos2 = null;//1号硫化机2号位取出放置位置 - //RobotPoint RelaserobotPointTyrePos3 = null;//2号硫化机1号位取出放置位置 - // RobotPoint RelaserobotPointTyrePos4 = null;//2号硫化机2号位取出放置位置 - string wheelspeed = NbtRobot.IConfig.GripperFastenPosition;// "75000";//机械臂运动速度 3600 r/s - string Lossenwheelspeed = NbtRobot.IConfig.GripperLoosenPosition;// "40000";//机械臂运动速度 3600 r/s - string allLossenwheelspeed = NbtRobot.IConfig.GripperAllFastenPosition; - - //17寸轮胎下料配置 - string wheel17speed = NbtRobot.IConfig.Wheel17GripperUpFasten;// "75000";//机械臂运动速度 3600 r/s - string Lossenwheel17speed = NbtRobot.IConfig.Wheel17GripperDownFasten;// "40000";//机械臂运动速度 3600 r/s - string allLossenwheel17speed = NbtRobot.IConfig.Wheel17GripperDownLoosen; - - //16寸轮胎下料配置 - string wheel16speed = NbtRobot.IConfig.Wheel16GripperUpFasten;// "75000";//机械臂运动速度 3600 r/s - string Lossenwheel16speed = NbtRobot.IConfig.Wheel16GripperDownFasten;// "40000";//机械臂运动速度 3600 r/s - string allLossenwheel16speed = NbtRobot.IConfig.Wheel16GripperDownLoosen; - - //18寸轮胎下料配置 - string wheel18speed = NbtRobot.IConfig.Wheel18GripperUpLoosen;// "75000";//机械臂运动速度 3600 r/s - string Lossenwheel18speed = NbtRobot.IConfig.Wheel18GripperDownFasten;// "40000";//机械臂运动速度 3600 r/s - string allLossenwheel18speed = NbtRobot.IConfig.Wheel18GripperDownLoosen; - - string takeIN = wheel17speed; - string Hooking = Lossenwheel17speed; - string takeLoose = allLossenwheel17speed; - - StrRobotPoint initPoint = ClassChangeStruct(robotPoint); - StrRobotPoint clamPoint = initPoint; - StrRobotPoint initx2Point = ClassChangeStruct(x2); - StrRobotPoint RelaserobotPointTyrePos1 = ClassChangeStruct(RelaserobotPointTyrePos); - // 初始化 oee - InitialOEEStatistic(); - WhoolSize = WhoolSize.Size17; + var sw = A020Config.ProcessInitialOps[0]; MachineState = MachineState.Running; - RobotsStatus = RobotsStatus.Relasing; - MachineStateStep = MachineStateStep.Ready; - ProcessStatus = ProcessStatus.Init; - string robotInitPoint = "D05";// - string SetSizeWhool = NbtRobot.IConfig.SetWhoolSize; - if (SetSizeWhool == "17") - WhoolSize = WhoolSize.Size17; - else if (SetSizeWhool == "16") - WhoolSize = WhoolSize.Size16; - else if (SetSizeWhool == "18") - WhoolSize = WhoolSize.Size18; + ProcessStatus = ProcessStatus.ALLFinish; + + //OpenCam1(); + Task.Run(() => { - while (MachineState == MachineState.Running && - RobotsStatus != RobotsStatus.Pweroff && MachineStateStep != MachineStateStep.Pause) + while (MachineState == MachineState.Running && RobotsStatus != RobotsStatus.PowerOff && MachineStateStep != MachineStateStep.Pause) { - int speed = 1000;//机械臂运动速度 m/s - string readint = ProcessReadInt(OmronPlc, robotInitPoint, "int"); - -#if true - #region 机械臂初始化 - ProcessStatus = ProcessStatus.Init; - //流程初始化 - if (ProcessStatus == ProcessStatus.Init && - readint == "1" && - RobotsStatus != RobotsStatus.Claming && - RobotsStatus != RobotsStatus.Moving) + switch (ProcessStatus) { - //机械手回到初始点 - NbtRobot.Move(initPoint, speed, true); - if (IsTesting) - RobotsStatus = RobotsStatus.Wating; - else - { - RobotsStatus = RobotsStatus.Moving; - while (RobotsStatus == RobotsStatus.Moving) + case ProcessStatus.Init: { - Thread.Sleep(1000); - if (NbtRobot.get_status() == 0) - RobotsStatus = RobotsStatus.Wating; - } - } - - if (MachineState == MachineState.Running && - RobotsStatus != RobotsStatus.Pweroff && - MachineStateStep != MachineStateStep.Pause) - { - - } - else { break; } - - //2.D11 1-0 PC→PLC //机械手复位回到初始点完成 - // 3.D21 0 - 1 PC → PLC //夹具打开回到初始位置 - PcToPlcWrite(OmronPlc, "D11", "1", "0"); - PcToPlcWrite(OmronPlc, "D21", "1", "0"); - Thread.Sleep(1000); - PcToPlcWrite(OmronPlc, "D11", "0", "1"); - PcToPlcWrite(OmronPlc, "D21", "0", "1"); - Thread.Sleep(200); - PcToPlcWrite(OmronPlc, "D21", "1", "0"); - //Thread.Sleep(15000); - ProcessStatus = ProcessStatus.MesureingInitPLC; - - } - StrRobotPoint currentP; - if (IsTesting) - currentP = initPoint; - else - currentP = NbtRobot.GetPosition(); - string ClamInitPLC = ProcessReadInt(OmronPlc, "D23", "int");//夹具初始化成功 - - if (currentP.A == initPoint.A && currentP.B == initPoint.B && currentP.C == initPoint.C && - currentP.X == initPoint.X && currentP.Y == initPoint.Y && currentP.Z == initPoint.Z) - { - if (ClamInitPLC == "1" && ProcessStatus == ProcessStatus.MesureingInitPLC) - ProcessStatus = ProcessStatus.MesureingInit; - } - else if (ProcessStatus == ProcessStatus.MesureingInitPLC) - { - LogAsync(DateTime.Now, LogLevel.Detail, $"{TyrePos}已在初始点"); - Thread.Sleep(15000); - ProcessStatus = ProcessStatus.MesureingInit; - } - else - { - - } - #endregion - #region 测距+抓取+放进硫化机+夹爪和机械臂回到原位 - { - #region 接收放轮胎位置指令 - if (ProcessStatus == ProcessStatus.MesureingInit) - { - LogAsync(DateTime.Now, LogLevel.Detail, $"{TyrePos}接收放轮胎位置指令"); - //4.D23 0 - 1 PLC → PC //夹具回到初始位置完成+接收放轮胎位置指令 - string ClamInit = ProcessReadInt(OmronPlc, "D61", "int"); - //5.D25 0 - 1 PLC → PC //接收放轮胚指令 目前只放一个 上料信号触发使得流程变成测距 - // string ClamReady = ProcessReadInt(OmronPlc, "D25", "int"); - - if (ClamInit == "1") - ProcessStatus = ProcessStatus.Mesureing; - Thread.Sleep(20); - } - #endregion - #region 测距 - if (ProcessStatus == ProcessStatus.Mesureing && - RobotsStatus != RobotsStatus.Claming && - RobotsStatus != RobotsStatus.Moving) - { - ProcessWriteInt(OmronPlc, "D61", "int", "0"); - RobotsStatus = RobotsStatus.Relasing;//初始点位 - - List DistanceTyre = new List(); //测距点 - List DistanceList_List = new List();//程序查看测距点String - - if (NbtRobot.get_status() == 0) - { - Stopwatch sw = new Stopwatch(); - NbtRobot.Move(initx2Point, 100, true); - RobotsStatus = RobotsStatus.Moving; - sw.Start(); - while (RobotsStatus == RobotsStatus.Moving) + if (RobotsStatus.Release == RobotsStatus)//机器人复位,初始状态 { - //6.D31 xxxx PLC → PC //一边移动机械手一边读取测距信号 - string DistanceList = ProcessReadInt(OmronPlc, "D29", "int");//读出寄存器距离 - DistanceList_List.Add(DistanceList); - DistanceTyre.Add(Convert.ToDouble(DistanceList) / 10); - if (DistanceTyre.Count() > 1000 && NbtRobot.get_status() == 0) + //========移动到示教点(初始点)========== + int ShiJiaoVecCount = AModeTypeRun.A_deviation.Count;//相机1的偏移点组 + if (ShiJiaoVecCountFlag1 < ShiJiaoVecCount) { - RobotsStatus = RobotsStatus.Wating; - } - } - sw.Stop(); - - - if (MachineState == MachineState.Running && - RobotsStatus != RobotsStatus.Pweroff && - MachineStateStep != MachineStateStep.Pause) - { - - } - else { break; } - - //算出抓取点 - clamPoint = ComputeClampoint(initPoint, initx2Point, DistanceTyre, sw.ElapsedMilliseconds); - LogAsync(DateTime.Now, LogLevel.Detail, $"算出抓取点{clamPoint}"); - LogAsync(DateTime.Now, LogLevel.Detail, $"机械臂移动时间:{sw.ElapsedMilliseconds}"); - StrRobotPoint x2Up = initx2Point; - x2Up.Y = x2.Y; - x2Up.A = x2.A; - x2Up.B = x2.B; - x2Up.C = x2.C; - x2Up.X = x2.X; - x2Up.Z = x2.Z + 280; - if (RobotsStatus == RobotsStatus.Wating) - NbtRobot.Move(x2Up, speed, true); - RobotsStatus = RobotsStatus.Moving; - while (RobotsStatus == RobotsStatus.Moving)//NbtRobot.get_status() !=0) - { - Thread.Sleep(2000); - if (NbtRobot.get_status() == 0) - { - RobotsStatus = RobotsStatus.Wating; - } - } - - if (MachineState == MachineState.Running && RobotsStatus != RobotsStatus.Pweroff && MachineStateStep != MachineStateStep.Pause) { } - else { break; } - - StrRobotPoint clamPointUp = clamPoint; - clamPointUp.Y = clamPoint.Y; - clamPointUp.A = clamPoint.A; - clamPointUp.B = clamPoint.B; - clamPointUp.C = clamPoint.C; - clamPointUp.X = clamPoint.X; - clamPointUp.Z = clamPointUp.Z + 280; - Thread.Sleep(1000); - NbtRobot.Move(clamPointUp, speed, true);//移动到抓取点上面 - RobotsStatus = RobotsStatus.Moving; - while (RobotsStatus == RobotsStatus.Moving) - { - Thread.Sleep(2000); - - if (NbtRobot.get_status() == 0) - { - RobotsStatus = RobotsStatus.Wating; - } - } - - if (MachineState == MachineState.Running && RobotsStatus != RobotsStatus.Pweroff && MachineStateStep != MachineStateStep.Pause) { } - else { break; } - - if (RobotsStatus == RobotsStatus.Wating) - NbtRobot.Move(clamPoint, speed, true);//移动到抓取点 - RobotsStatus = RobotsStatus.Moving; - while (RobotsStatus == RobotsStatus.Moving)//NbtRobot.get_status() !=0) - { - Thread.Sleep(2000); - - if (NbtRobot.get_status() == 0) - { - RobotsStatus = RobotsStatus.Wating; - } - } - - if (MachineState == MachineState.Running && RobotsStatus != RobotsStatus.Pweroff && MachineStateStep != MachineStateStep.Pause) { } - else { break; } - Thread.Sleep(1000); - - LogAsync(DateTime.Now, LogLevel.Detail, $"机械手到达机械位置 控制夹具夹紧"); - //机械手到达机械位置 控制夹具夹紧 - //7.D33 xxxxxxxx &D31 0-1 PC → PLC //机械手到达轮胎位置后控制夹具夹紧 - // StrRobotPoint currentP = NbtRobot.GetPosition(); - ProcessWriteInt(OmronPlc, "D31", "int", "0");//转圈标识 - ProcessWriteInt(OmronPlc, "D33", "int", "0");//转圈 - ProcessWriteInt(OmronPlc, "D33", "int", wheelspeed);//转圈 - PcToPlcWrite(OmronPlc, "D31", "0", "1"); - Thread.Sleep(1000); - PcToPlcWrite(OmronPlc, "D31", "1", "0");//重置转圈PLC标识 - LogAsync(DateTime.Now, LogLevel.Detail, $"{wheelspeed}机械手到达机械位置 控制夹具夹紧"); - Thread.Sleep(1000); - string DistanceList2 = ProcessReadInt(OmronPlc, "D29", "int"); - //ProcessWriteInt(OmronPlc, "D201", "int", DistanceList2); - TyrePos = 1; - if (Convert.ToDouble(DistanceList2) < 2000) - { - // ProcessStatus = ProcessStatus.Claim; - TyrePos = 1; - } - ProcessStatus = ProcessStatus.MesureingPLC; - - } - - } - #endregion - #region 放进硫化机+抓取 - string ClamInit8 = ProcessReadInt(OmronPlc, "D37", "int"); - if (ClamInit8 == "1" && ProcessStatus == ProcessStatus.MesureingPLC) - ProcessStatus = ProcessStatus.Claim; - if (ProcessStatus == ProcessStatus.Claim && TyrePos != 0) - { - LogAsync(DateTime.Now, LogLevel.Detail, $"{TyrePos}放进硫化池"); - - //放进第几个硫化池中 - switch (TyrePos) - { - case 1: - { - LogAsync(DateTime.Now, LogLevel.Action, $"{TyrePos}移动电组 机械手将轮胚放进硫化机"); - Thread.Sleep(5000); - //通过移动电组移动到指定位置1 - StrRobotPoint clamPoint2 = clamPoint; - clamPoint2.Z += 200; - NbtRobot.Move(clamPoint2, speed, true); - LogAsync(DateTime.Now, LogLevel.Detail, $"{TyrePos} 机械手升高"); - - RobotsStatus = RobotsStatus.Moving; - while (RobotsStatus == RobotsStatus.Moving)//NbtRobot.get_status() !=0) + CQRobotPoint cQRobotPoint = new CQRobotPoint();//示教拍摄点 + + DiffVPVRPoint A_ShiJIaoPoint = AModeTypeRun.A_deviation[ShiJiaoVecCountFlag1]; + //CVCalibrationConfig cVCalibrationConfig = ModeTypeRun.CVCalibrationConfig; + foreach (var CalNum in AModeTypeRun.CVCalibrationConfig) { - - Thread.Sleep(2000); - if (NbtRobot.get_status() == 0) + if (CalNum.CVTypeID == A_ShiJIaoPoint.CVTypeID)//若这个螺丝的标定ID存在标定组 则使用标定组的各种信息 { - RobotsStatus = RobotsStatus.Wating; + cQRobotPoint = CalNum.SHIJIao_deviation[0]; } } - if (MachineState == MachineState.Running && RobotsStatus != RobotsStatus.Pweroff && MachineStateStep != MachineStateStep.Pause) { } - else { break; } - PcToPlcWrite(OmronPlc, "D31", "1", "0");//重置转圈PLC标识 + VPVRPoint current_P = new VPVRPoint(); + current_P.X = A_ShiJIaoPoint.X; + current_P.Y = A_ShiJIaoPoint.Y; + current_P.Z = A_ShiJIaoPoint.Z; - LogAsync(DateTime.Now, LogLevel.Detail, $"{TyrePos} 机械手上料移动组点移动"); + StrRobotPoint CurrentPointInit = CQRobotPointChangeStrRobotPoint(cQRobotPoint, current_P); + strPointInitA.X = CurrentPointInit.X; + strPointInitA.Y = CurrentPointInit.Y; + strPointInitA.Z = CurrentPointInit.Z; + strPointInitA.A = CurrentPointInit.A; + strPointInitA.B = CurrentPointInit.B; + strPointInitA.C = CurrentPointInit.C; + //string PointInitMove = KawasakiRobotMove(KawasakiRobot, strPointInitA); + //KawasakiRobot.SendMessage(PointInitMove); + //LogAsync(DateTime.Now, LogLevel.Assist, $"机械臂A移动到示教点"); + //RobotsStatus = RobotsStatus.Runing; + //DownCirce = DownCirce.DownCirce; + //while (true) + //{ + // if (DownCirce == DownCirce.DownCirceRuning) + // break; + // else + // Thread.Sleep(10); + //} + KawasakiRobotInit(KawasakiRobot); + } + } + } + break; + case ProcessStatus.OpenLight: + { + Stopwatch stopWatch = new Stopwatch(); + stopWatch.Restart(); + LogAsync(DateTime.Now, LogLevel.Assist, $"打开光源,拍摄图片,视觉定位"); + //打开光源 + //JYDAMDriver1.WriteStrs(SerialOpenLight); + #region 拍摄图片 取图进行视觉定位 + SoftTrigger1(); + Thread.Sleep(200); + while (CamA == true) + { + //拍照视觉定位 + OnBitmapChanged?.Invoke(1, Bit_Image); + OnCameraImageOutput(ref sswF, ref Mat_CamA, 1); + stopWatch.Stop(); + Console.WriteLine(DateTime.Now + "=========拍照==================" + stopWatch.ElapsedMilliseconds + "==========================="); + CamA = false; + } + #endregion + } + break; + case ProcessStatus.ClodeLight: + { + //关闭光源 + // JYDAMDriver1.WriteStrs(SerialCloseLight); + LogAsync(DateTime.Now, LogLevel.Assist, $"关闭光源"); + Thread.Sleep(10); + ProcessStatus = ProcessStatus.CVLocation; + } + break; + case ProcessStatus.CVLocation: + { + if (RobotsStatus.Release == RobotsStatus) + { + #region 机械臂移动视觉定位点 - NbtRobot.IConfig.RobotUpMovePoints.ForEach(points => - { + strPointInitA.X = (float)sswF.dX; + strPointInitA.Z = (float)sswF.dY; + if (Math.Abs((float)strPointInitA.X) <= 100 || Math.Abs((float)strPointInitA.Z) <= 0) + { + StopMachineClosing(MelsecPLC, KawasakiRobot); - StrRobotPoint strRobotPoint = ClassChangeStruct(points); - NbtRobot.Move(strRobotPoint, speed, true); - RobotsStatus = RobotsStatus.Moving; - while (RobotsStatus == RobotsStatus.Moving)//NbtRobot.get_status() !=0) - { + MachineState = MachineState.Closing; - Thread.Sleep(2000); - if (NbtRobot.get_status() == 0) - { - RobotsStatus = RobotsStatus.Wating; - } - } - }); - if (MachineState == MachineState.Running && RobotsStatus != RobotsStatus.Pweroff && MachineStateStep != MachineStateStep.Pause) { } - else { break; } - if (NbtRobot.IConfig.RobotUpMovePoints.Count() == 0) - break; - // 9.D37 0 - 1 PC → PLC //放置轮胎完成 - //10.D33 xxxxxxxx &D31 0-1 PC → PLC //夹具松动以便机械手归位 - - LogAsync(DateTime.Now, LogLevel.Detail, $"{TyrePos} 夹具松动以便机械手归位"); - ProcessWriteInt(OmronPlc, "D31", "int", "0");//标识 - ProcessWriteInt(OmronPlc, "D33", "int", "0");//转圈 - ProcessWriteInt(OmronPlc, "D33", "int", Lossenwheelspeed);//转圈胎// 11.D49 0 - 1 PLC → PC //夹具松动完成 - PcToPlcWrite(OmronPlc, "D31", "0", "1"); - Thread.Sleep(200); - PcToPlcWrite(OmronPlc, "D31", "1", "0");//重置转圈PLC标识 - Thread.Sleep(8000); - - LogAsync(DateTime.Now, LogLevel.Detail, $"{TyrePos}夹具松松完成"); - ProcessStatus = ProcessStatus.ClaimPLC; - - - //再在硫化中 + LogAsync(DateTime.Now, LogLevel.Assist, $"计算定位失败"); break; + } - } - } - #endregion - } - #endregion - #region 夹爪和机械臂回到原位 - string ClamInit11 = ProcessReadInt(OmronPlc, "D37", "int"); - if (ClamInit11 == "1" && ProcessStatus == ProcessStatus.ClaimPLC) - { + // + //==========平滑移动 + List _strRobotPointAs = new List(); + StrRobotPoint strPointInitA1 = new StrRobotPoint(); + strPointInitA1 = strPointInitA; + StrRobotPoint strPointInitA2 = new StrRobotPoint(); + strPointInitA2 = strPointInitA; + strPointInitA2.Y += A_Distance_DisD; + _strRobotPointAs.Add(strPointInitA1); + _strRobotPointAs.Add(strPointInitA2); + //KawasakiRobotMoves(KawasakiRobot, _strRobotPointAs, false); + string TestPoint = MoveMoreNContinueRobot(_strRobotPointAs, ref strPointInitA); - ProcessStatus = ProcessStatus.Loosen; - } - if (ProcessStatus == ProcessStatus.Loosen) - { - LogAsync(DateTime.Now, LogLevel.Detail, $"{TyrePos}移动电组 机械手复位回到初始点"); - - //12.D51 0 - 1 PC → PLC //机械手回归初始位置 - //13.D11 1 - 0 PC→PLC //机械手复位回到初始点完成 - LogAsync(DateTime.Now, LogLevel.Detail, $"{TyrePos} 机械手上料返回组点移动"); - NbtRobot.IConfig.RobotUPBackPoints.ForEach(points => - { - - StrRobotPoint strRobotPoint2 = ClassChangeStruct(points); - - NbtRobot.Move(strRobotPoint2, speed, true); - RobotsStatus = RobotsStatus.Moving; - while (RobotsStatus == RobotsStatus.Moving)//NbtRobot.get_status() !=0) - { - //Task.Delay(200);//线程阻塞 - Thread.Sleep(2000); - if (NbtRobot.get_status() == 0) - { - RobotsStatus = RobotsStatus.Wating; - } - } + DownCirce = DownCirce.DownCirce; + KawasakiRobot.SendMessage(TestPoint);//机械臂移动视觉定位点 + LogAsync(DateTime.Now, LogLevel.Assist, $"机械臂A移动视觉定位点完成"); - }); - if (MachineState == MachineState.Running && RobotsStatus != RobotsStatus.Pweroff && MachineStateStep != MachineStateStep.Pause) { } - else { break; } - if (NbtRobot.IConfig.RobotUPBackPoints.Count() == 0) - return; - - LogAsync(DateTime.Now, LogLevel.Detail, $"回到起始位置"); - - NbtRobot.Move(initPoint, speed, true);//回到起始位置 - RobotsStatus = RobotsStatus.Moving; - while (RobotsStatus == RobotsStatus.Moving)//NbtRobot.get_status() !=0) - { - Thread.Sleep(1000);//线程阻塞 - - if (NbtRobot.get_status() == 0) - { - RobotsStatus = RobotsStatus.Wating; - } - } - if (MachineState == MachineState.Running && RobotsStatus != RobotsStatus.Pweroff && MachineStateStep != MachineStateStep.Pause) { } - else { break; } - // PcToPlcWrite(OmronPlc, "D51", "0", "1"); - //PcToPlcWrite(OmronPlc, "D11", "1", "0"); - //14.D21 0 - 1 PC → PLC //夹具打开回到初始位置 - //PcToPlcWrite(OmronPlc, "D21", "0", "1"); - - PcToPlcWrite(OmronPlc, "D11", "1", "0"); - ProcessWriteInt(OmronPlc, "D21", "int", "0"); - PcToPlcWrite(OmronPlc, "D21", "1", "0"); - Thread.Sleep(1000); - PcToPlcWrite(OmronPlc, "D11", "0", "1"); - PcToPlcWrite(OmronPlc, "D21", "0", "1"); - Thread.Sleep(200); - PcToPlcWrite(OmronPlc, "D21", "1", "0"); - - Thread.Sleep(5000);//松动时间 - - //15.D23 0 - 1 PLC → PC //夹具回到初始位置完成 - RobotsStatus = RobotsStatus.Inplace; - ProcessStatus = ProcessStatus.LoosenPLC; - - } - if (RobotsStatus == RobotsStatus.Inplace && ProcessStatus == ProcessStatus.LoosenPLC) - { - string ClamInit = ProcessReadInt(OmronPlc, "D23", "int");//夹具初始化成功 - if (ClamInit == "1") - { - ProcessWriteInt(OmronPlc, "D63", "int", "0"); - Thread.Sleep(200); - ProcessWriteInt(OmronPlc, "D63", "int", "1"); - Thread.Sleep(200); - ProcessWriteInt(OmronPlc, "D63", "int", "0"); - //TyrePos = 0; - // ProcessStatus = ProcessStatus.TakeOffMove; - ProcessStatus = ProcessStatus.RunFinish; - RobotsStatus = RobotsStatus.Inplace; - MachineStateStep = MachineStateStep.Running; - } - - } - - #endregion -#endif - //并且夹具处于放松状态 机械手在初始位置 - //循环检测是否硫化成功 - //MachineStateStep = MachineStateStep.Running; - #region 判读硫化池下料 - - if (MachineStateStep == MachineStateStep.Running) - { - - if (WhoolSize == WhoolSize.Size17) - { - takeIN = wheel17speed; - Hooking = Lossenwheel17speed; - takeLoose = allLossenwheel17speed; - } - else if (WhoolSize == WhoolSize.Size16) - { - takeIN = wheel16speed; - Hooking = Lossenwheel16speed; - takeLoose = allLossenwheel16speed; - } - else if (WhoolSize == WhoolSize.Size18) - { - takeIN = wheel18speed; - Hooking = Lossenwheel18speed; - takeLoose = allLossenwheel18speed; - } - // 16.D61 0 - 1 PLC → PC //接收取出轮胎1指令并控制机械手到达轮胎位置+机械手在初始点 - #region 接收取出轮胎1指令并控制机械手到达轮胎位置 - String SucessPos = ProcessReadInt(OmronPlc, "D65", "int"); - if (SucessPos == "1")// && ProcessStatus == ProcessStatus.Finish) - { - LogAsync(DateTime.Now, LogLevel.Detail, $"接受下料信号中"); - ProcessStatus = ProcessStatus.TakeOffMove; - - ProcessWriteInt(OmronPlc, "D65", "int", "0");//标识 - } - #endregion - #region 下料从硫化机抓料 - if (ProcessStatus == ProcessStatus.TakeOffMove) - { - ProcessWriteInt(OmronPlc, "D31", "int", "0");//标识 - ProcessWriteInt(OmronPlc, "D33", "int", "0");//转圈 - //ProcessWriteInt(OmronPlc, "D33", "int", "94000");//转圈 - //string TextLossenwheelspeed = "20000"; - ProcessWriteInt(OmronPlc, "D33", "int", takeIN);//转圈抓轮披测试 - PcToPlcWrite(OmronPlc, "D31", "0", "1"); - Thread.Sleep(200); - PcToPlcWrite(OmronPlc, "D31", "1", "0");//重置转圈PLC标识 - ProcessStatus = ProcessStatus.TakeOffMovePLC; - // Thread.Sleep(5000);//转圈所需时间 - - } - - string ClamInit1Down = ProcessReadInt(OmronPlc, "D37", "int"); - if (ClamInit1Down == "1" && ProcessStatus == ProcessStatus.TakeOffMovePLC) - { - LogAsync(DateTime.Now, LogLevel.Detail, $"伺服移动到位,开始下料移动"); - ProcessStatus = ProcessStatus.TakeOffMovePLC_2; - } - - - if (ProcessStatus == ProcessStatus.TakeOffMovePLC_2) - { - //通过移动电组移动到下料指定位置1 - LogAsync(DateTime.Now, LogLevel.Detail, $"{TyrePos} 机械手下料移动进硫化机 抓住轮胎组点移动"); - NbtRobot.IConfig.RobotDownMovePoints.ForEach(points => - { - - StrRobotPoint strRobotPoint3 = ClassChangeStruct(points); - - NbtRobot.Move(strRobotPoint3, speed, true); - RobotsStatus = RobotsStatus.Moving; - while (RobotsStatus == RobotsStatus.Moving)//NbtRobot.get_status() !=0) - { - Thread.Sleep(2000);//线程阻塞 - - if (NbtRobot.get_status() == 0) + RobotsStatus = RobotsStatus.Runing; + while (true) { - RobotsStatus = RobotsStatus.Wating; + if (DownCirce == DownCirce.DownCirceRuning) + break; + else + Thread.Sleep(10); } + #endregion } - - }); - if (NbtRobot.IConfig.RobotDownMovePoints.Count() == 0) - ProcessStatus = ProcessStatus.Resetting; - if (MachineState == MachineState.Running && RobotsStatus != RobotsStatus.Pweroff && MachineStateStep != MachineStateStep.Pause) { } - else { break; } - - //机械手到达机械位置 控制夹具夹紧 - //17.D33 xxxxxxxx &D31 0-1 PC → PLC //控制夹具夹紧 - // 18.D35 0 - 1 PLC → PC //夹具夹紧完成 - //19.D33 xxxxxxxx & D31 0 - 1 PC → PLC //控制夹具夹紧 - //20.D35 0 - 1 PLC → PC //夹具夹紧完成 - ProcessStatus = ProcessStatus.TakeOff; - } - if (ProcessStatus == ProcessStatus.TakeOff) - { - - LogAsync(DateTime.Now, LogLevel.Detail, $"{TyrePos} 夹具勾紧状态以便机械手进入硫化机"); - ProcessWriteInt(OmronPlc, "D31", "int", "0");//标识 - ProcessWriteInt(OmronPlc, "D33", "int", "0");//转圈 - - //ProcessWriteInt(OmronPlc, "D33", "int", "88000"); - ProcessWriteInt(OmronPlc, "D33", "int", Hooking);//夹紧转圈测试 - //todo 松开轮胎// 11.D49 0 - 1 PLC → PC //夹具松动完成 - PcToPlcWrite(OmronPlc, "D31", "0", "1"); - Thread.Sleep(200); - PcToPlcWrite(OmronPlc, "D31", "1", "0");//重置转圈PLC标识 - - - // Thread.Sleep(2000); - ProcessStatus = ProcessStatus.TakeOffCaim; - - - - - } - #endregion - - - #region 下料放到固定位置 - - String TyplcTakeup = ProcessReadInt(OmronPlc, "D37", "int"); - - if (TyplcTakeup == "1" && ProcessStatus == ProcessStatus.TakeOffCaim) - { - LogAsync(DateTime.Now, LogLevel.Detail, $"伺服移动到位,开始下料返回指定位置"); - ProcessStatus = ProcessStatus.TakeOffPLC; - } - - if (ProcessStatus == ProcessStatus.TakeOffPLC) - { - LogAsync(DateTime.Now, LogLevel.Detail, $"{TyrePos} 机械手下料返回组点移动"); - //通过移动电组移动到指定位置1 - //21.D41 0 - 1 PLC → PC //机械臂取出轮胎 - NbtRobot.IConfig.RobotDownBackPoints.ForEach(points => - { - - Thread.Sleep(200);//线程阻塞 - StrRobotPoint strRobotPoint3 = ClassChangeStruct(points); - - NbtRobot.Move(strRobotPoint3, speed, true); - RobotsStatus = RobotsStatus.Moving; - while (RobotsStatus == RobotsStatus.Moving)//NbtRobot.get_status() !=0) + else { - Thread.Sleep(1000);//线程阻塞 - - if (NbtRobot.get_status() == 0) - { - RobotsStatus = RobotsStatus.Wating; - } + Thread.Sleep(10); } - - - // table[camera.Id] = points.X; - }); - //没有下料返回移动点组 - if (NbtRobot.IConfig.RobotDownBackPoints.Count() == 0) - ProcessStatus = ProcessStatus.Resetting; - //放置硫化好的轮胎位置 todo - //NbtRobot.Move(initPoint, speed, true); - - //RabotsStatus = RabotsStatus.Moving; - //while (RabotsStatus == RabotsStatus.Moving)//NbtRobot.get_status() !=0) - //{ - // Thread.Sleep(1000);//线程阻塞 - - // if (NbtRobot.get_status() == 0) - // { - // RabotsStatus = RabotsStatus.Wating; - // } - //} - ProcessStatus = ProcessStatus.TakeOffPoint; - } - - if (ProcessStatus == ProcessStatus.TakeOffPoint) - { - - LogAsync(DateTime.Now, LogLevel.Detail, $"{TyrePos} 夹具抓紧以便机械手进入硫化机"); - ProcessWriteInt(OmronPlc, "D31", "int", "0");//标识 - ProcessWriteInt(OmronPlc, "D33", "int", "0");//转圈 - - //ProcessWriteInt(OmronPlc, "D33", "int", "94000"); - // string TextLossenwheelspeed = "20000"; - ProcessWriteInt(OmronPlc, "D33", "int", takeLoose);//夹紧转圈测试 - //todo 松开轮胎// 11.D49 0 - 1 PLC → PC //夹具松动完成 - PcToPlcWrite(OmronPlc, "D31", "0", "1"); - Thread.Sleep(200); - PcToPlcWrite(OmronPlc, "D31", "1", "0");//重置转圈PLC标识 - - - // Thread.Sleep(2000); - ProcessStatus = ProcessStatus.TakeOffPointCaim; - - - - } - - String TyplcTakeup2 = ProcessReadInt(OmronPlc, "D37", "int"); - - if (TyplcTakeup2 == "1" && ProcessStatus == ProcessStatus.TakeOffPointCaim) - { - LogAsync(DateTime.Now, LogLevel.Detail, $"伺服移动到位,开始下料返回指定位置"); - ProcessStatus = ProcessStatus.TakeOffPointCaimFlag; - } - if (ProcessStatus == ProcessStatus.TakeOffPointCaimFlag) - { - LogAsync(DateTime.Now, LogLevel.Detail, $"{TyrePos} 机械手初始化"); - //22.D43 0 - 1 PC → PLC //取出轮胎完成 - //23.D21 0 - 1 PC → PLC //夹具打开放下轮胎 - //24.D23 0 - 1 PLC → PC //夹具打开放下轮胎完成 - //25.D11 0 - 1 PC → PLC //机械手回归初始位置…… - ProcessWriteInt(OmronPlc, "D67", "int", "0"); - ProcessWriteInt(OmronPlc, "D21", "int", "0"); - - PcToPlcWrite(OmronPlc, "D67", "0", "1"); - PcToPlcWrite(OmronPlc, "D21", "0", "1"); - Thread.Sleep(200);//线程阻塞 - ProcessWriteInt(OmronPlc, "D67", "int", "0"); - ProcessWriteInt(OmronPlc, "D21", "int", "0"); - ProcessStatus = ProcessStatus.TakeOffWhool; - } - String TyplcScuessing = ProcessReadInt(OmronPlc, "D23", "int"); - if (TyplcScuessing == "1" && ProcessStatus == ProcessStatus.TakeOffWhool) - { - ProcessStatus = ProcessStatus.Init; - MachineStateStep = MachineStateStep.Ready;//跳出循环 - Thread.Sleep(2000);//线程阻塞 - } - - //17.Dxx 0 - 1 PC → PLC //机械手回归初始位置且夹具打开回到初始位置(= 第二步)下一次循环 - - #endregion + } + break; } - - #endregion - - - - }; - - Thread.Sleep(200); + } }); - //LogAsync(DateTime.Now, LogLevel.Information, $"产品{p.Id}获取结果:{p.ProductResult} {(p.IsA2B ? "产品IsA2B" : "")}"); + LogAsync(DateTime.Now, LogLevel.Action, "流程启动完成!"); PubSubCenter.GetInstance().Publish(PubSubCenterMessageType.IsProcessOpened.ToString(), true, null); return new ProcessResponse(true); } + + #region 手动操作流程 /// /// 手动拧紧鼠标按下 @@ -1711,7 +672,7 @@ namespace BRS.Process.A020 else { ProcessWriteInt(MelsecPLC, addD3, "int", "0");//D3置0 - + ProcessWriteInt(MelsecPLC, addD171, "int", "3000");//最大扭矩3000 ProcessWriteInt(MelsecPLC, addD51, "int", "1");//手动拧紧螺丝D51置1 @@ -1806,7 +767,7 @@ namespace BRS.Process.A020 { ShaftOperateOnce(MelsecPLC, addD1, 500);//D1置1延时500后置0 - + }); @@ -1859,7 +820,7 @@ namespace BRS.Process.A020 else { ProcessWriteInt(MelsecPLC, addD3, "int", "1");//D3置0 - + ProcessWriteInt(MelsecPLC, addD51, "int", "0");//手动拧紧螺丝D51置1 machineState = MachineState.Pause;//设备暂停 LogAsync(DateTime.Now, LogLevel.Detail, "设备已关闭"); @@ -1967,7 +928,7 @@ namespace BRS.Process.A020 machineState = MachineState.Running; ProcessStatus = ProcessStatus.Init; MachineStateStep = MachineStateStep.Ready; - Task.Run(()=> + Task.Run(() => { while (machineState == MachineState.Running && MachineStateStep != MachineStateStep.Pause) { @@ -2082,7 +1043,6 @@ namespace BRS.Process.A020 } #endregion - /// /// 进入自动化控制进程,完成系列动作 /// @@ -2097,6 +1057,7 @@ namespace BRS.Process.A020 LogAsync(DateTime.Now, LogLevel.Information, "流程启动中,请稍候..."); var MelsecPLC = DeviceCollection.FirstOrDefault(u => u is PLCBase) as PLCBase; + var TcpSeverBase1 = DeviceCollection.Find(d => d is TCPSeverBase && d.InitialConfig.Name == "ListenerA") as TCPSeverBase; string addD201 = "D201";//通讯故障检查地址 string addD19 = "D19";//急停状态检查地址 @@ -2150,6 +1111,172 @@ namespace BRS.Process.A020 return new ProcessResponse(true); } + + + /// + /// 使机器人回到初始位置 + /// + /// + /// + public void KawasakiRobotInit(KawasakiTCPSeverRobotDriver kawasakiRobot) + { + RobotPoint robotInitPoint = kawasakiRobot.IIConfig.RobotInitPosition;//机器人初始点 + StrRobotPoint initPoint = ClassChangeStruct(robotInitPoint); + StrRobotPoint currentP; + if (IsTesting) + currentP = initPoint; + else + currentP = KawasakiRobotGetPose(kawasakiRobot);//获取机械臂当前位置 + + if (currentP.A != initPoint.A || currentP.B != initPoint.B || currentP.C != initPoint.C || + currentP.X != initPoint.X || currentP.Y != initPoint.Y || currentP.Z != initPoint.Z) + KawasakiRobotMove(kawasakiRobot, initPoint); + + LogAsync(DateTime.Now, LogLevel.Detail, "机械臂已在初始点"); + } + /// + /// 川崎机械臂按照单点位移动 + /// + /// 机械臂实例 + /// 需要移动到的点 + public void KawasakiRobotMove(TCPSeverBase kawasakiRobot, StrRobotPoint strPoint) + { + string strMovePoints = MoveRobotCommandLine(strPoint); + kawasakiRobot.SendMessage(strMovePoints); + LogAsync(DateTime.Now, LogLevel.Detail, $"机械臂运动到{strMovePoints}位置"); + KawasakiRobotStatus = KawasakiRobotStatus.Runing; + while (true) + { + if (KawasakiRobotStatus == KawasakiRobotStatus.Stoped) + break; + else + Thread.Sleep(10); + } + LogAsync(DateTime.Now, LogLevel.Detail, $"机械臂运动到{strMovePoints}位置完成!!!!"); + } + /// + /// 川崎机械臂按照规划的路径多点运动 + /// + /// 机械臂实例 + /// 移动的路径点 + /// 当前点 + public void KawasakiRobotMoves(TCPSeverBase kawasakiRobot, List points, bool isReturn) + { + //string points = MoveRobotCommandLine(strPoint); + if (isReturn) //机械手根据原路径返回,重新排列list点位 + points.Reverse(); //反序 + List strPoints = new List(); + points.ForEach(point => + { + strPoints.Add(ClassChangeStruct(point)); + //StrRobotPoint strRobotPoint = ClassChangeStruct(point); + //KawasakiRobotMove(kawasakiRobot, strRobotPoint); + }); + StrRobotPoint currentP = KawasakiRobotGetPose(kawasakiRobot); + string strMovePoints = MoveMoreNContinueRobotCommandLine(strPoints, ref currentP); + kawasakiRobot.SendMessage(strMovePoints); + LogAsync(DateTime.Now, LogLevel.Detail, $"机械臂连续运动到{strMovePoints}位置"); + KawasakiRobotStatus = KawasakiRobotStatus.Runing; + while (true) + { + if (KawasakiRobotStatus == KawasakiRobotStatus.Stoped) + break; + else + Thread.Sleep(10); + } + LogAsync(DateTime.Now, LogLevel.Detail, $"机械臂运动到{strMovePoints}位置完成!!!!"); + if (isReturn) //机械手根据原路径返回,重新排列list点位 + points.Reverse(); //反序 + } + /// + /// 合成川崎机器人移动路径命令 + /// + /// 需要移动的点列表 + /// 合成好的字符串命令 + public string MoveRobotCommandLine(StrRobotPoint strPoint) + { + string pointsStr = Convert.ToString(strPoint.X) + "," + Convert.ToString(strPoint.Y) + "," + Convert.ToString(strPoint.Z) + "," + + Convert.ToString(strPoint.A) + "," + Convert.ToString(strPoint.B) + "," + Convert.ToString(strPoint.C); + string STRMove = "MoveLine_NULL_1_" + pointsStr + "_"; + //string PointInit1 = "MoveLine_NULL_1_462.915,1119.150,1530.227,90.043,90.003,0.040_"; + return STRMove; + } + /// + /// 获取当前位置,返回在回调函数中 + /// + /// + public StrRobotPoint KawasakiRobotGetPose(TCPSeverBase kawasakiRobot) + { + //string points = MoveRobotCommandLine(strPoint); + StrRobotPoint strRobotPoint = new StrRobotPoint(); + kawasakiRobot.SendMessage("GetPose_"); + //LogAsync(DateTime.Now, LogLevel.Detail, $"获取机械臂当前位置"); + while (kawasakiRobot.KawasakiRobotResponse.IsEmpty() || kawasakiRobot.KawasakiRobotResponse.Equals("wanbi")) + { + LogAsync(DateTime.Now, LogLevel.Detail, $"获取机械臂当前位置"); + Thread.Sleep(500); + } + //while (kawasakiRobot.KawasakiRobotResponse.Equals("wanbi")) + //{ + // LogAsync(DateTime.Now, LogLevel.Detail, $"获取机械臂当前位置"); + // Thread.Sleep(500); + //} + if (!kawasakiRobot.KawasakiRobotResponse.IsEmpty()) + { + string[] sArray = kawasakiRobot.KawasakiRobotResponse.Split('_'); + if (sArray[0].Equals("Pose")) + { + sArray = sArray[1].Split(','); + + strRobotPoint.A = float.Parse(sArray[0]); + strRobotPoint.B = float.Parse(sArray[1]); + strRobotPoint.C = float.Parse(sArray[2]); + strRobotPoint.X = float.Parse(sArray[3]); + strRobotPoint.Y = float.Parse(sArray[4]); + strRobotPoint.Z = float.Parse(sArray[5]); + LogAsync(DateTime.Now, LogLevel.Detail, $"获取到机械臂当前位置"); + //return strRobotPoint; + } + else + { + LogAsync(DateTime.Now, LogLevel.Detail, $"未获取到机械臂当前位置"); + LogAsync(DateTime.Now, LogLevel.Detail, $"获取到的信息为{kawasakiRobot.KawasakiRobotResponse}"); + //return strRobotPoint; + } + } + + else + { + LogAsync(DateTime.Now, LogLevel.Detail, $"没有返回值"); + + } + return strRobotPoint; + + } + /// + /// 合成川崎机器人持续运动命令 + /// + /// 需要移动的点列表 + /// 当前位置 + /// 合成好的字符串命令 + public string MoveMoreNContinueRobotCommandLine(List strPoints, ref StrRobotPoint CurrentPoint) + { + string strPointsStr = null; + for (int i = 0; i < strPoints.Count; i++) + { + string pointsStr = Convert.ToString(strPoints[i].X) + "," + Convert.ToString(strPoints[i].Y) + "," + Convert.ToString(strPoints[i].Z) + "," + + Convert.ToString(strPoints[i].A) + "," + Convert.ToString(strPoints[i].B) + "," + Convert.ToString(strPoints[i].C); + strPointsStr += pointsStr + "_"; + } + //CurrentPoint = strPoints[strPoints.Count - 1]; + CurrentPoint = strPoints.Last(); + // string pointsStr2 = Convert.ToString(strPoint2.X) + "," + Convert.ToString(strPoint2.Y) + "," + Convert.ToString(strPoint2.Z) + "," + + //Convert.ToString(strPoint2.O) + "," + Convert.ToString(strPoint2.A) + "," + Convert.ToString(strPoint2.T); + string STRMove = "MoveLine_NULL_" + strPoints.Count.ToString() + "_" + strPointsStr; + //string PointInit1 = "MoveLine_NULL_1_462.915,1119.150,1530.227,90.043,90.003,0.040_"; + return STRMove; + } + /// /// 根据PLC地址操作一次扭矩轴 /// @@ -2181,52 +1308,6 @@ namespace BRS.Process.A020 ProcessWriteInt(PLC, Address, "int", status); } - - /// - /// 初始化夹爪,夹爪松开到原始位置 - /// - /// - private void GripperInit(PLCBase PLC) - { - ProcessWriteInt(PLC, "D21", "int", "0"); - ProcessWriteInt(PLC, "D21", "int", "1"); - Thread.Sleep(1000); - ProcessWriteInt(PLC, "D21", "int", "0"); - - string addr23 = ProcessReadInt(PLC, "D23", "int"); - //D23 0→1 说明夹爪初始化完成 - while (addr23 == "0") - { - Thread.Sleep(100); - addr23 = ProcessReadInt(PLC, "D23", "int"); - } - } - - /// - /// 移动夹爪 - /// - /// PLC驱动 - /// 运动距离 - private void GripperMove(PLCBase PLC, string distence) - { - PcToPlcWrite(PLC, "D31", "1", "0");//夹爪置0 - ProcessWriteInt(PLC, "D33", "int", distence);//设置夹爪运动距离 - ProcessWriteInt(PLC, "D31", "int", "1");//夹爪开始运动 - Thread.Sleep(2000); - - string addr37 = ProcessReadInt(PLC, "D37", "int"); - //D37 0→1 说明夹爪运动完成 - while (addr37 == "0") - { - Thread.Sleep(10); - //addr37 = ProcessReadInt(PLC, "D23", "int"); - addr37 = ProcessReadInt(PLC, "D37", "int"); - } - - LogAsync(DateTime.Now, LogLevel.Detail, $"夹爪运动到{distence}位置"); - PcToPlcWrite(PLC, "D31", "1", "0");//夹爪置0 - } - enum MoveState { UpFasten = 0, @@ -2235,179 +1316,12 @@ namespace BRS.Process.A020 DownLoosen, } - /// - /// 根据轮胎尺寸、要移动的位置,获取夹爪移动绝对位置 - /// - /// robot驱动 - /// 轮胎尺寸 - /// 要移动的位置,0为上料夹紧点,1为上料放松点,2为下料夹紧点,3为下料放松点 - private string GetGripperPosByTyreSize(RobotBase robot, int tyreSize, MoveState state) - { - string position = "error"; - switch (tyreSize) - { - case 12: - List listPositionWheel12 = new List(); - listPositionWheel12.Add(robot.IConfig.Wheel12GripperUpFasten); - listPositionWheel12.Add(robot.IConfig.Wheel12GripperUpLoosen); - listPositionWheel12.Add(robot.IConfig.Wheel12GripperDownFasten); - listPositionWheel12.Add(robot.IConfig.Wheel12GripperDownLoosen); - position = GetGripperPosByMoveState(robot, state, listPositionWheel12); - break; - case 13: - List listPositionWheel13 = new List(); - listPositionWheel13.Add(robot.IConfig.Wheel13GripperUpFasten); - listPositionWheel13.Add(robot.IConfig.Wheel13GripperUpLoosen); - listPositionWheel13.Add(robot.IConfig.Wheel13GripperDownFasten); - listPositionWheel13.Add(robot.IConfig.Wheel13GripperDownLoosen); - position = GetGripperPosByMoveState(robot, state, listPositionWheel13); - break; - case 14: - List listPositionWheel14 = new List(); - listPositionWheel14.Add(robot.IConfig.Wheel14GripperUpFasten); - listPositionWheel14.Add(robot.IConfig.Wheel14GripperUpLoosen); - listPositionWheel14.Add(robot.IConfig.Wheel14GripperDownFasten); - listPositionWheel14.Add(robot.IConfig.Wheel14GripperDownLoosen); - position = GetGripperPosByMoveState(robot, state, listPositionWheel14); - break; - case 15: - List listPositionWheel15 = new List(); - listPositionWheel15.Add(robot.IConfig.Wheel15GripperUpFasten); - listPositionWheel15.Add(robot.IConfig.Wheel15GripperUpLoosen); - listPositionWheel15.Add(robot.IConfig.Wheel15GripperDownFasten); - listPositionWheel15.Add(robot.IConfig.Wheel15GripperDownLoosen); - position = GetGripperPosByMoveState(robot, state, listPositionWheel15); - break; - case 16: - List listPositionWheel16 = new List(); - listPositionWheel16.Add(robot.IConfig.Wheel16GripperUpFasten); - listPositionWheel16.Add(robot.IConfig.Wheel16GripperUpLoosen); - listPositionWheel16.Add(robot.IConfig.Wheel16GripperDownFasten); - listPositionWheel16.Add(robot.IConfig.Wheel16GripperDownLoosen); - position = GetGripperPosByMoveState(robot, state, listPositionWheel16); - break; - case 17: - List listPositionWheel17 = new List(); - listPositionWheel17.Add(robot.IConfig.Wheel17GripperUpFasten); - listPositionWheel17.Add(robot.IConfig.Wheel17GripperUpLoosen); - listPositionWheel17.Add(robot.IConfig.Wheel17GripperDownFasten); - listPositionWheel17.Add(robot.IConfig.Wheel17GripperDownLoosen); - position = GetGripperPosByMoveState(robot, state, listPositionWheel17); - break; - case 18: - List listPositionWheel18 = new List(); - listPositionWheel18.Add(robot.IConfig.Wheel18GripperUpFasten); - listPositionWheel18.Add(robot.IConfig.Wheel18GripperUpLoosen); - listPositionWheel18.Add(robot.IConfig.Wheel18GripperDownFasten); - listPositionWheel18.Add(robot.IConfig.Wheel18GripperDownLoosen); - position = GetGripperPosByMoveState(robot, state, listPositionWheel18); - break; - default: - break; - } - return position; - } - - private string GetGripperPosByMoveState(RobotBase robot, MoveState state, List listPosition) - { - string position = "error"; - switch (state) - { - case MoveState.UpFasten: - position = listPosition[0]; - break; - case MoveState.UpLoosen: - position = listPosition[1]; - break; - case MoveState.DownFasten: - position = listPosition[2]; - break; - case MoveState.DownLoosen: - position = listPosition[3]; - break; - default: - break; - } - - return position; - } - /// - /// 机器人移动至单点 - /// - /// 机器人实例 - /// 需要移动到的点位 - /// 移动速度 - private void NbtRobotMove(RobotBase robot, StrRobotPoint point, int speed) - { - if (RobotsStatus != RobotsStatus.Pweroff) - robot.Move(point, speed, true); - LogAsync(DateTime.Now, LogLevel.Detail, $"机械臂运动到X:{point.X}, Y:{point.Y}, Z:{point.Z}位置"); - RobotsStatus = RobotsStatus.Moving; - while (RobotsStatus == RobotsStatus.Moving)//NbtRobot.get_status() !=0) - { - Thread.Sleep(2000); - - if (IsTesting) - RobotsStatus = RobotsStatus.Wating; - else if (robot.get_status() == 0) - RobotsStatus = RobotsStatus.Wating; - } - } - - /// - /// 机器人按照设置中的移动路径多点运动 - /// - /// 机器人实例 - /// List 配置中定义的路径点 - /// 移动速度 - private void NbtRobotMoves(RobotBase robot, List points, int speed, bool isReturn) - { - if (isReturn) //机械手根据原路径返回,重新排列list点位 - { - points.Reverse(); //反序 - } - points.ForEach(point => - { - StrRobotPoint strRobotPoint = ClassChangeStruct(point); - NbtRobotMove(robot, strRobotPoint, speed); - }); - if (isReturn) //机械手根据原路径返回,重新排列list点位 - { - points.Reverse(); //反序 - } - } - - /// - /// 机器人初始化,回到原位置 - /// - /// - private void NbtRobotInit(RobotBase robot) - { - int speed = 1000; - RobotPoint robotInitPoint = robot.IConfig.RobotInitPosition;//机器人初始点 - StrRobotPoint initPoint = ClassChangeStruct(robotInitPoint); - StrRobotPoint currentP; - if (IsTesting) - currentP = initPoint; - else - currentP = robot.GetPosition();//获取机械臂当前位置 - - if (currentP.A != initPoint.A || currentP.B != initPoint.B || currentP.C != initPoint.C || - currentP.X != initPoint.X || currentP.Y != initPoint.Y || currentP.Z != initPoint.Z) - NbtRobotMove(robot, initPoint, speed); - LogAsync(DateTime.Now, LogLevel.Detail, "机械臂已在初始点"); - } - - - enum DataType { INT = 0, STRING, FLOAT, - } - private string ProcessReadInt(PLCBase PLC, string address, string type, ushort length = 10) { Stopwatch sw = new Stopwatch(); @@ -2469,30 +1383,9 @@ namespace BRS.Process.A020 // lblElapsed.Text = sw.ElapsedMilliseconds.ToString(); } - private void ProcessStartTimer(object state) - { - //isMidFeedingProductFlag = true; - //UpdateTriggerCount(DateTime.Now, "中转推料上料触发"); - //LogAsync(DateTime.Now, LogLevel.Information, $"中转推料上料触发"); - //if (state is MidFeedingProductOpConfig midFeedingConfig) - //{ - // Stopwatch stopWatch = new Stopwatch(); - // stopWatch.Start(); - // MotionCardOperationConfigBase operationConfig = new MotionCardOperationConfigBase(); - // midFeedingConfig.FeedingProductMotionCardOperationSet.DelayAfter = midFeedingConfig.FeedingInterval; - // operationConfig.OperationCollection.Add(midFeedingConfig.FeedingProductMotionCardOperationSet); - // operationConfig.OperationCollection.Add(midFeedingConfig.MoveBackMotionCardOperationSet); - // _mainMotion.Run(operationConfig); - // stopWatch.Stop(); - // LogAsync(DateTime.Now, LogLevel.Information, $"中转推料上料耗时{stopWatch.ElapsedMilliseconds}ms"); - //} - - //isMidFeedingProductFlag = false; - } - [ProcessMethod("", "ResetProcess", "主流程复位", InvokeType.TestInvoke)] - public ProcessResponse ResetProcess(IOperationConfig config, IDevice invokeDevice, IDevice sourceDevice) + public ProcessResponse ResetProcess(IOperationConfig config, Common.Interface.IDevice invokeDevice, Common.Interface.IDevice sourceDevice) { if (MachineState == MachineState.Running) { @@ -2530,69 +1423,23 @@ namespace BRS.Process.A020 LogAsync(DateTime.Now, LogLevel.Warning, $"警告:当前状态,无法大复位"); return; } - MachineState = MachineState.Resetting; WarningRemains.Clear(); - - //清除报警 ResetAlarm(true); //清料流程 ClearProduct(null, null, null); - ////流程 关闭 操作配置 //A020Config.ProcessCloseOps.FindAll(u => u.IsEnabled).ForEach(bind => //{ // var device = DeviceCollection.FirstOrDefault(u => u.Id == bind.Device); // device.RunWrap(bind.OpConfig); //}); - MachineState = MachineState.Ready; } - private void PrepareMLEngine() - { - //_cameraRelatedVisionEngine = new Dictionary(); - //_cameraRelatedDetectionDict = new Dictionary(); - //// List detectionList=new List(); - //DeviceCollection.Where(d => d is VisionEngineBase && d.InitialConfig.IsEnabled) - // .ForEach(d => - //{ - // var _visionEngine = d as VisionEngineBase;// DeviceCollection.FirstOrDefault(u => u is VisionEngineBase) as VisionEngineBase; - - // _visionEngine.BatchNO = BatchNO; - - // // 将配置中的检测配置与相机配置关联为字典 - // List detectionList = _visionEngine.IConfig.DetectionConfigs.Where(u => u.IsEnabled).ToList(); - // if (0 == detectionList.Count) - // { - // throw new Exception(" 没有启用的检测配置"); - // } - - // detectionList.ForEach(detectConf => - // { - // string camId = detectConf.CameraSourceId; - // // 相机与VisionEngine关联字典 - // if (!_cameraRelatedVisionEngine.Keys.Contains(camId)) - // { - // _cameraRelatedVisionEngine.Add(detectConf.CameraSourceId, _visionEngine); - // } - // // 相机与检测配置关联字典 - // if (!_cameraRelatedDetectionDict.Keys.Contains(camId)) - // { - // _cameraRelatedDetectionDict.Add(detectConf.CameraSourceId, detectConf.Id); - // } - // }); - - - //}); - - } - - - private void PrepareMotion() { ResetTimer = new System.Threading.Timer(FullResetProcessExcute, null, -1, -1); @@ -2600,26 +1447,9 @@ namespace BRS.Process.A020 // this.OnUpdateResult += UpdateResult; } - - [ProcessMethod("", "CloseProcess", "主流程停止", InvokeType.TestInvoke)] - public BRS.Common.Model.ProcessResponse CloseProcess(IOperationConfig config, IDevice invokeDevice, IDevice sourceDevice) + public BRS.Common.Model.ProcessResponse CloseProcess(IOperationConfig config, Common.Interface.IDevice invokeDevice, Common.Interface.IDevice sourceDevice) { - var NbtRobot = DeviceCollection.FirstOrDefault(u => u is RobotBase) as RobotBase; - if (!IsTesting) - NbtRobot.power_off(); - - MachineState = MachineState.Ready; - MachineStateStep = MachineStateStep.Pause; - - RobotsStatus = RobotsStatus.Pweroff;//初始点位 - ProcessStatus = ProcessStatus.Resetting; - - PubSubCenter.GetInstance().Publish(PubSubCenterMessageType.IsProcessOpened.ToString(), false, null); - return new ProcessResponse(true); - - - if (_productQueue.Count > 0) { //var res = UIMessageDialog.ShowMessageDialog("警告:当前产品队列个数大于0,产品还未检测完成,或触发计数不一致,确定停止流程?", UILocalize.ErrorTitle, false, UIStyle.Red, true, false); @@ -2628,20 +1458,32 @@ namespace BRS.Process.A020 // return new ProcessResponse(true); //} } - //ProcessState = DeviceState.DSClose; + //关闭相机 + //try + //{ + // if (m_dev == null) + // { + // throw new InvalidOperationException("Device is invalid"); + // } + + // m_dev.StreamGrabber.ImageGrabbed -= OnImageGrabbed; /* 反注册回调 */ + // m_dev.ShutdownGrab(); /* 停止码流 */ + // m_dev.Close(); /* 关闭相机 */ + //} + //catch (Exception exception) + //{ + + //} + + PLCStateWarm = PLCStateWarm.ProStop; + OnPLCStateChanged?.Invoke(PLCStateWarm); MachineState = MachineState.Closing; - MachineStateStep = MachineStateStep.Pause; - RobotsStatus = RobotsStatus.Pweroff;//初始点位 - ProcessStatus = ProcessStatus.Resetting; + LogAsync(DateTime.Now, LogLevel.Information, "流程停止,清料中..."); - - //保存 生产数据 CloseStatisticTimers(); - //var OmronPlc = DeviceCollection.FirstOrDefault(u => u is PLCBase) as PLCBase; - //var NbtRobot = DeviceCollection.FirstOrDefault(u => u is RobotBase) as RobotBase; - NbtRobot.power_off(); + //SaveProductionStatisticsAsync(); if (_productQueue.Count > 0) { @@ -2652,11 +1494,8 @@ namespace BRS.Process.A020 return new ProcessResponse(true); } #endregion - - - [ProcessMethod("", "ClearProduct", "设备清料", InvokeType.TestInvoke)] - public ProcessResponse ClearProduct(IOperationConfig opConfig, IDevice invokeDevice, IDevice sourceDevice) + public ProcessResponse ClearProduct(IOperationConfig opConfig, Common.Interface.IDevice invokeDevice, Common.Interface.IDevice sourceDevice) { if (MachineState != MachineState.Ready && MachineState != MachineState.Resetting) { @@ -2670,7 +1509,7 @@ namespace BRS.Process.A020 } [ProcessMethod("", "PrintLog", "打印日志", InvokeType.TestInvoke)] - public ProcessResponse PrintLog(IOperationConfig opConfig, IDevice invokeDevice, IDevice sourceDevice) + public ProcessResponse PrintLog(IOperationConfig opConfig, Common.Interface.IDevice invokeDevice, Common.Interface.IDevice sourceDevice) { LogAsync(DateTime.Now, LogLevel.Warning, $"打印日志志0000"); if (MachineState != MachineState.Ready && MachineState != MachineState.Resetting) @@ -2685,7 +1524,7 @@ namespace BRS.Process.A020 } [ProcessMethod("", "PrintLog2", "打印日志2", InvokeType.TestInvoke)] - public ProcessResponse PrintLog2(IOperationConfig opConfig, IDevice invokeDevice, IDevice sourceDevice) + public ProcessResponse PrintLog2(IOperationConfig opConfig, Common.Interface.IDevice invokeDevice, Common.Interface.IDevice sourceDevice) { LogAsync(DateTime.Now, LogLevel.Warning, $"打印日志志000022222222222222"); if (MachineState != MachineState.Ready && MachineState != MachineState.Resetting) diff --git a/src/BRS.Process.A020/A020Process_VisionProcessor.cs b/src/BRS.Process.A020/A020Process_VisionProcessor.cs index f15a140..994414f 100644 --- a/src/BRS.Process.A020/A020Process_VisionProcessor.cs +++ b/src/BRS.Process.A020/A020Process_VisionProcessor.cs @@ -7,6 +7,7 @@ using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Linq; +using System.Text; using System.Threading; using System.Threading.Tasks; using static BRS.Common.Model.Helper.EnumHelper; @@ -17,8 +18,151 @@ namespace BRS.Process.A020 { // public HTuple ModelIds; + double CurrentDgree = 0;//累加的角度 + int CurrentQuanShu = 0;//当前转的圈数 + int SpecicalLs1 = 0;//侧模特殊螺丝的数组索引 + + void GetCornerPoint(List VP, List VR, MyPoint Tp, ref Corner CP, ref Corner CR) + { + List vPLU = new List(); + List vPRU = new List(); + List vPLD = new List(); + List vPRD = new List(); + for (int i = 0; i < VP.Count; i++) + { + if (VP[i].dX <= Tp.dX && VP[i].dY <= Tp.dY) + vPLU.Add(VP[i]); + if (VP[i].dX > Tp.dX && VP[i].dY < Tp.dY) + vPRU.Add(VP[i]); + if (VP[i].dX < Tp.dX && VP[i].dY > Tp.dY) + vPLD.Add(VP[i]); + if (VP[i].dX > Tp.dX && VP[i].dY > Tp.dY) + vPRD.Add(VP[i]); + } + + if (vPLU.Count() == 0 || vPRU.Count() == 0 || vPLD.Count() == 0 || vPRD.Count() == 0) + { + CP.LU.dX = -99999; + return; + } + int iIndex = 0; + GetNerastPoint(vPLU, Tp, ref CP.LU, ref iIndex); + GetNerastPoint(vPRU, Tp, ref CP.RU, ref iIndex); + GetNerastPoint(vPLD, Tp, ref CP.LD, ref iIndex); + GetNerastPoint(vPRD, Tp, ref CP.RD, ref iIndex); + MyPoint MP; + MP.dX = 0; + MP.dY = 0; + GetNerastPoint(VP, CP.LU, ref MP, ref iIndex); + CR.LU = VR[iIndex]; + + GetNerastPoint(VP, CP.RU, ref MP, ref iIndex); + CR.RU = VR[iIndex]; + + GetNerastPoint(VP, CP.LD, ref MP, ref iIndex); + CR.LD = VR[iIndex]; + + GetNerastPoint(VP, CP.RD, ref MP, ref iIndex); + CR.RD = VR[iIndex]; + } + void GetNerastPoint(List VP, MyPoint Tp, ref MyPoint VN, ref int Index) + { + int iL = 100000000; + VN = VP[0]; + Index = 0; + for (int i = 0; i < VP.Count(); i++) + { + int iL2 = (int)((VP[i].dX - Tp.dX) * (VP[i].dX - Tp.dX) + (VP[i].dY - Tp.dY) * (VP[i].dY - Tp.dY)); + if (iL2 < iL) + { + iL = iL2; + VN = VP[i]; + Index = i; + } + } + } + MyPoint Interpolation(List VP, List VR, MyPoint Tp, bool bTran) + { + + Corner CP = new Corner(); + + Corner CR = new Corner(); + GetCornerPoint(VP, VR, Tp, ref CP, ref CR); + MyPoint MR; + if (CP.LU.dX < -99998) + { + MR.dX = -9999999; + MR.dY = -9999999; + return MR; + } + if (bTran == true) + { + double dTm; + dTm = CR.LU.dX; + CR.LU.dX = CR.LU.dY; + CR.LU.dY = dTm; + + dTm = CR.RU.dX; + CR.RU.dX = CR.RU.dY; + CR.RU.dY = dTm; + + dTm = CR.LD.dX; + CR.LD.dX = CR.LD.dY; + CR.LD.dY = dTm; + + dTm = CR.RD.dX; + CR.RD.dX = CR.RD.dY; + CR.RD.dY = dTm; + } + + MyPoint PU; + PU.dX = 0; PU.dY = 0; + MyPoint RU; + RU.dX = 0; RU.dY = 0; + MyPoint PD; + PD.dX = 0; PD.dY = 0; + MyPoint RD; + RD.dX = 0; RD.dY = 0; + GetUpPoint(CP, CR, Tp, ref PU, ref RU); + GetDownPoint(CP, CR, Tp, ref PD, ref RD); + + float fDU = (float)(Tp.dY - PU.dY); + float fDA = (float)(PD.dY - PU.dY); + + float fX = (float)(RU.dX * (1 - fDU / fDA) + RD.dX * fDU / fDA); + float fY = (float)(RU.dY * (1 - fDU / fDA) + RD.dY * fDU / fDA); ; + + + if (bTran == true) + { + MR.dX = fY; + MR.dY = fX; + } + else + { + MR.dX = fX; + MR.dY = fY; + } + return MR; + } + + void GetUpPoint(Corner CP, Corner CR, MyPoint Tp, ref MyPoint PU, ref MyPoint RU) + { + PU.dX = Tp.dX; + PU.dY = (Tp.dX - CP.LU.dX) * 1.0 / (CP.RU.dX - CP.LU.dX) * (CP.RU.dY - CP.LU.dY) + CP.LU.dY; + RU.dX = (PU.dX - CP.LU.dX) * 1.0 / (CP.RU.dX - CP.LU.dX) * (CR.RU.dX - CR.LU.dX) + CR.LU.dX; + RU.dY = (PU.dY - CP.LU.dY) * 1.0 / (CP.RU.dY - CP.LU.dY) * (CR.RU.dY - CR.LU.dY) + CR.LU.dY; + } + + void GetDownPoint(Corner CP, Corner CR, MyPoint Tp, ref MyPoint PD, ref MyPoint RD) + { + PD.dX = Tp.dX; + PD.dY = (Tp.dX - CP.LD.dX) * 1.0 / (CP.RD.dX - CP.LD.dX) * (CP.RD.dY - CP.LD.dY) + CP.LD.dY; + RD.dX = (PD.dX - CP.LD.dX) * 1.0 / (CP.RD.dX - CP.LD.dX) * (CR.RD.dX - CR.LD.dX) + CR.LD.dX; + RD.dY = (PD.dY - CP.LD.dY) * 1.0 / (CP.RD.dY - CP.LD.dY) * (CR.RD.dY - CR.LD.dY) + CR.LD.dY; + } /// /// 相机拍摄图片后的回调函数 /// @@ -190,8 +334,94 @@ namespace BRS.Process.A020 // }); //} + private void TCPseverDriver_OnDataReceived(byte[] obj) + { + bool fin = false; + string msg = string.Empty; + // LogAsync(DateTime.Now, LogLevel.Action, obj.); + msg = Encoding.Default.GetString(obj); + LogAsync(DateTime.Now, LogLevel.Action, msg); + if (obj.Length > 0) + fin = true; + + Console.WriteLine(DateTime.Now + "=============================================================wanbi" + CurrentDgree.ToString() + " " + CurrentQuanShu.ToString() + " 次数" + SpecicalLs1.ToString()); + + #region 流程2边移动第七轴边动边机械臂移动到某个点 + if (ProcessStatus == ProcessStatus.Init && RobotsStatus == RobotsStatus.Runing && msg == "wanbi") + { + msg = string.Empty; + ProcessStatus = ProcessStatus.InitPlc; + RobotsStatus = RobotsStatus.Release; + DownCirce = DownCirce.DownCirceRuning; + } + #endregion + #region 初始示教点移动 + + if (ProcessStatus == ProcessStatus.MoveInit && RobotsStatus == RobotsStatus.Runing && msg == "wanbi") + { + msg = string.Empty; + ProcessStatus = ProcessStatus.Measure; + RobotsStatus = RobotsStatus.Release; + DownCirce = DownCirce.DownCirceRuning; + } + #endregion + #region 测距信息正常则流程打开光源 若不正常继续移动机械臂直到正常 + if (ProcessStatus == ProcessStatus.Measure && RobotsStatus == RobotsStatus.Runing && msg == "wanbi") + { + msg = string.Empty; + DownCirce = DownCirce.DownCirceRuning; + ProcessStatus = ProcessStatus.OpenLight; + RobotsStatus = RobotsStatus.Release; + } + #endregion + #region 视觉定位 + if (ProcessStatus == ProcessStatus.CVLocation && RobotsStatus == RobotsStatus.Runing && msg == "wanbi") + { + msg = string.Empty; + //ProcessStatus = ProcessStatus.StartRunDown; + ProcessStatus = ProcessStatus.StartRun; + RobotsStatus = RobotsStatus.Release; + DownCirce = DownCirce.DownCirceRuning; + } + if (ProcessStatus == ProcessStatus.StartRunDown && RobotsStatus == RobotsStatus.Runing && msg == "wanbi") + { + msg = string.Empty; + ProcessStatus = ProcessStatus.StartRun; + RobotsStatus = RobotsStatus.Release; + DownCirce = DownCirce.DownCirceRuning; + } + if (ProcessStatus == ProcessStatus.StartRun && RobotsStatus == RobotsStatus.Runing && msg == "wanbi") + { + msg = string.Empty; + ProcessStatus = ProcessStatus.StartRuning; + RobotsStatus = RobotsStatus.Release; + } + #endregion + + + } + /// + /// 示教标定点+偏移量=拍摄螺丝点 + /// + /// + /// + /// + public StrRobotPoint CQRobotPointChangeStrRobotPoint(CQRobotPoint cQRobotPoint, VPVRPoint vPVRPoint) + { + float X_dev = vPVRPoint.X; + float Y_dev = vPVRPoint.Y; + float Z_dev = vPVRPoint.Z; + StrRobotPoint strRobotPoint = new StrRobotPoint(); + strRobotPoint.X = cQRobotPoint.X + X_dev; + strRobotPoint.Y = cQRobotPoint.Y + Y_dev; + strRobotPoint.Z = cQRobotPoint.Z + Z_dev; + strRobotPoint.A = cQRobotPoint.O; + strRobotPoint.B = cQRobotPoint.A; + strRobotPoint.C = cQRobotPoint.T; + return strRobotPoint; + } private void BlowTaskExcute(int delayBlow) { diff --git a/src/BRS.Process.A020/BRS.Process.A020.csproj b/src/BRS.Process.A020/BRS.Process.A020.csproj index af81fcd..2be75d3 100644 --- a/src/BRS.Process.A020/BRS.Process.A020.csproj +++ b/src/BRS.Process.A020/BRS.Process.A020.csproj @@ -1,5 +1,6 @@  + Debug @@ -13,6 +14,8 @@ 512 true + + true @@ -43,6 +46,10 @@ False ..\Release\BRS.UI.Device.Winform.dll + + False + C:\Program Files\DahuaTech\MV Viewer\Development\DOTNET DLL\DOTNET_4.0\x86\CLIDelegate.dll + ..\..\packages\HZH_Controls.1.0.14\lib\net40\HZH_Controls.dll @@ -56,6 +63,18 @@ ..\..\packages\OpenCvSharp4.4.6.0.20220608\lib\netstandard2.0\OpenCvSharp.dll True + + ..\..\packages\OpenCvSharp4.Extensions.4.5.5.20211231\lib\netstandard2.0\OpenCvSharp.Extensions.dll + + + ..\..\packages\STTech.BytesIO.Core.2.9.3\lib\net45\STTech.BytesIO.Core.dll + + + ..\..\packages\STTech.BytesIO.Tcp.2.9.3\lib\net45\STTech.BytesIO.Tcp.dll + + + ..\..\packages\STTech.CodePlus.1.4.0\lib\net45\STTech.CodePlus.dll + ..\..\packages\SunnyUI.3.3.1\lib\net40\SunnyUI.dll @@ -73,6 +92,9 @@ ..\..\packages\System.Diagnostics.DiagnosticSource.4.7.1\lib\net46\System.Diagnostics.DiagnosticSource.dll + + ..\..\packages\System.Drawing.Common.5.0.3\lib\net461\System.Drawing.Common.dll + ..\..\packages\System.Memory.4.5.5\lib\net461\System.Memory.dll @@ -95,6 +117,10 @@ + + False + C:\Program Files\DahuaTech\MV Viewer\Development\DOTNET DLL\DOTNET_4.0\x86\ThridLibray.dll + ..\..\packages\DockPanelSuite.3.1.0\lib\net40\WeifenLuo.WinFormsUI.Docking.dll @@ -130,12 +156,6 @@ ContorlShaft.cs - - Form - - - ControlSet.cs - Form @@ -164,10 +184,6 @@ {1a3cbfe7-3f78-42c3-95c5-10360450dbea} BRS.Common.Model - - {560cc80b-389b-46fc-9b8c-da1d62a555d9} - BRS.Device.OmronPLC - {197c5aa8-9609-4d1c-b1e3-5879006eaaf4} BRS.Process @@ -176,6 +192,10 @@ {741f6491-57c7-479a-b391-09bba9fba9dc} BRS.UI.Model.Winform + + {91739e90-6a8e-433d-b244-5325f8848064} + XKRS.Device.TCPSever + @@ -196,9 +216,6 @@ ContorlShaft.cs - - ControlSet.cs - OperationFrm.cs @@ -209,10 +226,19 @@ VisionDebugForm.cs + + + + + + 这台计算机上缺少此项目引用的 NuGet 程序包。使用“NuGet 程序包还原”可下载这些程序包。有关更多信息,请参见 http://go.microsoft.com/fwlink/?LinkID=322105。缺少的文件是 {0}。 + + + \ No newline at end of file diff --git a/src/BRS.Process.A020/ContolPlc.cs b/src/BRS.Process.A020/ContolPlc.cs index d53cdeb..6f36303 100644 --- a/src/BRS.Process.A020/ContolPlc.cs +++ b/src/BRS.Process.A020/ContolPlc.cs @@ -192,33 +192,7 @@ namespace BRS.Process.A020.UI /// private void button2_2_Click(object sender, EventArgs e) { - var OmronPlc = Process_A020.DeviceCollection.FirstOrDefault(u => u is PLCBase) as PLCBase; - var NbtRobot = Process_A020.DeviceCollection.FirstOrDefault(u => u is RobotBase) as RobotBase; - RobotPoint x1 = NbtRobot.IConfig.RobotInitPosition; //NbtRobot.IConfig.X1Point; - StrRobotPoint initPoint = ClassChangeStruct(x1); - int speed = 1000;//机械臂运动速度 m/s - //机械手回到初始点 - NbtRobot.Move(initPoint, speed, true); - int stop_ss=1; - while (stop_ss==1) - { - Thread.Sleep(1000); - - if (NbtRobot.get_status() == 0) - { - stop_ss = 0; ; - } - } - //2.D11 1-0 PC→PLC //机械手复位回到初始点完成 - // 3.D21 0 - 1 PC → PLC //夹具打开回到初始位置 - PcToPlcWrite(OmronPlc, "D11", "1", "0"); - PcToPlcWrite(OmronPlc, "D21", "1", "0"); - Thread.Sleep(1000); - PcToPlcWrite(OmronPlc, "D11", "0", "1"); - PcToPlcWrite(OmronPlc, "D21", "0", "1"); - Thread.Sleep(200); - PcToPlcWrite(OmronPlc, "D21", "1", "0"); - //Thread.Sleep(15000); + } /// diff --git a/src/BRS.Process.A020/UI/ContorlShaft.Designer.cs b/src/BRS.Process.A020/UI/ContorlShaft.Designer.cs index 7a79165..12af6d6 100644 --- a/src/BRS.Process.A020/UI/ContorlShaft.Designer.cs +++ b/src/BRS.Process.A020/UI/ContorlShaft.Designer.cs @@ -69,12 +69,21 @@ namespace BRS.Process.A020.UI this.LightSeries = new Sunny.UI.UIPanel(); this.label12 = new System.Windows.Forms.Label(); this.label11 = new System.Windows.Forms.Label(); + this.ManualLight = new BRS.Process.A020.UI.CircleButton(); + this.AutoLight = new BRS.Process.A020.UI.CircleButton(); + this.MoveStateLight1 = new BRS.Process.A020.UI.CircleButton(); + this.StopStateLight1 = new BRS.Process.A020.UI.CircleButton(); + this.ToughLight1 = new BRS.Process.A020.UI.CircleButton(); + this.LoosenLight1 = new BRS.Process.A020.UI.CircleButton(); this.label1 = new System.Windows.Forms.Label(); this.label2 = new System.Windows.Forms.Label(); this.label3 = new System.Windows.Forms.Label(); this.label4 = new System.Windows.Forms.Label(); this.uiPanel2 = new Sunny.UI.UIPanel(); this.label14 = new System.Windows.Forms.Label(); + this.AutoBtn1 = new BRS.Process.A020.UI.CircleButton(); + this.ManualBtn1 = new BRS.Process.A020.UI.CircleButton(); + this.ESBtn = new BRS.Process.A020.UI.CircleButton(); this.TestBtn = new Sunny.UI.UIButton(); this.StopBtn2 = new Sunny.UI.UIButton(); this.StartBtn1 = new Sunny.UI.UIButton(); @@ -86,15 +95,6 @@ namespace BRS.Process.A020.UI this.chart1 = new System.Windows.Forms.DataVisualization.Charting.Chart(); this.uiButton1 = new Sunny.UI.UIButton(); this.timer2 = new System.Windows.Forms.Timer(this.components); - this.ManualLight = new BRS.Process.A020.UI.CircleButton(); - this.AutoLight = new BRS.Process.A020.UI.CircleButton(); - this.MoveStateLight1 = new BRS.Process.A020.UI.CircleButton(); - this.StopStateLight1 = new BRS.Process.A020.UI.CircleButton(); - this.ToughLight1 = new BRS.Process.A020.UI.CircleButton(); - this.LoosenLight1 = new BRS.Process.A020.UI.CircleButton(); - this.AutoBtn1 = new BRS.Process.A020.UI.CircleButton(); - this.ManualBtn1 = new BRS.Process.A020.UI.CircleButton(); - this.ESBtn = new BRS.Process.A020.UI.CircleButton(); ((System.ComponentModel.ISupportInitialize)(this.chart2)).BeginInit(); this.uiPanel1.SuspendLayout(); this.BtnSeries.SuspendLayout(); @@ -258,11 +258,11 @@ namespace BRS.Process.A020.UI this.BtnSeries.Controls.Add(this.AutoLoosenBtn1); this.BtnSeries.Controls.Add(this.ManualToughBtn); this.BtnSeries.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); - this.BtnSeries.Location = new System.Drawing.Point(335, 201); + this.BtnSeries.Location = new System.Drawing.Point(352, 155); this.BtnSeries.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); this.BtnSeries.MinimumSize = new System.Drawing.Size(1, 1); this.BtnSeries.Name = "BtnSeries"; - this.BtnSeries.Size = new System.Drawing.Size(368, 345); + this.BtnSeries.Size = new System.Drawing.Size(367, 391); this.BtnSeries.TabIndex = 40; this.BtnSeries.Text = null; this.BtnSeries.TextAlignment = System.Drawing.ContentAlignment.MiddleCenter; @@ -353,11 +353,11 @@ namespace BRS.Process.A020.UI this.ParameterSetting.Controls.Add(this.textBox3); this.ParameterSetting.Controls.Add(this.label8); this.ParameterSetting.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); - this.ParameterSetting.Location = new System.Drawing.Point(12, 201); + this.ParameterSetting.Location = new System.Drawing.Point(12, 152); this.ParameterSetting.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); this.ParameterSetting.MinimumSize = new System.Drawing.Size(1, 1); this.ParameterSetting.Name = "ParameterSetting"; - this.ParameterSetting.Size = new System.Drawing.Size(317, 345); + this.ParameterSetting.Size = new System.Drawing.Size(332, 394); this.ParameterSetting.TabIndex = 39; this.ParameterSetting.Text = null; this.ParameterSetting.TextAlignment = System.Drawing.ContentAlignment.MiddleCenter; @@ -522,7 +522,7 @@ namespace BRS.Process.A020.UI this.LightSeries.Controls.Add(this.label3); this.LightSeries.Controls.Add(this.label4); this.LightSeries.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); - this.LightSeries.Location = new System.Drawing.Point(189, 12); + this.LightSeries.Location = new System.Drawing.Point(219, 5); this.LightSeries.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); this.LightSeries.MinimumSize = new System.Drawing.Size(1, 1); this.LightSeries.Name = "LightSeries"; @@ -554,6 +554,64 @@ namespace BRS.Process.A020.UI this.label11.Text = "自动拧紧状态\r\n指示灯"; this.label11.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; // + // ManualLight + // + this.ManualLight.BackColor = System.Drawing.Color.Gray; + this.ManualLight.Cursor = System.Windows.Forms.Cursors.Hand; + this.ManualLight.Enabled = false; + this.ManualLight.Location = new System.Drawing.Point(672, 7); + this.ManualLight.Name = "ManualLight"; + this.ManualLight.Size = new System.Drawing.Size(90, 90); + this.ManualLight.TabIndex = 25; + this.ManualLight.UseVisualStyleBackColor = false; + // + // AutoLight + // + this.AutoLight.BackColor = System.Drawing.Color.Gray; + this.AutoLight.Cursor = System.Windows.Forms.Cursors.Hand; + this.AutoLight.Enabled = false; + this.AutoLight.Location = new System.Drawing.Point(541, 7); + this.AutoLight.Name = "AutoLight"; + this.AutoLight.Size = new System.Drawing.Size(90, 90); + this.AutoLight.TabIndex = 24; + this.AutoLight.UseVisualStyleBackColor = false; + // + // MoveStateLight1 + // + this.MoveStateLight1.BackColor = System.Drawing.Color.Gray; + this.MoveStateLight1.Location = new System.Drawing.Point(17, 7); + this.MoveStateLight1.Name = "MoveStateLight1"; + this.MoveStateLight1.Size = new System.Drawing.Size(90, 90); + this.MoveStateLight1.TabIndex = 3; + this.MoveStateLight1.UseVisualStyleBackColor = false; + // + // StopStateLight1 + // + this.StopStateLight1.BackColor = System.Drawing.Color.Gray; + this.StopStateLight1.Location = new System.Drawing.Point(148, 7); + this.StopStateLight1.Name = "StopStateLight1"; + this.StopStateLight1.Size = new System.Drawing.Size(90, 90); + this.StopStateLight1.TabIndex = 15; + this.StopStateLight1.UseVisualStyleBackColor = false; + // + // ToughLight1 + // + this.ToughLight1.BackColor = System.Drawing.Color.Gray; + this.ToughLight1.Location = new System.Drawing.Point(279, 7); + this.ToughLight1.Name = "ToughLight1"; + this.ToughLight1.Size = new System.Drawing.Size(90, 90); + this.ToughLight1.TabIndex = 16; + this.ToughLight1.UseVisualStyleBackColor = false; + // + // LoosenLight1 + // + this.LoosenLight1.BackColor = System.Drawing.Color.Gray; + this.LoosenLight1.Location = new System.Drawing.Point(410, 7); + this.LoosenLight1.Name = "LoosenLight1"; + this.LoosenLight1.Size = new System.Drawing.Size(90, 90); + this.LoosenLight1.TabIndex = 17; + this.LoosenLight1.UseVisualStyleBackColor = false; + // // label1 // this.label1.AutoSize = true; @@ -605,11 +663,11 @@ namespace BRS.Process.A020.UI this.uiPanel2.Controls.Add(this.ManualBtn1); this.uiPanel2.Controls.Add(this.ESBtn); this.uiPanel2.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); - this.uiPanel2.Location = new System.Drawing.Point(711, 201); + this.uiPanel2.Location = new System.Drawing.Point(728, 155); this.uiPanel2.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); this.uiPanel2.MinimumSize = new System.Drawing.Size(1, 1); this.uiPanel2.Name = "uiPanel2"; - this.uiPanel2.Size = new System.Drawing.Size(290, 345); + this.uiPanel2.Size = new System.Drawing.Size(303, 391); this.uiPanel2.TabIndex = 37; this.uiPanel2.Text = null; this.uiPanel2.TextAlignment = System.Drawing.ContentAlignment.MiddleCenter; @@ -626,6 +684,42 @@ namespace BRS.Process.A020.UI this.label14.Text = "操作按钮"; this.label14.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; // + // AutoBtn1 + // + this.AutoBtn1.BackColor = System.Drawing.Color.Gray; + this.AutoBtn1.Cursor = System.Windows.Forms.Cursors.Hand; + this.AutoBtn1.Location = new System.Drawing.Point(3, 73); + this.AutoBtn1.Name = "AutoBtn1"; + this.AutoBtn1.Size = new System.Drawing.Size(104, 104); + this.AutoBtn1.TabIndex = 18; + this.AutoBtn1.Text = "自动按钮"; + this.AutoBtn1.UseVisualStyleBackColor = false; + this.AutoBtn1.Click += new System.EventHandler(this.AutoBtn1_Click); + // + // ManualBtn1 + // + this.ManualBtn1.BackColor = System.Drawing.Color.Gray; + this.ManualBtn1.Cursor = System.Windows.Forms.Cursors.Hand; + this.ManualBtn1.Location = new System.Drawing.Point(3, 183); + this.ManualBtn1.Name = "ManualBtn1"; + this.ManualBtn1.Size = new System.Drawing.Size(104, 104); + this.ManualBtn1.TabIndex = 19; + this.ManualBtn1.Text = "手动按钮"; + this.ManualBtn1.UseVisualStyleBackColor = false; + this.ManualBtn1.Click += new System.EventHandler(this.ManualBtn1_Click); + // + // ESBtn + // + this.ESBtn.BackColor = System.Drawing.Color.Red; + this.ESBtn.Cursor = System.Windows.Forms.Cursors.Hand; + this.ESBtn.Location = new System.Drawing.Point(150, 107); + this.ESBtn.Name = "ESBtn"; + this.ESBtn.Size = new System.Drawing.Size(137, 137); + this.ESBtn.TabIndex = 0; + this.ESBtn.Text = "急停"; + this.ESBtn.UseVisualStyleBackColor = false; + this.ESBtn.Click += new System.EventHandler(this.ESBtn_Click); + // // TestBtn // this.TestBtn.Cursor = System.Windows.Forms.Cursors.Hand; @@ -643,10 +737,10 @@ namespace BRS.Process.A020.UI // this.StopBtn2.Cursor = System.Windows.Forms.Cursors.Hand; this.StopBtn2.Font = new System.Drawing.Font("宋体", 15F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); - this.StopBtn2.Location = new System.Drawing.Point(12, 105); + this.StopBtn2.Location = new System.Drawing.Point(116, 12); this.StopBtn2.MinimumSize = new System.Drawing.Size(1, 1); this.StopBtn2.Name = "StopBtn2"; - this.StopBtn2.Size = new System.Drawing.Size(96, 85); + this.StopBtn2.Size = new System.Drawing.Size(96, 141); this.StopBtn2.TabIndex = 8; this.StopBtn2.Text = "停止"; this.StopBtn2.TipsFont = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); @@ -660,7 +754,7 @@ namespace BRS.Process.A020.UI this.StartBtn1.Location = new System.Drawing.Point(12, 12); this.StartBtn1.MinimumSize = new System.Drawing.Size(1, 1); this.StartBtn1.Name = "StartBtn1"; - this.StartBtn1.Size = new System.Drawing.Size(96, 85); + this.StartBtn1.Size = new System.Drawing.Size(96, 141); this.StartBtn1.TabIndex = 7; this.StartBtn1.Text = "开始"; this.StartBtn1.TipsFont = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); @@ -758,100 +852,6 @@ namespace BRS.Process.A020.UI this.timer2.Interval = 1000; this.timer2.Tick += new System.EventHandler(this.timer2_Tick); // - // ManualLight - // - this.ManualLight.BackColor = System.Drawing.Color.Gray; - this.ManualLight.Cursor = System.Windows.Forms.Cursors.Hand; - this.ManualLight.Enabled = false; - this.ManualLight.Location = new System.Drawing.Point(672, 7); - this.ManualLight.Name = "ManualLight"; - this.ManualLight.Size = new System.Drawing.Size(90, 90); - this.ManualLight.TabIndex = 25; - this.ManualLight.UseVisualStyleBackColor = false; - // - // AutoLight - // - this.AutoLight.BackColor = System.Drawing.Color.Gray; - this.AutoLight.Cursor = System.Windows.Forms.Cursors.Hand; - this.AutoLight.Enabled = false; - this.AutoLight.Location = new System.Drawing.Point(541, 7); - this.AutoLight.Name = "AutoLight"; - this.AutoLight.Size = new System.Drawing.Size(90, 90); - this.AutoLight.TabIndex = 24; - this.AutoLight.UseVisualStyleBackColor = false; - // - // MoveStateLight1 - // - this.MoveStateLight1.BackColor = System.Drawing.Color.Gray; - this.MoveStateLight1.Location = new System.Drawing.Point(17, 7); - this.MoveStateLight1.Name = "MoveStateLight1"; - this.MoveStateLight1.Size = new System.Drawing.Size(90, 90); - this.MoveStateLight1.TabIndex = 3; - this.MoveStateLight1.UseVisualStyleBackColor = false; - // - // StopStateLight1 - // - this.StopStateLight1.BackColor = System.Drawing.Color.Gray; - this.StopStateLight1.Location = new System.Drawing.Point(148, 7); - this.StopStateLight1.Name = "StopStateLight1"; - this.StopStateLight1.Size = new System.Drawing.Size(90, 90); - this.StopStateLight1.TabIndex = 15; - this.StopStateLight1.UseVisualStyleBackColor = false; - // - // ToughLight1 - // - this.ToughLight1.BackColor = System.Drawing.Color.Gray; - this.ToughLight1.Location = new System.Drawing.Point(279, 7); - this.ToughLight1.Name = "ToughLight1"; - this.ToughLight1.Size = new System.Drawing.Size(90, 90); - this.ToughLight1.TabIndex = 16; - this.ToughLight1.UseVisualStyleBackColor = false; - // - // LoosenLight1 - // - this.LoosenLight1.BackColor = System.Drawing.Color.Gray; - this.LoosenLight1.Location = new System.Drawing.Point(410, 7); - this.LoosenLight1.Name = "LoosenLight1"; - this.LoosenLight1.Size = new System.Drawing.Size(90, 90); - this.LoosenLight1.TabIndex = 17; - this.LoosenLight1.UseVisualStyleBackColor = false; - // - // AutoBtn1 - // - this.AutoBtn1.BackColor = System.Drawing.Color.Gray; - this.AutoBtn1.Cursor = System.Windows.Forms.Cursors.Hand; - this.AutoBtn1.Location = new System.Drawing.Point(3, 73); - this.AutoBtn1.Name = "AutoBtn1"; - this.AutoBtn1.Size = new System.Drawing.Size(104, 104); - this.AutoBtn1.TabIndex = 18; - this.AutoBtn1.Text = "自动按钮"; - this.AutoBtn1.UseVisualStyleBackColor = false; - this.AutoBtn1.Click += new System.EventHandler(this.AutoBtn1_Click); - // - // ManualBtn1 - // - this.ManualBtn1.BackColor = System.Drawing.Color.Gray; - this.ManualBtn1.Cursor = System.Windows.Forms.Cursors.Hand; - this.ManualBtn1.Location = new System.Drawing.Point(3, 183); - this.ManualBtn1.Name = "ManualBtn1"; - this.ManualBtn1.Size = new System.Drawing.Size(104, 104); - this.ManualBtn1.TabIndex = 19; - this.ManualBtn1.Text = "手动按钮"; - this.ManualBtn1.UseVisualStyleBackColor = false; - this.ManualBtn1.Click += new System.EventHandler(this.ManualBtn1_Click); - // - // ESBtn - // - this.ESBtn.BackColor = System.Drawing.Color.Red; - this.ESBtn.Cursor = System.Windows.Forms.Cursors.Hand; - this.ESBtn.Location = new System.Drawing.Point(150, 107); - this.ESBtn.Name = "ESBtn"; - this.ESBtn.Size = new System.Drawing.Size(137, 137); - this.ESBtn.TabIndex = 0; - this.ESBtn.Text = "急停"; - this.ESBtn.UseVisualStyleBackColor = false; - this.ESBtn.Click += new System.EventHandler(this.ESBtn_Click); - // // 扭矩轴控制 // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); diff --git a/src/BRS.Process.A020/UI/ContorlShaft.cs b/src/BRS.Process.A020/UI/ContorlShaft.cs index 65f1151..db11d28 100644 --- a/src/BRS.Process.A020/UI/ContorlShaft.cs +++ b/src/BRS.Process.A020/UI/ContorlShaft.cs @@ -565,6 +565,7 @@ namespace BRS.Process.A020.UI this.StopStateLight1.BackColor = Color.Red; this.MoveStateLight1.BackColor = Color.Gray; + this.AutoLight.BackColor = Color.Red; timer1.Stop(); timer2.Stop(); isOpenAuto = false; @@ -720,6 +721,7 @@ namespace BRS.Process.A020.UI ProcessWriteInt(MelsecPLC, "D7", "int", "1"); AutoBtn1.BackColor = Color.GreenYellow; ManualBtn1.BackColor = Color.Gray; + AutoLight.BackColor = Color.Red; is_btn_manual = false; } } @@ -795,6 +797,7 @@ namespace BRS.Process.A020.UI isOpenAuto = true; ProcessA020.IsSingleStepOperating = true; ProcessA020.ShaftAutoTough(MachineState.Ready); + AutoLight.BackColor = Color.GreenYellow; timer1.Start(); timer2.Start(); } @@ -936,6 +939,7 @@ namespace BRS.Process.A020.UI this.MoveStateLight1.BackColor = Color.Gray; this.ToughLight1.BackColor = Color.Gray; this.LoosenLight1.BackColor = Color.Gray; + this.AutoLight.BackColor = Color.Gray; //将急停按钮变为复位按钮 ESBtn.Text = "复位"; ESBtn.BackColor = Color.GreenYellow; @@ -1046,8 +1050,9 @@ namespace BRS.Process.A020.UI private void 扭矩轴控制_FormClosing(object sender, FormClosingEventArgs e) { - var MelsecPLC = ProcessA020.DeviceCollection.FirstOrDefault(u => u is PLCBase) as PLCBase; - ProcessWriteInt(MelsecPLC, "D7", "int", "0"); + + //var MelsecPLC = ProcessA020.DeviceCollection.FirstOrDefault(u => u is PLCBase) as PLCBase; + //ProcessWriteInt(MelsecPLC, "D7", "int", "0"); } } } diff --git a/src/BRS.Process.A020/UI/ControlSet.Designer.cs b/src/BRS.Process.A020/UI/ControlSet.Designer.cs deleted file mode 100644 index 744a258..0000000 --- a/src/BRS.Process.A020/UI/ControlSet.Designer.cs +++ /dev/null @@ -1,699 +0,0 @@ - -namespace BRS.Process.A020.UI -{ - partial class ControlSet - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Windows Form Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - this.splitContainer1 = new System.Windows.Forms.SplitContainer(); - this.uiTitlePanel1 = new Sunny.UI.UITitlePanel(); - this.uiPanel2 = new Sunny.UI.UIPanel(); - this.btn_down1_2 = new Sunny.UI.UIButton(); - this.btn_load1_2 = new Sunny.UI.UIButton(); - this.cmb_sizechoose1_2 = new Sunny.UI.UIComboBox(); - this.uiPanel4 = new Sunny.UI.UIPanel(); - this.uiPanel1 = new Sunny.UI.UIPanel(); - this.btn_down1_1 = new Sunny.UI.UIButton(); - this.cmb_sizechoose1_1 = new Sunny.UI.UIComboBox(); - this.btn_load1_1 = new Sunny.UI.UIButton(); - this.uiPanel3 = new Sunny.UI.UIPanel(); - this.uiTitlePanel2 = new Sunny.UI.UITitlePanel(); - this.uiPanel5 = new Sunny.UI.UIPanel(); - this.btn_down2_2 = new Sunny.UI.UIButton(); - this.btn_load2_2 = new Sunny.UI.UIButton(); - this.cmb_sizechoose2_2 = new Sunny.UI.UIComboBox(); - this.uiPanel6 = new Sunny.UI.UIPanel(); - this.uiPanel7 = new Sunny.UI.UIPanel(); - this.btn_down2_1 = new Sunny.UI.UIButton(); - this.btn_load2_1 = new Sunny.UI.UIButton(); - this.cmb_sizechoose2_1 = new Sunny.UI.UIComboBox(); - this.uiPanel8 = new Sunny.UI.UIPanel(); - this.btn_robotset = new Sunny.UI.UIButton(); - this.btn_plcset = new Sunny.UI.UIButton(); - this.btn_reset = new Sunny.UI.UIButton(); - this.btn_auto = new Sunny.UI.UIButton(); - this.btn_manual = new Sunny.UI.UIButton(); - this.btn_stop = new Sunny.UI.UIButton(); - this.btn_pause = new Sunny.UI.UIButton(); - this.btn_start = new Sunny.UI.UIButton(); - this.uiTableLayoutPanel1 = new Sunny.UI.UITableLayoutPanel(); - ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit(); - this.splitContainer1.Panel1.SuspendLayout(); - this.splitContainer1.Panel2.SuspendLayout(); - this.splitContainer1.SuspendLayout(); - this.uiTitlePanel1.SuspendLayout(); - this.uiPanel2.SuspendLayout(); - this.uiPanel1.SuspendLayout(); - this.uiTitlePanel2.SuspendLayout(); - this.uiPanel5.SuspendLayout(); - this.uiPanel7.SuspendLayout(); - this.uiTableLayoutPanel1.SuspendLayout(); - this.SuspendLayout(); - // - // splitContainer1 - // - this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill; - this.splitContainer1.Location = new System.Drawing.Point(112, 0); - this.splitContainer1.Name = "splitContainer1"; - // - // splitContainer1.Panel1 - // - this.splitContainer1.Panel1.Controls.Add(this.uiTitlePanel1); - // - // splitContainer1.Panel2 - // - this.splitContainer1.Panel2.Controls.Add(this.uiTitlePanel2); - this.splitContainer1.Size = new System.Drawing.Size(908, 545); - this.splitContainer1.SplitterDistance = 442; - this.splitContainer1.TabIndex = 8; - // - // uiTitlePanel1 - // - this.uiTitlePanel1.Controls.Add(this.uiPanel2); - this.uiTitlePanel1.Controls.Add(this.uiPanel1); - this.uiTitlePanel1.Dock = System.Windows.Forms.DockStyle.Fill; - this.uiTitlePanel1.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); - this.uiTitlePanel1.Location = new System.Drawing.Point(0, 0); - this.uiTitlePanel1.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); - this.uiTitlePanel1.MinimumSize = new System.Drawing.Size(1, 1); - this.uiTitlePanel1.Name = "uiTitlePanel1"; - this.uiTitlePanel1.Padding = new System.Windows.Forms.Padding(0, 35, 0, 0); - this.uiTitlePanel1.Radius = 0; - this.uiTitlePanel1.ShowText = false; - this.uiTitlePanel1.Size = new System.Drawing.Size(442, 545); - this.uiTitlePanel1.TabIndex = 7; - this.uiTitlePanel1.Text = "1号硫化机"; - this.uiTitlePanel1.TextAlignment = System.Drawing.ContentAlignment.MiddleCenter; - this.uiTitlePanel1.ZoomScaleRect = new System.Drawing.Rectangle(0, 0, 0, 0); - // - // uiPanel2 - // - this.uiPanel2.Controls.Add(this.btn_down1_2); - this.uiPanel2.Controls.Add(this.btn_load1_2); - this.uiPanel2.Controls.Add(this.cmb_sizechoose1_2); - this.uiPanel2.Controls.Add(this.uiPanel4); - this.uiPanel2.Dock = System.Windows.Forms.DockStyle.Fill; - this.uiPanel2.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); - this.uiPanel2.Location = new System.Drawing.Point(0, 296); - this.uiPanel2.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); - this.uiPanel2.MinimumSize = new System.Drawing.Size(1, 1); - this.uiPanel2.Name = "uiPanel2"; - this.uiPanel2.Radius = 4; - this.uiPanel2.Size = new System.Drawing.Size(442, 249); - this.uiPanel2.TabIndex = 1; - this.uiPanel2.Text = null; - this.uiPanel2.TextAlignment = System.Drawing.ContentAlignment.MiddleCenter; - this.uiPanel2.ZoomScaleRect = new System.Drawing.Rectangle(0, 0, 0, 0); - // - // btn_down1_2 - // - this.btn_down1_2.Cursor = System.Windows.Forms.Cursors.Hand; - this.btn_down1_2.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); - this.btn_down1_2.Location = new System.Drawing.Point(184, 144); - this.btn_down1_2.MinimumSize = new System.Drawing.Size(1, 1); - this.btn_down1_2.Name = "btn_down1_2"; - this.btn_down1_2.Size = new System.Drawing.Size(100, 35); - this.btn_down1_2.TabIndex = 3; - this.btn_down1_2.Text = "下料"; - this.btn_down1_2.TipsFont = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); - this.btn_down1_2.ZoomScaleRect = new System.Drawing.Rectangle(0, 0, 0, 0); - this.btn_down1_2.Click += new System.EventHandler(this.btn_down1_2_Click); - // - // btn_load1_2 - // - this.btn_load1_2.Cursor = System.Windows.Forms.Cursors.Hand; - this.btn_load1_2.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); - this.btn_load1_2.Location = new System.Drawing.Point(184, 72); - this.btn_load1_2.MinimumSize = new System.Drawing.Size(1, 1); - this.btn_load1_2.Name = "btn_load1_2"; - this.btn_load1_2.Size = new System.Drawing.Size(100, 35); - this.btn_load1_2.TabIndex = 2; - this.btn_load1_2.Text = "上料"; - this.btn_load1_2.TipsFont = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); - this.btn_load1_2.ZoomScaleRect = new System.Drawing.Rectangle(0, 0, 0, 0); - this.btn_load1_2.Click += new System.EventHandler(this.btn_load1_2_Click); - // - // cmb_sizechoose1_2 - // - this.cmb_sizechoose1_2.DataSource = null; - this.cmb_sizechoose1_2.Dock = System.Windows.Forms.DockStyle.Top; - this.cmb_sizechoose1_2.DropDownStyle = Sunny.UI.UIDropDownStyle.DropDownList; - this.cmb_sizechoose1_2.FillColor = System.Drawing.Color.White; - this.cmb_sizechoose1_2.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); - this.cmb_sizechoose1_2.Items.AddRange(new object[] { - "", - "12", - "13", - "14", - "15", - "16", - "17", - "18"}); - this.cmb_sizechoose1_2.Location = new System.Drawing.Point(116, 0); - this.cmb_sizechoose1_2.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); - this.cmb_sizechoose1_2.MinimumSize = new System.Drawing.Size(63, 0); - this.cmb_sizechoose1_2.Name = "cmb_sizechoose1_2"; - this.cmb_sizechoose1_2.Padding = new System.Windows.Forms.Padding(0, 0, 30, 2); - this.cmb_sizechoose1_2.Size = new System.Drawing.Size(326, 29); - this.cmb_sizechoose1_2.TabIndex = 1; - this.cmb_sizechoose1_2.TextAlignment = System.Drawing.ContentAlignment.MiddleLeft; - this.cmb_sizechoose1_2.Watermark = ""; - this.cmb_sizechoose1_2.ZoomScaleRect = new System.Drawing.Rectangle(0, 0, 0, 0); - this.cmb_sizechoose1_2.SelectedIndexChanged += new System.EventHandler(this.cmb_sizechoose1_2_SelectedIndexChanged); - // - // uiPanel4 - // - this.uiPanel4.Dock = System.Windows.Forms.DockStyle.Left; - this.uiPanel4.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); - this.uiPanel4.Location = new System.Drawing.Point(0, 0); - this.uiPanel4.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); - this.uiPanel4.MinimumSize = new System.Drawing.Size(1, 1); - this.uiPanel4.Name = "uiPanel4"; - this.uiPanel4.Radius = 0; - this.uiPanel4.Size = new System.Drawing.Size(116, 249); - this.uiPanel4.TabIndex = 0; - this.uiPanel4.Text = "2号位"; - this.uiPanel4.TextAlignment = System.Drawing.ContentAlignment.MiddleCenter; - this.uiPanel4.ZoomScaleRect = new System.Drawing.Rectangle(0, 0, 0, 0); - // - // uiPanel1 - // - this.uiPanel1.Controls.Add(this.btn_down1_1); - this.uiPanel1.Controls.Add(this.cmb_sizechoose1_1); - this.uiPanel1.Controls.Add(this.btn_load1_1); - this.uiPanel1.Controls.Add(this.uiPanel3); - this.uiPanel1.Dock = System.Windows.Forms.DockStyle.Top; - this.uiPanel1.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); - this.uiPanel1.Location = new System.Drawing.Point(0, 35); - this.uiPanel1.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); - this.uiPanel1.MinimumSize = new System.Drawing.Size(1, 1); - this.uiPanel1.Name = "uiPanel1"; - this.uiPanel1.Size = new System.Drawing.Size(442, 261); - this.uiPanel1.TabIndex = 0; - this.uiPanel1.Text = null; - this.uiPanel1.TextAlignment = System.Drawing.ContentAlignment.MiddleCenter; - this.uiPanel1.ZoomScaleRect = new System.Drawing.Rectangle(0, 0, 0, 0); - // - // btn_down1_1 - // - this.btn_down1_1.Cursor = System.Windows.Forms.Cursors.Hand; - this.btn_down1_1.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); - this.btn_down1_1.Location = new System.Drawing.Point(184, 148); - this.btn_down1_1.MinimumSize = new System.Drawing.Size(1, 1); - this.btn_down1_1.Name = "btn_down1_1"; - this.btn_down1_1.Size = new System.Drawing.Size(100, 35); - this.btn_down1_1.TabIndex = 3; - this.btn_down1_1.Text = "下料"; - this.btn_down1_1.TipsFont = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); - this.btn_down1_1.ZoomScaleRect = new System.Drawing.Rectangle(0, 0, 0, 0); - this.btn_down1_1.Click += new System.EventHandler(this.btn_down1_1_Click); - // - // cmb_sizechoose1_1 - // - this.cmb_sizechoose1_1.DataSource = null; - this.cmb_sizechoose1_1.Dock = System.Windows.Forms.DockStyle.Top; - this.cmb_sizechoose1_1.DropDownStyle = Sunny.UI.UIDropDownStyle.DropDownList; - this.cmb_sizechoose1_1.FillColor = System.Drawing.Color.White; - this.cmb_sizechoose1_1.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); - this.cmb_sizechoose1_1.Items.AddRange(new object[] { - "", - "12", - "13", - "14", - "15", - "16", - "17", - "18"}); - this.cmb_sizechoose1_1.Location = new System.Drawing.Point(116, 0); - this.cmb_sizechoose1_1.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); - this.cmb_sizechoose1_1.MinimumSize = new System.Drawing.Size(63, 0); - this.cmb_sizechoose1_1.Name = "cmb_sizechoose1_1"; - this.cmb_sizechoose1_1.Padding = new System.Windows.Forms.Padding(0, 0, 30, 2); - this.cmb_sizechoose1_1.Size = new System.Drawing.Size(326, 29); - this.cmb_sizechoose1_1.TabIndex = 1; - this.cmb_sizechoose1_1.TextAlignment = System.Drawing.ContentAlignment.MiddleLeft; - this.cmb_sizechoose1_1.Watermark = ""; - this.cmb_sizechoose1_1.ZoomScaleRect = new System.Drawing.Rectangle(0, 0, 0, 0); - this.cmb_sizechoose1_1.SelectedIndexChanged += new System.EventHandler(this.cmb_sizechoose1_1_SelectedIndexChanged); - // - // btn_load1_1 - // - this.btn_load1_1.Cursor = System.Windows.Forms.Cursors.Hand; - this.btn_load1_1.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); - this.btn_load1_1.Location = new System.Drawing.Point(184, 76); - this.btn_load1_1.MinimumSize = new System.Drawing.Size(1, 1); - this.btn_load1_1.Name = "btn_load1_1"; - this.btn_load1_1.Size = new System.Drawing.Size(100, 35); - this.btn_load1_1.TabIndex = 2; - this.btn_load1_1.Text = "上料"; - this.btn_load1_1.TipsFont = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); - this.btn_load1_1.ZoomScaleRect = new System.Drawing.Rectangle(0, 0, 0, 0); - this.btn_load1_1.Click += new System.EventHandler(this.btn_load1_1_Click); - // - // uiPanel3 - // - this.uiPanel3.Dock = System.Windows.Forms.DockStyle.Left; - this.uiPanel3.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); - this.uiPanel3.Location = new System.Drawing.Point(0, 0); - this.uiPanel3.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); - this.uiPanel3.MinimumSize = new System.Drawing.Size(1, 1); - this.uiPanel3.Name = "uiPanel3"; - this.uiPanel3.Size = new System.Drawing.Size(116, 261); - this.uiPanel3.TabIndex = 0; - this.uiPanel3.Text = "1号位"; - this.uiPanel3.TextAlignment = System.Drawing.ContentAlignment.MiddleCenter; - this.uiPanel3.ZoomScaleRect = new System.Drawing.Rectangle(0, 0, 0, 0); - // - // uiTitlePanel2 - // - this.uiTitlePanel2.Controls.Add(this.uiPanel5); - this.uiTitlePanel2.Controls.Add(this.uiPanel7); - this.uiTitlePanel2.Dock = System.Windows.Forms.DockStyle.Fill; - this.uiTitlePanel2.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); - this.uiTitlePanel2.Location = new System.Drawing.Point(0, 0); - this.uiTitlePanel2.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); - this.uiTitlePanel2.MinimumSize = new System.Drawing.Size(1, 1); - this.uiTitlePanel2.Name = "uiTitlePanel2"; - this.uiTitlePanel2.Padding = new System.Windows.Forms.Padding(0, 35, 0, 0); - this.uiTitlePanel2.Radius = 0; - this.uiTitlePanel2.ShowText = false; - this.uiTitlePanel2.Size = new System.Drawing.Size(462, 545); - this.uiTitlePanel2.TabIndex = 8; - this.uiTitlePanel2.Text = "2号硫化机"; - this.uiTitlePanel2.TextAlignment = System.Drawing.ContentAlignment.MiddleCenter; - this.uiTitlePanel2.ZoomScaleRect = new System.Drawing.Rectangle(0, 0, 0, 0); - // - // uiPanel5 - // - this.uiPanel5.Controls.Add(this.btn_down2_2); - this.uiPanel5.Controls.Add(this.btn_load2_2); - this.uiPanel5.Controls.Add(this.cmb_sizechoose2_2); - this.uiPanel5.Controls.Add(this.uiPanel6); - this.uiPanel5.Dock = System.Windows.Forms.DockStyle.Fill; - this.uiPanel5.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); - this.uiPanel5.Location = new System.Drawing.Point(0, 296); - this.uiPanel5.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); - this.uiPanel5.MinimumSize = new System.Drawing.Size(1, 1); - this.uiPanel5.Name = "uiPanel5"; - this.uiPanel5.Radius = 0; - this.uiPanel5.Size = new System.Drawing.Size(462, 249); - this.uiPanel5.TabIndex = 1; - this.uiPanel5.Text = null; - this.uiPanel5.TextAlignment = System.Drawing.ContentAlignment.MiddleCenter; - this.uiPanel5.ZoomScaleRect = new System.Drawing.Rectangle(0, 0, 0, 0); - // - // btn_down2_2 - // - this.btn_down2_2.Cursor = System.Windows.Forms.Cursors.Hand; - this.btn_down2_2.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); - this.btn_down2_2.Location = new System.Drawing.Point(184, 144); - this.btn_down2_2.MinimumSize = new System.Drawing.Size(1, 1); - this.btn_down2_2.Name = "btn_down2_2"; - this.btn_down2_2.Size = new System.Drawing.Size(100, 35); - this.btn_down2_2.TabIndex = 3; - this.btn_down2_2.Text = "下料"; - this.btn_down2_2.TipsFont = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); - this.btn_down2_2.ZoomScaleRect = new System.Drawing.Rectangle(0, 0, 0, 0); - // - // btn_load2_2 - // - this.btn_load2_2.Cursor = System.Windows.Forms.Cursors.Hand; - this.btn_load2_2.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); - this.btn_load2_2.Location = new System.Drawing.Point(184, 72); - this.btn_load2_2.MinimumSize = new System.Drawing.Size(1, 1); - this.btn_load2_2.Name = "btn_load2_2"; - this.btn_load2_2.Size = new System.Drawing.Size(100, 35); - this.btn_load2_2.TabIndex = 2; - this.btn_load2_2.Text = "上料"; - this.btn_load2_2.TipsFont = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); - this.btn_load2_2.ZoomScaleRect = new System.Drawing.Rectangle(0, 0, 0, 0); - // - // cmb_sizechoose2_2 - // - this.cmb_sizechoose2_2.DataSource = null; - this.cmb_sizechoose2_2.Dock = System.Windows.Forms.DockStyle.Top; - this.cmb_sizechoose2_2.DropDownStyle = Sunny.UI.UIDropDownStyle.DropDownList; - this.cmb_sizechoose2_2.FillColor = System.Drawing.Color.White; - this.cmb_sizechoose2_2.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); - this.cmb_sizechoose2_2.Items.AddRange(new object[] { - "", - "12", - "13", - "14", - "15", - "16", - "17", - "18"}); - this.cmb_sizechoose2_2.Location = new System.Drawing.Point(116, 0); - this.cmb_sizechoose2_2.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); - this.cmb_sizechoose2_2.MinimumSize = new System.Drawing.Size(63, 0); - this.cmb_sizechoose2_2.Name = "cmb_sizechoose2_2"; - this.cmb_sizechoose2_2.Padding = new System.Windows.Forms.Padding(0, 0, 30, 2); - this.cmb_sizechoose2_2.Size = new System.Drawing.Size(346, 29); - this.cmb_sizechoose2_2.TabIndex = 1; - this.cmb_sizechoose2_2.TextAlignment = System.Drawing.ContentAlignment.MiddleLeft; - this.cmb_sizechoose2_2.Watermark = ""; - this.cmb_sizechoose2_2.ZoomScaleRect = new System.Drawing.Rectangle(0, 0, 0, 0); - this.cmb_sizechoose2_2.SelectedIndexChanged += new System.EventHandler(this.cmb_sizechoose2_2_SelectedIndexChanged); - // - // uiPanel6 - // - this.uiPanel6.Dock = System.Windows.Forms.DockStyle.Left; - this.uiPanel6.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); - this.uiPanel6.Location = new System.Drawing.Point(0, 0); - this.uiPanel6.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); - this.uiPanel6.MinimumSize = new System.Drawing.Size(1, 1); - this.uiPanel6.Name = "uiPanel6"; - this.uiPanel6.Radius = 4; - this.uiPanel6.Size = new System.Drawing.Size(116, 249); - this.uiPanel6.TabIndex = 0; - this.uiPanel6.Text = "2号位"; - this.uiPanel6.TextAlignment = System.Drawing.ContentAlignment.MiddleCenter; - this.uiPanel6.ZoomScaleRect = new System.Drawing.Rectangle(0, 0, 0, 0); - // - // uiPanel7 - // - this.uiPanel7.Controls.Add(this.btn_down2_1); - this.uiPanel7.Controls.Add(this.btn_load2_1); - this.uiPanel7.Controls.Add(this.cmb_sizechoose2_1); - this.uiPanel7.Controls.Add(this.uiPanel8); - this.uiPanel7.Dock = System.Windows.Forms.DockStyle.Top; - this.uiPanel7.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); - this.uiPanel7.Location = new System.Drawing.Point(0, 35); - this.uiPanel7.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); - this.uiPanel7.MinimumSize = new System.Drawing.Size(1, 1); - this.uiPanel7.Name = "uiPanel7"; - this.uiPanel7.Size = new System.Drawing.Size(462, 261); - this.uiPanel7.TabIndex = 0; - this.uiPanel7.Text = null; - this.uiPanel7.TextAlignment = System.Drawing.ContentAlignment.MiddleCenter; - this.uiPanel7.ZoomScaleRect = new System.Drawing.Rectangle(0, 0, 0, 0); - // - // btn_down2_1 - // - this.btn_down2_1.Cursor = System.Windows.Forms.Cursors.Hand; - this.btn_down2_1.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); - this.btn_down2_1.Location = new System.Drawing.Point(184, 148); - this.btn_down2_1.MinimumSize = new System.Drawing.Size(1, 1); - this.btn_down2_1.Name = "btn_down2_1"; - this.btn_down2_1.Size = new System.Drawing.Size(100, 35); - this.btn_down2_1.TabIndex = 3; - this.btn_down2_1.Text = "下料"; - this.btn_down2_1.TipsFont = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); - this.btn_down2_1.ZoomScaleRect = new System.Drawing.Rectangle(0, 0, 0, 0); - // - // btn_load2_1 - // - this.btn_load2_1.Cursor = System.Windows.Forms.Cursors.Hand; - this.btn_load2_1.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); - this.btn_load2_1.Location = new System.Drawing.Point(184, 76); - this.btn_load2_1.MinimumSize = new System.Drawing.Size(1, 1); - this.btn_load2_1.Name = "btn_load2_1"; - this.btn_load2_1.Size = new System.Drawing.Size(100, 35); - this.btn_load2_1.TabIndex = 2; - this.btn_load2_1.Text = "上料"; - this.btn_load2_1.TipsFont = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); - this.btn_load2_1.ZoomScaleRect = new System.Drawing.Rectangle(0, 0, 0, 0); - // - // cmb_sizechoose2_1 - // - this.cmb_sizechoose2_1.DataSource = null; - this.cmb_sizechoose2_1.Dock = System.Windows.Forms.DockStyle.Top; - this.cmb_sizechoose2_1.DropDownStyle = Sunny.UI.UIDropDownStyle.DropDownList; - this.cmb_sizechoose2_1.FillColor = System.Drawing.Color.White; - this.cmb_sizechoose2_1.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); - this.cmb_sizechoose2_1.Items.AddRange(new object[] { - "", - "12", - "13", - "14", - "15", - "16", - "17", - "18"}); - this.cmb_sizechoose2_1.Location = new System.Drawing.Point(116, 0); - this.cmb_sizechoose2_1.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); - this.cmb_sizechoose2_1.MinimumSize = new System.Drawing.Size(63, 0); - this.cmb_sizechoose2_1.Name = "cmb_sizechoose2_1"; - this.cmb_sizechoose2_1.Padding = new System.Windows.Forms.Padding(0, 0, 30, 2); - this.cmb_sizechoose2_1.Size = new System.Drawing.Size(346, 29); - this.cmb_sizechoose2_1.TabIndex = 1; - this.cmb_sizechoose2_1.TextAlignment = System.Drawing.ContentAlignment.MiddleLeft; - this.cmb_sizechoose2_1.Watermark = ""; - this.cmb_sizechoose2_1.ZoomScaleRect = new System.Drawing.Rectangle(0, 0, 0, 0); - this.cmb_sizechoose2_1.SelectedIndexChanged += new System.EventHandler(this.cmb_sizechoose2_1_SelectedIndexChanged); - // - // uiPanel8 - // - this.uiPanel8.Dock = System.Windows.Forms.DockStyle.Left; - this.uiPanel8.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); - this.uiPanel8.Location = new System.Drawing.Point(0, 0); - this.uiPanel8.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); - this.uiPanel8.MinimumSize = new System.Drawing.Size(1, 1); - this.uiPanel8.Name = "uiPanel8"; - this.uiPanel8.Size = new System.Drawing.Size(116, 261); - this.uiPanel8.TabIndex = 0; - this.uiPanel8.Text = "1号位"; - this.uiPanel8.TextAlignment = System.Drawing.ContentAlignment.MiddleCenter; - this.uiPanel8.ZoomScaleRect = new System.Drawing.Rectangle(0, 0, 0, 0); - // - // btn_robotset - // - this.btn_robotset.Cursor = System.Windows.Forms.Cursors.Hand; - this.btn_robotset.Dock = System.Windows.Forms.DockStyle.Fill; - this.btn_robotset.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); - this.btn_robotset.Location = new System.Drawing.Point(3, 489); - this.btn_robotset.Margin = new System.Windows.Forms.Padding(3, 13, 3, 13); - this.btn_robotset.MinimumSize = new System.Drawing.Size(1, 1); - this.btn_robotset.Name = "btn_robotset"; - this.btn_robotset.Size = new System.Drawing.Size(106, 43); - this.btn_robotset.TabIndex = 7; - this.btn_robotset.Text = "ROBOT设置"; - this.btn_robotset.TipsFont = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); - this.btn_robotset.ZoomScaleRect = new System.Drawing.Rectangle(0, 0, 0, 0); - // - // btn_plcset - // - this.btn_plcset.Cursor = System.Windows.Forms.Cursors.Hand; - this.btn_plcset.Dock = System.Windows.Forms.DockStyle.Fill; - this.btn_plcset.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); - this.btn_plcset.Location = new System.Drawing.Point(3, 421); - this.btn_plcset.Margin = new System.Windows.Forms.Padding(3, 13, 3, 13); - this.btn_plcset.MinimumSize = new System.Drawing.Size(1, 1); - this.btn_plcset.Name = "btn_plcset"; - this.btn_plcset.Size = new System.Drawing.Size(106, 42); - this.btn_plcset.TabIndex = 6; - this.btn_plcset.Text = "PLC设置"; - this.btn_plcset.TipsFont = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); - this.btn_plcset.ZoomScaleRect = new System.Drawing.Rectangle(0, 0, 0, 0); - // - // btn_reset - // - this.btn_reset.Cursor = System.Windows.Forms.Cursors.Hand; - this.btn_reset.Dock = System.Windows.Forms.DockStyle.Fill; - this.btn_reset.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); - this.btn_reset.Location = new System.Drawing.Point(3, 353); - this.btn_reset.Margin = new System.Windows.Forms.Padding(3, 13, 3, 13); - this.btn_reset.MinimumSize = new System.Drawing.Size(1, 1); - this.btn_reset.Name = "btn_reset"; - this.btn_reset.Size = new System.Drawing.Size(106, 42); - this.btn_reset.TabIndex = 5; - this.btn_reset.Text = "复位"; - this.btn_reset.TipsFont = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); - this.btn_reset.ZoomScaleRect = new System.Drawing.Rectangle(0, 0, 0, 0); - // - // btn_auto - // - this.btn_auto.Cursor = System.Windows.Forms.Cursors.Hand; - this.btn_auto.Dock = System.Windows.Forms.DockStyle.Fill; - this.btn_auto.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); - this.btn_auto.Location = new System.Drawing.Point(3, 285); - this.btn_auto.Margin = new System.Windows.Forms.Padding(3, 13, 3, 13); - this.btn_auto.MinimumSize = new System.Drawing.Size(1, 1); - this.btn_auto.Name = "btn_auto"; - this.btn_auto.Size = new System.Drawing.Size(106, 42); - this.btn_auto.TabIndex = 4; - this.btn_auto.Text = "自动"; - this.btn_auto.TipsFont = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); - this.btn_auto.ZoomScaleRect = new System.Drawing.Rectangle(0, 0, 0, 0); - this.btn_auto.Click += new System.EventHandler(this.btn_auto_Click); - // - // btn_manual - // - this.btn_manual.Cursor = System.Windows.Forms.Cursors.Hand; - this.btn_manual.Dock = System.Windows.Forms.DockStyle.Fill; - this.btn_manual.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); - this.btn_manual.Location = new System.Drawing.Point(3, 217); - this.btn_manual.Margin = new System.Windows.Forms.Padding(3, 13, 3, 13); - this.btn_manual.MinimumSize = new System.Drawing.Size(1, 1); - this.btn_manual.Name = "btn_manual"; - this.btn_manual.Size = new System.Drawing.Size(106, 42); - this.btn_manual.TabIndex = 3; - this.btn_manual.Text = "手动"; - this.btn_manual.TipsFont = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); - this.btn_manual.ZoomScaleRect = new System.Drawing.Rectangle(0, 0, 0, 0); - this.btn_manual.Click += new System.EventHandler(this.btn_manual_Click); - // - // btn_stop - // - this.btn_stop.Cursor = System.Windows.Forms.Cursors.Hand; - this.btn_stop.Dock = System.Windows.Forms.DockStyle.Fill; - this.btn_stop.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); - this.btn_stop.Location = new System.Drawing.Point(3, 149); - this.btn_stop.Margin = new System.Windows.Forms.Padding(3, 13, 3, 13); - this.btn_stop.MinimumSize = new System.Drawing.Size(1, 1); - this.btn_stop.Name = "btn_stop"; - this.btn_stop.Size = new System.Drawing.Size(106, 42); - this.btn_stop.TabIndex = 2; - this.btn_stop.Text = "停止"; - this.btn_stop.TipsFont = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); - this.btn_stop.ZoomScaleRect = new System.Drawing.Rectangle(0, 0, 0, 0); - this.btn_stop.Click += new System.EventHandler(this.btn_stop_Click); - // - // btn_pause - // - this.btn_pause.Cursor = System.Windows.Forms.Cursors.Hand; - this.btn_pause.Dock = System.Windows.Forms.DockStyle.Fill; - this.btn_pause.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); - this.btn_pause.Location = new System.Drawing.Point(3, 81); - this.btn_pause.Margin = new System.Windows.Forms.Padding(3, 13, 3, 13); - this.btn_pause.MinimumSize = new System.Drawing.Size(1, 1); - this.btn_pause.Name = "btn_pause"; - this.btn_pause.Radius = 1; - this.btn_pause.Size = new System.Drawing.Size(106, 42); - this.btn_pause.TabIndex = 1; - this.btn_pause.Text = "暂停"; - this.btn_pause.TipsFont = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); - this.btn_pause.ZoomScaleRect = new System.Drawing.Rectangle(0, 0, 0, 0); - // - // btn_start - // - this.btn_start.Cursor = System.Windows.Forms.Cursors.Hand; - this.btn_start.Dock = System.Windows.Forms.DockStyle.Fill; - this.btn_start.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); - this.btn_start.Location = new System.Drawing.Point(3, 13); - this.btn_start.Margin = new System.Windows.Forms.Padding(3, 13, 3, 13); - this.btn_start.MinimumSize = new System.Drawing.Size(1, 1); - this.btn_start.Name = "btn_start"; - this.btn_start.Size = new System.Drawing.Size(106, 42); - this.btn_start.TabIndex = 0; - this.btn_start.Text = "启动"; - this.btn_start.TipsFont = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); - this.btn_start.ZoomScaleRect = new System.Drawing.Rectangle(0, 0, 0, 0); - this.btn_start.Click += new System.EventHandler(this.btn_start_Click); - this.btn_start.MouseDown += new System.Windows.Forms.MouseEventHandler(this.btn_start_MouseDown); - this.btn_start.MouseUp += new System.Windows.Forms.MouseEventHandler(this.btn_start_MouseUp); - // - // uiTableLayoutPanel1 - // - this.uiTableLayoutPanel1.ColumnCount = 1; - this.uiTableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.uiTableLayoutPanel1.Controls.Add(this.btn_start, 0, 0); - this.uiTableLayoutPanel1.Controls.Add(this.btn_pause, 0, 1); - this.uiTableLayoutPanel1.Controls.Add(this.btn_stop, 0, 2); - this.uiTableLayoutPanel1.Controls.Add(this.btn_manual, 0, 3); - this.uiTableLayoutPanel1.Controls.Add(this.btn_auto, 0, 4); - this.uiTableLayoutPanel1.Controls.Add(this.btn_reset, 0, 5); - this.uiTableLayoutPanel1.Controls.Add(this.btn_plcset, 0, 6); - this.uiTableLayoutPanel1.Controls.Add(this.btn_robotset, 0, 7); - this.uiTableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Left; - this.uiTableLayoutPanel1.Location = new System.Drawing.Point(0, 0); - this.uiTableLayoutPanel1.Name = "uiTableLayoutPanel1"; - this.uiTableLayoutPanel1.RowCount = 8; - this.uiTableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 12.5F)); - this.uiTableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 12.5F)); - this.uiTableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 12.5F)); - this.uiTableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 12.5F)); - this.uiTableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 12.5F)); - this.uiTableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 12.5F)); - this.uiTableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 12.5F)); - this.uiTableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 12.5F)); - this.uiTableLayoutPanel1.Size = new System.Drawing.Size(112, 545); - this.uiTableLayoutPanel1.TabIndex = 5; - this.uiTableLayoutPanel1.TagString = null; - this.uiTableLayoutPanel1.Paint += new System.Windows.Forms.PaintEventHandler(this.uiTableLayoutPanel1_Paint); - // - // ControlSet - // - this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(1020, 545); - this.Controls.Add(this.splitContainer1); - this.Controls.Add(this.uiTableLayoutPanel1); - this.Name = "ControlSet"; - this.Text = "控制设置"; - this.Load += new System.EventHandler(this.ControlSet_Load); - this.splitContainer1.Panel1.ResumeLayout(false); - this.splitContainer1.Panel2.ResumeLayout(false); - ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit(); - this.splitContainer1.ResumeLayout(false); - this.uiTitlePanel1.ResumeLayout(false); - this.uiPanel2.ResumeLayout(false); - this.uiPanel1.ResumeLayout(false); - this.uiTitlePanel2.ResumeLayout(false); - this.uiPanel5.ResumeLayout(false); - this.uiPanel7.ResumeLayout(false); - this.uiTableLayoutPanel1.ResumeLayout(false); - this.ResumeLayout(false); - - } - - #endregion - private System.Windows.Forms.SplitContainer splitContainer1; - private Sunny.UI.UIButton btn_robotset; - private Sunny.UI.UIButton btn_plcset; - private Sunny.UI.UIButton btn_reset; - private Sunny.UI.UIButton btn_auto; - private Sunny.UI.UIButton btn_manual; - private Sunny.UI.UIButton btn_stop; - private Sunny.UI.UIButton btn_pause; - private Sunny.UI.UIButton btn_start; - private Sunny.UI.UITableLayoutPanel uiTableLayoutPanel1; - private Sunny.UI.UITitlePanel uiTitlePanel1; - private Sunny.UI.UIPanel uiPanel2; - private Sunny.UI.UIButton btn_down1_2; - private Sunny.UI.UIButton btn_load1_2; - private Sunny.UI.UIComboBox cmb_sizechoose1_2; - private Sunny.UI.UIPanel uiPanel4; - private Sunny.UI.UIPanel uiPanel1; - private Sunny.UI.UIButton btn_down1_1; - private Sunny.UI.UIComboBox cmb_sizechoose1_1; - private Sunny.UI.UIButton btn_load1_1; - private Sunny.UI.UIPanel uiPanel3; - private Sunny.UI.UITitlePanel uiTitlePanel2; - private Sunny.UI.UIPanel uiPanel5; - private Sunny.UI.UIButton btn_down2_2; - private Sunny.UI.UIButton btn_load2_2; - private Sunny.UI.UIComboBox cmb_sizechoose2_2; - private Sunny.UI.UIPanel uiPanel6; - private Sunny.UI.UIPanel uiPanel7; - private Sunny.UI.UIButton btn_down2_1; - private Sunny.UI.UIButton btn_load2_1; - private Sunny.UI.UIComboBox cmb_sizechoose2_1; - private Sunny.UI.UIPanel uiPanel8; - } -} \ No newline at end of file diff --git a/src/BRS.Process.A020/UI/ControlSet.cs b/src/BRS.Process.A020/UI/ControlSet.cs deleted file mode 100644 index 79be09a..0000000 --- a/src/BRS.Process.A020/UI/ControlSet.cs +++ /dev/null @@ -1,353 +0,0 @@ -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; -using BRS.Common.PubSub; -using BRS.UI.Model.Winform; -using System; -using System.Collections.Concurrent; -using System.Collections.Generic; -using System.ComponentModel; -using System.Drawing; -using System.Linq; -using System.Threading; -using static BRS.Common.Model.Helper.EnumHelper; -using static BRS.Process.A020.A020Process; -using BRS.Common.Base; - - -namespace BRS.Process.A020.UI -{ - [MenuNode("ControlSet", "控制菜单", 3, "View2", true)] - //public partial class TriggerCountFrm : MenuFormBase - - public partial class ControlSet : MenuFormBase - { - private bool is_btn_manual { get; set; } = false; - A020Process ProcessA020 => Process as A020Process; - A020Config Config => Process?.IConfig as A020Config; - - private bool isSingleStepOperating = false; - - public ControlSet() - { - InitializeComponent(); - } - - private void btn_start_Click(object sender, EventArgs e) - { - //流程正转启动按钮 - - } - - - private void ControlSet_Load(object sender, EventArgs e) - { - //cmb_sizechoose1_1.SelectedIndex = 0; - //cmb_sizechoose1_2.SelectedIndex = 0; - //cmb_sizechoose2_1.SelectedIndex = 0; - //cmb_sizechoose2_2.SelectedIndex = 0; - - //如果尺寸选择为空,则设置该对应设备无法进行上下料 - btn_load1_1.Enabled = false; - btn_down1_1.Enabled = false; - - btn_load1_2.Enabled = false; - btn_down1_2.Enabled = false; - - btn_load2_1.Enabled = false; - btn_down2_1.Enabled = false; - - btn_load2_2.Enabled = false; - btn_down2_2.Enabled = false; - - ////初始化字典界面设置 - //MachineInfo temp; - //temp.isReady = false; - //temp.location = -1; - //temp.tireSize = -1; - //MachineInfos.Add(0, temp); // 使用字典将顺序排好 - //MachineInfos.Add(1, temp); - //MachineInfos.Add(2, temp); - //MachineInfos.Add(3, temp); - - - } - public void SetMachineInfo(int num,int location) - { - MachineInfo temp; - temp.isReady = false; - temp.location = -1; - temp.tyreSize = -1; - //根据选择设置按钮可用性 - switch (num) - { - case 0: //如果选择为空,则对应区域内上下料按钮禁止使用 - temp.isReady = false; - temp.location = location; - temp.tyreSize = 0; - break; - case 12: - temp.isReady = true; - temp.location = location; - temp.tyreSize = 12; - break; - case 13: - temp.isReady = true; - temp.location = location; - temp.tyreSize = 13; - break; - case 14: - temp.isReady = true; - temp.location = location; - temp.tyreSize = 14; - break; - case 15: - temp.isReady = true; - temp.location = location; - temp.tyreSize = 15; - break; - case 16: - temp.isReady = true; - temp.location = location; - temp.tyreSize = 16; - break; - case 17: - temp.isReady = true; - temp.location = location; - temp.tyreSize = 17; - break; - case 18: - temp.isReady = true; - temp.location = location; - temp.tyreSize = 18; - break; - default: - break; - } - - //bool location_exist = false; - //for (int i = 0; i < MachineInfos.Count(); i++) //遍历查找对应的location进行修改 - //{ - // if (MachineInfos[i].location == location) - // { - // MachineInfos[i] = temp; - // location_exist = true; - // break; //找到之后停止查询 - // } - //} - //if (!location_exist) // 如果不存在则添加 - //{ - // MachineInfos.Add(temp); - //} - - //使用字典存放界面的设置 - if (!MachineInfos.ContainsKey(location)) // 如果该位置不存在,则添加进字典 - MachineInfos.Add(location, temp); - else - MachineInfos[location] = temp; - } - private void cmb_sizechoose1_1_SelectedIndexChanged(object sender, EventArgs e) - { - Sunny.UI.UIComboBox comboBox = (Sunny.UI.UIComboBox)sender; - string value = (string)comboBox.SelectedItem; - int num; - int.TryParse(value,out num); - if (0 < num) - { - btn_load1_1.Enabled = true; - btn_down1_1.Enabled = true; - } - else - { - btn_load1_1.Enabled = false; - btn_down1_1.Enabled = false; - } - SetMachineInfo(num, 0); - } - - private void cmb_sizechoose2_1_SelectedIndexChanged(object sender, EventArgs e) - { - Sunny.UI.UIComboBox comboBox = (Sunny.UI.UIComboBox)sender; - string value = (string)comboBox.SelectedItem; - int num; - int.TryParse(value, out num); - if (0 < num) - { - btn_load2_1.Enabled = true; - btn_down2_1.Enabled = true; - } - else - { - btn_load2_1.Enabled = false; - btn_down2_1.Enabled = false; - } - SetMachineInfo(num, 2); - } - - private void cmb_sizechoose1_2_SelectedIndexChanged(object sender, EventArgs e) - { - Sunny.UI.UIComboBox comboBox = (Sunny.UI.UIComboBox)sender; - string value = (string)comboBox.SelectedItem; - int num; - int.TryParse(value, out num); - if (0 < num) - { - btn_load1_2.Enabled = true; - btn_down1_2.Enabled = true; - } - else - { - btn_load1_2.Enabled = false; - btn_down1_2.Enabled = false; - } - SetMachineInfo(num, 1); - - } - - private void cmb_sizechoose2_2_SelectedIndexChanged(object sender, EventArgs e) - { - Sunny.UI.UIComboBox comboBox = (Sunny.UI.UIComboBox)sender; - string value = (string)comboBox.SelectedItem; - int num; - int.TryParse(value, out num); - if (0 < num) - { - btn_load2_2.Enabled = true; - btn_down2_2.Enabled = true; - } - else - { - btn_load2_2.Enabled = false; - btn_down2_2.Enabled = false; - } - SetMachineInfo(num, 3); - } - - private void btn_stop_Click(object sender, EventArgs e) - { - //var NbtRobot = A020Process.DeviceCollection.FirstOrDefault(u => u is RobotBase) as RobotBase; - //NbtRobot.power_off(); - } - - private void btn_load1_1_Click(object sender, EventArgs e) - { - if(!ProcessA020.IsSingleStepOperating) - { - ProcessA020.IsSingleStepOperating = true; - - Dictionary machineInfos = MachineInfos;//拿到界面上的设置参数 - int Machine1Entrance1TyreSize = 0; - - foreach (var item in machineInfos) - { - if (item.Value.location == 0) - Machine1Entrance1TyreSize = item.Value.tyreSize; - } - //ProcessA020.Machine1Entrance1Up(Machine1Entrance1TyreSize); - } - else - LogAsync(DateTime.Now, LogLevel.Error, $"有未完成的操作。"); - } - - private void btn_down1_1_Click(object sender, EventArgs e) - { - if (!ProcessA020.IsSingleStepOperating) - { - ProcessA020.IsSingleStepOperating = true; - - Dictionary machineInfos = MachineInfos;//拿到界面上的设置参数 - int Machine1Entrance1TyreSize = 0; - foreach (var item in machineInfos) - { - if (item.Value.location == 0) - Machine1Entrance1TyreSize = item.Value.tyreSize; - } - //ProcessA020.Machine1Entrance1Down(Machine1Entrance1TyreSize); - } - else - LogAsync(DateTime.Now, LogLevel.Error, $"有未完成的操作。"); - } - - private void btn_down1_2_Click(object sender, EventArgs e) - { - if (!ProcessA020.IsSingleStepOperating) - { - ProcessA020.IsSingleStepOperating = true; - - Dictionary machineInfos = MachineInfos;//拿到界面上的设置参数 - int Machine1Entrance2TyreSize = 0; - foreach (var item in machineInfos) - { - if (item.Value.location == 1) - Machine1Entrance2TyreSize = item.Value.tyreSize; - } - //ProcessA020.Machine1Entrance2Down(Machine1Entrance2TyreSize); - } - else - LogAsync(DateTime.Now, LogLevel.Error, $"有未完成的操作。"); - } - - private void btn_load1_2_Click(object sender, EventArgs e) - { - if (!ProcessA020.IsSingleStepOperating) - { - ProcessA020.IsSingleStepOperating = true; - - Dictionary machineInfos = MachineInfos;//拿到界面上的设置参数 - int Machine1Entrance2TyreSize = 0; - - foreach (var item in machineInfos) - { - if (item.Value.location == 1) - Machine1Entrance2TyreSize = item.Value.tyreSize; - } - //ProcessA020.Machine1Entrance2Up(Machine1Entrance2TyreSize); - } - else - LogAsync(DateTime.Now, LogLevel.Error, $"有未完成的操作。"); - } - - private void btn_manual_Click(object sender, EventArgs e) - { - btn_manual.FillColor = Color.FromArgb(41, 255, 156); - btn_manual.FillHoverColor = Color.FromArgb(41, 255, 156); - - btn_auto.FillColor = Color.FromArgb(80, 160, 255); - btn_auto.FillHoverColor = Color.FromArgb(80, 160, 255); - - ProcessA020.Machine1SwitchAutoManual(false); - } - private void btn_auto_Click(object sender, EventArgs e) - { - btn_auto.FillColor = Color.FromArgb(41, 255, 156); - btn_auto.FillHoverColor = Color.FromArgb(41, 255, 156); - - btn_manual.FillColor = Color.FromArgb(80, 160, 255); - btn_manual.FillHoverColor = Color.FromArgb(80, 160, 255); - - ProcessA020.Machine1SwitchAutoManual(true); - } - - private void uiTableLayoutPanel1_Paint(object sender, PaintEventArgs e) - { - - } - - private void btn_start_MouseDown(object sender, MouseEventArgs e) - { - - } - - private void btn_start_MouseUp(object sender, MouseEventArgs e) - { - - } - } -} - diff --git a/src/BRS.Process.A020/packages.config b/src/BRS.Process.A020/packages.config index d875585..2636197 100644 --- a/src/BRS.Process.A020/packages.config +++ b/src/BRS.Process.A020/packages.config @@ -7,10 +7,17 @@ + + + + + + + diff --git a/src/BRS.Process/BRS.Process.csproj b/src/BRS.Process/BRS.Process.csproj index 3f75b98..477d45d 100644 --- a/src/BRS.Process/BRS.Process.csproj +++ b/src/BRS.Process/BRS.Process.csproj @@ -167,6 +167,10 @@ {741f6491-57c7-479a-b391-09bba9fba9dc} BRS.UI.Model.Winform + + {91739E90-6A8E-433D-B244-5325F8848064} + XKRS.Device.TCPSever + diff --git a/src/BRS.Process/ProcessConfig.cs b/src/BRS.Process/ProcessConfig.cs index 7e0bfbd..65ddd91 100644 --- a/src/BRS.Process/ProcessConfig.cs +++ b/src/BRS.Process/ProcessConfig.cs @@ -9,8 +9,7 @@ using System.Drawing.Design; using System.Linq; using System.Runtime.CompilerServices; using static BRS.Common.Model.Helper.EnumHelper; - - +using XKRS.Device.TCPSever; namespace BRS.Process { @@ -40,13 +39,19 @@ namespace BRS.Process public List PLCConfigCollection { get; set; } = new List(); - [Category("设备配置")] - [Description("机械臂配置")] - [DisplayName("机械臂配置")] - [TypeConverter(typeof(CollectionCountConvert))] - [Editor(typeof(InitialConfigCollectionEditor), typeof(UITypeEditor))] - public List RobotConfigCollection { get; set; } = new List(); + //[Category("设备配置")] + //[Description("机械臂配置")] + //[DisplayName("机械臂配置")] + //[TypeConverter(typeof(CollectionCountConvert))] + //[Editor(typeof(InitialConfigCollectionEditor), typeof(UITypeEditor))] + //public List RobotConfigCollection { get; set; } = new List(); + [Category("设备配置")] + [Description("川崎机械臂配置")] + [DisplayName("川崎机械臂配置")] + [TypeConverter(typeof(CollectionCountConvert))] + [Editor(typeof(InitialConfigCollectionEditor), typeof(UITypeEditor))] + public List KawasakiRobotConfigCollection { get; set; } = new List(); @@ -233,7 +238,7 @@ namespace BRS.Process configs.AddRange(CameraConfigCollection); configs.AddRange(PLCConfigCollection); configs.AddRange(DeviceConfigs); - configs.AddRange(RobotConfigCollection); + //configs.AddRange(RobotConfigCollection); return configs; diff --git a/src/BRS.Process/app.config b/src/BRS.Process/app.config index 4721899..f106813 100644 --- a/src/BRS.Process/app.config +++ b/src/BRS.Process/app.config @@ -1,31 +1,31 @@ - + - - + + - - + + - - + + - - + + - - + + - - + + - + diff --git a/src/BRS.UI.Device.Winform/CtrlRobotRunBase.cs b/src/BRS.UI.Device.Winform/CtrlRobotRunBase.cs index 7922031..c50170b 100644 --- a/src/BRS.UI.Device.Winform/CtrlRobotRunBase.cs +++ b/src/BRS.UI.Device.Winform/CtrlRobotRunBase.cs @@ -224,21 +224,7 @@ namespace BRS.UI.Device.Winform private void button1_Click(object sender, EventArgs e) { - int d=Robot.IConfig.RobotUpMovePoints.Count(); - Robot.IConfig.RobotUpMovePoints.ForEach(points => - { - //if - StrRobotPoint strRobotPoint3;//= ClassChangeStruct(points); - strRobotPoint3.A = points.A; - strRobotPoint3.B = points.B; - strRobotPoint3.C = points.C; - strRobotPoint3.X = points.X; - strRobotPoint3.Y = points.Y; - strRobotPoint3.Z = points.Z; - int speed = Decimal.ToInt32(numericUpDown1.Value); - Robot.Move(strRobotPoint3, 100, true); - // table[camera.Id] = points.X; - }); + } } diff --git a/src/BRS.UI.Device.Winform/app.config b/src/BRS.UI.Device.Winform/app.config index 4cd8ed8..e26e9d3 100644 --- a/src/BRS.UI.Device.Winform/app.config +++ b/src/BRS.UI.Device.Winform/app.config @@ -1,19 +1,19 @@ - + - - + + - - + + - - + + - + diff --git a/src/BRS.UI.Main/App.config b/src/BRS.UI.Main/App.config index 78573e5..00cdd09 100644 --- a/src/BRS.UI.Main/App.config +++ b/src/BRS.UI.Main/App.config @@ -1,73 +1,73 @@ - + -
+
-
+
- + - - - - - - + + + + + + - - + + - - - - - + + + + + - + - - + + - - + + - - + + - - + + - - + + - - + + - - + + diff --git a/src/BRS.UI.Main/MainFrm.cs b/src/BRS.UI.Main/MainFrm.cs index 97902ec..8cc70e2 100644 --- a/src/BRS.UI.Main/MainFrm.cs +++ b/src/BRS.UI.Main/MainFrm.cs @@ -14,13 +14,16 @@ using System.Threading; using System.Threading.Tasks; using System.Windows.Forms; using WeifenLuo.WinFormsUI.Docking; +using System.Runtime.InteropServices; namespace BRS.UI.Main { public partial class MainFrm : Form { IProcess _process = null; - + System.Diagnostics.Process process = new System.Diagnostics.Process(); + System.Diagnostics.Process processB = new System.Diagnostics.Process(); + System.Diagnostics.Process processC = new System.Diagnostics.Process(); public MainFrm() { @@ -390,8 +393,10 @@ namespace BRS.UI.Main LoadProcess(); LoadLayoutFromXML(m_deserializeDeviceRunFrm); LoadProcess(false); + } - + + private List LoadProcessCode() diff --git a/src/BRS.UI.Main/Program.cs b/src/BRS.UI.Main/Program.cs index 18bad3f..338f96a 100644 --- a/src/BRS.UI.Main/Program.cs +++ b/src/BRS.UI.Main/Program.cs @@ -24,7 +24,7 @@ namespace BRS.UI.Main ///
[STAThread] static void Main() - { + { AutoStart(true); if (!AuthorityCheck.AuthorityCheckOperation()) { diff --git a/src/BRS.UI.Model.Winform/app.config b/src/BRS.UI.Model.Winform/app.config index 4cd8ed8..e26e9d3 100644 --- a/src/BRS.UI.Model.Winform/app.config +++ b/src/BRS.UI.Model.Winform/app.config @@ -1,19 +1,19 @@ - + - - + + - - + + - - + + - + diff --git a/src/XKRS.Device.MelsecPLC/MelsecPLCDriver.cs b/src/XKRS.Device.MelsecPLC/MelsecPLCDriver.cs index a8c7ab7..d365a31 100644 --- a/src/XKRS.Device.MelsecPLC/MelsecPLCDriver.cs +++ b/src/XKRS.Device.MelsecPLC/MelsecPLCDriver.cs @@ -193,7 +193,6 @@ namespace XKRS.Device.MelsecPLC { try { - var result = melsecMc.Write(address, writeValue); if (result.IsSuccess) { diff --git a/src/XKRS.Device.TCPSever/App.config b/src/XKRS.Device.TCPSever/App.config new file mode 100644 index 0000000..fe153fd --- /dev/null +++ b/src/XKRS.Device.TCPSever/App.config @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/XKRS.Device.TCPSever/KawasakiTCPSeverRobotConfig.cs b/src/XKRS.Device.TCPSever/KawasakiTCPSeverRobotConfig.cs new file mode 100644 index 0000000..e0b399d --- /dev/null +++ b/src/XKRS.Device.TCPSever/KawasakiTCPSeverRobotConfig.cs @@ -0,0 +1,30 @@ +using BRS.Common.Base; +using BRS.Common.Model; +using BRS.Common.Model.Helper; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Drawing.Design; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace XKRS.Device.TCPSever +{ + [Device("KawasakiRobot", "川崎Robot", EnumHelper.DeviceAttributeType.OperationConfig)] + public class KawasakiRobotOperationConfig : OperationConfigBase + { + + } + + [Device("KawasakiRobot", "川崎Robot", EnumHelper.DeviceAttributeType.InitialConfig)] + public class KawasakiTCPSeverRobotConfig : TCPSeverInitialConfigBase + { + [Category("机械臂项目")] + [Description("机械臂起始位置")] + [DisplayName("机械臂起始位置")] + [TypeConverter(typeof(ComplexObjectConvert))] + [Editor(typeof(PropertyObjectEditor), typeof(UITypeEditor))] + public RobotPoint RobotInitPosition { get; set; } = new RobotPoint(); + } +} diff --git a/src/XKRS.Device.TCPSever/KawasakiTCPSeverRobotDriver.cs b/src/XKRS.Device.TCPSever/KawasakiTCPSeverRobotDriver.cs new file mode 100644 index 0000000..5ccd396 --- /dev/null +++ b/src/XKRS.Device.TCPSever/KawasakiTCPSeverRobotDriver.cs @@ -0,0 +1,58 @@ +using BRS.Common.Base; +using BRS.Common.Model.Helper; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using static BRS.Common.Model.Helper.EnumHelper; + +namespace XKRS.Device.TCPSever +{ + [Device("KawasakiRobot", "川崎Robot", DeviceAttributeType.Device)] + public class KawasakiTCPSeverRobotDriver:TCPSeverBase + { + public KawasakiTCPSeverRobotConfig IIConfig + { + + get => IConfig as KawasakiTCPSeverRobotConfig; + //return InitialConfig as KawasakiTCPSeverRobotConfig; + + } + #region IDeviceBace + + protected override void Init() + { + base.Init(); + } + + + protected override void Start() + { + base.Start(); + } + + + protected override void Pause() + { + // listener.Stop(); + } + protected override void Stop() + { + + base.Stop(); + + + } + + protected override void Resume() + { + + } + + + + #endregion + } + +} diff --git a/src/XKRS.Device.TCPSever/TCPSeverForm.Designer.cs b/src/XKRS.Device.TCPSever/TCPSeverForm.Designer.cs new file mode 100644 index 0000000..845f04d --- /dev/null +++ b/src/XKRS.Device.TCPSever/TCPSeverForm.Designer.cs @@ -0,0 +1,202 @@ + +namespace XKRS.Device.TCPSever +{ + partial class TCPSeverForm + { + /// + /// 必需的设计器变量。 + /// + private System.ComponentModel.IContainer components = null; + + /// + /// 清理所有正在使用的资源。 + /// + /// 如果应释放托管资源,为 true;否则为 false。 + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region 组件设计器生成的代码 + + /// + /// 设计器支持所需的方法 - 不要修改 + /// 使用代码编辑器修改此方法的内容。 + /// + private void InitializeComponent() + { + this.panel1 = new System.Windows.Forms.Panel(); + this.Sendbutton = new System.Windows.Forms.Button(); + this.sendMsg = new System.Windows.Forms.RichTextBox(); + this.richTextBox1 = new System.Windows.Forms.RichTextBox(); + this.btn_set_run_mode = new System.Windows.Forms.Button(); + this.btn_servo_on = new System.Windows.Forms.Button(); + this.btn_power_off = new System.Windows.Forms.Button(); + this.btn_connection_status = new System.Windows.Forms.Button(); + this.btn_set_teach_mode = new System.Windows.Forms.Button(); + this.btn_get_ID = new System.Windows.Forms.Button(); + this.btn_get_servo_state = new System.Windows.Forms.Button(); + this.btn_clear_servo_err = new System.Windows.Forms.Button(); + this.btn_set_servo_state = new System.Windows.Forms.Button(); + this.panel1.SuspendLayout(); + this.SuspendLayout(); + // + // panel1 + // + this.panel1.Controls.Add(this.Sendbutton); + this.panel1.Controls.Add(this.sendMsg); + this.panel1.Controls.Add(this.richTextBox1); + this.panel1.Controls.Add(this.btn_set_run_mode); + this.panel1.Controls.Add(this.btn_servo_on); + this.panel1.Controls.Add(this.btn_power_off); + this.panel1.Controls.Add(this.btn_connection_status); + this.panel1.Controls.Add(this.btn_set_teach_mode); + this.panel1.Controls.Add(this.btn_get_ID); + this.panel1.Controls.Add(this.btn_get_servo_state); + this.panel1.Controls.Add(this.btn_clear_servo_err); + this.panel1.Controls.Add(this.btn_set_servo_state); + this.panel1.Location = new System.Drawing.Point(12, 12); + this.panel1.Name = "panel1"; + this.panel1.Size = new System.Drawing.Size(836, 468); + this.panel1.TabIndex = 0; + // + // Sendbutton + // + this.Sendbutton.Location = new System.Drawing.Point(668, 403); + this.Sendbutton.Name = "Sendbutton"; + this.Sendbutton.Size = new System.Drawing.Size(75, 40); + this.Sendbutton.TabIndex = 183; + this.Sendbutton.Text = "发送"; + this.Sendbutton.UseVisualStyleBackColor = true; + this.Sendbutton.Click += new System.EventHandler(this.Sendbutton_Click); + // + // sendMsg + // + this.sendMsg.Location = new System.Drawing.Point(32, 374); + this.sendMsg.Name = "sendMsg"; + this.sendMsg.Size = new System.Drawing.Size(605, 82); + this.sendMsg.TabIndex = 182; + this.sendMsg.Text = ""; + // + // richTextBox1 + // + this.richTextBox1.Location = new System.Drawing.Point(32, 73); + this.richTextBox1.Name = "richTextBox1"; + this.richTextBox1.Size = new System.Drawing.Size(708, 280); + this.richTextBox1.TabIndex = 2; + this.richTextBox1.Text = ""; + // + // btn_set_run_mode + // + this.btn_set_run_mode.Location = new System.Drawing.Point(720, 15); + this.btn_set_run_mode.Name = "btn_set_run_mode"; + this.btn_set_run_mode.Size = new System.Drawing.Size(72, 40); + this.btn_set_run_mode.TabIndex = 8; + this.btn_set_run_mode.Text = "运行模式"; + this.btn_set_run_mode.UseVisualStyleBackColor = true; + // + // btn_servo_on + // + this.btn_servo_on.Location = new System.Drawing.Point(135, 15); + this.btn_servo_on.Name = "btn_servo_on"; + this.btn_servo_on.Size = new System.Drawing.Size(72, 40); + this.btn_servo_on.TabIndex = 7; + this.btn_servo_on.Text = "伺服上电"; + this.btn_servo_on.UseVisualStyleBackColor = true; + // + // btn_power_off + // + this.btn_power_off.Location = new System.Drawing.Point(213, 15); + this.btn_power_off.Name = "btn_power_off"; + this.btn_power_off.Size = new System.Drawing.Size(70, 40); + this.btn_power_off.TabIndex = 6; + this.btn_power_off.Text = "伺服下电"; + this.btn_power_off.UseVisualStyleBackColor = true; + // + // btn_connection_status + // + this.btn_connection_status.Location = new System.Drawing.Point(289, 15); + this.btn_connection_status.Name = "btn_connection_status"; + this.btn_connection_status.Size = new System.Drawing.Size(80, 40); + this.btn_connection_status.TabIndex = 5; + this.btn_connection_status.Text = "连接状态"; + this.btn_connection_status.UseVisualStyleBackColor = true; + // + // btn_set_teach_mode + // + this.btn_set_teach_mode.Location = new System.Drawing.Point(375, 15); + this.btn_set_teach_mode.Name = "btn_set_teach_mode"; + this.btn_set_teach_mode.Size = new System.Drawing.Size(62, 40); + this.btn_set_teach_mode.TabIndex = 4; + this.btn_set_teach_mode.Text = "示教模式"; + this.btn_set_teach_mode.UseVisualStyleBackColor = true; + // + // btn_get_ID + // + this.btn_get_ID.Location = new System.Drawing.Point(443, 15); + this.btn_get_ID.Name = "btn_get_ID"; + this.btn_get_ID.Size = new System.Drawing.Size(62, 40); + this.btn_get_ID.TabIndex = 3; + this.btn_get_ID.Text = "获取IO"; + this.btn_get_ID.UseVisualStyleBackColor = true; + // + // btn_get_servo_state + // + this.btn_get_servo_state.Location = new System.Drawing.Point(511, 15); + this.btn_get_servo_state.Name = "btn_get_servo_state"; + this.btn_get_servo_state.Size = new System.Drawing.Size(98, 40); + this.btn_get_servo_state.TabIndex = 2; + this.btn_get_servo_state.Text = "获取伺服状态"; + this.btn_get_servo_state.UseVisualStyleBackColor = true; + // + // btn_clear_servo_err + // + this.btn_clear_servo_err.Location = new System.Drawing.Point(615, 15); + this.btn_clear_servo_err.Name = "btn_clear_servo_err"; + this.btn_clear_servo_err.Size = new System.Drawing.Size(99, 40); + this.btn_clear_servo_err.TabIndex = 1; + this.btn_clear_servo_err.Text = "清理伺服错误"; + this.btn_clear_servo_err.UseVisualStyleBackColor = true; + // + // btn_set_servo_state + // + this.btn_set_servo_state.Location = new System.Drawing.Point(37, 15); + this.btn_set_servo_state.Name = "btn_set_servo_state"; + this.btn_set_servo_state.Size = new System.Drawing.Size(80, 40); + this.btn_set_servo_state.TabIndex = 0; + this.btn_set_servo_state.Text = "设置伺服"; + this.btn_set_servo_state.UseVisualStyleBackColor = true; + // + // TCPSeverForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.Controls.Add(this.panel1); + this.Name = "TCPSeverForm"; + this.Size = new System.Drawing.Size(892, 553); + this.panel1.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.Panel panel1; + private System.Windows.Forms.Button Sendbutton; + private System.Windows.Forms.RichTextBox sendMsg; + private System.Windows.Forms.RichTextBox richTextBox1; + private System.Windows.Forms.Button btn_set_run_mode; + private System.Windows.Forms.Button btn_servo_on; + private System.Windows.Forms.Button btn_power_off; + private System.Windows.Forms.Button btn_connection_status; + private System.Windows.Forms.Button btn_set_teach_mode; + private System.Windows.Forms.Button btn_get_ID; + private System.Windows.Forms.Button btn_get_servo_state; + private System.Windows.Forms.Button btn_clear_servo_err; + private System.Windows.Forms.Button btn_set_servo_state; + } +} diff --git a/src/XKRS.Device.TCPSever/TCPSeverForm.cs b/src/XKRS.Device.TCPSever/TCPSeverForm.cs new file mode 100644 index 0000000..d45067f --- /dev/null +++ b/src/XKRS.Device.TCPSever/TCPSeverForm.cs @@ -0,0 +1,84 @@ +using BRS.Common.Interface; +using BRS.Common.Model.Helper; +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 XKRS.Device.TCPSever +{ + [Device("TCPSever", "TCP服务器", EnumHelper.DeviceAttributeType.RunCtrl)] + public partial class TCPSeverForm : UserControl, IRunCtrl + { + #region 控件大小随窗体大小等比例缩放 + private float x;//定义当前窗体的宽度 + private float y;//定义当前窗体的高度 + private void Form1_Resize(object sender, EventArgs e) + { + float newx = (this.Width) / x; + float newy = (this.Height) / y; + setControls(newx, newy, this); + } + private void setTag(Control cons) + { + foreach (Control con in cons.Controls) + { + con.Tag = con.Width + ";" + con.Height + ";" + con.Left + ";" + con.Top + ";" + con.Font.Size; + if (con.Controls.Count > 0) + { + setTag(con); + } + } + } + private void setControls(float newx, float newy, Control cons) + { + try + { + //遍历窗体中的控件,重新设置控件的值 + foreach (Control con in cons.Controls) + { + //获取控件的Tag属性值,并分割后存储字符串数组 + if (con.Tag != null) + { + string[] mytag = con.Tag.ToString().Split(new char[] { ';' }); + //根据窗体缩放的比例确定控件的值 + con.Width = Convert.ToInt32(System.Convert.ToSingle(mytag[0]) * newx);//宽度 + con.Height = Convert.ToInt32(System.Convert.ToSingle(mytag[1]) * newy);//高度 + con.Left = Convert.ToInt32(System.Convert.ToSingle(mytag[2]) * newx);//左边距 + con.Top = Convert.ToInt32(System.Convert.ToSingle(mytag[3]) * newy);//顶边距 + Single currentSize = System.Convert.ToSingle(mytag[4]) * newy;//字体大小 + con.Font = new Font(con.Font.Name, currentSize, con.Font.Style, con.Font.Unit); + if (con.Controls.Count > 0) + { + setControls(newx, newy, con); + } + } + } + } + catch (Exception ex) + { + Console.WriteLine(ex.Message); + } + } + #endregion + public TCPSeverForm(KawasakiTCPSeverRobotDriver kawasakiRobotDriver) + { + InitializeComponent(); + + } + public IDevice Device { get; set; } + public KawasakiTCPSeverRobotDriver KawasakiTCPSeverRobotDriver + { + get { return Device as KawasakiTCPSeverRobotDriver; } + } + private void Sendbutton_Click(object sender, EventArgs e) + { + + } + } +} diff --git a/src/BRS.Process.A020/UI/ControlSet.resx b/src/XKRS.Device.TCPSever/TCPSeverForm.resx similarity index 100% rename from src/BRS.Process.A020/UI/ControlSet.resx rename to src/XKRS.Device.TCPSever/TCPSeverForm.resx diff --git a/src/XKRS.Device.TCPSever/XKRS.Device.TCPSever.csproj b/src/XKRS.Device.TCPSever/XKRS.Device.TCPSever.csproj new file mode 100644 index 0000000..98caf3b --- /dev/null +++ b/src/XKRS.Device.TCPSever/XKRS.Device.TCPSever.csproj @@ -0,0 +1,85 @@ + + + + + Debug + AnyCPU + {91739E90-6A8E-433D-B244-5325F8848064} + Library + XKRS.Device.TCPSever + XKRS.Device.TCPSever + v4.6.1 + 512 + true + true + + + + AnyCPU + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + AnyCPU + pdbonly + true + ..\Release\ + DEBUG;TRACE + prompt + 4 + + + + + + + + + + + + + UserControl + + + TCPSeverForm.cs + + + + + ..\..\packages\STTech.BytesIO.Core.2.9.3\lib\net45\STTech.BytesIO.Core.dll + + + ..\..\packages\STTech.BytesIO.Tcp.2.9.3\lib\net45\STTech.BytesIO.Tcp.dll + + + ..\..\packages\STTech.CodePlus.1.4.0\lib\net45\STTech.CodePlus.dll + + + + + + + + + + {987308DD-8BAA-463A-94E2-77D62E01A5BF} + BRS.Common.Device + + + {1A3CBFE7-3F78-42C3-95C5-10360450DBEA} + BRS.Common.Model + + + + + TCPSeverForm.cs + + + + \ No newline at end of file diff --git a/src/XKRS.Device.TCPSever/packages.config b/src/XKRS.Device.TCPSever/packages.config new file mode 100644 index 0000000..97cb8fd --- /dev/null +++ b/src/XKRS.Device.TCPSever/packages.config @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file