增加对固高脉冲卡IO的支持

master
lhiven 2 years ago
parent c2adb918cb
commit 65387f6f9b

@ -30,7 +30,7 @@ namespace Rs.Motion.GugaoEcat
/// </summary> /// </summary>
public bool IsEtherCat { get; set; } = true; 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; ushort i = 0;
for (; i < outCount; i++) for (; i < outCount; i++)
@ -78,13 +78,14 @@ namespace Rs.Motion.GugaoEcat
[XmlInclude(typeof(GLinkIO))] [XmlInclude(typeof(GLinkIO))]
public class GLinkIOCard: IIOCard 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++) for (ushort i = 0; i < outCount; i++)
{ {
GLinkIO io = new GLinkIO(); GLinkIO io = new GLinkIO();
io.Name = "Out" + i+ "_"+ slaveNo; io.Name = "Out" + i+ "_"+ slaveNo;
io.Index = i; io.Index = i;
io.CardID = cardID;
DOut.Add(io); DOut.Add(io);
} }
for (ushort i = 0; i < inCount; i++) for (ushort i = 0; i < inCount; i++)
@ -92,6 +93,7 @@ namespace Rs.Motion.GugaoEcat
GLinkIO io = new GLinkIO(); GLinkIO io = new GLinkIO();
io.Name = "In" + i + "_" + slaveNo; io.Name = "In" + i + "_" + slaveNo;
io.Index = i; io.Index = i;
io.CardID = cardID;
DIn.Add(io); DIn.Add(io);
} }
} }
@ -100,6 +102,7 @@ namespace Rs.Motion.GugaoEcat
public class IIO public class IIO
{ {
public short CardID { get; set; } = 0;
public ushort Index { get; set; } public ushort Index { get; set; }
@ -111,7 +114,8 @@ namespace Rs.Motion.GugaoEcat
} }
public class GLinkIO:IIO public class GLinkIO:IIO
{ {
[XmlElement]
public short CardID { get; set; } = 0;
} }
public class ECatIO:IIO public class ECatIO:IIO

