Example #1
0
        private TPCANStatus WriteFrame(uint nCAN_ID, byte byLen, bool isRemote, byte[] arrData)
        {
            TPCANMsg CANMsg;

            //TextBox txtbCurrentTextBox;

            // We create a TPCANMsg message structure
            //
            CANMsg      = new TPCANMsg();
            CANMsg.DATA = new byte[8];

            // We configurate the Message.  The ID,
            // Length of the Data, Message Type
            // and the data
            //
            CANMsg.ID      = nCAN_ID;                                // Convert.ToUInt32(txtID.Text, 16);
            CANMsg.LEN     = byLen;                                  // Convert.ToByte(nudLength.Value);
            CANMsg.MSGTYPE = TPCANMessageType.PCAN_MESSAGE_EXTENDED; // (chbExtended.Checked) ? TPCANMessageType.PCAN_MESSAGE_EXTENDED : TPCANMessageType.PCAN_MESSAGE_STANDARD;
            // If a remote frame will be sent, the data bytes are not important.
            //
            if (isRemote)
            {
                CANMsg.MSGTYPE |= TPCANMessageType.PCAN_MESSAGE_RTR;
            }
            else
            {
                Buffer.BlockCopy(arrData, 0, CANMsg.DATA, 0, byLen);
            }

            // The message is sent to the configured hardware
            //
            return(PCANBasic.Write(m_PcanHandle, ref CANMsg));
        }
Example #2
0
        public void Write(string id, byte[] data)
        {
            TPCANStatus result;
            TPCANMsg    msg;

            msg = new TPCANMsg();

            msg.ID      = Convert.ToUInt32(id, 16);
            msg.LEN     = Convert.ToByte(data.Length);
            msg.DATA    = new byte[8];
            msg.MSGTYPE = TPCANMessageType.PCAN_MESSAGE_STANDARD;

            for (int i = 0; i < msg.LEN; i++)
            {
                msg.DATA[i] = data[i];
            }

            PCANBasic.Write(mChannel, ref msg);

            result = PCANBasic.Write(mChannel, ref msg);

            if (result != TPCANStatus.PCAN_ERROR_OK)
            {
                StringBuilder strMsg = new StringBuilder(256);
                PCANBasic.GetErrorText(result, 0, strMsg);
                //Console.WriteLine(strMsg.ToString());
            }
        }
Example #3
0
        public bool Send(IMessage message)
        {
            if (this.IsOpen)
            {
                //TPCANStatus status = PCANBasic.GetStatus(m_handle);
                //while ((status & TPCANStatus.PCAN_ERROR_XMTFULL) != 0)
                //{
                //    if ((status & ~TPCANStatus.PCAN_ERROR_ANYBUSERR) != 0)
                //    {
                //        m_errorStatus = status.ToString();
                //        return false;
                //    }
                //    status = PCANBasic.GetStatus(m_handle);
                //}
                PCANMessage pmsg   = (PCANMessage)message;
                var         msg    = pmsg.NativeMessage;
                TPCANStatus result = PCANBasic.Write(m_handle, ref msg);
                pmsg.NativeMessage = msg;   // Save possibly updated message data.

                if (this.UpdateStatusFromOperation(result) == TPCANStatus.PCAN_ERROR_OK)
                {
                    return(true);
                }
            }
            return(false);
        }
Example #4
0
        private void btnSaveSettings_Click(object sender, EventArgs e)
        {
            TPCANMsg    CANMsg;
            TPCANStatus stsResult;

            CANMsg      = new TPCANMsg();
            CANMsg.DATA = new byte[8];


            //get ID from BOX
            byte MasterUnitId, NewMasterId = 0;

            try
            {
                MasterUnitId = (byte)((Convert.ToUInt16(MasterID.Text)));
                NewMasterId  = (byte)((Convert.ToUInt16(boxNewMasterId.Text)));
            }
            catch {
                MessageBox.Show("Wrong ID. Please fill in value 1-255");
                return;
            }


            //construct can ID
            byte[] bytes = { 0x18, 0x00, MasterUnitId, 0x00 };
            if (BitConverter.IsLittleEndian)
            {
                Array.Reverse(bytes);
            }
            uint id = BitConverter.ToUInt32(bytes, 0);

            // If the system architecture is little-endian (that is, little end first),
            // reverse the byte array.



            ////////////////////////////////////////////
            //create and send settings message
            ////////////////////////////////////////////
            //Max avaliable current we read from textbox  -boxAvailCurrent

            CANMsg.ID      = id;
            CANMsg.LEN     = 8;
            CANMsg.MSGTYPE = (TPCANMessageType.PCAN_MESSAGE_EXTENDED);
            CANMsg.DATA[0] = 0;                               //CAN adress Hi
            CANMsg.DATA[1] = 0;                               //CAN address LO
            CANMsg.DATA[2] = (byte)boxBaudRate.SelectedIndex; //baudrate
            CANMsg.DATA[3] = NewMasterId;                     //ID
            CANMsg.DATA[4] = 0;
            CANMsg.DATA[5] = 0;
            CANMsg.DATA[6] = 0;
            CANMsg.DATA[7] = 0;
            stsResult      = PCANBasic.Write(m_PcanHandle, ref CANMsg);
            // The message was successfully sent
            if (stsResult != TPCANStatus.PCAN_ERROR_OK)
            {
                MessageBox.Show(GetFormatedError(stsResult));
            }
        }
