Experix

Experix är en kommandotolk med öppen källkod designad för att använda laboratorieutrustning, särskilt datainsamlingsenheter , och bearbeta, visa och lagra data från dem. Den är användbar nu, endast under Linux x86 -arkitekturen, men fortfarande under utveckling, och användare är välkomna att delta i att utöka och förbättra den.

Experix skiljer sig radikalt från de flesta kommersiella datainsamlingsprogram, till exempel LabVIEW , som modellerar en mät- och styrapplikation som ett nätverk av operativa enheter representerade grafiskt som rutor med anslutningar som står för dataflöde. I dessa system skapas en applikation genom att manipulera dessa symboler på skärmen, och sedan används den genom att klicka på knappar och fylla i dialogrutor i en GUI-miljö.

Experix, däremot, representerar applikationen som en serie operationer som vanligtvis äger rum efter varandra. Den bearbetar en kommandorad på ett sekventiellt sätt, och siffror, operatorer, funktioner och kommandon på kommandoraden konsumerar och skapar objekt på en stack . Dessa objekt inkluderar heltal och flyttal i flera storlekar, komplexa och polära tal, flerdimensionella arrayer gjorda av någon av de numeriska typerna, flera typer av strängar och pekare till funktioner, kommandon och variabler (som kan vara tal, arrayer) och strängar). En funktion, kommando eller operator kräver vissa typer av objekt i stacken och placerar objekt i stacken, och kan även ändra värden i stackobjekt och variabler, rita grafer, ordna operationer i enhetsdrivrutiner och läsa och skriva filer.

Experix släpps under GNU GPL .

Syntax


