增加对固高脉冲卡的支持

master
lhiven 3 years ago
parent 0811d5f64d
commit 19d71a3c3d

File diff suppressed because it is too large Load Diff

@ -0,0 +1,111 @@
using Rs.Framework;
using Rs.Motion.Base;
using Rs.Motion.Base.Config;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Xml.Serialization;
namespace Rs.Motion.GugaoPulse
{
public class GugaoPulseCard:ICard
{
public GugaoPulseCard(ushort cardID,ushort axisCount,string cfgName)
{
CardID= cardID;
AxisCount= axisCount;
CfgName= cfgName;
Config = new CardConfig();
}
private ushort _CardID;
/// <summary>
/// 卡编号
/// </summary>
[XmlIgnore]
public ushort CardID
{
get { return _CardID; }
set { _CardID = value; }
}
private ushort _AxisCount;
[XmlIgnore]
public ushort AxisCount
{
get { return _AxisCount; }
set { _AxisCount = value; }
}
private string _CfgName;
[XmlIgnore]
public string CfgName
{
get { return _CfgName; }
set { _CfgName = value; }
}
public override ErrorCode Init()
{
string baseDir = AppDomain.CurrentDomain.BaseDirectory;
string filePath=Path.Combine(baseDir,"Config","Motion", CfgName);
//检测文件夹是否存在,不存在则创建
if(!Directory.Exists(Path.GetDirectoryName(filePath)))
{
Directory.CreateDirectory(Path.GetDirectoryName(filePath));
}
//判断文件是否存在,如果不存在配置文件,则生成配置文件
if(!File.Exists(filePath))
{
Config.Init(CardID, AxisCount,1);
bool suc = XmlSerializerHelper.Instance.Serialize(filePath, Config);
if(!suc)
{
return ErrorCode.CardLoadConfigFail;
}
}
else
{
bool suc = XmlSerializerHelper.Instance.Deserialize<CardConfig>(filePath ,out CardConfig config);
Config=config;
}
InitAxis();
return ErrorCode.Ok;
}
public override ErrorCode Save()
{
if(Config != null)
{
string baseDir = AppDomain.CurrentDomain.BaseDirectory;
string filePath = Path.Combine(baseDir, "Config", "Motion", CfgName);
if (File.Exists(filePath))
{
File.Delete(filePath);
XmlSerializerHelper.Instance.Serialize(filePath, Config);
return ErrorCode.Ok;
}
}
return ErrorCode.CardNotInit;
}
private ErrorCode InitAxis()
{
for(int i=0; i<AxisCount; i++)
{
IAxis axis = new GugaoPulseAxis(Config.AxisConfigs[i]);
axis.Card = this;
axis.Init();
AxisIdDic.Add(axis.Config.AxisId, axis);
AxisNameDic.Add(axis.Config.AxisName, axis);
}
return ErrorCode.Ok;
}
}
}

@ -0,0 +1,87 @@
using GTN;
using gts;
using Rs.Framework;
using Rs.Motion.Base;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Net.NetworkInformation;
using System.Text;
using System.Threading.Tasks;
namespace Rs.Motion.GugaoPulse
{
/// <summary>
/// 固高脉冲卡
/// </summary>
public class GugaoPulseCardManager : ICardManager
{
/// <summary>
/// 执行底层接口的返回值
/// </summary>
private short apiResult = 0;
private short core = 1;
/// <summary>
/// 保存一共有多少张卡
/// </summary>
Dictionary<ushort,ICard> cardDic= new Dictionary<ushort,ICard>();
private GugaoPulseCardManager() {
}
private static GugaoPulseCardManager instance;
public static GugaoPulseCardManager Instance
{
get
{
if(instance==null)
{
instance = new GugaoPulseCardManager();
}
return instance;
}
}
/// <summary>
/// 同一类卡统一初始化
/// </summary>
/// <returns></returns>
public override ErrorCode Init()
{
//打开运动控制卡
apiResult = mc_pulse.GT_Open(0, 0, 1);
if(apiResult!= 0)
{
return ErrorCode.CardInitFail;
}
//清楚报警和限位
apiResult = mc_pulse.GT_ClrSts(0, 1, 8);
if (apiResult != 0)
{
return ErrorCode.Fail;
}
IsInitialized = true;
return ErrorCode.Ok;
}
public ICard GetCard(ushort cardID)
{
if(cardDic.ContainsKey(cardID)) return cardDic[cardID];
else
{
if(cardID==0)
{
ICard card = new GugaoPulseCard(cardID, 8, "gugao0.xml");
card.Init();
cardDic.Add(cardID, card);
return card;
}
}
return null;
}
}
}

