-         

Ergebnis 1 bis 7 von 7

Thema: [LabView] zeilenweises Auslesen der seriellen Schnittstelle

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    26.09.2011
    Beiträge
    23

    [LabView] zeilenweises Auslesen der seriellen Schnittstelle

    Anzeige

    Hiho.
    Vorneweg: ich hoff mal hier gibt es ein Paar LabView Profis und ich benutze die 2011'er Version von LabView.
    Ich hab ein folgendes Problem.
    Nachdem ich meinen µC beigebracht hab 2 verschiedene Temperaturwerte
    (von 2 verschiedenen LM35) in digitale Werte umzuwandeln und diese mir
    auf den Hyperterminal zu schicken, versuche ich nun das selbe in
    LabView.
    Wer hätte es gedacht, natürlich hat es nicht auf Anhieb funktioniert.
    Mit nur einem angelöteten Sensor hat es wunderbar geklappt, also das
    Auslesen der seriellen Schnittstelle, mit zwei nicht.
    Hab mal meine "Prinzipschaltung" angehangen um das Problem
    zu verbildlichen (hätte auch gern die VI angehangen, aber das geht ja leider nicht).
    Hier kommt das "krankheitsbild":
    Erstens: gibts keine Veränderung der Temperaturwerte in LabView wenn ich
    die erwärme.
    Zweitens: die For Schleife läuft anscheinend genau 2 mal. (sonst gäbe es
    ja eine Wertveränderung).
    Drittens: Anscheinend kommt das Signal noch nichteinmal in die Case
    Struktur rein.

    Das sind gerade so die größten Probleme.
    An irgendwelchen Einstellungen scheint es nicht zu liegen, da die
    Übertragung mit nur einem Sensor funktioniert.
    Das Zusammensetzen des Arrays aus dem Datenstring sollte auch richtig
    sein, weil LabView das Zeilenumbruchzeichen (0x0A) ja auch versteht.

    Bin für jede Hilfe dankbar
    Grüße.
    Miniaturansichten angehängter Grafiken Miniaturansichten angehängter Grafiken blockdiagram232.jpg  

  2. #2
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    11.12.2007
    Ort
    weit weg von nahe Bonn
    Alter
    33
    Beiträge
    2.380
    dein Bild ist bei mir sehr klein und praktisch unlesbar, liegt das am Forum!? Hab schon öfters gesehn das forumbilder kleiner sind als das was druntersteht!

    du kannst deine labview "schaltung" als bild exportieren, jemand mit dem passenden labview kann es dann einfachn in ein VI ziehen udn es baut sich selber zusamenn, also her damit ^^ .. Übung hab ich mittlerweilen genug was COM und co. angeht
    Es gibt 10 Sorten von Menschen: Die einen können binär zählen, die anderen
    nicht.

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    26.09.2011
    Beiträge
    23
    Alles klar,
    hab mal die VI als Screenshot hochgeladen, mit dem Prinzip was es machen soll.
    und hier ist das stueckchen programmcode welches für das senden der sensordaten an den rechner verantwortlich ist:

    Code:
     while(1)
         {        
    		     	  	
     			   if (overflowzahl >= 1)	 
     			   {
    				if (adc_wertref = adc_read_avg(0, 100))	
     				{				
    				 itoa(adc_wertref, buffer, 10);
    				 uart_puts("Ref");
                                                  uart_puts(buffer);	                         
    				 USART_Transmit(0x0A);                             
    				}	
    				 			 
     				if (adc_wertkam = adc_read_avg(1, 100))
     				{
     				 itoa(adc_wertkam, buffer, 10);
     				 uart_puts("Kam");
                                                  uart_puts(buffer);	
    				 USART_Transmit(0x0A);
    				}	
    				 USART_Transmit(0x0A); 			 
     				 overflowzahl=0;		   
                       
         		   } 
    		
    				    
         }
    jetzt noch eine wichtige Frage:
    Reicht es dem Labview zu verstehen dass "0x0A" das Zeilenumbruchszeichen ist?
    Eigentlich versteht es das Zeichen ja, aber ist LabView intelligent genug den String auch an genau diesen Stellen zu zerlegen und eben ein Array daraus zu basteln?
    Oder muss ich dafuer noch irgendwas in meinem C-Quellcode ändern, das wäre echt ärgerlich, da LabView>>C ^^

    Die "Diagnose" geht weiter (hab irgendwie echt viel mit Medizin zu tun)
    Die Werte kriege ich ja immer abwechselnd, die Stringlänge ist also genau 7 (wenn der gesamte String ankommen würde, müsste die Länge bei 14 liegen) (3 Buchstaben, 3 Zahlen (Zimmertemperatur, Wert noch nicht in Temperatur ausgerechnet, Zeilenumbruchzeichen welches ja nicht angezeigt wird), also versteht Labview tatsächlich was ich davon will.
    Warum also kriegt es nicht hin die Werte mir gleichzeitig in einer Matrix (von dem Wort Array könnt ich langsam kotzen) untereinander anzuzeigen?

    PS irgendwie stellt das Forum die Bilder viel zu klein dar -.-
    Miniaturansichten angehängter Grafiken Miniaturansichten angehängter Grafiken viscreenshot.jpg   blockdiagram232.jpg  
    Geändert von bmtil (06.10.2011 um 09:52 Uhr)

  4. #4
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    11.12.2007
    Ort
    weit weg von nahe Bonn
    Alter
    33
    Beiträge
    2.380
    okay ich bin mir jetzt dem ganzen programm nicht bewusst, kann also sein dass ich noch was übersehn habe, aber spontan würde ich sagen: richte für den VISA-Name und die Fehlerbehandlung mal unbedingt ein Schieberegister für die Schleife ein also links und rechts deiner while-schleife!
    Und im Fehlerfalle solltest du die Schleife unbedingt beenden!
    außerdem fängst du das Timeout nicht ab, das wird als Fehler gewertet und jede weitere Operation wird automatisch abgebrochen!
    Es gibt 10 Sorten von Menschen: Die einen können binär zählen, die anderen
    nicht.

  5. #5
    Neuer Benutzer Öfters hier
    Registriert seit
    26.09.2011
    Beiträge
    23
    Also, hab heute von ganz neu angefangen und folgendes ist rausgekommen:
    Ich kann jetzt ein Array erstellen mit tatsächlich zwei (juhu!) Zeilen.
    Problem: In der unteren und der oberen Zeile wird synchron das selbe angezeigt.
    Mein Datenstring der von der Schnittstelle kommt sieht so aus:
    "Ref Temperaturwert Zeilenumbruch
    Kam Temperaturwert Zeilenumbruch"

    Das heisst ich muss den Datenstring in zwei (später mehr) Teilstrings aufsplitten.
    Die Teilung muss immer dann erfolgen wenn ein Zeilenumbruch kommt.
    Theoretisch könnte ich eine feste Position des Zeilenumbruchs festlegen, aber das möchte ich nicht, weil das viel Geraffel im C Quellcode für den Mikrocontroller wird.
    Das müsste einfacher gehen, indem ich LabView sage: "Such nach dem Zeilenumbruch und wenn du einen gefunden hast, dann teile den String und hänge den gespiltteten teil des Strings unter den ersten Teil (so sollte es prinzipiell dann für alle Stringteile funktionieren: Ersten Zeilenumbruch gefunden--->Rest den Strings an die zweite Zeile anhängen im Array, zweiten Umbruch gefunden--->Rest des Reststrings an die dritte Zeile im Array hängen, usw., sowas in C zu machen ist Sackgang mit meinen sehr spärlichen C kenntnissen).

    Hab mal den Screenshot der aktuellen VI angehangen, die kann den Datenstring nicht Teilen, aber immerhin schon zwei Zeilen des Arrays erstellen.
    Hoffe mein Problem ist verständlich.

    Nochmal zur Erlaüterung:
    Ich möchte später alle Eingänge meines ADC an dem AtMega16 nutzen, das sind 8 Stück.
    Momentan sind zwei Sensoren an denen angelötet.
    Wenn ich spätere neue anlöte, möchte ich einfach nur noch im C Code sagen: "Hey da ist ein neuer Sensor, an den und dem Pin, UART, gib mir die Messwerte des Sensors" Das isn Dreizeiler im C.
    LabView soll dann automatisch erkennen dass ein neuer Zeilenumbruch kommt, und automatisch den neuen Wert an das bereits vorhandene Array anhängen (maximal müsste ich dann in LabView sagen dass sich das Array um eine Zeile vergößern muss, dass passiert einfach indem ich einen neuen Case in der For Schleife einfüge, die das Arrays zusammenbaut).

    Viele liebe und gerade etwas verzweilte Grüße, Mikhail

    PS: mein letzer Satz war ganz schön hart am Rande der Homosexualität.
    Miniaturansichten angehängter Grafiken Miniaturansichten angehängter Grafiken viarray.jpg  

  6. #6
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    11.12.2007
    Ort
    weit weg von nahe Bonn
    Alter
    33
    Beiträge
    2.380
    dann solltest du vll. doch ein klein wenig mehr arbeit in den c-code investieren! mach den buffer um 1 byte größer und füge folgendes hinzu

    Code:
    if (_valuetosend_ = adc_read_avg( _channeltoread_ , 100)) //diese if-abfrage ergibt garkeinen sinn ... wozu das eigentlich .. oder überseh ich was ?
    {
       itoa( _channeltoread_ , buffer, 10); //solange deine _channeltoread_ nicht größer 9 wird ist das kein problem!
       itoa( _valuetosend_ , buffer+1, 10);
       uart_puts("dein channel-name");
       uart_puts(buffer);
       USART_Transmit(0x0A);
    }
    USART_Transmit(0x0A); // ... noch ein zeilenende ?! 
    overflowzahl=0;
    OT: wenn ich code aus einem quote kopier versemmelt der mir immer alle formatierungen!

    in labview brauchst du jetzt nur jedes erste zeichen einer "zeile" als deine kanal-nummer interpretieren
    Geändert von Ceos (06.10.2011 um 12:44 Uhr)
    Es gibt 10 Sorten von Menschen: Die einen können binär zählen, die anderen
    nicht.

  7. #7
    Neuer Benutzer Öfters hier
    Registriert seit
    26.09.2011
    Beiträge
    23
    Was macht genau die Modifikation im Quellcode?
    Wie gesagt meine C Kenntnisse sind sehr bescheiden.
    Achja:
    Hab das selbe Problem mit den Codes und Quotes wie du.


    Das letzte Zeilenende in der If Schleife (was du kommentiert hast) ist noch ein Überbleibsel aus den Spielereien mit dem Terminal.
    Das gehört eigentlich nicht mehr da rein.
    Geändert von bmtil (06.10.2011 um 14:01 Uhr)

Ähnliche Themen

  1. AVR: Simulation der seriellen Schnittstelle
    Von Furtion im Forum AVR Hardwarethemen
    Antworten: 9
    Letzter Beitrag: 01.10.2008, 11:34
  2. Zuverlässigkeit der seriellen Schnittstelle
    Von enoritz im Forum AVR Hardwarethemen
    Antworten: 3
    Letzter Beitrag: 06.06.2005, 15:49
  3. Serielle Schnittstelle mit LabView
    Von hannoi im Forum Elektronik
    Antworten: 2
    Letzter Beitrag: 20.05.2005, 12:33
  4. programm zum ansteuern der seriellen schnittstelle
    Von oliverderinheisternwohnt im Forum Motoren
    Antworten: 2
    Letzter Beitrag: 26.02.2005, 18:10

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •