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();
            }
        }
示例#2
0
        /// <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)
            {
            }
        }