现场优化2

This commit is contained in:
2026-08-13 13:35:43 +08:00
parent 30f5f6f8d6
commit e392527592
4 changed files with 203 additions and 161 deletions
+14
View File
@@ -56,6 +56,12 @@ namespace ZLGUSBCANFD
/// </summary>
public event Action<uint, ZDBC.DBCMessage>? OnDbcMessageDecoded;
/// <summary>
/// 事件:当接收到任意 CAN/CANFD 原始报文时触发(不依赖 DBC,自定义报文也能收到)
/// 参数:通道号, 帧ID, 数据, 时间戳(微秒), 是否FD, 数据长度
/// </summary>
public event Action<uint, uint, byte[], ulong, bool, byte>? OnRawMessageReceived;
public ZLGCANFD(uint deviceType = 76, uint deviceIndex = 0, int maxChannels = 4,
string abitBaud = "500000", string dbitBaud = "2000000", bool enableTerminalResistance = true)
{
@@ -297,6 +303,10 @@ namespace ZLGUSBCANFD
{
IntPtr framePtr = IntPtr.Add(ptrCanBuffer, i * canStructSize);
// 触发原始报文事件(不依赖 DBC,自定义报文也能收到)
var rawData = (ZLGCAN.ZCAN_Receive_Data)Marshal.PtrToStructure(framePtr, typeof(ZLGCAN.ZCAN_Receive_Data))!;
OnRawMessageReceived?.Invoke(channelIndex, rawData.frame.can_id, rawData.frame.data, rawData.timestamp, false, rawData.frame.can_dlc);
// 只锁定当前通道的DBC句柄进行解码,高并发完全不卡顿
lock (_channelLocks[channelIndex])
{
@@ -319,6 +329,10 @@ namespace ZLGUSBCANFD
{
IntPtr framePtr = IntPtr.Add(ptrCanFDBuffer, i * canfdStructSize);
// 触发原始报文事件(不依赖 DBC,自定义报文也能收到)
var rawFdData = (ZLGCAN.ZCAN_ReceiveFD_Data)Marshal.PtrToStructure(framePtr, typeof(ZLGCAN.ZCAN_ReceiveFD_Data))!;
OnRawMessageReceived?.Invoke(channelIndex, rawFdData.frame.can_id, rawFdData.frame.data, rawFdData.timestamp, true, rawFdData.frame.len);
lock (_channelLocks[channelIndex])
{
if (_isDbcLoadedArray[channelIndex] && ZDBC.ZDBC_Decode(_dbcHandles[channelIndex], ptrDbcMsg, framePtr, 1, 1))