From 65387f6f9bed29576df314de6e2c917dc289b783 Mon Sep 17 00:00:00 2001 From: lhiven <236881222@qq.com> Date: Wed, 7 Jun 2023 09:07:21 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E5=AF=B9=E5=9B=BA=E9=AB=98?= =?UTF-8?q?=E8=84=89=E5=86=B2=E5=8D=A1IO=E7=9A=84=E6=94=AF=E6=8C=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Rs.Motion/GugaoEcat/ECatIO.cs | 12 +- Rs.Motion/IoManager.cs | 294 +++++++++++++++++++--------------- 2 files changed, 173 insertions(+), 133 deletions(-) diff --git a/Rs.Motion/GugaoEcat/ECatIO.cs b/Rs.Motion/GugaoEcat/ECatIO.cs index 9075c3f..75fbffa 100644 --- a/Rs.Motion/GugaoEcat/ECatIO.cs +++ b/Rs.Motion/GugaoEcat/ECatIO.cs @@ -30,7 +30,7 @@ namespace Rs.Motion.GugaoEcat /// public bool IsEtherCat { get; set; } = true; - public virtual void Init(ushort inCount, ushort outCount, ushort slaveNo) + public virtual void Init(ushort inCount, ushort outCount, ushort slaveNo,short cardID=0) { } @@ -48,7 +48,7 @@ namespace Rs.Motion.GugaoEcat } - public override void Init(ushort inCount, ushort outCount, ushort slaveNo) + public override void Init(ushort inCount, ushort outCount, ushort slaveNo, short cardID = 0) { ushort i = 0; for (; i < outCount; i++) @@ -78,13 +78,14 @@ namespace Rs.Motion.GugaoEcat [XmlInclude(typeof(GLinkIO))] public class GLinkIOCard: IIOCard { - public override void Init(ushort inCount, ushort outCount, ushort slaveNo) + public override void Init(ushort inCount, ushort outCount, ushort slaveNo,short cardID=0) { for (ushort i = 0; i < outCount; i++) { GLinkIO io = new GLinkIO(); io.Name = "Out" + i+ "_"+ slaveNo; io.Index = i; + io.CardID = cardID; DOut.Add(io); } for (ushort i = 0; i < inCount; i++) @@ -92,6 +93,7 @@ namespace Rs.Motion.GugaoEcat GLinkIO io = new GLinkIO(); io.Name = "In" + i + "_" + slaveNo; io.Index = i; + io.CardID = cardID; DIn.Add(io); } } @@ -100,6 +102,7 @@ namespace Rs.Motion.GugaoEcat public class IIO { + public short CardID { get; set; } = 0; public ushort Index { get; set; } @@ -111,7 +114,8 @@ namespace Rs.Motion.GugaoEcat } public class GLinkIO:IIO { - + [XmlElement] + public short CardID { get; set; } = 0; } public class ECatIO:IIO diff --git a/Rs.Motion/IoManager.cs b/Rs.Motion/IoManager.cs index 4b983ff..2aa845a 100644 --- a/Rs.Motion/IoManager.cs +++ b/Rs.Motion/IoManager.cs @@ -1,4 +1,5 @@ using GTN; +using gts; using Rs.Framework; using Rs.Motion.GugaoEcat; using System; @@ -39,117 +40,117 @@ namespace Rs.Motion ECatIOCard card1 = null; ECatIOCard cardIn2= null; - //第一张卡 + ////第一张卡 string filename = "config/motion/io/ecatio_5_32_0.xml"; - if (!File.Exists(filename)) - { - cardIn2 = new ECatIOCard(); + //if (!File.Exists(filename)) + //{ + // cardIn2 = new ECatIOCard(); - cardIn2.Name = "EC4-3200A(1号卡)"; - cardIn2.Init(32, 0, 5); - bool suc = XmlSerializerHelper.Instance.Serialize(filename, cardIn2); - } - else - XmlSerializerHelper.Instance.Deserialize(filename, out cardIn2); - if (cardIn2 != null) - { - cardIn2.Vender = "Gugao"; - ioCards.Add(cardIn2); - Add(cardIn2); - } + // cardIn2.Name = "EC4-3200A(1号卡)"; + // cardIn2.Init(32, 0, 5); + // bool suc = XmlSerializerHelper.Instance.Serialize(filename, cardIn2); + //} + //else + // XmlSerializerHelper.Instance.Deserialize(filename, out cardIn2); + //if (cardIn2 != null) + //{ + // cardIn2.Vender = "Gugao"; + // ioCards.Add(cardIn2); + // Add(cardIn2); + //} - //第二张卡 + ////第二张卡 - filename = "config/motion/io/ecatio_6_0_32.xml"; - if (!File.Exists(filename)) - { - card1 = new ECatIOCard(); - card1.Name = "EC4-3200A(1号卡)"; - card1.Init(0, 32, 6); - bool suc = XmlSerializerHelper.Instance.Serialize(filename, card1); - } - else - XmlSerializerHelper.Instance.Deserialize(filename, out card1); - if (card1 != null) - { - card1.Vender = "Gugao"; - ioCards.Add(card1); - Add(card1); - } + // filename = "config/motion/io/ecatio_6_0_32.xml"; + //if (!File.Exists(filename)) + //{ + // card1 = new ECatIOCard(); + // card1.Name = "EC4-3200A(1号卡)"; + // card1.Init(0, 32, 6); + // bool suc = XmlSerializerHelper.Instance.Serialize(filename, card1); + //} + //else + // XmlSerializerHelper.Instance.Deserialize(filename, out card1); + //if (card1 != null) + //{ + // card1.Vender = "Gugao"; + // ioCards.Add(card1); + // Add(card1); + //} - //第三张卡 + ////第三张卡 - filename = "config/motion/io/ecatio_7_16_16.xml"; - if (!File.Exists(filename)) - { - card1 = new ECatIOCard(); - card1.Name = "EC4-1616(3号卡)"; - card1.Init(16, 16, 7); - bool suc = XmlSerializerHelper.Instance.Serialize(filename, card1); - } - else - XmlSerializerHelper.Instance.Deserialize(filename, out card1); - if (card1 != null) - { - card1.Vender = "Gugao"; - ioCards.Add(card1); - Add(card1); - } + //filename = "config/motion/io/ecatio_7_16_16.xml"; + //if (!File.Exists(filename)) + //{ + // card1 = new ECatIOCard(); + // card1.Name = "EC4-1616(3号卡)"; + // card1.Init(16, 16, 7); + // bool suc = XmlSerializerHelper.Instance.Serialize(filename, card1); + //} + //else + // XmlSerializerHelper.Instance.Deserialize(filename, out card1); + //if (card1 != null) + //{ + // card1.Vender = "Gugao"; + // ioCards.Add(card1); + // Add(card1); + //} - //第四张卡 + ////第四张卡 - filename = "config/motion/io/ecatio_8_32_0.xml"; - if (!File.Exists(filename)) - { - card1 = new ECatIOCard(); - card1.Name = "EC4-3200A(4号卡)"; - card1.Init(32, 0, 8); - bool suc = XmlSerializerHelper.Instance.Serialize(filename, card1); - } - else - XmlSerializerHelper.Instance.Deserialize(filename, out card1); - if (card1 != null) - { - card1.Vender = "Gugao"; - ioCards.Add(card1); - Add(card1); - } - //第五张卡 - filename = "config/motion/io/ecatio_9_0_32.xml"; - if (!File.Exists(filename)) - { - card1 = new ECatIOCard(); - card1.Name = "EC4-0032(5号卡)"; - card1.Init(0, 32, 9); - bool suc = XmlSerializerHelper.Instance.Serialize(filename, card1); - } - else - XmlSerializerHelper.Instance.Deserialize(filename, out card1); - if (card1 != null) - { - card1.Vender = "Gugao"; - ioCards.Add(card1); - Add(card1); - } + //filename = "config/motion/io/ecatio_8_32_0.xml"; + //if (!File.Exists(filename)) + //{ + // card1 = new ECatIOCard(); + // card1.Name = "EC4-3200A(4号卡)"; + // card1.Init(32, 0, 8); + // bool suc = XmlSerializerHelper.Instance.Serialize(filename, card1); + //} + //else + // XmlSerializerHelper.Instance.Deserialize(filename, out card1); + //if (card1 != null) + //{ + // card1.Vender = "Gugao"; + // ioCards.Add(card1); + // Add(card1); + //} + ////第五张卡 + //filename = "config/motion/io/ecatio_9_0_32.xml"; + //if (!File.Exists(filename)) + //{ + // card1 = new ECatIOCard(); + // card1.Name = "EC4-0032(5号卡)"; + // card1.Init(0, 32, 9); + // bool suc = XmlSerializerHelper.Instance.Serialize(filename, card1); + //} + //else + // XmlSerializerHelper.Instance.Deserialize(filename, out card1); + //if (card1 != null) + //{ + // card1.Vender = "Gugao"; + // ioCards.Add(card1); + // Add(card1); + //} - //第六张卡 - filename = "config/motion/io/ecatio_10_16_16.xml"; - if (!File.Exists(filename)) - { - card1 = new ECatIOCard(); - card1.Name = "EC4-1616(6号卡)"; - card1.Init(16, 16, 10); - bool suc = XmlSerializerHelper.Instance.Serialize(filename, card1); - } - else - XmlSerializerHelper.Instance.Deserialize(filename, out card1); - if (card1 != null) - { - card1.Vender = "Gugao"; - ioCards.Add(card1); - Add(card1); - } + ////第六张卡 + //filename = "config/motion/io/ecatio_10_16_16.xml"; + //if (!File.Exists(filename)) + //{ + // card1 = new ECatIOCard(); + // card1.Name = "EC4-1616(6号卡)"; + // card1.Init(16, 16, 10); + // bool suc = XmlSerializerHelper.Instance.Serialize(filename, card1); + //} + //else + // XmlSerializerHelper.Instance.Deserialize(filename, out card1); + //if (card1 != null) + //{ + // card1.Vender = "Gugao"; + // ioCards.Add(card1); + // Add(card1); + //} GLinkIOCard iocard = null; @@ -159,6 +160,8 @@ namespace Rs.Motion { iocard = new GLinkIOCard(); iocard.Name = "GLink0"; + iocard.CardType = 0; + iocard.IsEtherCat = false; iocard.Init(16, 16, 0); bool suc = XmlSerializerHelper.Instance.Serialize(filename, iocard); } @@ -168,15 +171,15 @@ namespace Rs.Motion { iocard.Vender = "Gugao"; ioCards.Add(iocard); - foreach (var item in iocard.DIn) - { - item.IsReverse = false; - } + //foreach (var item in iocard.DIn) + //{ + // item.IsReverse = false; + //} - foreach (var item in iocard.DOut) - { - item.IsReverse = true; - } + //foreach (var item in iocard.DOut) + //{ + // item.IsReverse = true; + //} Add(iocard); } } @@ -203,17 +206,30 @@ namespace Rs.Motion if(ioDic.ContainsKey(name)) { IIO io = ioDic[name]; - if(io.Card.Vender=="Gugao"&&io.Card.IsEtherCat) + if(io.Card.CardType==1)//总线 { - ECatIO eio = (ECatIO)io; - apiResult = mc_ecat.GTN_EcatIOBitReadInput(eio.Core, eio.SlaveNo, eio.Offset, eio.Index, out byte pValue); - if (apiResult == 0) - return pValue; + if(io.Card.IsEtherCat) + { + ECatIO eio = (ECatIO)io; + apiResult = mc_ecat.GTN_EcatIOBitReadInput(eio.Core, eio.SlaveNo, eio.Offset, eio.Index, out byte pValue); + if (apiResult == 0) + return pValue; + } + else + { + GLinkIO eio = (GLinkIO)io; + apiResult = mc_ecat.GTN_GetDi(1, mc_ecat.MC_GPI, out Int32 value); + if (apiResult == 0) + { + byte pValue = (byte)(~(value >> eio.Index) & 0x01); + return pValue; + } + } } - else if(io.Card.Vender == "Gugao" && !io.Card.IsEtherCat) + else { GLinkIO eio = (GLinkIO)io; - apiResult = mc_ecat.GTN_GetDi(1, mc_ecat.MC_GPI, out Int32 value); + apiResult = mc_pulse.GT_GetDi((short)io.CardID,mc_pulse.MC_GPI, out int value); if (apiResult == 0) { byte pValue = (byte)(~(value >> eio.Index) & 0x01); @@ -230,18 +246,30 @@ namespace Rs.Motion if (ioDic.ContainsKey(name)) { IIO io = ioDic[name]; - if (io.Card.Vender == "Gugao" && io.Card.IsEtherCat) + if (io.Card.CardType==1) { - ECatIO eio = (ECatIO)io; - apiResult = mc_ecat.GTN_EcatIOBitReadOutput(eio.Core, eio.SlaveNo, eio.Offset, eio.Index, out byte pValue); - if (apiResult == 0) - return pValue; + if(io.Card.IsEtherCat) + { + ECatIO eio = (ECatIO)io; + apiResult = mc_ecat.GTN_EcatIOBitReadOutput(eio.Core, eio.SlaveNo, eio.Offset, eio.Index, out byte pValue); + if (apiResult == 0) + return pValue; + } + else + { + GLinkIO eio = (GLinkIO)io; + apiResult = mc_ecat.GTN_GetDo(1, mc_ecat.MC_GPO, out Int32 value); + if (apiResult == 0) + { + byte pValue = (byte)(~(value >> eio.Index) & 0x01); + return pValue; + } + } } else if (io.Card.Vender == "Gugao" && !io.Card.IsEtherCat) { GLinkIO eio = (GLinkIO)io; - apiResult = mc_ecat.GTN_GetDo(1, mc_ecat.MC_GPO, out Int32 value); - + apiResult = mc_pulse.GT_GetDo(io.CardID, mc_pulse.MC_GPO, out Int32 value); if (apiResult == 0) { byte pValue = (byte)(~(value >> eio.Index) & 0x01); @@ -269,17 +297,25 @@ namespace Rs.Motion { value = (byte)(~(value & 0x01) & 0x01);//取反最后一位 } - if(io.Card.Vender=="Gugao" && io.Card.IsEtherCat) + if(io.Card.CardType==1) { - ECatIO eio = (ECatIO)io; - apiResult = mc_ecat.GTN_EcatIOBitWriteOutput(eio.Core, eio.SlaveNo, eio.Offset, (short)eio.Index, value); - if (apiResult == 0) - return 0; + if(io.Card.IsEtherCat) + { + ECatIO eio = (ECatIO)io; + apiResult = mc_ecat.GTN_EcatIOBitWriteOutput(eio.Core, eio.SlaveNo, eio.Offset, (short)eio.Index, value); + if (apiResult == 0) + return 0; + } + else + { + GLinkIO gio = (GLinkIO)io; + mc_ecat.GTN_SetDoBit(1, mc_ecat.MC_GPO, (short)(gio.Index + 1), value); + } } else if (io.Card.Vender == "Gugao" && !io.Card.IsEtherCat) { GLinkIO gio = (GLinkIO)io; - mc_ecat.GTN_SetDoBit(1, mc_ecat.MC_GPO, (short)(gio.Index+1), value); + mc_pulse.GT_SetDoBit(gio.CardID, mc_pulse.MC_GPO, (short)(gio.Index + 1), value); } } return -1;