VSCP – Very Simple Control Protocol

VSCP står för Very Simple Control protocol och är som namnet säger ett mycket enkelt protokoll. Enkelt därför att det är konstruerat för användning på billiga och resurssnåla mikroprocessorer. Nu är VSCP också mer än bara ett protokoll. Samlat i ett paket som går under benämningen VSCP & Friends finns en komplett öppen och fri lösning för mätning och styrning som kan köras på Windows och Linux. Protokollet placerades direkt, när projektet startades hösten 2000, i den s.k. public domain och är därför fritt för vem som helst att använda.

Några specifika egenskaper:

  • Fritt och öppet för kommersiellt eller annat bruk.
  • Förutsätter inget om det medium det körs på. Det kan vara Ethernet, TCP/IP, Bluetooth, Zigbee, CAN, GPRS, RS-232, RS-485 eller något annat.
  • Består av två nivåer. Nivå I och Nivå II där nivå I är konstruerat med CAN som minsta gemensamma nämnare pga av dess åtta bytes datastorlek.
  • Har ett 128 bitars globalt unikt id för varje nod. Det kostar inget att reservera en grupp id'n.
  • Har en mekanism för att automatisk koppla ett id till en ny installerad nod och informera andra noder och eventuella servrar att noden är tillgänglig och redo.
  • Använder register som en gemensam abstraktion för att konfigurerar noder.
  • Kan ha en besluts matris för att ge dynamisk funktionalitet.
  • Har ett välspecificerat XML schema i form av Module Description Files (MDF) för att beskriva noder på ett sätt som kan användas av automatiska processer.
  • Har api'er, drivrutiner och mjukvara under Windows och Linux. Mer tillkommer ständigt.

Varför ännu ett protokoll?

VSCP är konstruerat för att användas där andra protokoll blir för dyra att använda. Typiskt är att resursanvändande där de flesta andra liknande protokoll ofta kräver fler gånger mer resurser i form av ram, flash och processorkraft än vad VSCP gör. VSCP kan tex. arbeta med Microchip MCP250xx CAN serien i form av dumma noder eller i mer intelligenta där 1-5K flash behövs för VSCP beroende på vilken funktionalitet som önskas.

VSCP är fritt och öppet. Alla är välkomna i projektet och hjälpa till med att addera kod och funktioner. Det finns fri firmware och drivrutinkod för de flesta processorer tillgänglig som använder olika kommunikations tekniker. Alla kan använda/ändra/vidareutveckla denna kod utan krav på att bidra tillbaks till projektet. Vissa delar som daemon/server programvara, konfigurerings verktyg är dock släppta under GPL och vissa drivrutiner under LGPL.

Hur fungerar det?

Events/Händelser

VSCP är ett händelsestyrt system. Noder genererar händelser (event) och noder reagerar på händelser. Händelser som sänds av en VSCP nod är inte adresserade utan sänds som en broadcast på bussen. Det är upp till mottagaren om den är intresserad av händelsen eller inte.

Alla händelser har en avsändar adress. Avsändar adressen är en 128-bits adress som globalt identifierar noden. Hur denna adress representeras på den specifika kommunikations bussen variera och i de flesta system så används ett ett sk. ”nickname id” som direkt kan härledas tillbaks till 128 bitars GUID. När VSCP går över CAN tex. så används ett åtta bitars ”nickname-id” men det längden varierar och är tex 16-bitar över IEEE 802.15.4. VSCP händelserna är indelade i grupper. Först har vi de två nivåerna. Nivå I och Nivå II. Nivå I händelserna kan hantera maximalt åtta databytes. Nivå II händelser kan hantera max 488 databytes. Både händelserna i kategorierna Nivå I och Nivå II tillhör också en klass och har en typ. Typiska exempel på klasser är ”Measurements”, ”Information”, ”Control”, ”Data” etc. Och exempel på en typ är en temperatur mätning, ett påslag etc. Som nämndes ovan så är händelserna normalt inte adresserade. Detta är inte helt sant eftersom det finns en klass på båda nivåerna där händelser är adresserade, CLASS1.PROTOCOL och CLASS2.PROTOCOL. I dessa båda klasser finns händelserna som alla noder måste implementera. Typiska saker som återfinns här är firmware uppdatering, register skrivning/läsning och status information.

De flesta noder kan tillhöra en zon/subzon som ett sätt att kunna definiera grupper av noder. Typiskt använda för att tex. kunna slå på lamporna som tillhör en speciell zon/subzon.

