String aus dem Wagocontroller verarbeiten

twofel
Beiträge: 27
Registriert: Samstag 2. März 2013, 20:38

String aus dem Wagocontroller verarbeiten

Beitrag von twofel » Dienstag 12. März 2013, 15:20

Hallo Community,

ich habe folgendes Problem: in meinem Wago programm ( 750-841 ) fällt ein String mit maximal 80 Stellen an.
dieser wird momentan in einem Merker ( Doppelwort gespeichert ).

Besteht eine Möglichkeit diesen String in ProfiLab zur Anzeige zu bringen ?
MfG Tim

twofel
Beiträge: 27
Registriert: Samstag 2. März 2013, 20:38

Re: String aus dem Wagocontroller verarbeiten

Beitrag von twofel » Dienstag 12. März 2013, 16:04

Stimmt das haut auch nicht hin....80 Zeichen passen nicht in ein Doppelwort.

Es ist eine Adresse, die da steht.

Müsste ich zeichen für zeichen in ein Array schreiben ???
MfG Tim

tom_g
Beiträge: 215
Registriert: Freitag 31. Oktober 2008, 14:59

Re: String aus dem Wagocontroller verarbeiten

Beitrag von tom_g » Dienstag 12. März 2013, 16:57

Hi,

wie WoB richtig bemerkt, handelt es sich wahrscheinlich um den Startpointer auf einen Buffer im Buskoppler.
Ohne das WagoManual studiert zu haben:
Wenn Du mittels ModBus ab dieser Adresse eine Anzahl Register liest (max. 64), so müsstest Du damit über 100 chars auslesen können; es macht aber keine Freude, sie danach zu addieren...
Wenn an einer bestimmten Speicherstelle begrenzte, interessante Information liegen würde, so könntest Du auch nur einen eingeschränkten Speicherbereich adressieren. Musst Du halt ausprobieren.
Viel Erfolg und Gruss

Thomas
Curiousity makes us progress !

twofel
Beiträge: 27
Registriert: Samstag 2. März 2013, 20:38

Re: String aus dem Wagocontroller verarbeiten

Beitrag von twofel » Freitag 15. März 2013, 11:37

tom_g hat geschrieben:Hi,
Wenn Du mittels ModBus ab dieser Adresse eine Anzahl Register liest (max. 64), so müsstest Du damit über 100 chars auslesen können; es macht aber keine Freude, sie danach zu addieren...
Viel Erfolg und Gruss
Thomas
Hallo Thomas,

genau so habe ich es gemacht:

Code: Alles auswählen

ZEICHENKETTE AT %MB80 :STRING:='12345678';
Ich habe diesen String in die Merkerregister ab Merkerbyte 80 ( hier als Beispiel ) geladen.
So steht jetzt in
MB80 eine 31 hex entspricht einer 1
MB81 eine 32 hex entspricht einer 2
MB82 eine 33 hex entspricht einer 3

und so weiter.

In ProfiLab nehme ich dann die MODBUS/TCP Funktion ( FC ) --- das READ INPUT REGISTER.
Hier habe ich dann Zugriff auf alle Merkerbytes.

Jetzt ist natürlich das Problem, wie du richtig sagtest, diese Zeichen wieder in ProfiLab zusammenzuknüpfen.

Wie kriege ich jetzt z.B. die ersten beiden Zeichen ( aus MB 80 und MB 81 ) wieder zu " 12 " verknüpft ?
Ich weiss, es wird eine umständliche Kiste...aber irgendwie musss ich den String ja rüber kriegen.
MfG Tim

tom_g
Beiträge: 215
Registriert: Freitag 31. Oktober 2008, 14:59

Re: String aus dem Wagocontroller verarbeiten

Beitrag von tom_g » Freitag 15. März 2013, 13:00

Hi twofel,

beispielshaft so ?

Gruss Thomas
Dateianhänge
Wago_bytes_to_string.prj
(7.59 KiB) 308-mal heruntergeladen
Curiousity makes us progress !

twofel
Beiträge: 27
Registriert: Samstag 2. März 2013, 20:38

Re: String aus dem Wagocontroller verarbeiten

Beitrag von twofel » Freitag 15. März 2013, 13:49

Hallo Thomas,

danke fuer deine Hilfe. Prinzip erst einmal erkannt.

Jetzt ist nur das Problem, wie kriege ich Byte fuer Byte aus dem Register raus ?
MfG Tim

tom_g
Beiträge: 215
Registriert: Freitag 31. Oktober 2008, 14:59

Re: String aus dem Wagocontroller verarbeiten

Beitrag von tom_g » Freitag 15. März 2013, 14:57

Hi twofel,

"wie kriege ich Byte fuer Byte aus dem Register raus"
hab ich nicht ganz verstanden.