@ -1,4 +1,5 @@
using GTN; using GTN;
using gts;
using Rs.Framework; using Rs.Framework;
using Rs.Motion.GugaoEcat; using Rs.Motion.GugaoEcat;
using System; using System;
@ -39,117 +40,117 @@ namespace Rs.Motion
ECatIOCard card1 = null; ECatIOCard card1 = null;
ECatIOCard cardIn2= null; ECatIOCard cardIn2= null;
//第一张卡 ////第一张卡
string filename = "config/motion/io/ecatio_5_32_0.xml"; string filename = "config/motion/io/ecatio_5_32_0.xml";
if (!File.Exists(filename)) //if (!File.Exists(filename))
{ //{
cardIn2 = new ECatIOCard(); // cardIn2 = new ECatIOCard();
cardIn2.Name = "EC4-3200A(1号卡)"; // cardIn2.Name = "EC4-3200A(1号卡)";
cardIn2.Init(32, 0, 5); // cardIn2.Init(32, 0, 5);
bool suc = XmlSerializerHelper.Instance.Serialize<ECatIOCard>(filename, cardIn2); // bool suc = XmlSerializerHelper.Instance.Serialize<ECatIOCard>(filename, cardIn2);
} //}
else //else
XmlSerializerHelper.Instance.Deserialize<ECatIOCard>(filename, out cardIn2); // XmlSerializerHelper.Instance.Deserialize<ECatIOCard>(filename, out cardIn2);
if (cardIn2 != null) //if (cardIn2 != null)
{ //{
cardIn2.Vender = "Gugao"; // cardIn2.Vender = "Gugao";
ioCards.Add(cardIn2); // ioCards.Add(cardIn2);
Add(cardIn2); // Add(cardIn2);
} //}
//第二张卡 ////第二张卡
filename = "config/motion/io/ecatio_6_0_32.xml"; // filename = "config/motion/io/ecatio_6_0_32.xml";
if (!File.Exists(filename)) //if (!File.Exists(filename))
{ //{
card1 = new ECatIOCard(); // card1 = new ECatIOCard();
card1.Name = "EC4-3200A(1号卡)"; // card1.Name = "EC4-3200A(1号卡)";
card1.Init(0, 32, 6); // card1.Init(0, 32, 6);
bool suc = XmlSerializerHelper.Instance.Serialize<ECatIOCard>(filename, card1); // bool suc = XmlSerializerHelper.Instance.Serialize<ECatIOCard>(filename, card1);
} //}
else //else
XmlSerializerHelper.Instance.Deserialize<ECatIOCard>(filename, out card1); // XmlSerializerHelper.Instance.Deserialize<ECatIOCard>(filename, out card1);
if (card1 != null) //if (card1 != null)
{ //{
card1.Vender = "Gugao"; // card1.Vender = "Gugao";
ioCards.Add(card1); // ioCards.Add(card1);
Add(card1); // Add(card1);
} //}
//第三张卡 ////第三张卡
filename = "config/motion/io/ecatio_7_16_16.xml"; //filename = "config/motion/io/ecatio_7_16_16.xml";
if (!File.Exists(filename)) //if (!File.Exists(filename))
{ //{
card1 = new ECatIOCard(); // card1 = new ECatIOCard();
card1.Name = "EC4-1616(3号卡)"; // card1.Name = "EC4-1616(3号卡)";
card1.Init(16, 16, 7); // card1.Init(16, 16, 7);
bool suc = XmlSerializerHelper.Instance.Serialize<ECatIOCard>(filename, card1); // bool suc = XmlSerializerHelper.Instance.Serialize<ECatIOCard>(filename, card1);
} //}
else //else
XmlSerializerHelper.Instance.Deserialize<ECatIOCard>(filename, out card1); // XmlSerializerHelper.Instance.Deserialize<ECatIOCard>(filename, out card1);
if (card1 != null) //if (card1 != null)
{ //{
card1.Vender = "Gugao"; // card1.Vender = "Gugao";
ioCards.Add(card1); // ioCards.Add(card1);
Add(card1); // Add(card1);
} //}
//第四张卡 ////第四张卡
filename = "config/motion/io/ecatio_8_32_0.xml"; //filename = "config/motion/io/ecatio_8_32_0.xml";
if (!File.Exists(filename)) //if (!File.Exists(filename))
{ //{
card1 = new ECatIOCard(); // card1 = new ECatIOCard();
card1.Name = "EC4-3200A(4号卡)"; // card1.Name = "EC4-3200A(4号卡)";
card1.Init(32, 0, 8); // card1.Init(32, 0, 8);
bool suc = XmlSerializerHelper.Instance.Serialize<ECatIOCard>(filename, card1); // bool suc = XmlSerializerHelper.Instance.Serialize<ECatIOCard>(filename, card1);
} //}
else //else
XmlSerializerHelper.Instance.Deserialize<ECatIOCard>(filename, out card1); // XmlSerializerHelper.Instance.Deserialize<ECatIOCard>(filename, out card1);
if (card1 != null) //if (card1 != null)
{ //{
card1.Vender = "Gugao"; // card1.Vender = "Gugao";
ioCards.Add(card1); // ioCards.Add(card1);
Add(card1); // Add(card1);
} //}
//第五张卡 ////第五张卡
filename = "config/motion/io/ecatio_9_0_32.xml"; //filename = "config/motion/io/ecatio_9_0_32.xml";
if (!File.Exists(filename)) //if (!File.Exists(filename))
{ //{
card1 = new ECatIOCard(); // card1 = new ECatIOCard();
card1.Name = "EC4-0032(5号卡)"; // card1.Name = "EC4-0032(5号卡)";
card1.Init(0, 32, 9); // card1.Init(0, 32, 9);
bool suc = XmlSerializerHelper.Instance.Serialize<ECatIOCard>(filename, card1); // bool suc = XmlSerializerHelper.Instance.Serialize<ECatIOCard>(filename, card1);
} //}
else //else
XmlSerializerHelper.Instance.Deserialize<ECatIOCard>(filename, out card1); // XmlSerializerHelper.Instance.Deserialize<ECatIOCard>(filename, out card1);
if (card1 != null) //if (card1 != null)
{ //{
card1.Vender = "Gugao"; // card1.Vender = "Gugao";
ioCards.Add(card1); // ioCards.Add(card1);
Add(card1); // Add(card1);
} //}
//第六张卡 ////第六张卡
filename = "config/motion/io/ecatio_10_16_16.xml"; //filename = "config/motion/io/ecatio_10_16_16.xml";
if (!File.Exists(filename)) //if (!File.Exists(filename))
{ //{
card1 = new ECatIOCard(); // card1 = new ECatIOCard();
card1.Name = "EC4-1616(6号卡)"; // card1.Name = "EC4-1616(6号卡)";
card1.Init(16, 16, 10); // card1.Init(16, 16, 10);
bool suc = XmlSerializerHelper.Instance.Serialize<ECatIOCard>(filename, card1); // bool suc = XmlSerializerHelper.Instance.Serialize<ECatIOCard>(filename, card1);
} //}
else //else
XmlSerializerHelper.Instance.Deserialize<ECatIOCard>(filename, out card1); // XmlSerializerHelper.Instance.Deserialize<ECatIOCard>(filename, out card1);
if (card1 != null) //if (card1 != null)
{ //{
card1.Vender = "Gugao"; // card1.Vender = "Gugao";
ioCards.Add(card1); // ioCards.Add(card1);
Add(card1); // Add(card1);
} //}
GLinkIOCard iocard = null; GLinkIOCard iocard = null;
@ -159,6 +160,8 @@ namespace Rs.Motion
{ {
iocard = new GLinkIOCard(); iocard = new GLinkIOCard();
iocard.Name = "GLink0"; iocard.Name = "GLink0";
iocard.CardType = 0;
iocard.IsEtherCat = false;
iocard.Init(16, 16, 0); iocard.Init(16, 16, 0);
bool suc = XmlSerializerHelper.Instance.Serialize<GLinkIOCard>(filename, iocard); bool suc = XmlSerializerHelper.Instance.Serialize<GLinkIOCard>(filename, iocard);
} }
@ -168,15 +171,15 @@ namespace Rs.Motion
{ {
iocard.Vender = "Gugao"; iocard.Vender = "Gugao";
ioCards.Add(iocard); ioCards.Add(iocard);
foreach (var item in iocard.DIn) //foreach (var item in iocard.DIn)
{ //{
item.IsReverse = false; // item.IsReverse = false;
} //}
foreach (var item in iocard.DOut) //foreach (var item in iocard.DOut)
{ //{
item.IsReverse = true; // item.IsReverse = true;
} //}
Add(iocard); Add(iocard);
} }
} }
@ -203,17 +206,30 @@ namespace Rs.Motion
if(ioDic.ContainsKey(name)) if(ioDic.ContainsKey(name))
{ {
IIO io = ioDic[name]; IIO io = ioDic[name];
if(io.Card.Vender=="Gugao"&&io.Card.IsEtherCat) if(io.Card.CardType==1)//总线
{ {
ECatIO eio = (ECatIO)io; if(io.Card.IsEtherCat)
apiResult = mc_ecat.GTN_EcatIOBitReadInput(eio.Core, eio.SlaveNo, eio.Offset, eio.Index, out byte pValue); {
if (apiResult == 0) ECatIO eio = (ECatIO)io;
return pValue; 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; 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) if (apiResult == 0)
{ {
byte pValue = (byte)(~(value >> eio.Index) & 0x01); byte pValue = (byte)(~(value >> eio.Index) & 0x01);
@ -230,18 +246,30 @@ namespace Rs.Motion
if (ioDic.ContainsKey(name)) if (ioDic.ContainsKey(name))
{ {
IIO io = ioDic[name]; IIO io = ioDic[name];
if (io.Card.Vender == "Gugao" && io.Card.IsEtherCat) if (io.Card.CardType==1)
{ {
ECatIO eio = (ECatIO)io; if(io.Card.IsEtherCat)
apiResult = mc_ecat.GTN_EcatIOBitReadOutput(eio.Core, eio.SlaveNo, eio.Offset, eio.Index, out byte pValue); {
if (apiResult == 0) ECatIO eio = (ECatIO)io;
return pValue; 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) else if (io.Card.Vender == "Gugao" && !io.Card.IsEtherCat)
{ {
GLinkIO eio = (GLinkIO)io; 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) if (apiResult == 0)
{ {
byte pValue = (byte)(~(value >> eio.Index) & 0x01); byte pValue = (byte)(~(value >> eio.Index) & 0x01);
@ -269,17 +297,25 @@ namespace Rs.Motion
{ {
value = (byte)(~(value & 0x01) & 0x01);//取反最后一位 value = (byte)(~(value & 0x01) & 0x01);//取反最后一位
} }
if(io.Card.Vender=="Gugao" && io.Card.IsEtherCat) if(io.Card.CardType==1)
{ {
ECatIO eio = (ECatIO)io; if(io.Card.IsEtherCat)
apiResult = mc_ecat.GTN_EcatIOBitWriteOutput(eio.Core, eio.SlaveNo, eio.Offset, (short)eio.Index, value); {
if (apiResult == 0) ECatIO eio = (ECatIO)io;
return 0; 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) else if (io.Card.Vender == "Gugao" && !io.Card.IsEtherCat)
{ {
GLinkIO gio = (GLinkIO)io; 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; return -1;

Loading…
Cancel
Save