2012-12-17 4 views
8

मैं एक Tektronix DPO4104 oscilloscope (MATLAB ड्राइवर here) से डेटा संग्रह करने के लिए MATLAB GUI का निर्माण कर रहा हूं।एक Tektronix oscilloscope से 10,000 से अधिक डेटा अंक एकत्रित करें?

मैं tmtool के साथ खेल रहा हूं और मेरे जीयूआई कोड के साथ खेल रहा हूं और पाया है कि ड्राइवर केवल 10,000 डेटा अंक एकत्र कर सकता है, भले ही ऑसिलोस्कोप 10k से अधिक अंक दिखाने के लिए सेट हो। मुझे this post on in CCSM मिला लेकिन यह बहुत उपयोगी नहीं रहा है। (यदि आप इसे पढ़ना चाहते हैं तो मैं वहां पर आखिरी पोस्ट हूं।) मैं डीपीओ 4104 चालक का उपयोग कर रहा हूं, जबकि यह पोस्ट डीपीओ 4100 चालक के उपयोग पर चर्चा करता है, मुझे विश्वास है।

जहां तक ​​मेरा बता सकते हैं, कदम हैं: वर्तमान recordLength के लिए खाते

  1. ड्राइवर का संपादित readwaveform समारोह - मेरे मामले में, 100,000 अंक, का कहना है।
  2. ड्राइवर से MaxNumberPoint को 10,000 से 100,000 तक मैन्युअल रूप से संपादित करें। (मेरे मामले में, डिफ़ॉल्ट संख्या 0 थी .. मैंने इसे 100,000 में बदल दिया)।
  3. मैन्युअल रूप से EndingPoint संपादित करें। मैंने इसे 100,000 तक भी सेट किया।
  4. डिवाइस ऑब्जेक्ट बनाने से पहले, set(interfaceObj, 'InputBufferLength', 2.5*recordLength), यानी, सुनिश्चित करें कि इनपुट बफर 100,000 से अधिक अंक फिट कर सकता है। अपेक्षाकृत बफर को कम से कम दोगुना उपयोग करने की अनुशंसा की जाती है। मैंने बस 2.5 का इस्तेमाल किया था।
  5. डिवाइस ऑब्जेक्ट और वेवफ़ॉर्म ऑब्जेक्ट, connect(), और readwaveform बनाएं। फायदा।

मैं अभी भी 10,000 से अधिक अंक एकत्र करने में असमर्थ हूं, या तो tmtool या मेरे जीयूआई के माध्यम से। किसी भी सहायता की सराहना की जाएगी।

+2

क्या आपने Tektronix विकास टीम से पूछने की कोशिश की है? (उन्होंने ड्राइवर लिखा) – bla

+0

@ नतन वास्तव में। प्रतिक्रिया पर इंतजार कर रहा है। यकीन नहीं है कि मुझे एक, टीबी मिलेगा। –

+0

क्या आपके पास डेटा अधिग्रहण टूलबॉक्स है? – Rasman

उत्तर

1

मैंने इसे समझ लिया! मुझे लगता है। वापस कदम उठाने के लिए कुछ हफ्तों लेना और वास्तव में मदद की ताज़ा करना। यहां मैंने जो किया है:

1) बड़े बफर आकार को कॉन्फ़िगर करने के लिए ड्राइवर के init फ़ंक्शन को संपादित करें। पूरा init कोड:

function init(obj) 
% This method is called after the object is created. 
% OBJ is the device object. 
% End of function definition - DO NOT EDIT 

% Extract the interface object. 
interface = get(obj, 'Interface'); 

fclose(interface); 

% Configure the buffer size to allow for waveform transfer. 
set(interface, 'InputBufferSize', 12e6); 
set(interface, 'OutputBufferSize', 12e6); % Originally is set to 50,000 

मैं मूल रूप से 22e6 को बफ़र आकार सेट करने की कोशिश की (मैं 10 लाख अंक प्राप्त करना चाहता था), लेकिन मैं बाहर के स्मृति त्रुटियों मिला है। माना जाता है कि बफर को दोगुना से थोड़ा अधिक होना चाहिए जो आप बाहर निकलने की उम्मीद करते हैं, साथ ही शीर्षकों के लिए स्थान। मुझे शायद "हेडर" के लायक 2 मिलियन अंक की आवश्यकता नहीं है, लेकिन एह।

