CAN驱动还原(未做修改)
This commit is contained in:
@@ -21,7 +21,7 @@ namespace ZLGUSBCANFD
|
|||||||
// 每个通道分配独立的 DBC 引擎句柄与锁,彻底解决台架间DBC冲突与锁竞争
|
// 每个通道分配独立的 DBC 引擎句柄与锁,彻底解决台架间DBC冲突与锁竞争
|
||||||
private readonly uint[] _dbcHandles;
|
private readonly uint[] _dbcHandles;
|
||||||
private readonly bool[] _isDbcLoadedArray;
|
private readonly bool[] _isDbcLoadedArray;
|
||||||
private readonly object[] _channelLocks; // 通道级细粒度锁
|
private readonly object[] _channelLocks; // 通道级细粒度锁
|
||||||
|
|
||||||
// 异步高性能接收线程控制
|
// 异步高性能接收线程控制
|
||||||
private volatile bool _isRunning = false;
|
private volatile bool _isRunning = false;
|
||||||
@@ -358,6 +358,18 @@ namespace ZLGUSBCANFD
|
|||||||
/// <param name="循环间隔毫秒">0 = 只发送一次;>0 = 按指定间隔循环发送(毫秒)</param>
|
/// <param name="循环间隔毫秒">0 = 只发送一次;>0 = 按指定间隔循环发送(毫秒)</param>
|
||||||
/// <param name="是否使用CANFD">1 = CANFD,0 = CAN</param>
|
/// <param name="是否使用CANFD">1 = CANFD,0 = CAN</param>
|
||||||
/// <returns>是否成功启动/发送</returns>
|
/// <returns>是否成功启动/发送</returns>
|
||||||
|
public virtual bool 发送DBC定义报文(
|
||||||
|
uint 通道号,
|
||||||
|
uint 帧ID,
|
||||||
|
Dictionary<string, double> 信号物理值字典,
|
||||||
|
int 循环间隔毫秒 = 0,
|
||||||
|
int 是否使用CANFD = 1)
|
||||||
|
{
|
||||||
|
if (通道号 >= _maxChannels || _channelHandles[通道号] == IntPtr.Zero) return false;
|
||||||
|
if (!_isDbcLoadedArray[通道号]) throw new InvalidOperationException($"通道 {通道号} 的 DBC 协议未加载,无法执行打包发送指令。");
|
||||||
|
if (循环间隔毫秒 < 0) throw new ArgumentOutOfRangeException(nameof(循环间隔毫秒), "循环间隔必须大于或等于 0。");
|
||||||
|
if (信号物理值字典 == null || 信号物理值字典.Count == 0)
|
||||||
|
throw new ArgumentException("信号物理值字典不能为空。", nameof(信号物理值字典));
|
||||||
|
|
||||||
if (循环间隔毫秒 == 0)
|
if (循环间隔毫秒 == 0)
|
||||||
{
|
{
|
||||||
@@ -607,7 +619,7 @@ namespace ZLGUSBCANFD
|
|||||||
/// <param name="物理值">要写入的实际物理数值</param>
|
/// <param name="物理值">要写入的实际物理数值</param>
|
||||||
/// <param name="循环发送间隔毫秒">0 = 单次发送;>0 = 周期循环发送(单位毫秒)</param>
|
/// <param name="循环发送间隔毫秒">0 = 单次发送;>0 = 周期循环发送(单位毫秒)</param>
|
||||||
/// <returns>操作是否成功</returns>
|
/// <returns>操作是否成功</returns>
|
||||||
public virtual bool 设置报文(uint 通道号, string 帧IDStr, string 信号名称, double 物理值, int 循环发送间隔毫秒 = 0, bool 直接发送=false)
|
public virtual bool 设置报文(uint 通道号, string 帧IDStr, string 信号名称, double 物理值, int 循环发送间隔毫秒 = 0, bool 直接发送 = false)
|
||||||
{
|
{
|
||||||
if (!TryParseFrameId(帧IDStr, out uint 帧ID))
|
if (!TryParseFrameId(帧IDStr, out uint 帧ID))
|
||||||
{
|
{
|
||||||
@@ -865,7 +877,7 @@ namespace ZLGUSBCANFD
|
|||||||
}
|
}
|
||||||
finally
|
finally
|
||||||
{
|
{
|
||||||
|
|
||||||
Marshal.FreeHGlobal(ptrDbcMsg);
|
Marshal.FreeHGlobal(ptrDbcMsg);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user