private void button_send_Click(object sender, EventArgs e) { if (textBox_senddata.Text.Length == 0) { MessageBox.Show("数据为空", "提示", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); return; } uint id = (uint)System.Convert.ToInt32(textBox_ID.Text, 16); string data = textBox_senddata.Text; int frame_type_index = comboBox_frametype.SelectedIndex; int protocol_index = comboBox_protocol.SelectedIndex; int send_type_index = comboBox_sendtype.SelectedIndex; int canfd_exp_index = comboBox_canfd_exp.SelectedIndex; uint result; //发送的帧数 if (0 == protocol_index) //can { ZCAN_Transmit_Data can_data = new ZCAN_Transmit_Data(); can_data.frame.can_id = MakeCanId(id, frame_type_index, 0, 0); can_data.frame.data = new byte[8]; can_data.frame.can_dlc = (byte)SplitData(data, ref can_data.frame.data, CAN_MAX_DLEN); can_data.transmit_type = (uint)send_type_index; IntPtr ptr = Marshal.AllocHGlobal(Marshal.SizeOf(can_data)); Marshal.StructureToPtr(can_data, ptr, true); result = Method.ZCAN_Transmit(channel_handle_, ptr, 1); Marshal.FreeHGlobal(ptr); } else //canfd { ZCAN_TransmitFD_Data canfd_data = new ZCAN_TransmitFD_Data(); canfd_data.frame.can_id = MakeCanId(id, frame_type_index, 0, 0); canfd_data.frame.data = new byte[64]; canfd_data.frame.len = (byte)SplitData(data, ref canfd_data.frame.data, CANFD_MAX_DLEN); canfd_data.transmit_type = (uint)send_type_index; canfd_data.frame.flags = (byte)((canfd_exp_index != 0) ? CANFD_BRS : 0); IntPtr ptr = Marshal.AllocHGlobal(Marshal.SizeOf(canfd_data)); Marshal.StructureToPtr(canfd_data, ptr, true); result = Method.ZCAN_TransmitFD(channel_handle_, ptr, 1); Marshal.FreeHGlobal(ptr); } if (result != 1) { MessageBox.Show("发送数据失败", "提示", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); AddErr(); } }
/// <summary> /// 发送单帧信息 /// </summary> /// <param name="ID"></param> /// <param name="canIndex"></param> /// <param name="data"></param> /// <param name="dataLength"></param> public void SingleTransmit(ZLG_API.VCI_CAN_OBJ obj) { try { ZCAN_TransmitFD_Data canfd_data = new ZCAN_TransmitFD_Data(); canfd_data.frame.can_id = obj.ID; canfd_data.frame.data = new byte[64]; Buffer.BlockCopy(obj.Data, 0, canfd_data.frame.data, 0, obj.DataLen); canfd_data.frame.len = obj.DataLen; canfd_data.transmit_type = obj.SendType; canfd_data.frame.flags = 0x00;//CANFD不加速 IntPtr ptr = Marshal.AllocHGlobal(Marshal.SizeOf(canfd_data)); Marshal.StructureToPtr(canfd_data, ptr, true); uint res = ZCAN_TransmitFD(channel_handle, ptr, 1); Marshal.FreeHGlobal(ptr); if (res == 0) { _dispatcher.BeginInvoke(new Action(delegate() { })); AbortThread(); return; } else { OnRaiseZLGCommunicateEvent(this, new CANEvent() { eventType = CANEventType.SendEvent, ID = canfd_data.frame.can_id.ToString("X"), DataLen = canfd_data.frame.len, listData = new List <byte>(canfd_data.frame.data) }); } } catch (Exception ex) { } }