Example #1
0
        private void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {
            short err;

            if (m_dev >= 0)
            {
                err = D2KDASK.D2K_Release_Card((ushort)m_dev);
            }
        }
Example #2
0
        private void button2_Click(object sender, EventArgs e)                        //停止按键
        {
            short err = 0;
            uint  start_pos;
            uint  access_cnt;

            timer1.Enabled  = false;
            err             = D2KDASK.D2K_AI_AsyncClear((ushort)m_dev, out start_pos, out access_cnt);
            button2.Enabled = true;
            button1.Enabled = true;
        }
Example #3
0
 private void Form1_Load(object sender, EventArgs e)
 {
     this.Text = "AI Read: " + Card_Name[0];
     m_dev     = D2KDASK.D2K_Register_Card(card_value[cardT], 0);
     if (m_dev < 0)
     {
         //MessageBox.Show("D2K_Register_Card error!");
         MessageBox.Show("Select Device First!");
         button1.Enabled = false;
         button2.Enabled = false;
     }
 }
Example #4
0
        private void DataCollect(ushort DC_cardnum, ushort DC_chnum)               //采集不同通道电压的函数
        {
            string str_tmp;
            short  err;
            double voltage;

            err = D2KDASK.D2K_AI_VReadChannel(DC_cardnum, DC_chnum, out voltage);         //输出通道1电压
            if (err < 0)
            {
                MessageBox.Show("D2K_AI_VReadChannel error!");
                return;
            }
            str_tmp       = string.Format("{0}", voltage);
            textBox1.Text = str_tmp;
        }
Example #5
0
        private void button1_Click(object sender, EventArgs e)
        {
            short err;

            button1.Enabled = false;
            button3.Enabled = false;

            count = 1;                                                               //采集卡通道量程配置标志位
            err   = D2KDASK.D2K_AI_CH_Config((ushort)m_dev, -1, D2KDASK.AD_B_10_V);  //配置所有通道的量程
            if (err < 0)
            {
                MessageBox.Show("D2K_AI_CH_Config error!");
                return;
            }

            button2.Enabled = true;                                //停止键使能
            timer1.Enabled  = true;                                //打开定时间开始采集数据
        }
Example #6
0
        public void CmdExitApp(ICommand sender)
        {
            D2KDASK.D2K_Release_Card(0);
            Defs.Device1.acCanClose();
            Defs.Device2.acCanClose();
            Defs.brun1 = false;
            Defs.brun2 = false;
            Defs.Thread1.Abort();
            Defs.Thread2.Abort();
            Defs.Can1ReadStatus = false;
            Defs.Can2ReadStatus = false;
            if (guiMain != null && !guiMain.IsDisposed)
            {
                guiMain.Close();
            }

            guiMain = null;



            Application.Exit();
        }
Example #7
0
        private void button3_Click(object sender, EventArgs e)                        //设置按键
        {
            Form2 subForm = new Form2();

            subForm.ShowDialog();
            if (m_dev >= 0)
            {
                short ret;
                ret = D2KDASK.D2K_Release_Card((ushort)m_dev);
            }
            cardT   = (ushort)subForm.comboBox1.SelectedIndex;
            cardnum = (ushort)subForm.comboBox2.SelectedIndex;
            m_dev   = D2KDASK.D2K_Register_Card(card_value[cardT], cardnum);
            if (m_dev < 0)
            {
                MessageBox.Show("D2K_Register_Card error!");
                button1.Enabled = false;
            }
            else
            {
                button1.Enabled = true;
                this.Text       = "AI Read: " + Card_Name[cardT];
            }
        }