Register

Varje nod har ett antal åtta bitars register specificerade. Register utrymmet för en nod är på totalt 256 bytes där de lägre 128 byten är för applikationen och de övre 128 används av VSCP protokollet och alltid måste alltid finnas med. Här finns firmware version, GUID, alarm status osv. Om fler än 128 användardefinierade register behövs kan den lägre halvan delas in i sidor. Totalt 65535 sidor om 128 byte kan användas.

MDF - Module Description File

I de översta 32 byten av VSCP register arean ligger en sträng lagrad. Detta är en URL som pekar på en plast där en XML fil finns som beskriver nodens funktioner, hur den används, vem som har tillverkat den och pekar ut platser för eventuella drivrutiner och annat anpassningsbart material. Det finns också en möjlighet att ha denna fil lagrad lokalt hos noden.

MDF filen beskriver alltså noden på ett högnivåsätt. Fyra register som bildar ett 32-bitars tal beskrivs i denna fil som just ett 32-bitars tal. Ett register som kan innehålla ett antal olika konfigurationsvärden beskrivs här med värdena i klartext. Detta gör att det blir väldigt enkelt att bygga konfigurations verktyg på högre nivå som kan ”tala” i klartext med användaren vare sig denne är i mänsklig eller mer automatiserad form. Formatet klarar dessutom av flera språk.

Decision Matrix

