Diagnostika_programové vybavení XV.

Transkript

Diagnostika_programové vybavení XV.
Programová podpora měřicích systémů
http://www.ni.com/products/
Programová podpora měřicích systémů
http://www.ni.com/labview/
Programová podpora měřicích systémů
http://www.ni.com/lwcvi/
Programová podpora měřicích systémů
Programová podpora měřicích systémů
http://www.home.agilent.com/agilent/product.jspx?nid=536900532.734557.00&cc=US&lc=eng
Programová podpora měřicích systémů
http://www.keithley.com
SCPI je sdružení pro vývoj řídicího jazyka užívaného mezi
programovatelným přístrojem a počítačem.
Jeho cílem je podporovat běžné programovatelné nástroje.
http://www.scpiconsortium.org/
SCPI standard specifikuje strukturu instrukcí pro programovatelné
přístroje řízené po sběrbici GPIB, RS-232C, USB, LAN, VXIbus
atd.
SCPI také zahrnuje standardní předepsané sady příkazů pro různé
"třídy" přístrojů DMMs a osciloskopy atd.
SCPI sdružení je organizace jehož členové mají zájem
sjednotit komunikaci mezi počítači a měřícími přístroji.
SCPI standard je postaven na principu IEEE- 488.2,
standardních kódů a formátů.
SCPI příkaz je složen znaky ASCII, a proto může být
aplikován v libovolném počítačovém jazyce, jako
standardní C, nebo C++. To může také být využíváno v
aplikačních prostředí jako LabWindows/CVI, LabVIEW,
nebo HP VEE.
SCPI je na hardwaru nezávislý. SCPI řetězce mohou být
přeneseny libovolnými rozhraními, např. GPIB, sériové
propojení do 15 m, VXIbus nebo LAN sítě.
Cílem a úkolem SCPI sdružení je zlepšit efektivitu testovacích nástrojů
- softwaru, zvyšovat stabilitu měřících systémů a součinnost
přístrojů a zařízení od různých výrobců.
SCPI rozvíjí obecné příkazy na základě "anglický zkratek“.
SCPI sdružení doufá, že zlepší programování pro širokou škálu
měřících přístrojů a pro softwarovou dokumentaci a udržovatelnost.
SCPI sdružení se setkává nejméně jednou ročně, a kdykoliv členové
cítí že je nezbytné uvažovat o nových příkazech. V posledních
letech, bylo setkání dvakrát ročně. Valná hromada se scházi
pravidelně v lednu každým rokem v San Diego, CA. Další schůzky se
plánují podle potřeby, v jiné členské zemi.
Ukázka SCPI příkazu pro nastavení OSC.
SCPI se řídí stromovou strukturu.
Související příkazy jsou seskupené do větví na stromu.
Každé klíčové slovo v příkazu se nazývá uzel .
WFMPre
YMUlt
YMUlt?
První uzel je nazvaný kořenný uzel .
YUNit
1.00
YUNit?
Volt
Header
Space
Arguments
Příkaz (Commands) WFMPre:YMUlt 1.00V
Dotaz (Query)
WFMPre:YMUlt?
(Malá písmena jsou nepovinná.)
<Header> základní příkaz, jednotlivé fukce jsou odděleny dvojtečkou „:“
<Mnemonic> jednotlivé funkce „Headeru“
<Argument> fodnota velikosti, kvality, omezení nebo limitních mezí
<Comma> čárka odělující jednotlivé hodnoty argumentu
<Space> mezera mezi headerem a argumentem
Příkaz (Commands)
[:]<Header>[<Space><Argument>[<Comma><Argument>]….]
WFMPre:YUNit_Volt,YMUlt _1.00V
Dotaz (Queries)
[:]<Header>?
[:]<Header>?[<Space><Argument>[<Comma><Argument>]….]
WFMPre:YUNit?
Typy argumentů
<Numeric Arguments>
<NR1> jednoduché celé číslo
<NR2> reálné číslo bez exponentu
<NR3> reálné číslo s exponentem
<String Arguments>
<Q-String> string of ASCII text / 7-bit ASCII character set
všechny znaky mezi „………“
znakovou zprávu zasíláme „this is an ’acceptable’ string”
znakové řetězce lze seskupovat „here is a“ “mark“
<Block Arguments>
seskupení argumentů do jednoho bloku
<Block> ::= {#<NZD><Dig>[<Dchar>]
ALIas:DEFINE “SETUp1”, #231AUTOSet EXECute;:SELect:REF1 ON
Block Header
Number of Length Digits
Specifies data Length
COMM = 1;
OpenComConfig (COMM, "COM1", 9600, 0, 8, 1, 4096, 4096);
SetComTime (COMM, 1.5);
SetCTSMode (COMM, 1);
Fmt (Zapis, "%s<VERB OFF\r\n");
ComWrt (COMM, Zapis, (long)NumFmtdBytes());
Fmt (Zapis, "%s<HEAD ON\r\n");
ComWrt (COMM, Zapis, (long)NumFmtdBytes());
Fmt (Zapis, "%s<LOC NON\r\n");
ComWrt (COMM, Zapis, (long)NumFmtdBytes());
Fmt (Zapis, "%s<ID?\r\n");
ComWrt (COMM, Zapis, (long)NumFmtdBytes());
ComRdTerm (COMM, Cteni, 100, 13);
Scan (Cteni, "%s>%s[w50t-]", Typ_DSO);
SetCtrlVal (Panel_OSCIL, OSCIL_TYP, Typ_DSO);
ComWrt (COMM, "SEL:CH1?\r\n",
10);
ComRdTerm (COMM, Cteni, 25, 13);
Scan (Cteni, "%s[i8]>%i", &Sel);
if (Sel) { //----------------------------ComWrt (COMM, "DAT:SOU CH1\r\n",
13);
ComWrt (COMM, "DAT:WID 2\r\n",
11);
ComWrt (COMM, "DAT:ENC RPB\r\n",
13);
ComWrt (COMM, "WFMP:ENC BIN\r\n",
14);
ComWrt (COMM, "WFMP:BYT_N 2\r\n",
14);
ComWrt (COMM, "DAT:STAR 1\r\n",
12);
ComWrt (COMM, "DAT:STOP 10000\r\n",
16);
Record = 10000;
ComWrt (COMM, "CH1:VOL?\r\n",
10);
ComRdTerm (COMM, Cteni, 100, 13);
SetCtrlVal (Panel_OSCIL, OSCIL_WA_1, Cteni);
FillBytes (Cteni, 0, 100, 0);
ComWrt (COMM, "HOR:MAI?\r\n",
10);
ComRdTerm (COMM, Cteni, 100, 13);
SetCtrlVal (Panel_OSCIL, OSCIL_TIM, Cteni);
FillBytes (Cteni, 0, 100, 0);
ComWrt (COMM, "TRIG:MAI:EDGE?\r\n",
16);
ComRdTerm (COMM, Cteni, 100, 13);
SetCtrlVal (Panel_OSCIL, OSCIL_TRIG, Cteni);
FillBytes (Cteni, 0, 100, 0);
//---------------------------------------------Fmt (Str1, "%s<%i", 10000 * 2);
Fmt (Str2, "%s<:CURV #%i%i", NumFmtdBytes(), 10000 * 2);
StartData = StringLength (Str2);
DF = OpenFile ("DATA_W", VAL_READ_WRITE, VAL_OPEN_AS_IS, VAL_BINARY);
ComWrt (COMM, "CURVE?\r\n", 8);
ComToFile (COMM, DF, 0, -1);
FlushOutQ (COMM);
SetFilePtr (DF, StartData, 0);
ScanFile (DF, "%*i[b2uo10]>%*i",Record,Record, Wave_1);
CloseFile (DF);
Device = OpenDev ("DEV4", "DEV4");
ibtmo (Device, T3s);
Fmt (Zapis, "%s<VERB OFF");
ibwrt (Device, Zapis, (long)NumFmtdBytes());
Fmt (Zapis, "%s<HEAD ON");
ibwrt (Device, Zapis, (long)NumFmtdBytes());
Fmt (Zapis, "%s<LOC NON");
ibwrt (Device, Zapis, (long)NumFmtdBytes());
Fmt (Zapis, "%s<ID?");
ibwrt (Device, Zapis, (long)NumFmtdBytes());
ibrd (Device, Cteni, 100);
Scan (Cteni, "%s>%s[w50t-]", Typ_DSO);
SetCtrlVal (Panel_OSCIL, OSCIL_TYP, Typ_DSO);
Fmt (Zapis, "%s<SEL:CH1?");
ibwrt (Device, Zapis, (long)NumFmtdBytes());
ibrd (Device, Cteni, 100);
Scan (Cteni, "%s[i8]>%i", &Sel);
if (Sel) {
//-------------------------------------------------------------Fmt (Zapis, "%s<DAT:SOU CH1");
ibwrt (Device, Zapis, (long)NumFmtdBytes());
Fmt (Zapis, "%s<DAT:WID 2");
ibwrt (Device, Zapis, (long)NumFmtdBytes());
Fmt (Zapis, "%s<DAT:ENC RPB");
ibwrt (Device, Zapis, (long)NumFmtdBytes());
Fmt (Zapis, "%s<WFMP:ENC BIN");
ibwrt (Device, Zapis, (long)NumFmtdBytes());
Fmt (Zapis, "%s<WFMP:BYT_N 2");
ibwrt (Device, Zapis, (long)NumFmtdBytes());
Fmt (Zapis, "%s<DAT:STAR 1");
ibwrt (Device, Zapis, (long)NumFmtdBytes());
Fmt (Zapis, "%s<DAT:STOP 10000");
Record = 10000;
ibwrt (Device, Zapis, (long)NumFmtdBytes());
Fmt (Zapis, "%s<CH1:VOL?");
ibwrt (Device, Zapis, (long)NumFmtdBytes());
ibrd (Device, Cteni, 100); SetCtrlVal (Panel_OSCIL, OSCIL_WA_1, Cteni);
Fmt (Zapis, "%s<HOR:MAI?");
ibwrt (Device, Zapis, (long)NumFmtdBytes());
ibrd (Device, Cteni, 100); SetCtrlVal (Panel_OSCIL, OSCIL_TIM, Cteni);
FillBytes (Cteni, 0, 100, 0);
Fmt (Zapis, "%s<TRIG:MAI:EDGE?");
ibwrt (Device, Zapis, (long)NumFmtdBytes());
ibrd (Device, Cteni, 100); SetCtrlVal (Panel_OSCIL, OSCIL_TRIG, Cteni);
FillBytes (Cteni, 0, 100, 0);
//---------------------------------------------Fmt (Str1, "%s<%i", 10000 * 2);
Fmt (Str2, "%s<:CURV #%i%i", NumFmtdBytes(), 10000 * 2);
StartData = StringLength (Str2);
Fmt (Zapis, "%s<CURVE?");
ibwrt (Device, Zapis, (long)NumFmtdBytes());
ibrdf (Device, "DATA_W");
DF = OpenFile ("DATA_W", VAL_READ_WRITE, VAL_OPEN_AS_IS, VAL_BINARY);
SetFilePtr (DF, StartData, 0);
ScanFile (DF, "%*i[b2uo10]>%*i",Record,Record, Wave_1);
CloseFile (DF);
Device = OpenDev ("DEV1", "DEV1");
ibtmo (Device, T3s);
ibwrt (Device, "VERB OFF",
8);
ibwrt (Device, "HEAD ON",
7);
ibwrt (Device, "LOC NON",
7);
ibwrt (Device, "ID?",
3);
ibrd (Device, Cteni, 100);
puts (Cteni);
ibwrt (Device, "DAT:SOU CH1",
11);
ibwrt (Device, "DAT:WID 1",
9);
ibwrt (Device, "DAT:ENC RPB",
11);
ibwrt (Device, "WFMP:ENC BIN", 12);
ibwrt (Device, "WFMP:BYT_N 1", 12);
ibwrt (Device, "DAT:STAR 1",
10);
ibwrt (Device, "DAT:STOP 10000", 14);
ibwrt (Device, "WFMP:ENC BIN", 12);
ibwrt (Device, "CH1:VOL?",
8);
ibrd (Device, Cteni, 100);
puts (Cteni);
ibwrt (Device, "HOR:MAI?",
8);
ibrd (Device, Cteni, 100);
puts (Cteni);
ibwrt (Device, "TRIG:MAI:EDGE?", 14);
ibrd (Device, Cteni, 100);
puts (Cteni);
//---------------------------------------------ibwrt (Device, "CURVE?",
6);
ibrd (Device, Data, 12000);
Scan (Data, "%*i[b1ui13]>%*i",Record,Record, Wave_1);
WaveformGraphPopup ("", Wave_1, 10000, VAL_INTEGER, 1.0, 0.0, 0.0, 1.0);
FillBytes (Cteni, 0, 100, 0);
FillBytes (Cteni, 0, 100, 0);
FillBytes (Cteni, 0, 100, 0);
FillBytes (Cteni, 0, 100, 0);
Record = 10000;
Device = OpenDev ("DEV1", "DEV1");
ibtmo (Device, T3s);
ibwrt (Device, "VERB OFF",
8);
ibwrt (Device, "HEAD ON",
7);
ibwrt (Device, "LOC NON",
7);
ibwrt (Device, "ID?",
3);
ibrd (Device, Cteni, 100);
puts (Cteni);
ibwrt (Device, "DAT:SOU CH1",
11);
ibwrt (Device, "DAT:WID 2",
9);
ibwrt (Device, "DAT:ENC RPB",
11);
ibwrt (Device, "WFMP:ENC BIN", 12);
ibwrt (Device, "WFMP:BYT_N 2", 12);
ibwrt (Device, "DAT:STAR 1",
10);
ibwrt (Device, "DAT:STOP 10000", 14);
ibwrt (Device, "WFMP:ENC BIN", 12);
ibwrt (Device, "CH1:VOL?",
8);
ibrd (Device, Cteni, 100);
puts (Cteni);
ibwrt (Device, "HOR:MAI?",
8);
ibrd (Device, Cteni, 100);
puts (Cteni);
ibwrt (Device, "TRIG:MAI:EDGE?", 14);
ibrd (Device, Cteni, 100);
puts (Cteni);
//---------------------------------------------ibwrt (Device, "CURVE?",
6);
ibrd (Device, Data, 25000);
Scan (Data, "%*i[b2uo01i6]>%*i",Record,Record, Wave_1);
WaveformGraphPopup ("", Wave_1, 10000, VAL_INTEGER, 1.0, 0.0, 0.0, 1.0);
FillBytes (Cteni, 0, 100, 0);
FillBytes (Cteni, 0, 100, 0);
FillBytes (Cteni, 0, 100, 0);
FillBytes (Cteni, 0, 100, 0);
http://www.ni.com/events/tutorials/campus.htm
http://www.ni.com/swf/presentation/us/pxiconselec/default.htm
http://www.ni.com/swf/presentation/us/labview/lvpctarget/
26