En kommandorad kan ha praktiskt taget godtycklig längd och är en serie tokens. Till exempel .01 1000 ]+ \c .sin * graph/yK function1= skapa en matris med 1000 dubbelprecisionsvärden som representerar funktionen j*0,01*sin(j*.01) för j från 0 till 999 ; rita en graf av det med svarta punkter på en gul bakgrund; och kopiera den matrisen till en variabel som heter funktion1. Detta exempel på kommandotokens kommer att ge en uppfattning om utbudet av möjligheter som experix har.

  • 123e4 lägger dubbelprecisionstalet 1,23*10^6 på stacken
  • #x5a1 lägger heltal 0x5a1 på stacken
  • + lägger till objektet i stacknivå 1 till objektet i nivå 2; vad det betyder exakt beror på vad dessa objekt är: lägg till två siffror, eller lägg till ett nummer till varje medlem i en array, eller lägg till motsvarande medlemmar i två arrayer
  • .cos ersätter numret i stacknivå 1, eller varje medlem av arrayen i stacknivå 1, med cosinus (det numret)
  • ;c sätter ljusets hastighet på traven
  • :BS sätter biten som anges av stacknivå 1 (heltal) i heltal i stacknivå 2; gör arrayer också
  • ] gör en array från siffror på stacken
  • ]+ gör en rampmatris med hjälp av inkrementvärdet i nivå 2 och antalet element i nivå 1
  • [= ställer in värdet på ett matriselement
  • [s extraherar ett delutrymme av en array som specificeras av stackargument
  • %v får det mindre värdet av två stackobjekt
  • \/D (det är omvänt snedstreck, snedstreck, D) avkodar alternativtecknen som följer namnet på ett kommando i en kommandosträng
  • ?\/ visar hjälpfilen om kommando-alternativoperatorerna
  • ??fft startar en virtuell terminalsession med en textredigerare laddad med hjälpfilen om Fourier-transformationsfunktionen
  • &sökväg kör kommandona från filen som anges av "sökväg"
  • $9: kommandosträngsetikett nummer 9
  • >=$9 om värdet i stacknivå 1 är större än det i nivå 2, förgrenas kommandoexekveringen till etiketten $9:
  • >D gör ett uppskjutet kommando
  • <D kör ett uppskjutet kommando
  • ,3s ställer in kommandosträngen lokal variabel nummer 3
  • | sammanfogar två strängar eller arrayer
  • ) gör ett komplext tal från två tal eller en komplex matris från två matriser
  • .>3Y gör ett osignerat 1-bytenummer eller en matris med värden från stacknivå 3, som kan vara av valfri numerisk typ
  • \d sänker stacknivå 1
  • \;3u får antalet dataenheter i objektet i stacknivå 3
  • >0A gör ett sanningsvärde : 1 (sant) om alla medlemmar i arrayen i stacknivå 1 är större än 0; 0 (falskt) annars
  • def skapar variabler och kommandon
  • graf ritar grafer
  • exec kör program och samlar in standardutdata och standardfel i filer som kan visas eller redigeras av speciella hjälpoperatörer
  • fil överför data mellan filer och stackobjekt
  • xcd utför operationer på experix-enhetsfiler

Experix tillhandahåller maskinvaruoperationer i form av ett kommandoradsgränssnitt till drivrutiner . En experix-drivrutin har en "läs"-ingångspunkt som fungerar mer som en ioctl . Den kopierar heltalsmatrisen som experix har förberett, hittar i den en operationskod och stödjande information, utför operationen och returnerar resultat till matrisen. Drivrutinen upprätthåller en kontrollsida som experimenterar kartor med skrivskyddad behörighet, och ett antal datasidor som är mappade med läs-skrivbehörighet. xcd-funktionen utför denna minnesmapping och skapar kommandovariabler som representerar datasidorna. Dessa variabler kan sedan användas i kommandosträngar för att utföra datavisning och analys.

En datainsamlingsenhetsdrivrutin har en avbrottshanterare som använder data från utmatningssidorna och lagrar data på inmatningssidorna. Vid angivna indexvärden skickar den den nya datasignalen till experix. xcd-funktionen används för att binda signalen till en experix-kommandosträng. Sedan exekveras det kommandot när den nya datasignalen kommer. Ett enhetshanterarkommando kan uppdatera variabler, utföra analysfunktioner, rita grafer och utfärda varningar. Den körs atomärt, vilket innebär att den använder en separat stack och körs oavbrutet mellan två tokens i vilket användarkommando som helst som pågår.

Dokumentation

Dokumentationen är omfattande. Filen keywords.doc beskriver funktioner och datastrukturer i programmet. Kommandon, funktioner och operatörer beskrivs i hjälpfiler , som nås i experix av hjälpoperatörerna . Hjälpfiler är vanliga textfiler med terminal escape-sekvenser för att ge färgmarkeringar. Systemkommandon som cat och grep kommer att visa dessa filer med deras färgläggning, och redigeraren som experix använder för hjälpoperatorn med två frågetecken är nano (från GNU -projektet) med escape-sekvenstillägget. Källfilerna för nano som ändrades för att tillhandahålla detta tillägg finns på experix webbplats. Experix-användare uppmuntras att korrigera och förbättra hjälpfiler när de fungerar.

Begränsningar

För närvarande är experix endast tillgängligt för Linux och, på grund av assembly-språkkoden, endast på x86-arkitekturen.

För närvarande är det enda grafikstödet för experix med öppen källkod SVGAlib . Det är möjligt att ha en experix-grafiksession i en virtuell terminal och text- eller X-sessioner i andra, och växla mellan dem med ⟨alt-F#⟩-tangenterna. Grafikoperationer utförs av en serverprocess, och experix skickar kommandon och data till denna process genom en fifo. Den har en exekveringstråd som använder readline (ett öppen källkodsbibliotek från GNU-projektet) för att få kommandorader och placera dem i exekveringskön. En annan tråd översätter standardutgången ( dvs ekot från readline) till grafikserverkommandon. Experix kan också köras i en textskärm eller X-term utan att använda svgalib alls.

Det finns en del monteringskod och andra saker att ta hand om innan den kan köras på andra arkitekturer än x86.

Utbudet av drivrutiner och applikationer som är tillgängliga nu är extremt begränsat.

Den körs som root , vilket är en avsevärd säkerhetsrisk på en nätverksansluten dator. Det borde vara möjligt att köra experix utan root-privilegier, men detta har ännu inte gjorts.

externa länkar