Was ich auch nicht verstanden habe: woher haben denn die WAGO-Klemmen einen String ? Hast Du eine serielle Schnittstellenklemme dran ?

(ich arbeite u.a. mit Beckhoff-Klemmen und ModBus TCP, das ist wahrscheinlich identisch mit WAGO)

Wenn Du die WAGO Klemme abfragst, dann liest Du pro Register 16bit = 1 WORD = 2bytes = 2char aufs Mal
aus.
Ich habe im vergangenen Beispiel nur sinnbildlich die Umformattierung con Byte zu char und die Addition zu einem String gezeigt.

Was Du mutmasslich vorliegen hast, sind halt pro Register eben 2char. Diese können wie im neuen Beispiel genauso formattiert und addiert/kaskadiert werden.

Hoffe, das hilft.

Wenn es noch nicht dem entspricht, was Du meinst, dann brauche ich von Dir mehr Info.

Gruss Thomas
Dateianhänge
Wago_bytes_to_string_1.prj
(5.2 KiB) 271-mal heruntergeladen
Curiousity makes us progress !

twofel
Beiträge: 27
Registriert: Samstag 2. März 2013, 20:38

Re: String aus dem Wagocontroller verarbeiten

Beitrag von twofel » Freitag 15. März 2013, 15:23

Hi Thomas,

danke erstmal fuer deine schnelle Hilfe. Im Prinzip geht es jetzt, nur dass noch die Reihenfolge
der Strings vertauscht sind. Das erste Zeichen landet ja im "LOW-BYTE ", das zweite im "HIGH_BYTE"
des ersten REGISTERS und das 3. zeichen dann wieder im "LOW-BYTE" und das 4. Zeichen im "HIGH-BYTE"
des 2. Registers.

Ich frage keine Wagoklemmen ab, sondern erzeuge im Programm mittels eines OSCAT Bausteins verschieden
Infos zum verwendeten Wago Controller. Einen String davon schiebe ich in den MERKER-bereich.

Ansonsten ist Wago ja identisch zu Beckhoff , wie du sagtest.

Es war mir schon klar, dass in jedem Register 2 Zeichen stehen, da diese Register ja 16 bit lang sind. Ich dachte nur,
dass ich sie byteweise nacheinander rausholen muß....um den Ursprungsstring wieder zusammenzubasteln. Es muss
ja wieder die gleiche Reihenfolge rauskommen, wie sie in der Wago mal vorlag.
Verstehst du mich jetzt ein bischen ?
MfG Tim

tom_g
Beiträge: 215
Registriert: Freitag 31. Oktober 2008, 14:59

Re: String aus dem Wagocontroller verarbeiten

Beitrag von tom_g » Freitag 15. März 2013, 16:27

Hi Flo,

ein bisschen ja ;-)
Du sprichst von endianness, d.h. der Position der MSB und LSB in den Registern.

Hier ist eine Möglichkeit zur Reihenfolgen-Revertierung von 2 Bytes; was Gescheiteres kommt mir momentan nicht in den Sinn;
man möge mir verzeihen (und diese im Forum beitragen), wenn es elegantere Lösungen gibt; speziell auch hier wieder mal wäre eine DLL sicher eleganter.

Für heute verabschiede ich mich aus dem Thread, muss noch etwas an die Sonne, viele Grüsse

Thomas
Dateianhänge
Wago_bytes_to_string_2.prj
(7.32 KiB) 257-mal heruntergeladen
Curiousity makes us progress !

twofel
Beiträge: 27
Registriert: Samstag 2. März 2013, 20:38

Re: String aus dem Wagocontroller verarbeiten

Beitrag von twofel » Freitag 15. März 2013, 17:37

Hallo Thomas,

du bist ja fix.....jetzt versteh ich, dass du erstmal in die Sonne willst :mrgreen:

Ja ich spreche von "Bytereihenfolge" ( endianness ---englisch ).

Das musste man ja auch noch beachten, um den String wieder zusammenzusetzen.
Wenn ich sehe was fuer ein Aufwand fuer 4 Zeichen, sprich 4 Bytes getrieben werden muss, gebe ich dir Recht,
dass dafuer eine DLL sinnvoll wäre.. Vlt gibt es ja einen Profi hier , der sowas kann.


Die Umwandlung von hex in ascii , also dieses dazuaddieren von 36.....das stimmt nur bis zum Buchstaben i. Danach
funktioniert die Umwandlung nicht mehr. Ich bin auch noch auf der Suche nach einer anderen Lösung.

Gibt es keinen Baustein "hex to ascii " ???
MfG Tim

twofel
Beiträge: 27
Registriert: Samstag 2. März 2013, 20:38

Re: String aus dem Wagocontroller verarbeiten

