/// <summary> /// Can通讯初始化 /// </summary> public void CanInit(IntPtr hwnd) { m_nBTR0 = 0x03; m_nBTR1 = 0x1C; m_nAcpCode = 0; m_nAcpMask = 255; m_nIntMask = 0; m_nOutCtrlCode = 250; byte[] DeviceName = Encoding.ASCII.GetBytes(m_strDevName); CanBusApi.CANPortClose(m_nPort); if (CanBusApi.CANSelectDevice(hwnd, 0, ref m_nDevNum, DeviceName) != 0) { } if (CanBusApi.CANPortOpen((UInt16)m_nDevNum, ref m_nPort, ref m_nHostID, ref m_nPreBaudRate) != 0) { MessageBox.Show("CAN port open error!", "Error"); } if (CanBusApi.CANSetProtocolType(m_nPort, 0) != 0) { MessageBox.Show("CAN Set Protocol Type error!", "Error"); CanBusApi.CANPortClose(m_nPort); } if (CanBusApi.CANHwReset(m_nPort) != 0) { MessageBox.Show("CAN port HW Reset error!", "Error"); CanBusApi.CANPortClose(m_nPort); } if (CanBusApi.CANInit(m_nPort, m_nBTR0, m_nBTR1, (byte)m_nIntMask) != 0) { MessageBox.Show("CAN port init error!", "Error"); CanBusApi.CANPortClose(m_nPort); } if (CanBusApi.CANSetOutCtrl(m_nPort, m_nOutCtrlCode) != 0) { MessageBox.Show("CAN set out ctrl code error!", "Error"); CanBusApi.CANPortClose(m_nPort); } if (CanBusApi.CANSetAcp(m_nPort, m_nAcpCode, m_nAcpMask) != 0) { MessageBox.Show("CAN set acp code error!", "Error"); CanBusApi.CANPortClose(m_nPort); } if (CanBusApi.CANSetBaud(m_nPort, m_nBTR0, m_nBTR1) != 0) { MessageBox.Show("CAN set baud rate error!", "Error"); CanBusApi.CANPortClose(m_nPort); } if (CanBusApi.CANSetNormal(m_nPort) != 0) { MessageBox.Show("CAN set normal error!", "Error"); CanBusApi.CANPortClose(m_nPort); } CanBusApi.CANEnableEvent(m_nPort, 1); CanBusApi.CANEnableRxInt(m_nPort); m_strDevName = Encoding.ASCII.GetString(DeviceName); }