CAN驱动还原(未做修改)

This commit is contained in:
hsc
2026-07-28 14:41:46 +08:00
parent 013729003a
commit 95700bfb8c

View File

@@ -21,7 +21,7 @@ namespace ZLGUSBCANFD
// 每个通道分配独立的 DBC 引擎句柄与锁彻底解决台架间DBC冲突与锁竞争
private readonly uint[] _dbcHandles;
private readonly bool[] _isDbcLoadedArray;
private readonly object[] _channelLocks; // 通道级细粒度锁
private readonly object[] _channelLocks; // 通道级细粒度锁
// 异步高性能接收线程控制
private volatile bool _isRunning = false;
@@ -358,6 +358,18 @@ namespace ZLGUSBCANFD
/// <param name="循环间隔毫秒">0 = 只发送一次;>0 = 按指定间隔循环发送(毫秒)</param>
/// <param name="是否使用CANFD">1 = CANFD0 = CAN</param>
/// <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)
{
@@ -607,7 +619,7 @@ namespace ZLGUSBCANFD
/// <param name="物理值">要写入的实际物理数值</param>
/// <param name="循环发送间隔毫秒">0 = 单次发送;>0 = 周期循环发送(单位毫秒)</param>
/// <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))
{
@@ -865,7 +877,7 @@ namespace ZLGUSBCANFD
}
finally
{
Marshal.FreeHGlobal(ptrDbcMsg);
}
}