I denne øvelse skal du udlæse en enkelt kolonne fra et 2D array. Funktionen skal gemmes som et subVI for at tillade os at bruge den både her, men også i en senere laboratorieøvelse.
Instruktioner:
- Lav et tomt VI
- Indsæt et 2D Numeric Control Array
Dette skal være input Array'et og dermed være i 2D- Modern -> Array, Matrix & Cluster -> Array
- Tilføj en Numeric Control til VI'et og flyt den ind i Arrayet
- Højreklik på kanten af Array'et og vælg: "Add Dimension"
- Omdøb det til "2D Array"
- Tilføj en Numeric Control og omdøb den "Column Index"
Dette er indexet på den kolonne, der skal udlæses - Lav output 1D arrayet (den kolonne, der skal udlæses):
- Lav en kopi af 2D array'et (Ctrl+C, Ctrl+V (husk du ikke må have valgt noget når du paster)
- klik på kanten af kopien og vælg: "Remove Dimension"
- Omdøb dette aray til "Column"
- Højreklik på den numeriske kontrol i arrayet og vælg "Change to Indicator"
- Dit Front panel skulle nu se sådan ud:
- Du skal nu udlæse den ønskede kolonne på Block Diagrammet. Dette gøres med funktionen Array Subset
- Forbind Array indgangen øverst tv
- Dette får funktionen til at udvide sig, idet dit input array er 2D. De øverste 2 kontroller styrer rækker, de nederste to kolonner. Med den næst-nederste vælger du hvilken kolonne du vil starte med at udlæse fra (index), med den nederste, hvor mange kolonner du vil udlæse - i dette tilfælde 1. Forbind "Column index" og en Constant med værdien 1 til de respektive indgange på funktionen.
- Forbind udgangsarrayet med dit 1D Column Array
- Dette giver en fejl - på trods af, at du lige have valgt en enkelt kolonne er variablen stadig defineret som en 2D array, der ikke kan forbindes med dit output array, som kun er 1D
- Fjern det dårlige kabel (Ctrl + B)
- Du skal nu tvinge output arrayet til at være 1D:
- Til det bruger du kommandoen "Reshape Array", som du indsætter på dit Block Diagram.
- Funktionen skal have at vide hvor mange rækker der er i array'et, hvorfor du også skal bruge en "Array Size" funktion. Indsæt også denne.
- Array Size funktionen giver størrelsen i alle dimensioner, dvs. både antallet af rækker, men også kolonner. Da det kun er antallet af rækker, vi skal bruge, skal vi også bruge en "Index Array" funktion. Indsæt denne.
- Forbind dit "2D Array" med Array inputtet på "Reshape Array" funktionen. Som tidligere angivet, skal funktionen også bruge antallet af rækker. Dette får du ved at forbinde "2D Array'et" med Array inputtet på "Array Size" funktionen.
- Array Size spytter imidlertid både antallet af rækker og kolonner ud. Da det kun er antallet af rækker vi skal bruge, skal outputtet fra "Array Size" forbindes med "Index Array". Denne funktion kan hente et enkelt element fra Array'et, og det vi skal bruge er det første, som ligger i position 0 (husk nul-indekseringen). Forbind derfor 0 konstanten med "Index" på funktionen. Den vil nu levere antallet af rækker, som skal forbindes med "Dimension Size" på "Reshape Array" funktionen
- Forbind outputtet fra "Reshape Array" til det 1D Column Array, du skabte på Frontpanelet (Titlen herpå er blot "Column")
- Du har nu leveret et VI, som kan hente en enkelt kolonne fra et 2D array og outputte den som et 1D array. Den skal nu laves om til et Sub-VI, så den kan bruges i andre øvelser.
- Højreklik Ikonet øverst til højre på Block Diagrammet og vælg "Edit Icon…"
- Lav det om til en tabel med en fremhævet kolonne. Du kan bruge "Glyphs" fanebladet og indsætte "Spreadsheet" ikonet fra "Things" kategorien. Udfyld en af kolonnerne med en anden farve, fx rød med "Fill funktionen"
- Tryk OK
- Du skal nu forbinde ind- og udgange. Højreklik på ikonet øverst til højre på Front Panelet og vælg "Show Connector". Standard Connectoren har alt for mange ind- og udgange.
- Højreklik Connector ikonet og vælg "Patterns". Vælg ikonet med 2 indgange (kasser til venstre) og 1 udgang (kasse til højre).
- Forbind indgangene:
- Klik på kassen øverst til venstre og derpå på 2D arrayet.
- Klik på kassen nederst til venstre og derpå på Column Index
- Forbind udgangen:
- Klik på kassen til højre og derpå på Column arrayet
- Gem dit Sub-VI som "Get Column.vi"
- Afprøv dit Sub-VI:
- Åbn 2.4_Terningekast3.vi
- Tilføj et While loop nederst under for loopet
- Højreklik på Block Diagrammet og vælg "Select a VI…"
- Åbn dit Sub-VI: "Get Column.vi" og klik inde i While loopet
- Forbind output arrayet fra for loopet med 2D Array indgangen på "Get Column" Sub-VI'et
- Højreklik "Column Index" indgangen på sub-VI'et og vælg Create -> Control
- Højreklik "Column" udgangen på sub-VI'et og vælg Create -> Indicator. Udvid denne til 12 pladser på Front panelet
- Flyt Column Index og Column ned under 2D arrayet på Front Panelet
- Sæt antallet af slag til fx 10000 og kør dit VI
- Du kan nu bladre frem og tilbage i kolonnerne ved at ændre "Column Index" værdien. Husk at første og anden kolonne (nr 0 og 1) er tomme, da man ikke kan slå hverken 0 eller 1 med to terninger.
- Gem dit VI som 3-4-1_Terningekast_Kolonne.vi