Example #5
0
        public void SendFrame(Frame frame)
        {
            var msg = new TPCANMsg()
            {
                DATA    = frame.Data,
                ID      = (uint)frame.Id,
                LEN     = (byte)frame.Data.Length,
                MSGTYPE = frame.Type == FrameType.Standard ? TPCANMessageType.PCAN_MESSAGE_STANDARD : TPCANMessageType.PCAN_MESSAGE_EXTENDED
            };
            var ret = PCANBasic.Write(Channel, ref msg);

            CheckError(ret);
        }
Example #6
0
        /// <summary>
        /// Sends the PCAN data.
        /// </summary>
        /// <param name="msg">The MSG.</param>
        /// <returns>TPCANStatus.</returns>
        public TPCANStatus sendPCANData(ref TPCANMsg msg)
        {
            TPCANStatus stsResult = TPCANStatus.PCAN_ERROR_BUSOFF;

            if (this.isRunning)
            {
                stsResult = PCANBasic.Write(this._canChannel, ref msg);
                if (sleepTime > 0)
                {
                    Thread.Sleep(sleepTime);
                }
            }
            return(stsResult);
        }
Example #7
0
        private void WriteRawFrame()
        {
            TPCANStatus status;
            TPCANMsg    raw_frame;

            while (!m_thread_stop)
            {
                raw_frame = m_queue_tx.Take();

                if ((status = PCANBasic.Write(m_sock, ref raw_frame)) != TPCANStatus.PCAN_ERROR_OK)
                {
                    throw new Exception(GetFormatedError(status));
                }
            }
        }
Example #8
0
        private void CAN_write_only(byte[] msg)
        {
            TPCANStatus stsResult;

            CANMsgWriteOnly         = new TPCANMsg();
            CANMsgWriteOnly.LEN     = 8;
            CANMsgWriteOnly.DATA    = msg;
            CANMsgWriteOnly.MSGTYPE = TPCANMessageType.PCAN_MESSAGE_EXTENDED;
            CANMsgWriteOnly.ID      = 418377643;

            stsResult = PCANBasic.Write(m_PcanHandle, ref CANMsgWriteOnly);
            if (stsResult != TPCANStatus.PCAN_ERROR_OK)
            {
                MessageBox.Show(Convert.ToString(stsResult));
            }
        }
Example #9
0
        void send_message_PEAK(vscp_message msg)
        {
            UInt32 id = (UInt32)((msg.priority << 26) | (msg.vclass << 16) | (msg.type << 8) | (msg.nickname));

            if (System.Convert.ToBoolean(msg.hard_mask))
            {
                id |= (1 << 25);
            }

            TPCANMsg    CANMsg;
            TPCANStatus stsResult;

            // We create a TPCANMsg message structure
            //
            CANMsg      = new TPCANMsg();
            CANMsg.DATA = new byte[8];

            // We configurate the Message.  The ID (max 0x1FF),
            // Length of the Data, Message Type (Standard in
            // this example) and die data
            //
            CANMsg.ID      = id;
            CANMsg.LEN     = (byte)msg.lenght;
            CANMsg.MSGTYPE = TPCANMessageType.PCAN_MESSAGE_EXTENDED;


            // We get so much data as the Len of the message
            //

            for (int i = 0; i < CANMsg.LEN; i++)
            {
                CANMsg.DATA[i] = Convert.ToByte(msg.data.Substring(i * 2, 1) + msg.data.Substring(i * 2 + 1, 1), 16);
            }



            // The message is sent to the configured hardware
            //
            stsResult = PCANBasic.Write(m_PcanHandle, ref CANMsg);

            // The message was successfully sent
            //
            if (stsResult != TPCANStatus.PCAN_ERROR_OK)
            {
                MessageBox.Show(GetFormatedError(stsResult));
            }
        }
Example #10
0
        private byte[] SSPC_Ctrl(byte[] msg, bool msginProg)
        {
            TPCANStatus stsResult;

            CANMsgWrite                    = new TPCANMsg();
            CANMsgWrite.LEN                = 8;
            CANMsgWrite.DATA               = new byte[8];
            CANMsgWrite.MSGTYPE            = TPCANMessageType.PCAN_MESSAGE_EXTENDED;
            CANMsgWrite.ID                 = ID1;
            CANMsgWrite.DATA               = msg;
            TPCANTimestamp.micros          = 185;
            TPCANTimestamp.millis          = 158903185;
            TPCANTimestamp.millis_overflow = 0;

            byte[] inComingData = new byte[8];

            stsResult = PCANBasic.GetStatus(m_PcanHandle);


            stsResult = PCANBasic.Write(m_PcanHandle, ref CANMsgWrite);

            if (stsResult != TPCANStatus.PCAN_ERROR_OK)
            {
                MessageBox.Show(Convert.ToString(stsResult));
            }
            else
            {
                System.Threading.Thread.Sleep(10);
                stsResult = PCANBasic.Read(m_PcanHandle, out CANMsgRead, out TPCANTimestamp);
                if (stsResult != TPCANStatus.PCAN_ERROR_OK)
                {
                    MessageBox.Show(Convert.ToString(stsResult));
                }
                else
                {
                    stsResult = PCANBasic.Read(m_PcanHandle, out CANMsgRead, out TPCANTimestamp);

                    for (int i = 0; i < CANMsgRead.LEN; i++)
                    {
                        inComingData[i] = CANMsgRead.DATA[i];
                    }
                }
            }
            return(inComingData);
        }
