26.05.2006, 12:32
Beitrag #1
|
Nico24
LVF-Grünschnabel
Beiträge: 14
Registriert seit: May 2006
8.00
2006
kA
Deutschland
|
RS232 Programmierung
Hallo,
mittels der seriellen Schnittstelle RS232 möchte ich an meinem Rechner ein Programm schreiben,
das mir die Messwerte von 16 Thermoelementen grafisch darstellt.
Ich hab nun relativ wenig Ahnung davon, wie ich das Einlesen der 16 Werte verwirklichen soll. Die Daten wurden bereits mit zwei ADAM 4018- Messwertaufnehemer der Firma I.E.D. aufbereitet.
Wer kann mir erklären, wie ich das Einlesen der Werte im Blockdiagramm verwirklichen kann?
Bitte helft mir weiter,
bin schon ein wenig verzweifelt.....
mfG
Nico
|
|
|
26.05.2006, 18:22
Beitrag #2
|
cb
LVF-SeniorMod
Beiträge: 1.731
Registriert seit: Feb 2006
2018SP1
2001
EN
40xxx
Deutschland
|
RS232 Programmierung
' schrieb:Hallo,
mittels der seriellen Schnittstelle RS232 möchte ich an meinem Rechner ein Programm schreiben,
das mir die Messwerte von 16 Thermoelementen grafisch darstellt.
Ich hab nun relativ wenig Ahnung davon, wie ich das Einlesen der 16 Werte verwirklichen soll. Die Daten wurden bereits mit zwei ADAM 4018- Messwertaufnehemer der Firma I.E.D. aufbereitet.
Wer kann mir erklären, wie ich das Einlesen der Werte im Blockdiagramm verwirklichen kann?
Bitte helft mir weiter,
bin schon ein wenig verzweifelt.....
mfG
Nico
also .... ich würde ja das Programm mit LabVIEW schreiben, nicht mit der seriellen Schnittstelle, die ist manchmal etwas unflexibel und ausserdem kenn ich mit Maschinencode auf nem UART (geht das überhaupt?) sowieso nicht wirklich aus.
Da das mal wieder eine von diesen Fragen ist, die alles und nichts bedeuten können, aber ich interpretiere das mal so: du möchtest ein LabVIEW Programm schreiben, das (vermutlich kontinuierlich) 16 Kanäle über RS232 einliest. Ich vermute, dass du pro ADAM 4018 Messwertaufnehmer je 8 Thermoelemente anschliessen kannst und jedes ADAM Modul einen RS232 Ausgang hat, über den es mit einer bestimmten Frequenz die Messdaten als String an den angeschlossenen Rechner sendet / bzw. auf Anforderung die Daten sendet.
Was du programmieren musst ist ein RS232-Empfänger. Es gibt Beispiele im Example-Finder zu diesem Thema. Falls du nicht weisst, was das ist, such mal in der Hilfer. Mein RS232 Demo kann dir vielleicht auch einen Überblick vermitteln.
Im speziellen musst du (weil du 2 Module hast) das ganze praktisch "verdoppeln" und mit 2 Com-Ports arbeiten (vermute ich mal), und für jeweils 8 Kanäle deinen "Daten-String" parsen (das heisst so viel wie "die Zahlen aus dem String rauspicken und in >>echte<< Zahlen umwandeln).
Die Synchronisierung wird vielleicht noch etwas haarig, aber machbar ist es auf jeden fall. Wenn du dann die Daten von allen 16 Kanälen als Zahlenwerte vorliegen hast, dann musst du die Werte nur noch in einen Graphen "schieben", feddich is die Laube
Grüße
CB
|
|
|
27.05.2006, 13:17
Beitrag #3
|
Nico24
LVF-Grünschnabel
Beiträge: 14
Registriert seit: May 2006
8.00
2006
kA
Deutschland
|
RS232 Programmierung
[quote name='i2dx' post='10743' date='26.05.2006, 19:22']also .... ich würde ja das Programm mit LabVIEW schreiben, nicht mit der seriellen Schnittstelle, die ist manchmal etwas unflexibel und ausserdem kenn ich mit Maschinencode auf nem UART (geht das überhaupt?) sowieso nicht wirklich aus.
Da das mal wieder eine von diesen Fragen ist, die alles und nichts bedeuten können, aber ich interpretiere das mal so: du möchtest ein LabVIEW Programm schreiben, das (vermutlich kontinuierlich) 16 Kanäle über RS232 einliest. Ich vermute, dass du pro ADAM 4018 Messwertaufnehmer je 8 Thermoelemente anschliessen kannst und jedes ADAM Modul einen RS232 Ausgang hat, über den es mit einer bestimmten Frequenz die Messdaten als String an den angeschlossenen Rechner sendet / bzw. auf Anforderung die Daten sendet.
Was du programmieren musst ist ein RS232-Empfänger. Es gibt Beispiele im Example-Finder zu diesem Thema. Falls du nicht weisst, was das ist, such mal in der Hilfer. Mein RS232 Demo kann dir vielleicht auch einen Überblick vermitteln.
Im speziellen musst du (weil du 2 Module hast) das ganze praktisch "verdoppeln" und mit 2 Com-Ports arbeiten (vermute ich mal), und für jeweils 8 Kanäle deinen "Daten-String" parsen (das heisst so viel wie "die Zahlen aus dem String rauspicken und in >>echte<< Zahlen umwandeln).
Die Synchronisierung wird vielleicht noch etwas haarig, aber machbar ist es auf jeden fall. Wenn du dann die Daten von allen 16 Kanälen als Zahlenwerte vorliegen hast, dann musst du die Werte nur noch in einen Graphen "schieben", feddich is die Laube
Grüße
CB[/quote]
quote name='i2dx' date='26.05.2006, 19:22' post='10743']
also .... ich würde ja das Programm mit LabVIEW schreiben, nicht mit der seriellen Schnittstelle, die ist manchmal etwas unflexibel und ausserdem kenn ich mit Maschinencode auf nem UART (geht das überhaupt?) sowieso nicht wirklich aus.
Das Programm muss auf jeden Fall mit LabVIEW geschrieben werden, da die Lizens extra gekauft wurde!
Da das mal wieder eine von diesen Fragen ist, die alles und nichts bedeuten können, aber ich interpretiere das mal so: du möchtest ein LabVIEW Programm schreiben, das (vermutlich kontinuierlich) 16 Kanäle über RS232 einliest. Ich vermute, dass du pro ADAM 4018 Messwertaufnehmer je 8 Thermoelemente anschliessen kannst und jedes ADAM Modul einen RS232 Ausgang hat, über den es mit einer bestimmten Frequenz die Messdaten als String an den angeschlossenen Rechner sendet / bzw. auf Anforderung die Daten sendet.
Mit den 2 Messwertaufnehmer für jeweils 8 Kanälen hast Du recht. Genau so habe ich mir das vorgestellt!
Was du programmieren musst ist ein RS232-Empfänger. Es gibt Beispiele im Example-Finder zu diesem Thema. Falls du nicht weisst, was das ist, such mal in der Hilfer. Mein RS232 Demo kann dir vielleicht auch einen Überblick vermitteln.
Hierfür schon einmal vielen Dank-ich werde mir das mal anschauen! Aber ev. kannst du noch ein paar erklärende Worte zum Blockschaltbild des Programmes schreiben....?!?
Im speziellen musst du (weil du 2 Module hast) das ganze praktisch "verdoppeln" und mit 2 Com-Ports arbeiten (vermute ich mal), und für jeweils 8 Kanäle deinen "Daten-String" parsen (das heisst so viel wie "die Zahlen aus dem String rauspicken und in >>echte<< Zahlen umwandeln).
So hierzu:
Also ich verstehe das richtig, dass Dein Programm die Messwerte zunächts einmal für LabVIEW sozusagen aufbereitet und für weitere Anwendungen bereitstellt. Dieses von Dir angesprochene "rauspicken" ist in Deinem Programm nicht enthalen?
Das heißt, ich hab im weiteren das Blockschaltbild hinsichtlich des rauspickens zu ergänzen?
Wäre auch hier nett von Dir mir so ein paar wichtige Befehle/Funktione zu nennen, die parsen ermöglichen.
Die Synchronisierung wird vielleicht noch etwas haarig, aber machbar ist es auf jeden fall. Wenn du dann die Daten von allen 16 Kanälen als Zahlenwerte vorliegen hast, dann musst du die Werte nur noch in einen Graphen "schieben", feddich is die Laube
Ich denke, mir jetzt schon Gedanken über die grafische Darstellung zu machen, wäre etwas früh!
Aber da komme ich nochmal auf Dich zurück!
Nico
Grüße
CB
[/quote]
|
|
|
27.05.2006, 14:50
Beitrag #4
|
cb
LVF-SeniorMod
Beiträge: 1.731
Registriert seit: Feb 2006
2018SP1
2001
EN
40xxx
Deutschland
|
RS232 Programmierung
<div align="left"> ' schrieb:Also ich verstehe das richtig, dass Dein Programm die Messwerte zunächts einmal für LabVIEW sozusagen aufbereitet und für weitere Anwendungen bereitstellt. Dieses von Dir angesprochene "rauspicken" ist in Deinem Programm nicht enthalen?
Das heißt, ich hab im weiteren das Blockschaltbild hinsichtlich des rauspickens zu ergänzen?
nein, da ist auch schon das Parsing mit dabei. Im Prinzip untersucht man bei jedem Eintreffen von Daten, ob ein gem. der eigenen Spezifikation vollständiger Datenstring im Puffer ist. In meinem Beispiel wird davon ausgegangen, dass der Daten-String selbständig gesendet wird und u.U zerstückelt eintreffen kann. Darum werden die empfangen Daten solange zwischengespeichert bis ein vollständiger Daten-String vorhanden ist.
Das Parsing musst du natürlich entsprechend ändern - je nachdem wie deine Datenerfassungmodule die Daten formatieren - und den "Format Specifyer" bei der Funktion "Scan from String" entsprechend anpassen.
Starte den Sender (von meinem Beispiel) und lass den Empfänger einfach mal im "highlightnig mode" laufen, dann siehst du hoffentlich, was passiert ...
Hinweis: wenn dabei Fehler auftreten, dann liegt das daran, das das UART vollgelaufen ist, weil die Daten vom Empfänger im Highlightning-Mode ja entsprechend selten ausgelesen werden, ach ja, ein Nullmodem-Kabel ist recht hilfreich, wenn man das Demo testen will ...
Grüße
CB</div>
|
|
|
28.05.2006, 21:36
Beitrag #6
|
cb
LVF-SeniorMod
Beiträge: 1.731
Registriert seit: Feb 2006
2018SP1
2001
EN
40xxx
Deutschland
|
RS232 Programmierung
' schrieb:Hallo CB,
also so wirklich blicke ich durch dein Programm nicht durch. Ich lese in verschiedenen Literaturquellen immer etwas von einem DAQ-Asistenten, mit dem das Einlesen von Daten ermöglicht wird. In Deinem Programm wird öfter dieses VISA-Modul benutzt! Sind diese Visa-Module Spezifikationen bzw. Optimierungen der älteren LabVIEW Versionen, so dass dieser DAQ-Assistent in LabVIEW 8.0 gar nicht mehr gebraucht wird?
Ev. kannst Du mir stichpunktartig die wesentlichen Aspekte und dafür nötigen Funktionen chronologisch von Beginn der Dateneinlesung bis zu einer grafischen Darstellung mal auflisten, so dass ich mich dann Schritt für Schritt mit den Aspekten beschäftigen kann. Dabei werde ich denke ich mal mehr lernen als zu versuchen, Dein Programm auseinander zu pflücken.
Das Parsing musst du natürlich entsprechend ändern - je nachdem wie deine Datenerfassungmodule die Daten formatieren - und den "Format Specifyer" bei der Funktion "Scan from String" entsprechend anpassen.
Wo befindet sich diese Funktion "Scan from String" und zu ändern sind die Einstellungen dann per rechter Maustaste oder?
Wäre echt super, wenn du mir die Fragen beantworten würdest und so eine Art Stichpunktliste anfertigen würdest.
Vielen Dank schon einmal für Dein Bemühen, ich hoffe ich werde dann Fortschritte machen.
Gruß Nico
der DAQ-Assistent wird verwendet um (z.B.) Messung mit NI-Messkarten zu konfigurieren (Stichwort DAQmx ...). VISA ist eine allgemeine Treiberschicht um verschiedenste Hardware über eine API zu abstrahieren, in diesem Fall wird VISA genutzt um die serielle Schnittstelle des PCs zu benutzen.
Ich hab dann in meinem Forum nochmal etwas Doku hinzugefügt, guckst du hier
die Funktion "Scan from String" befindet sich in der Palette "String" an 3. Position von Oben, ganz links. Die Einstellungen kannst du mit der rechten Maustaste ändern ("Edit scan string")
|
|
|
29.05.2006, 06:48
Beitrag #7
|
diplNisse
LVF-Gelegenheitsschreiber
Beiträge: 97
Registriert seit: Apr 2006
2010
2006
EN
Deutschland
|
RS232 Programmierung
Tach zusammen!
Also erstmal zur Erklärung:
Das ADAM 4018 hat eine RS485 Schnittstelle, soweit ich da im Bilde bin.
Das bedeutet, dass du dir entweder zwei Umsetzter (RS485 / RS232) an den Rechner hängen kannst (oder hast du eine RS485 Karte?), oder du benutzt die RS485 als Bussystem (dafür ist die ja auch gedacht).
Jedes ADAM - Modul hat eine Adresse, die du vor dem Busgebrauch zuweisen musst. Dann kannst du eifach so ein Befehl wie >>#01{cr}<< auf den Bus senden und das Modul mit Adresse 1 antwortet mit ALLEN Werten für die 8 Kanäle >>+454,13+798,35-20,56+45,90+20,45+230,78-10,69+6,456{cr}<<
Diesen Antwortstring musst du jetzt nur noch entsprechend zerlegen und weiterverarbeiten.
Wenn du die Werte vom 2. Modul haben willst, sendest du über die gleiche Schnittstelle einfach die Adresse des 2. Moduls >>#02{cr}<<. Die Antwort kommt nun von Mod.2.
Eigentlich recht einfach.
Du darfst halt nur nicht vergessen die module vor dem Betrieb einzelnd an die Schnittstelle zu hängen und zu konfigurieren. Wenn man die INIT Klemme des Moduls auf Masse legt (oder auf + Vbb, keine Ahnung) dann befinden die sich im INIT-State und haben die Parameter: 9600 Baud, 8 Datenbits, 1 Stoppbit, keine Parität, keine Checksum-übermittlung und adresse 1.
Ich hoffe das hilft Dir.
Wenn die serielle Kommunikation erstmal steht, dann ist der Rest einfach.
|
|
|
04.06.2009, 14:30
Beitrag #8
|
NicknameXXX
LVF-Neueinsteiger
Beiträge: 6
Registriert seit: Jun 2009
8.6
2008
de
7747
Deutschland
|
RS232 Programmierung
Hallo Leute
bevor ich das gleiche Thema in einen neuen Fred baue, lieber hier ein Update.
Die ADAM Module der 4000 Reihe arbeiten tatsächlich mit einem RS-485 Netzwerk, benötigen aber für das Auslesen einen RS-232 Konverter wie das ADAM 4520. Das aber ist passiv. Das Netzwerk lässt sich mit dem Programm ADAM Net Utility auf der mitgelieferten CD konfigurieren und auch testen.
An dieser Stelle komme ich nun mit einem ähnlichen Problem.
Die Einbindung an LabVIEW habe ich mit dem simpe serial write and read VI aus der Beispielsuche ausprobiert. Man muss wie der Autor über mir bereits geschrieben hat, ein Kommando zum Abrufen der Kanäle an das Modul entsprechender Hex-Adresse im Netzwerk senden.
Hat jemand vielleicht Erfahrung mit der Einbindung von diesen Advantech Modulen in LabVIEW gemacht ? Bei mir bekomme ich leider keine Antwort, also keinen Lesepuffer nach Senden des Kommandos. Im Testmodus innerhalb des AdamNetUtility Programms funktionert aber alles wunderbar.
Gibt es vielleicht Randbedingungen, die ich nicht beachte oder kenne ? Ist das Timeout irgendwie wichtig ? Kann es daran liegen, dass man in der Visa Konfiguration das Stopbit nicht berücksichtigt ? Gibt es Delays, die man nach dem Senden eines Strings einhalten muss ? Kann man überhaupt über den gleichen "Visaport" das Kommando senden und wieder empfangen ?
Ich bin leider Fachfremd und muss mich in diese ganze Netzwerk und Kommunikationsgeschichten erst irgendwie reinfuchsen.
Bei Bedarf lade ich auch gerne mal das VI hoch, befürchte aber ( weils im Grunde das Gleiche wie aus der Beispielsuche ist ) das bringt niemanden weiter, der nicht den Hintergrund vom Advantech Netzwerk kennt
Vielen Dank schonmal im Vorfeld, falls sich jmd. findet und mir da aus die Sprünge helfen mag
|
|
|
| |