Example #8
0
        /// <summary>
        /// 获取信息
        /// </summary>
        /// <returns></returns>
        public string[] GetDataFromCard(out string sInfo)
        {
            sInfo = string.Empty;
            string[] data = new string[4] {
                "0.00", "0.00", "0.00", "0.00"
            };

            lock (Defs._object2)
            {
                //采集卡获得其它数据
                ushort[] chans = new ushort[2];
                chans[0] = 0; //电压
                chans[1] = 4; //电流
                ushort[] ranges = new ushort[2];

                ranges[0] = D2KDASK.AD_B_10_V | D2KDASK.AI_DIFF;
                ranges[1] = D2KDASK.AD_B_10_V | D2KDASK.AI_DIFF;

                short ret = D2KDASK.D2K_AI_MuxScanSetup(0, 2, chans, ranges);
                if (ret < 0)
                {
                    sInfo = "D2K_AI_MuxScanSetup error!";
                }

                ushort[] chan_data = new ushort[2];
                double   temp;
                double   DriverCur = 0.0; //驱动器电流
                double   DriverVol = 0.0; //驱动器电压
                double   MotorCur  = 0.0; //电机电流
                double   MotorVol  = 0.0; //电机电压

                short err = D2KDASK.D2K_AI_ReadMuxScan(0, chan_data);
                if (err == 0)
                {
                    D2KDASK.D2K_AI_VoltScale(0, D2KDASK.AD_B_10_V, (short)chan_data[1], out temp);
                    DriverCur = Math.Round(temp, 3);

                    D2KDASK.D2K_AI_VoltScale(0, D2KDASK.AD_B_10_V, (short)chan_data[0], out temp);
                    //DriverVol = Math.Round(temp * 10, 3);

                    if (FilterNumber < VolFilter.Length)
                    {
                        VolFilter[FilterNumber] = Math.Round(temp * 10, 3);
                        FilterNumber++;
                    }
                    else
                    {
                        for (int i = 0; i < VolFilter.Length - 1; i++)
                        {
                            VolFilter[i] = VolFilter[i + 1];
                        }
                        VolFilter[VolFilter.Length - 1] = Math.Round(temp * 10, 3);
                    }

                    double sumsum = 0;
                    for (int i = 0; i < FilterNumber; i++)
                    {
                        sumsum = sumsum + VolFilter[i];
                    }
                    DriverVol = sumsum / FilterNumber;
                }
                else
                {
                    sInfo = "结束";
                    return(data);
                }

                //电机功率
                double MotorPow = Math.Round(DriverCur * DriverVol, 3);



                data[0] = DriverCur.ToString();
                data[1] = DriverVol.ToString();
                data[2] = MotorVol.ToString();
                data[3] = MotorPow.ToString();
            }
            return(data);
        }
Example #9
0
        /// <summary>
        /// 打开或关闭飞轮1电源
        /// </summary>
        /// <returns></returns>
        public bool OpenElecSource(string state, out string error, string experiment_name,
                                   string experiment_memeber, string experiment_product)
        {
            bool results = true;

            error = string.Empty;

            if (state == "ON")
            {
                #region 数据采集卡

                Defs.ModifyState("4", '0');
                D2KDASK.D2K_DO_WritePort(0, D2KDASK.Channel_P1A, Convert.ToUInt32(Defs.StateVector, 2));
                DateTime dt = DateTime.Now;

                #region 采集卡获得浪涌电流
                ushort[] chans = new ushort[1];
                chans[0] = 1;
                ushort[] ranges    = new ushort[1];
                ushort[] chan_data = new ushort[1];
                double   temp      = 0.0;
                double[] MotorCur  = new double[1000]; //浪涌电流
                TimeSpan span;
                int      length_wave = 0;

                DateTime[] dttime = new DateTime[1000];

                ranges[0] = D2KDASK.AD_B_10_V | D2KDASK.AI_DIFF;

                short ret1 = D2KDASK.D2K_AI_MuxScanSetup(0, 1, chans, ranges);
                if (ret1 < 0)
                {
                    error = "Wave current error!";
                    Defs.ModifyState("4", '1');
                    D2KDASK.D2K_DO_WritePort(0, D2KDASK.Channel_P1A, Convert.ToUInt32(Defs.StateVector, 2));
                    return(false);
                }


                while (true)
                {
                    D2KDASK.D2K_AI_ReadMuxScan(0, chan_data);
                    D2KDASK.D2K_AI_VoltScale(0, D2KDASK.AD_B_10_V, (short)chan_data[0], out temp);
                    MotorCur[length_wave] = Math.Round(temp, 3);
                    if (length_wave == 1000)
                    {
                        break;
                    }
                    dttime[length_wave] = DateTime.Now;
                    length_wave         = length_wave + 1;
                    span = DateTime.Now - dt;
                    if (span.TotalMilliseconds > 10)
                    {
                        break;
                    }
                }
                for (int i = 0; i < length_wave; i++)
                {
                    WriteDataToDatabaseWave("4", "7", MotorCur[i].ToString(), dttime[i].ToString(), experiment_name, experiment_memeber, experiment_product);
                }
                #endregion


                #endregion


                #region can线程启动
                if (Defs.Can1ReadStatus == false)
                {
                    Defs.Can1ReadStatus = true;
                    Defs.Thread1.Start();
                }
                if (Defs.Can2ReadStatus == false)
                {
                    Defs.Can2ReadStatus = true;
                    Defs.Thread2.Start();
                }
                #endregion
            }
            else
            {
                Defs.ModifyState("4", '1');
                D2KDASK.D2K_DO_WritePort(0, D2KDASK.Channel_P1A, Convert.ToUInt32(Defs.StateVector, 2));
                Defs.Motor4RSuceess = false;
            }
            return(results);
        }