Example #11
0
        public TPCANStatus send(TPCANMsg CANMsg)
        {
            isBusy = true;
            //System.Threading.Thread.Sleep(1000);
            //while (InterOperationFlag.isSerialBusy != false)
            //{
            //    System.Threading.Thread.Sleep(100);
            //}
            //InterOperationFlag.isCanBusy = true;

            CANMsg.LEN     = 8;
            CANMsg.MSGTYPE = TPCANMessageType.PCAN_MESSAGE_STANDARD;
            Logger.Instance.logPacket(CANMsg.DATA, true, (int)CANMsg.ID);
            TPCANStatus temp = PCANBasic.Write(m_PcanHandle, ref CANMsg);


            //InterOperationFlag.isCanBusy = false;
            return(temp);
        }
Example #12
0
        public TPCANStatus WriteFrame(TPCANHandle CanHandle, string writeID, byte[] writeData)
        {
            //CREATE MESSAGE STRUCTURE
            TPCANMsg CANMsg = new TPCANMsg();

            CANMsg.DATA = new byte[8];

            //CONFIGURATE THE MESSAGE
            CANMsg.ID      = Convert.ToUInt32(writeID, 16);
            CANMsg.LEN     = Convert.ToByte(8);
            CANMsg.MSGTYPE = TPCANMessageType.PCAN_MESSAGE_STANDARD;

            //GET TRANSMIT DATA MESSAGE
            for (int i = 0; i < GetLengthFromDLC(CANMsg.LEN, true); i++)
            {
                CANMsg.DATA[i] = writeData[i];
            }

            return(PCANBasic.Write(CanHandle, ref CANMsg));
        }
Example #13
0
 public TPCANStatus send(TPCANMsg CANMsg)
 {
     CANMsg.LEN     = 8;
     CANMsg.MSGTYPE = TPCANMessageType.PCAN_MESSAGE_STANDARD;
     return(PCANBasic.Write(m_PcanHandle, ref CANMsg));
 }
Example #14
0
        private void boardVoltage_thread(Object source, ElapsedEventArgs e)
        {
            TPCANStatus stsResult;

            CANMsgWrite         = new TPCANMsg();
            CANMsgWrite.LEN     = 8;
            CANMsgWrite.DATA    = new byte[8];
            CANMsgWrite.MSGTYPE = TPCANMessageType.PCAN_MESSAGE_EXTENDED;
            CANMsgWrite.ID      = ID1;
            CANMsgWrite.DATA    = new byte[8];

            CANMsgRead.ID                  = 0;
            CANMsgRead.LEN                 = 8;
            TPCANTimestamp.micros          = 185;
            TPCANTimestamp.millis          = 158903185;
            TPCANTimestamp.millis_overflow = 0;
            byte counTer = 0;

            byte[] writeMSG     = new byte[8];
            byte[] dataRead     = new byte[8];
            byte[] dataReadchnl = new byte[8];
            byte   chnlCount    = 0;
            byte   groupCount   = 0;
            bool   skipProcess  = false;

            int[] dataInPUT = new int[15];

            try
            {
                CANMsgWrite.ID      = 418377632;
                CANMsgWrite.DATA[0] = 0x3D;
                CANMsgWrite.DATA[1] = 0x00;
                CANMsgWrite.DATA[2] = 0x00;
                CANMsgWrite.DATA[3] = 0x00;
                CANMsgWrite.DATA[4] = 0x00;
                CANMsgWrite.DATA[5] = 0x00;
                CANMsgWrite.DATA[6] = 0x00;
                CANMsgWrite.DATA[7] = 0x00;
            }
            catch (System.NullReferenceException)
            {
            }

            stsResult = PCANBasic.Write(m_PcanHandle, ref CANMsgWrite);

            if (stsResult != TPCANStatus.PCAN_ERROR_OK)
            {
                //     MessageBox.Show(Convert.ToString(stsResult));
            }
            System.Threading.Thread.Sleep(5);
            while (CANMsgRead.ID != 418357487)
            {
                if (counTer > 5)
                {
                    counTer     = 0;
                    skipProcess = true;
                    break;
                }
                stsResult = PCANBasic.Read(m_PcanHandle, out CANMsgRead, out TPCANTimestamp);
                counTer++;
            }

            if ((skipProcess == false) && (CANMsgRead.DATA[0] == 0x3E))
            {
                for (int i = 0; i < CANMsgRead.LEN; i++)
                {
                    dataInPUT[i] = CANMsgRead.DATA[i];
                }
                inComingBrdData[0] = (dataInPUT[2] + dataInPUT[3] * 256) / 10;
            }


            skipProcess = false;
            counTer     = 0;


            CANMsgWrite.ID      = 418377633;
            CANMsgWrite.DATA[0] = 0xA3;
            CANMsgWrite.DATA[1] = 0x00;
            CANMsgWrite.DATA[2] = 0x00;
            CANMsgWrite.DATA[3] = 0x00;
            CANMsgWrite.DATA[4] = 0x00;
            CANMsgWrite.DATA[5] = 0x00;
            CANMsgWrite.DATA[6] = 0x00;
            CANMsgWrite.DATA[7] = 0x00;

            stsResult = PCANBasic.Write(m_PcanHandle, ref CANMsgWrite);
            if (stsResult != TPCANStatus.PCAN_ERROR_OK)
            {
            }

            System.Threading.Thread.Sleep(5);
            stsResult = PCANBasic.Read(m_PcanHandle, out CANMsgRead, out TPCANTimestamp);
            if ((CANMsgRead.DATA[0] == 0xA4) && (CANMsgRead.DATA[4] + CANMsgRead.DATA[5] < 255))
            {
                for (int i = 0; i < CANMsgRead.LEN; i++)
                {
                    dataInPUT[i] = CANMsgRead.DATA[i];
                }
                inComingBrdData[1] = ((dataInPUT[4] + (dataInPUT[5] * 256) + (dataInPUT[6] * 65536) + (dataInPUT[7] * 16777216)) / 100);
            }

            CANMsgWrite.ID      = 418377635;
            CANMsgWrite.DATA[0] = 0x05;
            CANMsgWrite.DATA[1] = 0x00;
            CANMsgWrite.DATA[2] = 0x00;
            CANMsgWrite.DATA[3] = 0x00;
            CANMsgWrite.DATA[4] = 0x00;
            CANMsgWrite.DATA[5] = 0x00;
            CANMsgWrite.DATA[6] = 0x00;
            CANMsgWrite.DATA[7] = 0x00;

            stsResult = PCANBasic.Write(m_PcanHandle, ref CANMsgWrite);
            if (stsResult != TPCANStatus.PCAN_ERROR_OK)
            {
            }

            System.Threading.Thread.Sleep(5);
            stsResult = PCANBasic.Read(m_PcanHandle, out CANMsgRead, out TPCANTimestamp);
            if (CANMsgRead.DATA[0] == 06)
            {
                for (int i = 0; i < CANMsgRead.LEN; i++)
                {
                    dataInPUT[i] = CANMsgRead.DATA[i];
                }
                inComingChnlData[0, 3] = dataInPUT[2] & 0x01;
                inComingChnlData[1, 3] = dataInPUT[2] & 0x02;
                inComingChnlData[2, 3] = dataInPUT[2] & 0x04;
                inComingChnlData[3, 3] = dataInPUT[2] & 0x08;
                inComingChnlData[4, 3] = dataInPUT[2] & 0x10;
                inComingChnlData[5, 3] = dataInPUT[2] & 0x20;
                inComingChnlData[6, 3] = dataInPUT[2] & 0x40;
                inComingChnlData[7, 3] = dataInPUT[2] & 0x80;
            }

            CANMsgWrite.DATA[0] = 0x0D;
            CANMsgWrite.DATA[1] = 0x00;
            CANMsgWrite.DATA[2] = 0x00;
            CANMsgWrite.DATA[3] = 0x00;
            CANMsgWrite.DATA[4] = 0x00;
            CANMsgWrite.DATA[5] = 0x00;
            CANMsgWrite.DATA[6] = 0x00;
            CANMsgWrite.DATA[7] = 0x00;
            stsResult           = PCANBasic.Write(m_PcanHandle, ref CANMsgWrite);
            if (stsResult != TPCANStatus.PCAN_ERROR_OK)
            {
            }

            System.Threading.Thread.Sleep(5);
            stsResult = PCANBasic.Read(m_PcanHandle, out CANMsgRead, out TPCANTimestamp);

            if (CANMsgRead.DATA[0] == 0x0E)
            {
                for (int i = 0; i < CANMsgRead.LEN; i++)
                {
                    dataInPUT[i] = CANMsgRead.DATA[i];
                }
                inComingChnlData[0, 4] = dataInPUT[2] & 0x01;
                inComingChnlData[1, 4] = dataInPUT[2] & 0x02;
                inComingChnlData[2, 4] = dataInPUT[2] & 0x04;
                inComingChnlData[3, 4] = dataInPUT[2] & 0x08;
                inComingChnlData[4, 4] = dataInPUT[2] & 0x10;
                inComingChnlData[5, 4] = dataInPUT[2] & 0x20;
                inComingChnlData[6, 4] = dataInPUT[2] & 0x40;
                inComingChnlData[7, 4] = dataInPUT[2] & 0x80;
            }

            CANMsgWrite.DATA[0] = 0x07;
            CANMsgWrite.DATA[1] = 0x00;
            CANMsgWrite.DATA[2] = 0x00;
            CANMsgWrite.DATA[3] = 0x00;
            CANMsgWrite.DATA[4] = 0x00;
            CANMsgWrite.DATA[5] = 0x00;
            CANMsgWrite.DATA[6] = 0x00;
            CANMsgWrite.DATA[7] = 0x00;

            stsResult = PCANBasic.Write(m_PcanHandle, ref CANMsgWrite);
            if (stsResult != TPCANStatus.PCAN_ERROR_OK)
            {
            }

            System.Threading.Thread.Sleep(5);
            stsResult = PCANBasic.Read(m_PcanHandle, out CANMsgRead, out TPCANTimestamp);

            if (CANMsgRead.DATA[0] == 0x08)
            {
                for (int i = 0; i < CANMsgRead.LEN; i++)
                {
                    dataInPUT[i] = CANMsgRead.DATA[i];
                }
                inComingChnlData[0, 5] = dataInPUT[2] & 0x01;
                inComingChnlData[1, 5] = dataInPUT[2] & 0x02;
                inComingChnlData[2, 5] = dataInPUT[2] & 0x04;
                inComingChnlData[3, 5] = dataInPUT[2] & 0x08;
                inComingChnlData[4, 5] = dataInPUT[2] & 0x10;
                inComingChnlData[5, 5] = dataInPUT[2] & 0x20;
                inComingChnlData[6, 5] = dataInPUT[2] & 0x40;
                inComingChnlData[7, 5] = dataInPUT[2] & 0x80;
            }

            CANMsgWrite.DATA[0] = 0x49;
            CANMsgWrite.DATA[1] = 0x00;
            CANMsgWrite.DATA[2] = 0x00;
            CANMsgWrite.DATA[3] = 0x00;
            CANMsgWrite.DATA[4] = 0x00;
            CANMsgWrite.DATA[5] = 0x00;
            CANMsgWrite.DATA[6] = 0x00;
            CANMsgWrite.DATA[7] = 0x00;

            stsResult = PCANBasic.Write(m_PcanHandle, ref CANMsgWrite);
            if (stsResult != TPCANStatus.PCAN_ERROR_OK)
            {
            }
            System.Threading.Thread.Sleep(5);
            stsResult = PCANBasic.Read(m_PcanHandle, out CANMsgRead, out TPCANTimestamp);

            if (CANMsgRead.DATA[0] == 0x4A)
            {
                for (int i = 0; i < CANMsgRead.LEN; i++)
                {
                    dataInPUT[i] = CANMsgRead.DATA[i];
                }

                inComingChnlData[0, 6] = dataInPUT[2] & 0x01;
                inComingChnlData[1, 6] = dataInPUT[2] & 0x02;
                inComingChnlData[2, 6] = dataInPUT[2] & 0x04;
                inComingChnlData[3, 6] = dataInPUT[2] & 0x08;
                inComingChnlData[4, 6] = dataInPUT[2] & 0x10;
                inComingChnlData[5, 6] = dataInPUT[2] & 0x20;
                inComingChnlData[6, 6] = dataInPUT[2] & 0x40;
                inComingChnlData[7, 6] = dataInPUT[2] & 0x80;
            }

            CANMsgWrite.DATA[0] = 0x43;
            CANMsgWrite.DATA[1] = 0x00;
            CANMsgWrite.DATA[2] = 0x00;
            CANMsgWrite.DATA[3] = 0x00;
            CANMsgWrite.DATA[4] = 0x00;
            CANMsgWrite.DATA[5] = 0x00;
            CANMsgWrite.DATA[6] = 0x00;
            CANMsgWrite.DATA[7] = 0x00;

            stsResult = PCANBasic.Write(m_PcanHandle, ref CANMsgWrite);
            if (stsResult != TPCANStatus.PCAN_ERROR_OK)
            {
            }
            System.Threading.Thread.Sleep(5);
            stsResult = PCANBasic.Read(m_PcanHandle, out CANMsgRead, out TPCANTimestamp);

            if (CANMsgRead.DATA[0] == 0x44)
            {
                for (int i = 0; i < CANMsgRead.LEN; i++)
                {
                    dataInPUT[i] = CANMsgRead.DATA[i];
                }
                inComingChnlData[0, 7] = dataInPUT[2] & 0x01;
                inComingChnlData[1, 7] = dataInPUT[2] & 0x02;
                inComingChnlData[2, 7] = dataInPUT[2] & 0x04;
                inComingChnlData[3, 7] = dataInPUT[2] & 0x08;
                inComingChnlData[4, 7] = dataInPUT[2] & 0x10;
                inComingChnlData[5, 7] = dataInPUT[2] & 0x20;
                inComingChnlData[6, 7] = dataInPUT[2] & 0x40;
                inComingChnlData[7, 7] = dataInPUT[2] & 0x80;
            }


            while (chnlCount < 0x08)
            {
                if (groupModeSwitch.IsOn == true)
                {
                    try
                    {
                        CANMsgWrite.ID      = 418377634;
                        CANMsgWrite.DATA[0] = 0x35;
                        CANMsgWrite.DATA[1] = groupArray[groupCount];
                        CANMsgWrite.DATA[2] = 0x00;
                        CANMsgWrite.DATA[3] = 0x00;
                        CANMsgWrite.DATA[4] = 0x00;
                        CANMsgWrite.DATA[5] = 0x00;
                        CANMsgWrite.DATA[6] = 0x00;
                        CANMsgWrite.DATA[7] = 0x00;
                    }
                    catch (System.NullReferenceException)
                    {
                    }
                }
                else
                {
                    try
                    {
                        CANMsgWrite.ID      = 418377634;
                        CANMsgWrite.DATA[0] = 0x35;
                        CANMsgWrite.DATA[1] = chnlArray[chnlCount];
                        CANMsgWrite.DATA[2] = 0x00;
                        CANMsgWrite.DATA[3] = 0x00;
                        CANMsgWrite.DATA[4] = 0x00;
                        CANMsgWrite.DATA[5] = 0x00;
                        CANMsgWrite.DATA[6] = 0x00;
                        CANMsgWrite.DATA[7] = 0x00;
                    }
                    catch (System.NullReferenceException)
                    {
                    }
                }
                stsResult = PCANBasic.Write(m_PcanHandle, ref CANMsgWrite);
                if (stsResult != TPCANStatus.PCAN_ERROR_OK)
                {
                }
                System.Threading.Thread.Sleep(20);
                stsResult = PCANBasic.Read(m_PcanHandle, out CANMsgRead, out TPCANTimestamp);

                if ((CANMsgRead.DATA[0] == 0x36) && ((CANMsgRead.DATA[1] == chnlArray[chnlCount]) || (CANMsgRead.DATA[1] == groupArray[groupCount])) && (CANMsgRead.DATA[2] + CANMsgRead.DATA[3] < 255))
                {
                    for (int i = 0; i < CANMsgRead.LEN; i++)
                    {
                        dataInPUT[i] = CANMsgRead.DATA[i];
                    }
                    inComingChnlData[chnlCount, 0] = chnlCount;
                    inComingChnlData[chnlCount, 1] = ((dataInPUT[2]) + ((dataInPUT[3]) * 256)) / 10;
                }

                if (groupModeSwitch.IsOn == true)
                {
                    try
                    {
                        CANMsgWrite.ID      = 418377636;
                        CANMsgWrite.DATA[0] = 0x0F;
                        CANMsgWrite.DATA[1] = groupArray[groupCount];
                        CANMsgWrite.DATA[2] = 0x00;
                        CANMsgWrite.DATA[3] = 0x00;
                        CANMsgWrite.DATA[4] = 0x00;
                        CANMsgWrite.DATA[5] = 0x00;
                        CANMsgWrite.DATA[6] = 0x00;
                        CANMsgWrite.DATA[7] = 0x00;
                    }
                    catch (System.NullReferenceException)
                    {
                    }
                }
                else
                {
                    try
                    {
                        CANMsgWrite.ID      = 418377636;
                        CANMsgWrite.DATA[0] = 0x0F;
                        CANMsgWrite.DATA[1] = chnlArray[chnlCount];
                        CANMsgWrite.DATA[2] = 0x00;
                        CANMsgWrite.DATA[3] = 0x00;
                        CANMsgWrite.DATA[4] = 0x00;
                        CANMsgWrite.DATA[5] = 0x00;
                        CANMsgWrite.DATA[6] = 0x00;
                        CANMsgWrite.DATA[7] = 0x00;
                    }
                    catch (System.NullReferenceException)
                    {
                    }
                }

                stsResult = PCANBasic.Write(m_PcanHandle, ref CANMsgWrite);
                if (stsResult != TPCANStatus.PCAN_ERROR_OK)
                {
                }

                System.Threading.Thread.Sleep(20);
                stsResult = PCANBasic.Read(m_PcanHandle, out CANMsgRead, out TPCANTimestamp);

                if ((CANMsgRead.DATA[0] == 0x10) && ((CANMsgRead.DATA[1] == chnlArray[chnlCount]) || (CANMsgRead.DATA[1] == groupArray[groupCount])) && (CANMsgRead.DATA[2] + CANMsgRead.DATA[3] < 250))
                {
                    for (int i = 0; i < CANMsgRead.LEN; i++)
                    {
                        dataInPUT[i] = CANMsgRead.DATA[i];
                    }
                    inComingChnlData[chnlCount, 0] = chnlCount;
                    inComingChnlData[chnlCount, 2] = (((dataInPUT[2]) + (dataInPUT[3])));
                }
                if (groupModeSwitch.IsOn == true)
                {
                    try
                    {
                        CANMsgWrite.ID      = 418377639;
                        CANMsgWrite.DATA[0] = 0x03;
                        CANMsgWrite.DATA[1] = groupArray[groupCount];
                        CANMsgWrite.DATA[2] = 0x00;
                        CANMsgWrite.DATA[3] = 0x00;
                        CANMsgWrite.DATA[4] = 0x00;
                        CANMsgWrite.DATA[5] = 0x00;
                        CANMsgWrite.DATA[6] = 0x00;
                        CANMsgWrite.DATA[7] = 0x00;
                    }
                    catch (System.NullReferenceException)
                    {
                    }
                }
                else
                {
                    try
                    {
                        CANMsgWrite.ID      = 418377639;
                        CANMsgWrite.DATA[0] = 0x03;
                        CANMsgWrite.DATA[1] = chnlArray[chnlCount];
                        CANMsgWrite.DATA[2] = 0x00;
                        CANMsgWrite.DATA[3] = 0x00;
                        CANMsgWrite.DATA[4] = 0x00;
                        CANMsgWrite.DATA[5] = 0x00;
                        CANMsgWrite.DATA[6] = 0x00;
                        CANMsgWrite.DATA[7] = 0x00;
                    }
                    catch (System.NullReferenceException)
                    {
                    }
                }

                stsResult = PCANBasic.Write(m_PcanHandle, ref CANMsgWrite);
                if (stsResult != TPCANStatus.PCAN_ERROR_OK)
                {
                }

                System.Threading.Thread.Sleep(10);
                stsResult = PCANBasic.Read(m_PcanHandle, out CANMsgRead, out TPCANTimestamp);
                if ((CANMsgRead.DATA[0] == 0x04) && (CANMsgRead.DATA[1] == chnlArray[chnlCount]))
                {
                    for (int i = 0; i < CANMsgRead.LEN; i++)
                    {
                        dataInPUT[i] = CANMsgRead.DATA[i];
                    }
                    inComingChnlData[chnlCount, 8] = ((dataInPUT[2] * (10 - 1) / 255) + 1);
                }
                if (groupModeSwitch.IsOn == true)
                {
                    groupCount++;
                    if (groupCount > 0x03)
                    {
                        groupCount = 0;
                    }
                }
                else
                {
                    chnlCount++;
                }
            }
        }
