Hallo,
Ich hoffe ich bin hier richtig ..
Ich möchte auf zwei Laptops jeweils ein Vi (Sender und Empfänger) laufen lassen. Das Empfänger-Vi soll das Sender-Vi über Rs232 steuern und das Sender-Vi soll dann (später) Bilder über Rs232 an das Empfänger-Vi senden wo sie dann dargestellt werden.
Als erstes will ich die Steuerung testen und da scheitere ich schon. Bin mir auch nicht ganz sicher, ob das so klappen kann wie ich mir das vorstelle.
Ich habe im Empfänger-Vi eine Event Driven State Maschine gebaut. Über drei Tasten können die Zustände eingestellt werden. Das klappt.
Jetzt soll der jeweilige Zustand - in Form eines String ist meine Idee - über die serielle Schnittstelle an das Sender-Vi auf dem anderen Laptop geschickt werden und im Moment (später soll das noch erweitert werden..) nur als Text dargestellt werden (im Moment ist noch eine Case-Struktur dahinter..).
Allerdings erhalte ich dabei immer einen Fehler: The resource is valid, but Visa cannot currently access it.
Kann mir jemand sagen wo mein Fehler liegt?
Die Vis sind im Anhang
Vielen Dank im Vorraus
Gerd
Moin,
habe meinen Fehler gefunden.
Duschen ist in nicht nur gut für die Hygiene
Die serielle Verarbeitung muß natürlich in die while-Schleife und nicht in dei Case-Struktur.
Gruß
Gerd
p.s. Ich bin aber trotzdem für Änderungen/Verbesserungen oder allgemeine Anregungen offen. Da ich noch am Lernen bin, ist jeder Kommentar willkommen.
Deswegen würde ich den Thread gerne noch offen lassen wenn es erlaubt ist.
Hallo Gerd,
Zitat:Ich bin aber trotzdem für Änderungen/Verbesserungen oder allgemeine Anregungen offen.
- Warum koppelst du die beiden Laptops nicht über ein LAN-Kabel, notfalls auch direkt? Und nutzt dann eben TCP/IP?
- Dein Empfänger hat überhaupt keine RS232-VISA-Zugriffe im VI…
- Dein Sender
sendet liest nur einmal, wie du selbst herausgefunden hast. Aber warum muss man den gelesenen String unverändert durch eine Case-Struktur schleusen?
- Autocleanup / Ctrl-U kann man gefahrlos benutzen!
Hallo,
Zitat:- Warum koppelst du die beiden Laptops nicht über ein LAN-Kabel, notfalls auch direkt? Und nutzt dann eben TCP/IP?
Weil meine Vorgabe eine RS232 Schnittstelle ist.
Zitat:- Dein Empfänger hat überhaupt keine RS232-VISA-Zugriffe im VI…
Das ist richtig. Wie ich geschrieben habe, bin ich erst beim ersten Teil meiner Aufgabe, der Steuerung des Sender durch den Empfänger.
Im zweiten Teil wird dann der Sender ein Bild über die serielle Schnittstelle schicken und dieses wird dann im Empfänger dargestellt.
Zitat:- Dein Sender sendet liest nur einmal, wie du selbst herausgefunden hast. Aber warum muss man den gelesenen String unverändert durch eine Case-Struktur schleusen?
Weil auch dies ein Test ist. Ich habe ja drei unterschiedliche Tasten auf der Empfängerseite (Bilder senden, Einzelbildersenden und Stopp) und je nachdem welche Taste gedrückt wird , wird dann in der Casestruktur eine entsprechende Aufgabe ausgeführt... mir ist durchaus klar, daß sie im Moment unnötig ist.
Ich habe mein Konzept jetzt geändert, da sich die Vorgabe auch ein bißchen vereinfacht hat. Ich benutze nun nur noch zwei while-Schleifen sowohl auf der Empfänger- als auch auf der Senderseite. Am Sonntag werde ich meine neuen Programme hier hochladen (habe dieses Wochenende leider wenig zeit), dann können wir gerne weiter reden.
Gruß
Gerd
Moin,
Im Anhang meine neuen beiden Sender- und Empfänger-vis und ein Testbild das etwas größer ist als die maximale Bildgröße die ich am Ende versenden will.
Das Problem ist, daß ich das Bild auf der Emfängerseite nicht richtig darstellen kann. Manchmal kommt etwas an und manchmal nicht, aber nie das ganze Bild. Auf der Senderseite habe ich das Bild zu Testzwecken gleich wieder in eine Datei geschrieben. Das funzt...
Hat da jemand einen Idee was ich falsch mache?
Liegt es an der Größe des Bildes? Wird dass Bild vor dem seriellen Senden in mehrer Teil gestückelt und nicht wieder richtig zusammengesetzt?
Falls ja, kann ich dem Bild auf der Senderseite ein Bildendezeichen o.ä. verpassen und auf der Empfängerseite die seriellen Daten solange auslesen bis das Bildendezeichen kommt und es erst dann speichern und darstellen? Wenn ja wie geht das am besten?
Und dann noch das Problem des Darstellens.. Gibt es soetwas wie String zu Bild Konvertierung? Die auch nur mit der Baseversion funktioniert?
Fragen über Fragen
Freue mich über jeden Tipp
Gruß
Gerd
Hallo Gerd (der du den Account HorstW benutzt…
),
was sofort ins Auge fällt: die (unnötige bis falsche) Nutzung von BytesAtPort, obwohl du beim SerialPortInit das TermChar aktivierst!
Entweder TermChar oder BytesAtPort!
Dank BytesAtPort liest du die Zeichen, die zum Zeitpunkt der Abfrage von BytesAtPort schon im Buffer der seriellen Schnittstelle vorhanden sind. Und kombiniert mit dem aktiviertem TermChar kann es sein, dass du nicht einmal diese Zeichen ausliest! Das ganze hat nichts mit einem vollständigen JPG-Bild zu tun…
Außerdem:
- Referenzdrähte IMMER durchverdrahten und am besten Schieberegister verwenden!
- "C:\Users\HorstW\Desktop\von_Christoph\labjpeg7.dll" ist kein Standardablageort für eine DLL…
- Fehler immer behandeln und/oder durchverdrahten!
Hallo,
Das eine Vi war falsch ... das war ein Experiment mit einem String to pic aus dem Inet was aber irgendwie nicht funtkioniert ...
Im Anhang die richtigen Dateien...
habe auch Deine Anmerkungen eingepflegt. Benutze aber immer noch BytesatPort aber diesmal ohne Termchar.
Zitat:- Referenzdrähte IMMER durchverdrahten
Habe ich doch gemacht oder wie genau meinst Du das?
Zitat:- Fehler immer behandeln und/oder durchverdrahten!
Hast Du dafür ein kleines Beispiel?
Gruß
Hallo Gerd,
BytesAtPort liest immer nur das, was gerade im Buffer der seriellen Schnittstelle vorhanden ist - das ist wahrscheinlich nicht das komplette Bild!
Ich empfehle dir eine Vorgehensweise in der Art von:
- Sender signalisiert ein neues Bild: "NEW JPEG"
- Sender sendet Anzahl der Bytes des Bildes: "12345"
- Sender sendet das Bild "FF D8 FF E0 …"
- Empfänger bemerkt: jetzt kommt ein neues Bild
- Empfänger liest die Anzahl der kommenden Bytes
- Empfänger liest die Bytes des Bildes…
Hallo,
also quasi die Anzahl der Bytes des Bildes mit über die serielle Schnittstelle schicken und die Zahl als Schleifenzähler für eine For-Schleife benutzen und in der For-Schleife dann die serielle Schnittstelle auslesen.
Kann man das so machen?
Gruß
Hallo Gerd,
du musst ja nicht einzelne Bytes lesen - man kann ja auch in z.B. 512 Byte großen Blöcken einlesen (und den letzten Teilblock extra)!
Das wäre eine gute Balance zwischen Aufwand und Fehlerüberwachung…