Podobné dokumenty

Řada PIC18F1XK50 a její použití pro převodníku USB

Řada PIC18F1XK50 a její použití pro převodníku USB Low Pin Count USB Development Kit – Jednoduchý a levný vývojový kit usnadňující vývoj aplikací pro PIC18F1XK50. Obsahuje dokumentaci s příklady zapojení a programů, jednu osazenou a druhou neosazen...

Více

The `pst-map2d` package A PSTricks package for

The `pst-map2d` package A PSTricks package for Il faut en effet indiquer le chemin des données dans la variable path. Cette variable contient le chemin des données sur mon disque dur : path=C:/mappemonde/wdb Il faut donc avant le \begin{documen...

Více

Technika k dělení a úkosování trubek

Technika k dělení a úkosování trubek Přepravní kufr s výztuhami...............................................13 Stroje k dělení a úkosování trubek RA 21 S.................... 14 Přepravní kufr s výztuhami................................

Více

redarove mereni.qxd

redarove mereni.qxd hladinomÏru vyuûÌvajÌcÌho techniky FMCW. Oscil·tor s promÏnn˝m kmitoËtem je ¯Ìzen mikroprocesorem tak, aby na v˝stupu poskytoval line·rnÏ frekvenËnÏ modulovan˝ sign·l. Tento sign·l se zesÌlÌ a pomo...

Více

CENÍK WILIER 2013

CENÍK WILIER 2013 RED WIND RZERO FULCRUM R4

Více

Ovládání komunikace dle IEC 870-5-101 - UTEE

Ovládání komunikace dle IEC 870-5-101 - UTEE Téměř žádný automatizovaný proces se dnes neobejde bez vizualizace a možnosti vzdáleného řízení. Tuto oblast nejvíce reprezentují známé SCADA (Supervisory Control And Data Acquistion) systémy, znám...

Více