Example #15
0
File: PCAN.cs Project: fbstj/lib.cs
        /// <summary>Send a frame</summary>
        public void Send(Frame f)
        {
            TPCANMsg msg = Frame(f);

            PCANBasic.Write((byte)iface, ref msg);
        }
Example #16
0
        unsafe public void sendFame(UInt32 len, UInt32 startIndex = 0)
        {
            if (Form_SetCANParam.form_setcan.checkCANFDMode.Checked == false)//send can frame
            {
                TPCANStatus result1;
                TPCANMsg    CANMsg;
                CANMsg         = new TPCANMsg();
                CANMsg.DATA    = new byte[8];
                CANMsg.MSGTYPE = 0x00;
                if (len > 48)
                {
                    return;
                }
                CANMsg.ID       = arrSendBuf[startIndex].ID;
                CANMsg.LEN      = arrSendBuf[startIndex].DataLen;
                CANMsg.MSGTYPE |= (arrSendBuf[startIndex].ExternFlag == 1) ? TPCANMessageType.PCAN_MESSAGE_EXTENDED : TPCANMessageType.PCAN_MESSAGE_STANDARD;
                if (arrSendBuf[startIndex].RemoteFlag == 1)
                {
                    CANMsg.MSGTYPE |= TPCANMessageType.PCAN_MESSAGE_RTR;//0数据帧;1远程帧
                }
                for (int i = 0; i < CANMsg.LEN; i++)
                {
                    CANMsg.DATA[i] = arrSendBuf[startIndex].Data[i];
                }

                result1 = PCANBasic.Write(PCAN_PARA1.PCANIndex, ref CANMsg);

                // int result = VCI_Transmit(0x04, 0x00, CANINDEX, ref arrSendBuf[startIndex], len);

                if (result1 < 0)
                {
                    MessageBox.Show("发送失败");
                }
            }
            else//send can fd frame
            {
                TPCANStatus result1;
                TPCANMsgFD  CANMsg;
                CANMsg      = new TPCANMsgFD();
                CANMsg.DATA = new byte[64];
                // CANMsg.MSGTYPE = 0x00;
                if (len > 48)
                {
                    return;
                }
                CANMsg.ID       = arrSendBuf[startIndex].ID;
                CANMsg.DLC      = arrSendBuf[startIndex].DataLen;
                CANMsg.MSGTYPE |= (arrSendBuf[startIndex].ExternFlag == 1) ? TPCANMessageType.PCAN_MESSAGE_EXTENDED : TPCANMessageType.PCAN_MESSAGE_STANDARD;
                CANMsg.MSGTYPE |= (Form_BasicFunction.form_basic.checkEnableCANFD.Checked) ? TPCANMessageType.PCAN_MESSAGE_FD : TPCANMessageType.PCAN_MESSAGE_STANDARD;
                CANMsg.MSGTYPE |= (Form_BasicFunction.form_basic.EnableCANFD_BRS.Checked) ? TPCANMessageType.PCAN_MESSAGE_BRS : TPCANMessageType.PCAN_MESSAGE_STANDARD;
                if (arrSendBuf[startIndex].RemoteFlag == 1)
                {
                    CANMsg.MSGTYPE |= TPCANMessageType.PCAN_MESSAGE_RTR;//0数据帧;1远程帧
                }
                for (int i = 0; i < CANMsg.DLC; i++)
                {
                    CANMsg.DATA[i] = arrSendBuf[startIndex].Data[i];
                }

                result1 = PCANBasic.WriteFD(PCAN_PARA1.PCANIndex, ref CANMsg);

                // int result = VCI_Transmit(0x04, 0x00, CANINDEX, ref arrSendBuf[startIndex], len);

                if (result1 < 0)
                {
                    MessageBox.Show("发送失败");
                }
            }
        }