En nod kan ha en beslutmatris. Besluts matrisen ger möjlighet att mer dynamiskt styra om och hur en nod skall reagera på olika händelser. I VSCP terminologin kallas detta en Event-Decision-Action matris eftersom en händelse som kommer in undersöks av modulen utifrån ett antal kriterier (ett beslut tas och en av ett antal möjlig handlingar (actions) utförs av modulen.

Ett typiskt exempel kan vara att aktivera ett relä. En modul har en ”action” som aktiverar reläet och en annan som avaktiverar det. Typiskt skulle detta vara statiskt kodat i modulen så att en ”på-händelse” slår på reläer och en ”av-händelse” slår av det. Genom att använda matrisen så kan man dynamiskt låta andra händelser få operationen att utföras tex. kan ett temperatur mätvärde slå på eller av reläet beroende på angiven temperatur. Fysiskt ligger matrisen i register utrymmet precis som all annan data hos noderna och register skrivning/läsning används alltså för att programmera den.

Mätningar

En speciell klass använd för mätningar av olika slag. Idag finns alla SI enheter och de flesta deriverade enheter definierade som händelser. Klassen kommer att växa efterhand som nya behov uppstår. Detta gäller generellt. Behövs en ny händelse och det inte finns redan så läggs den till. Vem som helst kan begära att detta görs. Typisk för mät-händelserna är temperatur händelsen. Denna sänds som standard mätt i Kelvin enligt SI men kan också anges som Celsius eller Fahrenheit. Mottagaren kan på ett enkelt sätt avgöra vad som gäller för det specifika meddelandet. Samma sak gäller för alla andra händelser och deras storheter.

Hur själva mätvärdet lagras i händelsen är också hårt specificerat. Bit fält, sträng, heltal, normaliserat decimaltal, flyttal är olika möjligheter. Eftersom händelserna och deras innehåll är så tydliga i sin struktur är det mycket enkelt för en mottagande nod att tolka och använda informationen. Ta en datalogger som ett exempel. Den kan kodas en gång och lagra vilket datavärde som helst eftersom de alla har samma form och kodningen talar om vad det är. Dvs den fungerar lika bra som en logger för temperatur som fuktighet som för kraftpåverkan.

Allt ihopsatt

Eftersom VSCP är händelse styrt så får man ofta tänka lite annorlunda när man konstruerar ett system. Ett typiskt exempel är en tank med en nivå sensor och en pump. Ett traditionellt system har en server applikation som läser av sensorn och därifrån kontrollerar pumpen. Så kan det göras med VSCP också men det är bättre att distribuera så mycket av intelligensen ut till noderna som möjligt.

Så istället för att läsa av nivåsensorn med periodiska intervall så programmeras den att sända ut nivå-händelser med jämna intervall. Om man vill kan man ha valfritt antal extra sensorer för att få en säkerhet mot bortfallna sensorer.

Pumpen börjar nu fylla tanken när en miniminivå har nåtts och slutar när en max nivå har fyllts. En fara med detta som alla inser är att om en sensor går sönder, kabeln klipps av efter att pumpen startats så kommer pumpen att fortsätta att gå. Detta löser man med att varje intelligent enhet går till sitt ”säkra tillstånd” om den inte får tillräcklig information. I pumpens fall är detta att pumpen är avstängd. Får pumpen inge nivå-händelser går den till sitt säkra tillstånd och kanske sänder den också en alarm-händelse för att göra andra system uppmärksamma på detta. Ett sådant säkert tillstånd kan hittas för alla system.

Eftersom transport mekanismen är okänd för en VSCP applikation så måste tidsberoenden vara lösa. Vi kan inte veta när en händelse levereras eller om det levereras. Många transport mekanismer som CAN och TCP/IP ökar sannolikheten att händelsen faktiskt levereras men UDP, RF, PLC etc gör det hela mer osäkert. Det är därför väldigt viktigt att en händelse som triggar något i en nod får en händelse tillbaks som en kvittens. Det är alltså upp till applikationen att se till att saker och ting verkligen utförs. För vissa noder är detta inte viktigt. Om en temperatur nod eller en nivåsensor nod tappar en del händelser fram till mottagaren spelar normalt ingen roll. I alla fall inte om de kommer tillräckligt tätt. Det är dock viktigt att tänka på detta om man vill få ett fungerande system. Regeln för maximal flexibilitet är att den nod som sänder en händelse skall veta så lite som möjligt om hur den händelse den sänder ut kommer att användas på mottagarsidan.

VSCP & Friends

Ett mjukvarupaket som går under namnet VSCP & Friends finns att ladda ned för Windows och Linux. Paketet innehåller supportapplikationer, drivrutiner och kodbibliotek för att jobba med VSCP.

Först och främst finns VSCP demonen (VSCP daemon) med i paketet. Detta är en server mjukvara som kan köras valfritt på Linux eller Windows och gör det möjligt att kontrollera ett eller flera VSCP segment över Internet.

Servern ger tillgång till ett säkert Internet interface och ger möjlighet att hantera allt från att sända/läsa händelser till att hantera drivrutiner etc. Även denna server har en besluts matris inbyggd som gör det möjligt att bygga system kring den.

En lågnivå drivrutin kommunicerar normalt med severn genom ett CANAL interface för en nivå I drivrutin och över TCP/IP för en nivå II drivrutin. CANAL står för CAN abstraction layer och var initialt utvecklat som ett mjukvarulager mellan CAN drivrutiner och applikationer. Därför finns drivrutiner för de flesta CAN enheter (PEAK, IXXAT, PORT, Vector etc) på marknaden med i paketet. Som en direkt följ kan servern användas för CAN kommunikation över TCP/IP också. Typiskt för att skapa simulerade system.

En mängd kod finns i paketet som implementerar CANAL gränssnittet. Samma kod kan återanvändas vare sig man vill prata direkt till en enhet eller till en enhet över nätverket och servern.

VSCP Works är en klientprogramvara som fungerar under Windows och Linux. VSCP Works kan användas för att sända och ta emot VSCP händelser direkt mot enheter eller mot en fjärrenhet. Register kan läsas och skrivas i klartext, med information hämtad från MDF filen för en nod. Nästa version kommer att ha en automatisk wizard för konfigurering från nodens MDF fil. Mycket mer funktionalitet är planerad för VSCP Works som fjärruppdatering av firmware med ett standard interface. Detta finns redan idag som en separat programvara för Microchip familjen.

Server och klient applikationer är släppta under GPL licensen. Bibliotek och klasser är släppta under LGPL licensen för att säkerställa att de kan fritt användas också i propritära projekt.

Den kanske viktigaste egenskapen hos VSCP & Friends paketet är att systemet kan användas som en abstraktion för att få gränssnitt till andra teknologier och protokoll. Man bygger bara en enkel drivrutin som översätter en specifika funktionaliteten till/från VSCP händelse och installerar drivaren för servern och direkt har man fjärrstyrning styrning och konfiguration. På detta sätt kan en applikation på enklaste sätt styra och kontrollera heterogena system.

Ett web gränssnitt, OHAS, är under utveckling som kommer att ge ett fritt öppet och dynamiskt web 2.0 gränssnitt till paketet för att styra/konfigurera noder med en web läsare.

Mer information och nedladdningsbart material finns på http://www.vscp.org

wikiwork/translation/intro-swedish.txt · Last modified: 2010/08/19 03:11 (external edit)
Public Domain www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0