@ -0,0 +1,127 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Xml.Serialization;
namespace Rs.Motion.GugaoPulse
{
public class IIOCard
{
[XmlElement]
public List<IIO> DIn { get; set; } = new List<IIO>();
[XmlElement]
public List<IIO> DOut { get; set; } = new List<IIO>();
/// <summary>
/// 0glink 1总线
/// </summary>
public int CardType { get; set; } = 0;
public string Name { get; set; } = "本地IO";
/// <summary>
/// 厂家
/// </summary>
public string Vender { get; set; } = "Gugao";
/// <summary>
/// 是否采用EtherCat通信
/// </summary>
public bool IsEtherCat { get; set; } = true;
public virtual void Init(ushort inCount, ushort outCount, ushort slaveNo)
{
}
}
/// <summary>
/// 总线卡
/// </summary>
[Serializable]
[XmlInclude(typeof(IO))]
public class ECatIOCard: IIOCard
{
public ECatIOCard()
{
}
public override void Init(ushort inCount, ushort outCount, ushort slaveNo)
{
ushort i = 0;
for (; i < outCount; i++)
{
IO io = new IO();
io.SlaveNo = slaveNo;
io.Offset = 0;
io.Index = i;
io.Name = "Out" + i+"_"+slaveNo;
DOut.Add(io);
}
for (; i < outCount + inCount; i++)
{
IO io = new IO();
io.SlaveNo = slaveNo;
io.Offset = 0;
io.Index = i;
io.Name = "In" + i + "_" + slaveNo;
DIn.Add(io);
}
}
}
/// <summary>
/// GLink卡
/// </summary>
[XmlInclude(typeof(GLinkIO))]
public class GLinkIOCard: IIOCard
{
public override void Init(ushort inCount, ushort outCount, ushort slaveNo)
{
for (ushort i = 0; i < outCount; i++)
{
GLinkIO io = new GLinkIO();
io.Name = "Out" + i+ "_"+ slaveNo;
io.Index = i;
DOut.Add(io);
}
for (ushort i = 0; i < inCount; i++)
{
GLinkIO io = new GLinkIO();
io.Name = "In" + i + "_" + slaveNo;
io.Index = i;
DIn.Add(io);
}
}
}
public class IIO
{
public ushort Index { get; set; }
public string Name { get; set; }
public bool IsReverse { get; set; } = false;
[XmlIgnore]
public IIOCard Card { get; set; }
}
public class GLinkIO:IIO
{
}
public class IO:IIO
{
[XmlElement]
public short Core { get; set; } = 1;
[XmlElement]
public ushort SlaveNo { get; set; }
[XmlElement]
public ushort Offset { get; set; }
}
}

File diff suppressed because it is too large Load Diff

@ -54,10 +54,15 @@
<Compile Include="GugaoEcat\GugaoAxis.cs" />
<Compile Include="GugaoEcat\GugaoCard.cs" />
<Compile Include="GugaoEcat\GugaoCardManager.cs" />
<Compile Include="GugaoPulse\IO.cs" />
<Compile Include="GugaoPulse\GugaoPulseAxis.cs" />
<Compile Include="GugaoPulse\GugaoPulseCard.cs" />
<Compile Include="GugaoPulse\GugaoPulseCardManager.cs" />
<Compile Include="Invoke\GugaoECat\config.cs" />
<Compile Include="Invoke\GugaoECat\gtgl500.cs" />
<Compile Include="Invoke\GugaoECat\gts.cs" />
<Compile Include="Invoke\GugaoECat\LookAheadEx.cs" />
<Compile Include="Invoke\GugaoPulse\gts.cs" />
<Compile Include="Invoke\Ztm\ZTM.cs" />
<Compile Include="IoManager.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />

Loading…
Cancel
Save