Example #17
0
        public void WriteCan(short Ch, __CanMsg Data, bool FDFlag = false, bool Extended = false)
        {
#if PROGRAM_RUNNING
            //TextBox txtbCurrentTextBox;
            TPCANStatus stsResult;

            // We create a TPCANMsg message structure
            //

            try
            {
                try
                {
                    if (FDFlag == false)
                    {
                        TPCANMsg wCANMsg = new TPCANMsg();
                        wCANMsg.DATA = new byte[8];

                        // We configurate the Message.  The ID (max 0x1FF),
                        // Length of the Data, Message Type (Standard in
                        // this example) and die data
                        //

                        wCANMsg.ID      = (uint)Data.ID;
                        wCANMsg.LEN     = (byte)Data.Length;
                        wCANMsg.MSGTYPE = (Extended == true) ? TPCANMessageType.PCAN_MESSAGE_EXTENDED : TPCANMessageType.PCAN_MESSAGE_STANDARD;
                        //wCANMsg.MSGTYPE = TPCANMessageType.PCAN_MESSAGE_STANDARD;
                        // If a remote frame will be sent, the data bytes are not important.
                        //
                        //if (chbRemote.Checked)
                        //    CANMsg.MSGTYPE |= TPCANMessageType.PCAN_MESSAGE_RTR;
                        //else
                        //{
                        // We get so much data as the Len of the message
                        //

                        for (int i = 0; i < wCANMsg.LEN; i++)
                        {
                            wCANMsg.DATA[i] = Data.DATA[i];
                        }
                        //}

                        // The message is sent to the configured hardware
                        //
                        //stsResult = PCANBasic.GetStatus(m_PcanHandle);

                        //if (stsResult == TPCANStatus.PCAN_ERROR_OK)
                        //{
                        stsResult = PCANBasic.Write(m_PcanHandle[Ch], ref wCANMsg);

                        // The message was successfully sent
                        //
                        if (stsResult == TPCANStatus.PCAN_ERROR_OK)
                        {
                            //WriteErrorCount = 0;
                            return;
                        }
                        else
                        {
                            /*
                             * WriteErrorCount++;
                             *
                             * if (WriteErrorCount < 5)
                             * {
                             *  PCANBasic.Uninitialize(m_PcanHandle);
                             *  OpenCan(sid, sSpeed);
                             * }
                             * else
                             * {
                             *  MessageBox.Show(GetFormatedError(stsResult));// An error occurred.  We show the error.
                             * }
                             */
                        }

                        //}
                        //else
                        //{
                        //    return;
                        //}
                    }
                    else
                    {
                        TPCANMsgFD CANMsg;
                        //TextBox txtbCurrentTextBox;
                        int iLength;

                        // We create a TPCANMsgFD message structure
                        //
                        CANMsg      = new TPCANMsgFD();
                        CANMsg.DATA = new byte[64];

                        // We configurate the Message.  The ID,
                        // Length of the Data, Message Type
                        // and the data
                        //
                        CANMsg.ID       = (uint)Data.ID;
                        CANMsg.DLC      = Convert.ToByte(Data.Length);
                        CANMsg.MSGTYPE  = (Extended == true) ? TPCANMessageType.PCAN_MESSAGE_EXTENDED : TPCANMessageType.PCAN_MESSAGE_STANDARD;
                        CANMsg.MSGTYPE |= TPCANMessageType.PCAN_MESSAGE_FD;
                        //CANMsg.MSGTYPE |= (chbBRS.Checked) ? TPCANMessageType.PCAN_MESSAGE_BRS : TPCANMessageType.PCAN_MESSAGE_STANDARD;

                        // If a remote frame will be sent, the data bytes are not important.
                        //
                        //if (chbRemote.Checked)
                        //    CANMsg.MSGTYPE |= TPCANMessageType.PCAN_MESSAGE_RTR;
                        //else
                        //{
                        // We get so much data as the Len of the message
                        //
                        iLength = GetLengthFromDLC(CANMsg.DLC, (CANMsg.MSGTYPE & TPCANMessageType.PCAN_MESSAGE_FD) == 0);

                        //}

                        // The message is sent to the configured hardware
                        //
                        PCANBasic.WriteFD(m_PcanHandle[Ch], ref CANMsg);
                    }
                }
                catch (Exception Msg)
                {
                    //MessageBox.Show(Msg.Message + "\n" + Msg.StackTrace);
                    uMessageBox.Show(title: "경고", promptText: Msg.Message + "\n" + Msg.StackTrace); //MessageBox.Show(GetFormatedError(stsResult));
                }
            }
            finally
            {
            }
#endif
            return;
        }