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)); }
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()); } }
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); }
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)); } }
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); }
/// <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); }
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)); } } }
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)); } }
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)); } }
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); }
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); }
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)); }
public TPCANStatus send(TPCANMsg CANMsg) { CANMsg.LEN = 8; CANMsg.MSGTYPE = TPCANMessageType.PCAN_MESSAGE_STANDARD; return(PCANBasic.Write(m_PcanHandle, ref CANMsg)); }
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++; } } }
/// <summary>Send a frame</summary> public void Send(Frame f) { TPCANMsg msg = Frame(f); PCANBasic.Write((byte)iface, ref msg); }
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("发送失败"); } } }
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; }