using GTN; using gts; using Rs.Framework; using Rs.Motion.GugaoEcat; using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Rs.Motion { public class IoManager { private short apiResult = 0; List ioList = new List(); Dictionary ioDic = new Dictionary(); private List ioCards = new List(); private IoManager() { } private static IoManager instance; public static IoManager Instance { get { if(instance==null) instance = new IoManager(); return instance; } } public List GetCards() { return ioCards; } public void Init() { ECatIOCard card1 = null; ECatIOCard cardIn2= null; ////第一张卡 string filename = "config/motion/io/ecatio_5_32_0.xml"; //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); //} ////第二张卡 // 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_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); //} GLinkIOCard iocard = null; filename = "config/motion/io/glinkio.xml"; if (!File.Exists(filename)) { iocard = new GLinkIOCard(); iocard.Name = "GLink0"; iocard.CardType = 0; iocard.IsEtherCat = false; iocard.Init(16, 16, 0); bool suc = XmlSerializerHelper.Instance.Serialize(filename, iocard); } else XmlSerializerHelper.Instance.Deserialize(filename, out iocard); if (iocard != null) { iocard.Vender = "Gugao"; ioCards.Add(iocard); //foreach (var item in iocard.DIn) //{ // item.IsReverse = false; //} //foreach (var item in iocard.DOut) //{ // item.IsReverse = true; //} Add(iocard); } } void Add(IIOCard card) { foreach (IIO eCatIO in card.DOut) { eCatIO.Card = card; if (ioDic.ContainsKey(eCatIO.Name)) continue; ioDic.Add(eCatIO.Name, eCatIO); } foreach (IIO eCatIO in card.DIn) { eCatIO.Card = card; ioDic.Add(eCatIO.Name, eCatIO); } } public short ReadIn(string name) { if(ioDic.ContainsKey(name)) { IIO io = ioDic[name]; if(io.Card.CardType==1)//总线 { 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 { GLinkIO eio = (GLinkIO)io; 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); return pValue; } } } return -1; } public short ReadOut(string name) { if (ioDic.ContainsKey(name)) { IIO io = ioDic[name]; if (io.Card.CardType==1) { 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_pulse.GT_GetDo(io.CardID, mc_pulse.MC_GPO, out Int32 value); if (apiResult == 0) { byte pValue = (byte)(~(value >> eio.Index) & 0x01); return pValue; } } } return -1; } public short WriteOut(string name,byte value) { //mc_ecat.GTN_SetDoBit(1, mc_ecat.MC_GPO, 1, 0); //mc_ecat.GTN_GetDo(1, mc_ecat.MC_GPO, out Int32 aaa); //mc_ecat.GTN_GetDi(1, mc_ecat.MC_GPI, out int ppp); if (ioDic.ContainsKey(name)) { IIO io = ioDic[name]; if(io.IsReverse) { value = (byte)(~(value & 0x01) & 0x01);//取反最后一位 } if(io.Card.CardType==1) { 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_pulse.GT_SetDoBit(gio.CardID, mc_pulse.MC_GPO, (short)(gio.Index + 1), value); } } return -1; } } }