Beitrag von twofel » Freitag 15. März 2013, 23:16

Hi WoB,

hast du das jetzt schnell hingebastelt oder aus deiner ZAubertruhe gezogen ?

Dass nenn ich mal eine coole Schaltung.....was man alles so basteln kann...einfach
genial.
MfG Tim

tom_g
Beiträge: 215
Registriert: Freitag 31. Oktober 2008, 14:59

Re: String aus dem Wagocontroller verarbeiten

Beitrag von tom_g » Samstag 16. März 2013, 09:48

Hi Jungs,

speed: habe ich gestern auch gemerkt, leidet bei so vielen FB. Ich habe auf Berechnungen verzichtet und auf die Stringverarbeitung gesetzt. Ich weiss aber nicht, ob die Performance anders ist als bei der Lösung von WoB; da er mit den direkten Rechen-FBs arbeitet, kann es sogar schneller sein als mit der Stringmethode.

Aber hiermit gehts sicher flotter :-)

Viele Grüsse
Thomas
Dateianhänge
Wago_1.dll
(142.5 KiB) 245-mal heruntergeladen
Wago_1.prj
(3.44 KiB) 251-mal heruntergeladen
Curiousity makes us progress !

twofel
Beiträge: 27
Registriert: Samstag 2. März 2013, 20:38

Re: String aus dem Wagocontroller verarbeiten

Beitrag von twofel » Samstag 16. März 2013, 10:19

Moin ihr Profis,

ihr seid ja unschlagbar....so gut möchte ich auch mal werden.

@Tom_g...da hat das Sonnenbad von gestern aber geholfen. Hast genug Vitamin-D
getankt. Ich hatte gestern noch bis Mitternacht gesessen und ueber den Ascii Offset
gegrübelt, habe aber keine Lösung gefunden.

Umso dankbarer war ich von dem Vorschlag der dann von WoB kam. Auch deine Schaltung
Tom ist toll.

Wenn man die Zahl der Eingänge vergroessern möchte, dann muss man sicherlich die dll verändern
und neu compilieren...richtig ?
MfG Tim

tom_g
Beiträge: 215
Registriert: Freitag 31. Oktober 2008, 14:59

Re: String aus dem Wagocontroller verarbeiten

Beitrag von tom_g » Samstag 16. März 2013, 10:49

Hoi twofel (wie heisst Du denn im richtigen Leben) ?

Richtig, für mehr oder weniger Eingänge auf dem FB muss ich eine neue DL herstellen; von Abacom vorgesehen wäre eigentlich die Konfiguration genau solcher Eigenschaften beim Einbinden der DLL im FP (was schlussendlich in der DLL-Anwendung einprogramiert werden muss), habe ich natürlich nicht gemacht.
Die eigentliche Aufgabenlösung besteht nur aus wenigen Zeilen...

for i=1 to 8 do
bytes_orig = int_to_bytes(in_seq) -- extract bytes, LSB first
if endian > 2.5 then
bytes_rev[1] = bytes_orig[1]
bytes_rev[2] = bytes_orig[2]
else
bytes_rev[1] = bytes_orig[2]
bytes_rev[2] = bytes_orig[1]
end if
buffer[2*i-1] = bytes_rev[1] -- buffer holds the bytes, IS the string
buffer[2*i] = bytes_rev[2]
end for

Wenn Du dringend mehr Inputs haben willst, so sag es mir.

Ansonsten kannst Du mit mehreren DLL-Instanzen sicher auch leben (copy/paste und die Strings wie gehabt zusammenaddieren)

Sonnige (!) Grüsse aus der Nordschweiz (noch etwa kalt 0 Grad), heute will ich nicht viel Zeit auf dem Forum zubringen.

Thomas
Curiousity makes us progress !

twofel
Beiträge: 27
Registriert: Samstag 2. März 2013, 20:38

Re: String aus dem Wagocontroller verarbeiten

Beitrag von twofel » Samstag 16. März 2013, 11:41

Hallo Thomas,
tom_g hat geschrieben: Wenn Du dringend mehr Inputs haben willst, so sag es mir.
Thomas
gerne komme ich auf dein Angebot zurück. Musst es aber nicht heute machen.

Ich könnte eine DLL mit 21 Inputs ( 1 Input = 1 Word)
und
eine DLL mit nur 1 Input .
MfG Tim

tom_g
Beiträge: 215
Registriert: Freitag 31. Oktober 2008, 14:59

Re: String aus dem Wagocontroller verarbeiten

Beitrag von tom_g » Samstag 16. März 2013, 16:03

Hi Tim,

hier sind die Mini- und die Monster-DLL.
Hoffe es dient dir.

