Jump to content
Sign in to follow this  
Schub1609

Spannungssignal über RS232-Ausgang

Recommended Posts

Hallo zusammen,

Ich habe hier ein weiteres kniffliges Anliegen. Und zwar möchte ich über einen RS232-Ausgang ein Ausgabegerät ansprechen, dass es mir auf einem bestimmten Kanal ein Stromsignal zwischen 0-20mA ausgibt. Das kann ich entweder am Gerät einstellen oder über einen Befehl, z.B. G05 i05 f9 a15000, wobei G05 die Geräteadresse und i05 der Port 5 am Gerät ist. a15000 steht für 15,000mA. Als einzelnes Kommando funktioniert das, aber ich möchte eigentlich einen Handregler oder Sollwertgenerator erstellen und den eingestellten Wert über den RS232-Ausgang an das Gerät senden. Möglichst so, dass wenn am Handregler oder Sollwertgenerator ein neuer Wert vorgegeben wird dieser zeitgleich auch am Gerät ausgegeben wird.

Vielen Dank!

mfG, Schub1609

1.PNG

Share this post


Link to post
Share on other sites

Hallo!

Ich habe ein Beispielschaltbild (ab DASYLab 13) angehängt: im Beispiel wird einem Gerät via RS232 mitgeteilt wie Frequenzen und Abtastabstände (Duty cycle) zu setzen sind. Dabei werden Kommandos bestehend aus festen Bestandteilen und Variablen/Strings verschickt.

Bitte einfach mal ansehen und bei Bedarf nochmal nachfragen. ;)

rs232_messedemo.DSB

Share this post


Link to post
Share on other sites

Hallo,

Ich habe es mir gerade angesehen, werde aber nicht schlau daraus. :( Kannst Du ev. noch bißchen was dazu erklären?

Was ist x02 und x03? Wie müßte ich das bei mir machen?

LG, Schub1609

Share this post


Link to post
Share on other sites

Hallo!

Das Schaltbild soll zeigen, wie man "zusammengesetzte" Kommandos an ein Gerät versendet.

Im Ausgangsmodul "RS232 Aus00" sehen Sie den Formatstring \x02[a]\x03\r.
Im Aktionsmodul "Aktion00" ist definiert, dass beim Auslösen der Aktion (Eingangswert hat sich geändert), über den RS232-Ausgang der globale DASYLab-String Nr. 1 gesendet wird. Das [a] im Formatstring des Ausgangsmoduls ist der Platzhalter, der durch den zu sendenden Text ersetzt wird. Die "Dekoration" rund um das [a], also das Symbol \x02, \x03 und das \r werden immer mitgesendet.

Im Infofenster sehen Sie den Inhalt d4200 des Strings 1 (Name: DUTYCYCLE_STR).
Wenn die Aktion also ausgelöst wird, wird der Text \x02d4200\x03\r an das Gerät geschickt.

Wenn Sie rechts in DASYLabs Symbolleiste auf den grünen "Ball" mit der 2 klicken, finden Sie die Liste der globalen DASYLab-Strings. Doppelklick auf den String 1: hier sehen Sie, dass der Inhalt des Strings 1 berechnet ist. Der String besteht aus dem festen Teil d und dem Teil, welcher wiederum vom aktuellen Wert der globalen Variable DUTYCYCLE (Variable 1) abhängt.

Das d ist bei "meinem" Gerät das Kommando für das Setzen des Duty Cycles auf 42% (übertragen als 4200).

In dem anderen Aktionsmodul "Aktion01" sehen Sie, dass ein anderer String über dasselbe Modul geschickt wird. In diesem String (Nr. 2, Name ist FRQ_STR) wird ein anderes Kommando berechnet, das dann aus einem f und einer Zahl besteht. f steht bei "meinem" Gerät für das Kommando "Frequency", die Zahl ist die Prozentzahl (1000 = 100%).

 

Das alles sind aber Kommandos, die nur für "mein" Gerät geeignet sind, weil "mein" Gerät etwas mit den Kommandos d und f anfangen kann.
Zudem möchte "mein" Gerät, dass alle Kommandos explizit mit den Symbolen <STX> und <ETX> anfangen bzw. enden (STX = Start of Text, ETX = End of Text). Die Schreibweise in DASYLab für diese beiden Symbole ist \x02 (STX) bzw. \x03 (ETX) -- siehe ASCII-Tabelle (links oben bei hex 02 bzw. 03).
Ausserdem verlangt mein Gerät, dass Nachrichten mit einem Carriage return-Symbol abgeschlossen werden: DASYLab nutzt hier auch die häufig anzutreffende Kurzschreibeweise \r für das CR-Symbol (siehe ASCII-Tabelle, hex 0D, <CR>).

Das kann bei Ihrem Gerät natürlich ganz anders sein.

 

D.h. nun, dass Sie für Ihre Anwendung den Formatstring G05 i05 f9 a15000 ersteinmal in den RS232-Ausgang schreiben. Anstelle der fest vorgegebenen 15000 schreiben Sie den Platzhalter [a]. Erstellen Sie ein Aktionsmodul, ein "Variable schreiben"-Modul, schließen Sie einen Handregler an. Der Wert des Handreglers wird in die Variable geschrieben und an das Aktionsmodul weitergegeben.
Die Konfiguration des Aktionsmoduls können Sie 1:1 meinem Demoschaltbild entnehmen. Die Berechnung des Strings... müssen Sie entwas abwandeln, weil bei dem Demoschaltbild noch das "d" bzw. "f" Teil des zu versendenen Strings ist, was bei Ihrer Anwendung ja entfällt (nur die 15000 wurde ja gegen den Platzhalter [a] ersetzt, das a in Ihrem Kommando steht fest im RS232-Ausgang.)

 

Bei weiteren Fragen...fragen! ;)

