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 První uzel je nazvaný kořenný uzel. YMUlt YMUlt? YUNit YUNit? 1.00 Volt Header Space Arguments Příkaz (Commands) Dotaz (Query) WFMPre:YMUlt 1.00V 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> <Block 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 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"); Fmt (Zapis, "%s<head ON"); Fmt (Zapis, "%s<loc NON"); Fmt (Zapis, "%s<id?"); ibrd (Device, Cteni, 100); Scan (Cteni, "%s>%s[w50t-]", Typ_DSO); SetCtrlVal (Panel_OSCIL, OSCIL_TYP, Typ_DSO);
Fmt (Zapis, "%s<sel:ch1?"); ibrd (Device, Cteni, 100); Scan (Cteni, "%s[i8]>%i", &Sel); if (Sel) { //-------------------------------------------------------------- Fmt (Zapis, "%s<dat:sou CH1"); Fmt (Zapis, "%s<dat:wid 2"); Fmt (Zapis, "%s<dat:enc RPB"); Fmt (Zapis, "%s<wfmp:enc BIN"); Fmt (Zapis, "%s<wfmp:byt_n 2"); Fmt (Zapis, "%s<dat:star 1"); Fmt (Zapis, "%s<dat:stop 10000"); Record = 10000; Fmt (Zapis, "%s<ch1:vol?"); ibrd (Device, Cteni, 100); SetCtrlVal (Panel_OSCIL, OSCIL_WA_1, Cteni); Fmt (Zapis, "%s<hor:mai?"); ibrd (Device, Cteni, 100); SetCtrlVal (Panel_OSCIL, OSCIL_TIM, Cteni); FillBytes (Cteni, 0, 100, 0); Fmt (Zapis, "%s<trig:mai:edge?"); 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?"); 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); FillBytes (Cteni, 0, 100, 0); 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); FillBytes (Cteni, 0, 100, 0); ibwrt (Device, "HOR:MAI?", 8); ibrd (Device, Cteni, 100); puts (Cteni); FillBytes (Cteni, 0, 100, 0); ibwrt (Device, "TRIG:MAI:EDGE?", 14); ibrd (Device, Cteni, 100); puts (Cteni); FillBytes (Cteni, 0, 100, 0); //---------------------------------------------- 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);
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); FillBytes (Cteni, 0, 100, 0); 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); FillBytes (Cteni, 0, 100, 0); ibwrt (Device, "HOR:MAI?", 8); ibrd (Device, Cteni, 100); puts (Cteni); FillBytes (Cteni, 0, 100, 0); ibwrt (Device, "TRIG:MAI:EDGE?", 14); ibrd (Device, Cteni, 100); puts (Cteni); FillBytes (Cteni, 0, 100, 0); //---------------------------------------------- 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);
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