Schönen Sonntag von Thomas
Dateianhänge
Wago_3.dll
(140.5 KiB) 231-mal heruntergeladen
Wago_2.dll
(146.5 KiB) 238-mal heruntergeladen
Wago_2.prj
(7.8 KiB) 247-mal heruntergeladen
Curiousity makes us progress !

twofel
Beiträge: 27
Registriert: Samstag 2. März 2013, 20:38

Re: String aus dem Wagocontroller verarbeiten

Beitrag von twofel » Samstag 16. März 2013, 16:11

Hi Thomas,

ich danke dir sehr ...hast mir grossen Gefallen getan.
Dann wünsche ich dir noch einen schönen Samstag.

Welchen C-Compiler nimmst du eigentlich ?...Muss mich auch mal langsam wieder mit C beschäftigen.

Gruss in die Nordschweiz. ;)
MfG Tim

tom_g
Beiträge: 215
Registriert: Freitag 31. Oktober 2008, 14:59

Re: String aus dem Wagocontroller verarbeiten

Beitrag von tom_g » Samstag 16. März 2013, 19:51

Danke Tim,
Dir auch.

Als Compiler verwende ich Open Watcom.
Als Programmierumgebung bin ich liiert mit der die Exotin Euphoria ;-) (noch V3.1), welche einen Euphoria-zu-C Translator mitbringt. Eu -> xlate -> C-Code -> compile als DLL. In Form eines Batchfiles wird die Kette abgearbeitet und auf Mausklick eine DLL hergestellt. Leider muss man PL immer neu starten und die zu testende DLL neu einbinden; das ist aufwendig, weil das debugging nur mit console-Ausgaben (puts(), pretty_print()... funktioniert und weil bei Fehlern PL nicht lange fackelt und sich kommentarlos zurückzieht.

Ich bin aber auch dran an der Askr-Geschichte; er hat ProfiLua erstellt, das ist eine DLL, welche den Sprachinterpreter für Lua in PL eingebunden offeriert - sensationell !
Dabei liefert der Programmierer ein File mit Lua-Script, was von der DLL gelesen und abgearbeitet wird.
Lua hats wirklich in sich, die Sprache ist mächtig und der Interpreter schlank. Es sind aber andere Programmierparadigmen notwendig, um die Sprache zu nutzen; ich habe hier das Problem, dass ich die herkömmliche BASIC/Pascal/C-Befehls- und Verhaltensumgebung mit der von Lua vermische. es geht leider (zu) langsam vorwärts. Aber ich habe das Potential von Lua erkannt und kann es schon jetzt weiterempfehlen - alleweil einen Blick wert !

Wer auf Performance setzt, sollte aber den Standardweg wählen: (compilierter C-Code als DLL) in PL einbinden.

Viele Grüsse von Thomas
Curiousity makes us progress !

twofel
Beiträge: 27
Registriert: Samstag 2. März 2013, 20:38

Re: String aus dem Wagocontroller verarbeiten

Beitrag von twofel » Samstag 16. März 2013, 20:09

Hallo Thomas,

vielen Dank fuer deine Erläuterungen. Die LUA Geschichte hatte ich mir mal angeguckt...aber nicht
so richtig verstanden. Muss ich mir vielleicht mal länger Zeit nehmen.
Ich kenne nur die Borland ( Embarcadero ) und Visual Studio von MS Umgebungen.
Mal sehen, ob ich Zeit finde, wieder zu programmieren. Bin leider schon eine Weile raus.
Aber das soll kein Hinderungsgrund sein.
MfG Tim

tom_g
Beiträge: 215
Registriert: Freitag 31. Oktober 2008, 14:59

Re: String aus dem Wagocontroller verarbeiten

Beitrag von tom_g » Samstag 16. März 2013, 20:23

Tim,

ich bin eigentlich auch nicht wirklich drin im Programmieren ...und auch nicht mehr der Schnellste (habe vor einiger Zeit die Schallgrenze (50 yrs) durchbrochen - mein Bruder sagt hierzu: du bist auf dem Heimweg :-), er aber auch ;-)
Stärke: HW-Elektronik-Entwickler mit guter Kenntnis auf uC (PSoC1 von Cypress mixed signal ASIC) (ANSI-C). Nun will ich den PSoC5 erschliessen, welcher nebst Cortex M3 und analog-Peripherie als Mehrwert noch die VHDL-FPGA Programmierung mitbringt.
PL dient mir vor allem für Messtechnik-Zwecke zur Messdatenaufnahme bei unseren Experimenten. Ich bin hiervon begeistert, weil es so viel schlanker als NI-LabView ist, und so flexibel und vergleichsweise leistungsfähig.

So, für heute ist Schluss: guet Nacht und mit vielen Grüssen:

Thomas
Curiousity makes us progress !

Antworten

Zurück zu „Thema Modbus“