Beispiel #1
0
        public bool WriteCanMsg(uint ID, byte[] Msg)
        {
            int retrycnt = 0;

            TPCANMsg CanMsg = new TPCANMsg();

            CanMsg.ID      = Globals._NODE_ | ID;
            CanMsg.MSGTYPE = TPCANMessageType.PCAN_MESSAGE_STANDARD;

            CanMsg.LEN  = (byte)Msg.Length;
            CanMsg.DATA = new byte[8];
            Array.Copy(Msg, CanMsg.DATA, CanMsg.LEN);

            if (_IsOpen)
            {
                do
                {
                    if (PCANBasic.Write(PCANBasic.PCAN_USBBUS1, ref CanMsg) == TPCANStatus.PCAN_ERROR_OK)
                    {
                        return(true);
                    }
                    else
                    {
                        retrycnt++;
                        TPCANStatus Status = PCANBasic.GetStatus(PCANBasic.PCAN_USBBUS1);
                        //写总线异常日志


                        Thread.Sleep(10);
                    }
                } while (retrycnt < 3);
            }

            return(false);
        }
Beispiel #2
0
        private bool OpenUsbCan()
        {
            if (PCANBasic.Initialize(PCANBasic.PCAN_USBBUS1, TPCANBaudrate.PCAN_BAUD_1M) == TPCANStatus.PCAN_ERROR_OK)
            {
                if (PCANBasic.Reset(PCANBasic.PCAN_USBBUS1) == TPCANStatus.PCAN_ERROR_OK)
                {
                    return(true);
                }
            }

            return(false);
        }
Beispiel #3
0
        private void Dispose(bool fromDestructor)
        {
            if (_IsOpen)
            {
                PCANBasic.Uninitialize(PCANBasic.PCAN_USBBUS1);
            }


            if (!fromDestructor)
            {
                GC.SuppressFinalize(this);
            }
        }
Beispiel #4
0
        public bool ReadCanMsg(ref uint ID, out byte[] Msg)
        {
            if (_IsOpen)
            {
                TPCANMsg CanMsg;

                CanMsg.DATA = new byte[8];


                bool Ret = PCANBasic.Read(PCANBasic.PCAN_USBBUS1, out CanMsg) == TPCANStatus.PCAN_ERROR_OK;

                Msg = new byte[CanMsg.LEN];
                ID  = CanMsg.ID;
                Array.Copy(CanMsg.DATA, Msg, CanMsg.LEN);

                return(Ret);
            }
            else
            {
                ID  = 0;
                Msg = new byte[8];
                return(false);
            }
        }