|
|
@@ -19,6 +19,7 @@ namespace YSAI.Can
|
|
|
/// 锁
|
|
|
/// </summary>
|
|
|
private static readonly object Lock = new object();
|
|
|
+
|
|
|
/// <summary>
|
|
|
/// 自身对象集合
|
|
|
/// </summary>
|
|
|
@@ -53,6 +54,7 @@ namespace YSAI.Can
|
|
|
}
|
|
|
return exp;
|
|
|
}
|
|
|
+
|
|
|
/// <summary>
|
|
|
/// 构造函数
|
|
|
/// </summary>
|
|
|
@@ -66,18 +68,22 @@ namespace YSAI.Can
|
|
|
/// 基础数据
|
|
|
/// </summary>
|
|
|
private CanData.Basics basics { get; set; }
|
|
|
- /// <summary>
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
/// 为方法返回的执行状态信息,可以用来判断方法是否成功执行
|
|
|
/// </summary>
|
|
|
- Canlib.canStatus Status;
|
|
|
+ private Canlib.canStatus Status;
|
|
|
+
|
|
|
/// <summary>
|
|
|
/// 句柄
|
|
|
/// </summary>
|
|
|
- int Handle = 0;
|
|
|
+ private int Handle = 0;
|
|
|
+
|
|
|
/// <summary>
|
|
|
/// Can当前状态
|
|
|
/// </summary>
|
|
|
private bool CanState = false;
|
|
|
+
|
|
|
/// <summary>
|
|
|
/// 写入
|
|
|
/// </summary>
|
|
|
@@ -136,10 +142,12 @@ namespace YSAI.Can
|
|
|
{
|
|
|
return Task.Run(() => Write(Values));
|
|
|
}
|
|
|
+
|
|
|
/// <summary>
|
|
|
/// 虚拟地址
|
|
|
/// </summary>
|
|
|
private VirtualAddressManage VAM = new VirtualAddressManage();
|
|
|
+
|
|
|
public void Dispose()
|
|
|
{
|
|
|
Off();
|
|
|
@@ -147,6 +155,7 @@ namespace YSAI.Can
|
|
|
GC.SuppressFinalize(this);
|
|
|
ThisObjList.Remove(this);
|
|
|
}
|
|
|
+
|
|
|
public OperateResult Off()
|
|
|
{
|
|
|
Depart("Off");
|
|
|
@@ -185,10 +194,12 @@ namespace YSAI.Can
|
|
|
return Break("Off", false, ex.Message, Exception: ex);
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
public Task<OperateResult> OffAsync()
|
|
|
{
|
|
|
return Task.Run(() => Off());
|
|
|
}
|
|
|
+
|
|
|
public OperateResult On()
|
|
|
{
|
|
|
Depart("On");
|
|
|
@@ -230,7 +241,6 @@ namespace YSAI.Can
|
|
|
{
|
|
|
return Break("On", false, "设置CAN通道波特率失败");
|
|
|
}
|
|
|
-
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
@@ -242,10 +252,12 @@ namespace YSAI.Can
|
|
|
return Break("On", false, ex.Message, Exception: ex);
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
public Task<OperateResult> OnAsync()
|
|
|
{
|
|
|
return Task.Run(() => On());
|
|
|
}
|
|
|
+
|
|
|
public OperateResult Read(Address address)
|
|
|
{
|
|
|
Depart("Read");
|
|
|
@@ -258,7 +270,6 @@ namespace YSAI.Can
|
|
|
|
|
|
foreach (var item in address.AddressArray)
|
|
|
{
|
|
|
-
|
|
|
//是不是虚拟地址
|
|
|
bool IsVA = false;
|
|
|
//初始化虚拟地址
|
|
|
@@ -284,11 +295,10 @@ namespace YSAI.Can
|
|
|
Status = Canlib.canRead(Handle, out id, msg, out dlc, out flag, out time);
|
|
|
if (Status.Equals(Canlib.canStatus.canOK) && dlc > 0)
|
|
|
{
|
|
|
- msg = ByteTool.ByteTrimEnd(msg);
|
|
|
+ msg = msg.TrimEnd();
|
|
|
|
|
|
CanData.ResultData candata = new CanData.ResultData() { CanID = id, ByteData = msg, StrByteData = ByteTool.HexToStr(msg), Flag = flag, Length = dlc, Time = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc).AddMilliseconds(time).ToLocalTime() };
|
|
|
|
|
|
-
|
|
|
string? Value = candata.ToJson();
|
|
|
|
|
|
//数据处理
|
|
|
@@ -296,7 +306,6 @@ namespace YSAI.Can
|
|
|
|
|
|
//数据添加
|
|
|
param.AddOrUpdate(item.AddressName, addressValue, (k, v) => addressValue);
|
|
|
-
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
@@ -307,7 +316,6 @@ namespace YSAI.Can
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
}
|
|
|
if (param.Count > 0)
|
|
|
{
|
|
|
@@ -328,14 +336,17 @@ namespace YSAI.Can
|
|
|
return Break("Read", false, ex.Message, Exception: ex);
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
public Task<OperateResult> ReadAsync(Address address)
|
|
|
{
|
|
|
return Task.Run(() => Read(address));
|
|
|
}
|
|
|
+
|
|
|
public Task<OperateResult> WriteAsync<V>(ConcurrentDictionary<string, V> Values)
|
|
|
{
|
|
|
return Task.Run(() => Write(Values));
|
|
|
}
|
|
|
+
|
|
|
public OperateResult Write<V>(ConcurrentDictionary<string, V> Values)
|
|
|
{
|
|
|
Depart("Write");
|
|
|
@@ -354,10 +365,12 @@ namespace YSAI.Can
|
|
|
return Break("Write", false, "写入类型错误");
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
/// <summary>
|
|
|
/// 实现订阅功能
|
|
|
/// </summary>
|
|
|
private SubscribeOperate subscribeOperate;
|
|
|
+
|
|
|
public OperateResult Subscribe(Address address)
|
|
|
{
|
|
|
Depart("Subscribe");
|
|
|
@@ -391,10 +404,12 @@ namespace YSAI.Can
|
|
|
return Break("Subscribe", false, ex.Message, Exception: ex);
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
public Task<OperateResult> SubscribeAsync(Address address)
|
|
|
{
|
|
|
return Task.Run(() => Subscribe(address));
|
|
|
}
|
|
|
+
|
|
|
public OperateResult UnSubscribe(Address address)
|
|
|
{
|
|
|
Depart("UnSubscribe");
|
|
|
@@ -415,10 +430,12 @@ namespace YSAI.Can
|
|
|
return Break("UnSubscribe", false, ex.Message, Exception: ex);
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
public Task<OperateResult> UnSubscribeAsync(Address address)
|
|
|
{
|
|
|
return Task.Run(() => UnSubscribe(address));
|
|
|
}
|
|
|
+
|
|
|
/// <summary>
|
|
|
/// 事件抛出
|
|
|
/// </summary>
|