2) चालक के readwaveform() को पहले पूछने के लिए संपादित करें कि उपयोगकर्ता-सेटटेबल संख्या एकत्र करने के लिए क्या होना चाहिए। फिर, यह सुनिश्चित करने के लिए एससीपीआई आदेशों को दायरे में लिखें कि डेटा बिंदुओं को स्थानांतरित करने की संख्या उपयोगकर्ता की इच्छाओं की संख्या के बराबर है। निम्नलिखित स्निपेट readwaveform में चाल करना होगा:

try 
    % Specify source 
    fprintf(interface,['DATA:SOURCE ' trueSource]); 

    %----------BEGIN CODE TO HANDLE MORE THAN 10k POINTS---------- 
    recordLength = query(interface, 'HORizontal:RECordlength?'); 
    fprintf(interface, 'DATA:START 1'); 
    fprintf(interface, 'DATA:STOP %d', str2num(recordLength)); 
    %----------END CODE TO HANDLE MORE THAN 10k POINTS---------- 

    % Issue the curve transfer command. 
    fprintf(interface, 'CURVE?'); 

    raw = binblockread(interface, 'int16'); 

    % Tektronix scopes send and extra terminator after the binblock. 
    fread(interface, 1); 

3) उपयोगकर्ता कोड में, अंतर्निहित इंटरफेस वस्तु को रिकॉर्ड आकार बदलने के लिए एक SCPI आदेश सेट:

% interfaceObj is a VISA object. 
fprintf(interfaceObj, 'HORizontal:RECordlength 5000000'); 

वहाँ तुम्हारे पास है । उम्मीद है कि यह किसी और को मदद करता है जो इस मुद्दे को समझने की कोशिश कर रहा है।

1

क्या आपके लिए एक समय में डेटा पॉइंट 10,000 एकत्र करना संभव है, फिर उन्हें कहीं सेव करें, अगले 10,000 को इकट्ठा करें, उन्हें सहेजे गए बिंदुओं में शामिल करें, दोहराएं?

यह एक काम-आसपास है, निश्चित है।

+0

मुझे लगता है कि शायद ब्लॉक के बीच एक समय अंतर होगा? –

+0

इस प्रकार डीएक्यू अक्सर किया जाता है – Rasman

+0

मैं ओसीलोस्कोप स्क्रीन से बिल्कुल डेटा खींच रहा हूं। यदि मैंने रिकॉर्ड की लंबाई 10,000 से अधिक अंक निर्धारित की है, तो केवल पहले 10k अंक खींचे जाते हैं। विश्लेषण वास्तविक समय में किया जाता है, इसलिए डेटा में अंतर के साथ ऐसा करना स्वीकार्य नहीं हो सकता है। मैं एक और अधिक सुरुचिपूर्ण समाधान की उम्मीद कर रहा हूँ। –

2

मुझे एक टेक्ट्रोनिक्स इंजीनियर का अधिकार मिला; उन्होंने मूल रूप से मुझे सीधे एससीपीआई आदेशों का उपयोग करने और ड्राइवर को छोड़ने के लिए कहा। जबकि कष्टप्रद, यह सबसे आसान समाधान हो सकता है।

0

यहां एक बुरा विचार है। 10,000 अंक इकट्ठा करना शुरू करें। जब आप 5000 अंक प्राप्त करते हैं, तो डेटा एकत्र करना शुरू करें (आपको उसे नए थ्रेड में चलाने की आवश्यकता हो सकती है)। जब तक आपको आवश्यक सभी डेटा 20 डेटा संरचनाओं में संग्रहीत नहीं किया जाता है, तब तक आगे बढ़ते रहें। फिर, डेटा बिंदुओं को रेखांकित करके संरचनाओं को एक संरचना में संयोजित करें। एससीपीआई कमांड को सीधे कॉल करने से यह अधिक काम हो सकता है और शायद कुछ ग़लत चेतावनी हो सकती हैं जिनके बारे में मैंने सोचा नहीं है। लेकिन जैसा कि मैंने कहा, यह एक बुरा विचार है ...

संबंधित मुद्दे