Share this post


Link to post
Share on other sites

Hallo,

So, ich habe es nun doch geschafft, indem ich den Befehl G05 i05 f9 axxxxx über die Variablen/String-Verknüpfung senden konnte. Funktioniert sehr gut, allerdings gibt es noch ein kleines Problem. Das Gerät braucht zwingend 5 Stellen nach dem "a" für 0-10 V wobei 20000 für 10V steht(daher auch die Umrechnung von 1-10 auf 0-20000). Wenn jedoch z.B. 2,5V ausgegeben werden sollen, sendet der String a5000, es müssten in diesem Fall aber a05000 gesendet werden. Also alle Werte kleiner 5 Stellen müßten am Anfang (nach dem "a") mit Nullen aufgefüllt werden. Weiß jemand wie man das hinbekommt?

VG, Schub 

Share this post


Link to post
Share on other sites

Hallo,

Ich habe hin und her probiert, aber leider bekomme ich es nicht hin. Kann man ev. eine Art "wenn"-Funktion erstellen, dass der Ausgang einen anderen String sendet, wenn der Handregler Werte unter 10000 generiert. Also so: Werte über 10000 - sende String Nr. 1(wo dann a mit dem Wert verknüpft ist), Werte unter 10000 - sende String Nr.2( wo a0 mit dem Wert verknüpft ist). Oder gibt es vielleicht ein andere Lösung?

Vielen Dank, Schub1609

Share this post


Link to post
Share on other sites

Hallo!

Über die Stringfunktionen kann man leider keine führenden Nullen bei der Umwandlung hinzufügen lassen. Der RS232-Ausgang hingegen kann dies beispielsweise machen durch Nutzung des Formatstrings [az5]: z=leading zeros, 5=fünf Stellen (siehe Bild / angehängtes Beispielschaltbild / Hilfeseite zu Formatanweisungen des RS232-Ausgangs).

  • Der sich nicht ändernde "Kommando-Teil" ist jetzt direkt im RS232-Ausgang eingegeben, gefolgt vom [az5]-Platzhalter.
  • Eine Aktion sendet über den RS232-Ausgang eine globale Variable (Nr. 1, im Bild Wert =1080).
  • Der Handregler gibt die Spannung vor, das Skalierungsmodul wandelt den Bereich 0-10 zu 0-20000. Das Ergebnis wird in die Variable 1 geschrieben.

Vorteil dieser Lösung: Führende Nullen.
Nachteil: Die Nachricht G05 i05 f9 aXXXXX an das Gerät kann nur einen variablen Teil haben (aXXXXX). Falls einer der anderen Werte auch variabel sein muss, funktioniert dieses Konzept nicht mehr.

Wenn mehrere variable Teil in der zu sendenden Nachricht sind -- UND führende Nullen notwendig sind --, müsste man das Skriptmodul bemühen, um sich die zu sendende Nachricht geeignet zu programmieren.

 

leadingzeros.jpg

RS232_String_FührendeNullen.DSB

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
Sign in to follow this  

×
×
  • Create New...