/// <summary>
        /// 使用AIChannelConfiguration进行简仪采集卡通道配置
        /// </summary>
        /// <param name="jyTask">需要配置的简仪采集卡任务</param>
        /// <param name="channelConfiguration">通道配置</param>
        public static void MapAndConfigChannel(JYPXI62022AITask jyTask, AIChannelConfiguration channelConfiguration)
        {
            if (channelConfiguration.TerminalConfigType != AITerminalType.Differential)
            {
                throw new Exception("该简仪采集卡只能配置为差分输入!");
            }
            //简仪采集卡通道用int表示,应该是一个int的集合
            //var channels = ((JArray)channelConfiguration.ChannelName).ToObject<List<int>>(); 当ChannelName还是Object的时候
            var channels = ChannelNameTranslator.StringToListInt(channelConfiguration.ChannelName);

            for (int i = 0; i < channels.Count(); i++)
            {
                jyTask.AddChannel(channels[i], channelConfiguration.MinimumValue, channelConfiguration.MaximumValue);
            }
        }
Exemple #2
0
        private static void MapAndConfigChannel(NIScope scopeSession, AIChannelConfiguration channelConfiguration)
        {
            //todo:检查是否真的是0,1,2……
            //var channels = ((JArray)channelConfiguration.ChannelName).ToObject<List<int>>(); 当ChannelName还是Object的时候
            var channels = ChannelNameTranslator.StringToListInt(channelConfiguration.ChannelName);

            double range = channelConfiguration.MaximumValue - channelConfiguration.MinimumValue;

            foreach (var c in channels)
            {
                //Todo:信号输入方式无法配置
                //配置信号输入方式
                switch (channelConfiguration.TerminalConfigType)
                {
                //目前只支持差分
                case AITerminalType.Differential:
                    scopeSession.Channels[c.ToString()].Configure(range, 0, ScopeVerticalCoupling.DC, 1.0, true);
                    break;

                default:
                    throw new Exception("输入方式 AITerminalType 定义无效!");
                }
            }
        }
Exemple #3
0
        //读数据
        private void readData(NIScope scopeSession)
        {
            //var channels = ((JArray)_staticConfig.ChannelConfig.ChannelName).ToObject<List<int>>();
            var channels = ChannelNameTranslator.StringToListInt(_staticConfig.ChannelConfig.ChannelName);
            //开新线程等待读数据
            //await Task.Run(() =>
            //{
            int totalReadDataLength   = 0;
            PrecisionTimeSpan timeout = new PrecisionTimeSpan(1000000);  //无timeOut
            AnalogWaveformCollection <double> scopeWaveform = null;

            double[,] readData = new double[_staticConfig.ChannelCount, _staticConfig.ClockConfig.TotalSampleLengthPerChannel];

            //生成 channels
            string channelScope = null;
            //var sChannels = ((JArray)_staticConfig.ChannelConfig.ChannelName).ToObject<List<int>>();
            var sChannels = ChannelNameTranslator.StringToListInt(_staticConfig.ChannelConfig.ChannelName);

            foreach (var s in sChannels)
            {
                channelScope += s + ",";
            }
            channelScope = channelScope.Substring(0, channelScope.Length - 1);

            //一次采完
            //经过测试,发现在默认设置(不设置其它)情况下:
            // 1、如果多次 FetchDouble,则每 2 次的数据不连续(中间断一截)
            // 2、如果设置多个 records,则每 2 个 record 之间的数据不连续(中间断一截)
            //因此暂时只允许一个 record
            scopeWaveform = scopeSession.Channels[channelScope].Measurement.FetchDouble(timeout, _staticConfig.ClockConfig.TotalSampleLengthPerChannel, scopeWaveform);

            //一旦上面这里获取到数据,则表示采集开始
            AIState = Status.Running;

            // i 是读取次数
            // j 是通道计数
            // k 是每一波的每个点
            double[] temp;
            AnalogWaveform <double> waveform;

            for (int i = 0; i < _staticConfig.ClockConfig.TotalSampleLengthPerChannel / _staticConfig.ClockConfig.ReadSamplePerTime; i++)
            {
                //将一个通道的数据拷贝到 data[,] 的一行
                for (int j = 0; j < _staticConfig.ChannelCount; j++)
                {
                    waveform = scopeWaveform[i, j];
                    temp     = waveform.GetRawData();
                    for (int k = 0; k < _staticConfig.ClockConfig.ReadSamplePerTime; k++)
                    {
                        readData[j, i *_staticConfig.ClockConfig.ReadSamplePerTime + k] = temp[k];
                    }
                }

                totalReadDataLength += _staticConfig.ClockConfig.ReadSamplePerTime;
            }
            GC.Collect();
            Thread.Sleep(2000);

            //发布数据到达事件
            OnDataArrival(readData);

            //发布停止任务事件
            OnAITaskStopped();

            //等待,让外部保证获取到 Running 状态
            Thread.Sleep(2000);
            //});
        }