Example #10
0
        static int Main(string[] args)
        {
            var rawAdData = new short[short.MaxValue - short.MinValue];

            for (short i = short.MinValue; i < short.MaxValue; ++i)
            {
                rawAdData[i - short.MinValue] = i;
            }

            var voltage = new double[rawAdData.Length];

            var res = D2KDASK.D2K_Register_Card(D2KDASK.DAQ_2213, 0);

            if (res < 0)
            {
                Console.Error.WriteLine("Failed to register card.");
                return(1);
            }

            ushort cardNumber = (ushort)res;

            const int Channels = 2;
            var       channels = new ushort[Channels];
            var       ranges   = new ushort[Channels];

            for (int i = 0; i < Channels; ++i)
            {
                channels[i] = (ushort)i;
                ranges[i]   = D2KDASK.AD_B_10_V;
            }

            // Is it possible to call this function like this?
            // D2KDASK.D2K_AI_ContVScale(D2KDASK.AD_B_10_V, rawAdData, voltage, voltage.Length);
            // Why is card number necessary for such a simple function?
            res = D2KDASK.D2K_AI_ContVScale(cardNumber, D2KDASK.AD_B_10_V,
                                            rawAdData, voltage, voltage.Length);
            if (res != D2KDASK.NoError)
            {
                Console.Error.WriteLine("D2K_AI_ContVScale failed: {0}.", res);
                D2KDASK.D2K_Release_Card(cardNumber);
                return(1);
            }

            // Output: 305.17578125
            // It is about ADRange / (short.MaxValue + 1) * 1e6.
            for (int i = 0; i < voltage.Length; ++i)
            {
                Console.WriteLine("{0}", DoubleConverter.ToExactString(voltage[i] / rawAdData[i] * 1e6));
            }

            var scale = 10.0 / (short.MaxValue + 1);

            var rawAdData2 = new short[]
            {
                -32767, -32766, -10000,
                -1000, -2000, -3000,
                -1, -2, -3,
                1, 2, 3,
                1000, 2000, 3000,
                32767, 32766, 10000,
            };
            var voltage2 = new double[rawAdData2.Length];

            res = D2KDASK.D2K_AI_ContVScale(cardNumber, D2KDASK.AD_B_10_V,
                                            rawAdData2, voltage2, voltage2.Length);
            if (res != D2KDASK.NoError)
            {
                Console.Error.WriteLine("D2K_AI_ContVScale failed: {0}.", res);
                D2KDASK.D2K_Release_Card(cardNumber);
                return(1);
            }

            for (int i = 0; i < rawAdData2.Length; ++i)
            {
                Console.WriteLine("{0} {1} {2}",
                                  rawAdData2[i],
                                  DoubleConverter.ToExactString(voltage2[i]),
                                  DoubleConverter.ToExactString(rawAdData2[i] * scale));
            }

            D2KDASK.D2K_Release_Card(cardNumber);

            Util.Pause();

            return(0);
        }
        protected void Init()
        {
            InitResources();
            InitShortcutManager();
            //InitMenuBar();
            InitToolBars();
            InitStatusBar();
            InitContextMenus();
            InitTrayIcon();
            this._wm  = new WinGui.Utility.WindowManage(this, this.panelGround);
            this.Text = CardApplication.applicationName;


            #region 数据采集卡初始化
            short m_dev = D2KDASK.D2K_Register_Card(D2KDASK.DAQ_2205, 0);
            if (m_dev < 0)
            {
                _statusInfo.Text = "Select Device First!";
                MessageBox.Show("Select Device First!");
            }
            else
            {
                short ret = D2KDASK.D2K_DIO_PortConfig(0, D2KDASK.Channel_P1A, D2KDASK.OUTPUT_PORT);
                if (ret < 0)
                {
                    _statusInfo.Text = "D2K_DIO_PortConfig error!";
                    MessageBox.Show("D2K_DIO_PortConfig error!");
                    D2KDASK.D2K_Release_Card(0);
                }

                D2KDASK.D2K_DO_WritePort(0, D2KDASK.Channel_P1A, Convert.ToUInt32(Defs.StateVector, 2));
            }
            #endregion

            string   Commu = System.Configuration.ConfigurationSettings.AppSettings["CommunicationString1"];
            string[] para  = Commu.Split(';');


            string[] com  = para[0].Split('=');
            string   can1 = com[1].Trim();


            string[] baud  = para[1].Split('=');
            string   baud1 = baud[1].Trim();

            com = para[2].Split('=');
            ReadTimeOutValue_can1 = com[1].Trim();
            com = para[3].Split('=');
            WriteTimeOutValue_can1 = com[1].Trim();



            Commu = System.Configuration.ConfigurationSettings.AppSettings["CommunicationString2"];
            para  = Commu.Split(';');


            com = para[0].Split('=');
            string can2 = com[1].Trim();


            baud = para[1].Split('=');
            string baud2 = baud[1].Trim();


            com = para[2].Split('=');
            ReadTimeOutValue_can2 = com[1].Trim();


            com = para[3].Split('=');
            WriteTimeOutValue_can2 = com[1].Trim();

            #region can 总线配置
            bool syncflag    = false;
            uint nWriteCount = 10;
            uint nReadCount  = 10;

            int nRet1 = Defs.Device1.acCanOpen(can1, syncflag, nReadCount, nWriteCount);
            int nRet2 = Defs.Device2.acCanOpen(can2, syncflag, nReadCount, nWriteCount);

            if (nRet1 < 0 && nRet2 < 0)
            {
                _statusInfo.Text = "Failed to open the CAN1 and CAN2 port, please check the CAN1 and CAN2 port name!";
                MessageBox.Show("Failed to open the CAN1 and CAN2 port, please check the CAN1 and CAN2 port name!");
            }
            #endregion


            int nRet;

            #region can1 配置
            if (nRet1 >= 0)
            {
                nRet = Defs.Device1.acEnterResetMode();
                if (nRet < 0)
                {
                    _statusInfo.Text = "Failed to stop opertion1!";
                    MessageBox.Show("Failed to stop opertion1!");
                    Defs.Device1.acCanClose();
                }
                else
                {
                    nRet = Defs.Device1.acSetBaud(Convert.ToUInt32(baud1));
                    if (nRet < 0)
                    {
                        _statusInfo.Text = "Failed to set baud 1!";
                        MessageBox.Show("Failed to set baud 1!");
                        Defs.Device1.acCanClose();
                    }
                    else
                    {
                        nRet = Defs.Device1.acSetTimeOut(Convert.ToUInt32(ReadTimeOutValue_can1), Convert.ToUInt32(WriteTimeOutValue_can1));
                        if (nRet < 0)
                        {
                            _statusInfo.Text = "Failed to set Timeout 1!";
                            MessageBox.Show("Failed to set Timeout 1!");
                            Defs.Device1.acCanClose();
                        }
                        else
                        {
                            nRet = Defs.Device1.acEnterWorkMode();
                            if (nRet < 0)
                            {
                                _statusInfo.Text = "Failed to restart operation!";
                                MessageBox.Show("Failed to restart operation!");
                                Defs.Device1.acCanClose();
                            }
                        }
                    }
                }
            }
            #endregion

            #region can2 配置
            if (nRet2 >= 0)
            {
                nRet = Defs.Device2.acEnterResetMode();
                if (nRet < 0)
                {
                    _statusInfo.Text = "Failed to stop opertion2!";
                    MessageBox.Show("Failed to stop opertion2!");
                    Defs.Device2.acCanClose();
                }
                else
                {
                    nRet = Defs.Device2.acSetBaud(Convert.ToUInt32(baud2));
                    if (nRet < 0)
                    {
                        _statusInfo.Text = "Failed to set baud 2!";
                        MessageBox.Show("Failed to set baud 2!");
                        Defs.Device2.acCanClose();
                    }
                    else
                    {
                        nRet = Defs.Device2.acSetTimeOut(Convert.ToUInt32(ReadTimeOutValue_can2), Convert.ToUInt32(WriteTimeOutValue_can2));
                        if (nRet < 0)
                        {
                            _statusInfo.Text = "Failed to set Timeout 2!";
                            MessageBox.Show("Failed to set Timeout 2!");
                            Defs.Device2.acCanClose();
                        }
                        else
                        {
                            nRet = Defs.Device2.acEnterWorkMode();
                            if (nRet < 0)
                            {
                                _statusInfo.Text = "Failed to restart operation!";
                                MessageBox.Show("Failed to restart operation!");
                                Defs.Device2.acCanClose();
                            }
                        }
                    }
                }
            }
            #endregion
        }