Exemple #1
0
        /// <summary>
        /// 发送握手指令
        /// </summary>
        public int SendShakehand(uint deviceId)
        {
            CAN_MSG_T msg = new CAN_MSG_T();

            msg.rtr     = 0;
            msg.dlen    = 2;
            msg.id      = deviceId;
            msg.data    = new byte[8];
            msg.data[0] = (byte)(0x10 + deviceId & 0x0F);
            msg.data[1] = InstructNum;
            return(CanBusApi.CANWriteFile(m_nPort, ref ready, ref msg));
        }
Exemple #2
0
 /// <summary>
 /// 开启监听Can总线的线程
 /// </summary>
 public void BeginListen()
 {
     ThreadPool.QueueUserWorkItem(o =>
     {
         CAN_MSG_T cMsg = new CAN_MSG_T();
         cMsg.data      = new byte[8];
         int returnNum  = 0;
         CanBusApi.CANReadFile(m_nPort, 1, ref cMsg, ref returnNum);
         if (returnNum > 0)
         {
             receiveData[(cMsg.data[0] >> 4) - 1].Enqueue(cMsg);
         }
     });
 }
        /// <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);
        }