Пример #1
0
        public AIO121602()
        {
            ThicknessOffsets = new float[] { 0, 0, 0, 0, 0, 0, 0, 0 };
            System.Timers.Timer _timeout = new System.Timers.Timer(5000);
            bool isTimeout = false, isInitEnd = false;

            for (int i = 0; i < _avrs.Length; i++)
            {
                _avrs[i] = new MoveAverage(4);
            }

            _timeout.Elapsed += ((object sender, System.Timers.ElapsedEventArgs e) => {
                _timeout.Stop();
                isTimeout = true;
            });
            _timeout.Start();

            Task.Run(() => {
                LastErrorNo = _aio.Init(ITEM_NAME, out _aioId);
                isInitEnd   = true;
            });

            while (!isTimeout && !isInitEnd)
            {
                Thread.Sleep(100);
            }
            _timeout.Stop();
            if (isTimeout)
            {
                LastErrorNo = -1;
                return;
            }

            LastErrorNo = _aio.ResetDevice(_aioId);
            if (LastErrorNo != 0)
            {
                return;
            }

            LastErrorNo = _aio.SetAiStopTrigger(_aioId, 4);
            if (LastErrorNo != 0)
            {
                return;
            }

            LastErrorNo = _aio.SetAiChannels(_aioId, 14);
            if (LastErrorNo != 0)
            {
                return;
            }
            LastErrorNo = _aio.SetAiRangeAll(_aioId, (short)CaioConst.PM5);
            if (LastErrorNo != 0)
            {
                return;
            }
            LastErrorNo = _aio.SetAiTransferMode(_aioId, 0);                                    // デバイスバッファモード
            if (LastErrorNo != 0)
            {
                return;
            }
            LastErrorNo = _aio.SetAiMemoryType(_aioId, 0);                                              // MemoryFIFOモード
            if (LastErrorNo != 0)
            {
                return;
            }
            LastErrorNo = _aio.SetAiClockType(_aioId, 0);
            if (LastErrorNo != 0)
            {
                return;
            }
            LastErrorNo = _aio.SetAiSamplingClock(_aioId, 3000);                    // 1msサンプリング
//			LastErrorNo = _aio.SetAiSamplingClock( _aioId, 50000 );      // 1msサンプリング
            if (LastErrorNo != 0)
            {
                return;
            }

            ThicknessOneSheetQue = new Queue <ThicknessData[][]>();

            _aio.StartAi(_aioId);
            _interval          = new System.Timers.Timer();
            _interval.Interval = 100;
            _interval.Elapsed += _interval_Elapsed;
            _interval.Start();
        }
Пример #2
0
        //ロガーの設定
        private void setLogger()
        {
            //入力方式
            int aioInputMethod = aio.SetAiInputMethod(devId, 0);    //シングルエンド

            if (aioInputMethod != 0)
            {
                statusMsg(aioInputMethod, null);
                return;
            }

            //使用チャネル数
            int aioCh = aio.SetAiChannels(devId, 2);    //2ch

            if (aioCh != 0)
            {
                statusMsg(aioCh, null);
                return;
            }

            //計測レンジ指定
            int aioRange = aio.SetAiRangeAll(devId, (short)CaioConst.PM5); //±5V

            if (aioRange != 0)
            {
                //1664LAXでは±10V固定
                statusMsg(aioRange, null);
                aioRange = aio.SetAiRangeAll(devId, (short)CaioConst.PM10); //±10V
                if (aioRange != 0)
                {
                    statusMsg(aioCh, null);
                    return;
                }
                statusMsg(1, "レンジが変更できないデバイスなので±10V固定で動作します");
            }

            //転送方式
            int aioMemTrans = aio.SetAiTransferMode(devId, 0);  //デバイスバッファ

            if (aioMemTrans != 0)
            {
                statusMsg(aioMemTrans, null);
                return;
            }

            //メモリ格納形式
            int aioMem = aio.SetAiMemoryType(devId, 0); //FIFO

            if (aioMem != 0)
            {
                statusMsg(aioMem, null);
                return;
            }

            //クロック
            int aioClk = aio.SetAiClockType(devId, 0);  //内部クロック

            if (aioClk != 0)
            {
                statusMsg(aioClk, null);
                return;
            }

            //変換速度
            int aioSpd = aio.SetAiSamplingClock(devId, 1000);   //1000us

            if (aioSpd != 0)
            {
                statusMsg(aioSpd, null);
                return;
            }
            float clock = 0;

            aio.GetAiSamplingClock(devId, out clock);
            convSpeed.Text = clock.ToString() + "μs";

            //開始条件
            int aioStartTrg = aio.SetAiStartTrigger(devId, 0);  //ソフトウェア

            if (aioStartTrg != 0)
            {
                statusMsg(aioStartTrg, null);
                return;
            }

            //停止条件
            int aioStopTrg = aio.SetAiStopTrigger(devId, 4);    //コマンド

            if (aioStopTrg != 0)
            {
                statusMsg(aioStopTrg, null);
                return;
            }

            /*
             * 停止条件 = 0とリピート回数 = 0でDEMO DEVICEにて実行するとこのプログラムではBSoDが発生しWindowsが停止する。
             * 恐らく想定外入力によって引き起こされるドライバのバグだと思われる。
             */

            //イベント駆動
            int aioEvent = aio.SetAiEvent(devId, (uint)this.Handle, (int)CaioConst.AIE_DATA_NUM |                          //指定回数格納
                                          (int)CaioConst.AIE_OFERR | (int)CaioConst.AIE_SCERR | (int)CaioConst.AIE_ADERR); //オーバーフロー、クロックエラー、AD変換エラー

            if (aioEvent != 0)
            {
                statusMsg(aioEvent, null);
                return;
            }

            //イベント発生サンプリング回数設定
            int aioSamplingTimes = aio.SetAiEventSamplingTimes(devId, 1000);    //1000回だと画像データ取得時刻にかなりの確率で間に合わない

            if (aioSamplingTimes != 0)
            {
                statusMsg(aioSamplingTimes, null);
                return;
            }
        }