Verständnisfrage bzgl. Programmierweise des FC11 von Siemens (mit CP340)

mathias007

Level-1
Beiträge
16
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen,

irgendwie habe ich Verständnisprobleme mit den Bausteinen von Siemens,
welche als Test bei der CP340 dabei waren.


Auszüge aus dem Programm:

SPL LIST
SPA A0
SPA A1
LIST: SPA ENDE

//Hier werden wohl die zwei nachfolgenden Sprungziele "definiert",
//aber woher sieht man mit welcher "Schalterkombination" welches
//Sprungziel erreicht wird?

Weiterer Programmauszug mit den Kommentarren von Siemens.
A0: L 10 // DB10
T MW 40
L 2 // As of DW2
T MW 42 //
L 10 // Length 10 bytes
T MW 44 //
SPA SND
A1: L 10 // DB10
T MW 40 //
L 14 // As of DW14
T MW 42 //
L 100 // Length 100 bytes
T MW 44 //
SPA SND


Nun eine weitere Frage : Woher soll man eigentlich wissen, dass
beim ersten Laden der Baustein aufgerufen wird, beim zweiten laden
das Datenwort xy aus diesem Baustein und beim dritter laden
die länge des (gesendeten) Strings??

Ich kennen nur folgendes für die ersten beiden Ladebefehle
L DB10 und LDB14.DBW14



mfg Mathias
 
Hallo,

also das Beispiel in der gekürzten Version zeigt ja nix vom CP340 . sondern eingentlich nur die Funktion der Sprungleiste SPL.

Je nach Inhalt vom Akku springt das Programm halt nach A0 oder A1,
und sendet halt dann die einen oder anderen Daten.
Aber das Beispiel ist nicht wirklich hilfreich.
Schreibe doch mal was Du machen willst, vielleicht können wir dir dann ein besseres Beispiel oder eine kurze Beschreibung liefern.
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Woher soll man eigentlich wissen, dass
beim ersten Laden der Baustein aufgerufen wird, beim zweiten laden
das Datenwort xy aus diesem Baustein und beim dritter laden
die länge des (gesendeten) Strings??

Das wird von dem Programmteil gehandelt, das die Weiterverarbeitung vornimmt (oder der Baustein ...)
 
Hallo zusammen,

danke für die schnellen Antworten.

Ich hänge mal eine textdatei an, in der die ganzen Bausteine als AWL drinn stehen.

Das komplette Paket ist für den Datenaustausch mit der CP340 gedacht. Ichkomme da aber irgendwie mit der "Befehlsstruktur" von Siemens nicht so zurecht.

Habe mal einige Kommentare und Fragen hinter die einzelnen Zeilen geschrieben.

gruß Mathias
 

Anhänge

  • Programmablauf-komplett.txt
    8,8 KB · Aufrufe: 48
Der Ausgangspunkt für die Routine mit den Zuweisungen ist der SPL-Befehl. Der funktioniert in Abhängigkeit des im Akku-1 geladenen Wertes. Steht dort ne 1 drinne springt er nach der ersten Sprungmarke, bei 2 zur zweiten usw.
An den jeweiligen Sprungmarken (A0 , A1) werden die Zuordnungen gemacht, die später dem FB3 als Parameter dienen. Hier musst du dich schon darauf verlassen, dass er das tut was behauptet wird ... Sprich: wenn bei DBNo eine 10 drinsteht, dass dann auch mit DB10 gearbeitet wird usw.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo mathias007,

du hängst dich viel zu sehr am Beispiel auf, es werden halt z.B. Daten aus dem DB10 gesendet.
Du musst eigentlich nur den FB2 und FB3 verstehen.

Beim FB2 und FB3 wird immer ein DB (DB_NO) angegeben, mit Offset (DBB_NO), sowie beim senden noch die Länge.

Zum starten musst EN_R beim FB2 Read, und REQ beim Send gesetzt werden. Man verriegelt immer den Read mit Send. Das heisst, wenn nicht gesendet wird, wird immer gelesen.

Ich würde ohne das Siemens Beispiel anfangen, da es die eigentliche Aufgabe nicht sauber hergibt.

Übst Du nur im trockenen, oder kannst du das auch ausprobieren?
 
Ich kann es auch ausprobieren,

aber ich hatte es nicht ohne Probleme hinbekommen, deshalb meine Fragen. Irgendwie habe ich anhand des Beispieles nicht herausgefunden, welche Schalter umgelegt sein müssen, damit es startet, es werden weitere Eingänge benötigt, welche - zumindest für mich - nicht ersichtlich sind, und ich sie nur durch die Bedienanleitung herausgefunden habe. (auch durch die Merkerzuweisung in OB1 ist das nicht festzustellen)

Ich habe nämlich nur 8 Eingänge, und das Testprogramm benötigtja (wie ich inzwischen herausbekommen habe) 16 Eingänge, zumindest noch 3 vom zweiten Eingangsbyte.

Und wenn ich selbst ein Programm schreibe, dann funktioniert es irgendwie nicht.

Hatte nämlich einfach in FB2 und FB3 die Eingänge direkt eingetragen und die bestehenden DB´s verwendet, da hat nichts geklappt.

muß dann nochmal weiterprobieren.

Ein weiteres Problem, welches ich habe ist die "Archivierung" der eingehenden Daten. Kann man ohne OP oder angeschlossenem PC in einem DB die Daten sammeln (Ist ein String mit max 256 Zeichen) und später komplett auslesen? Wenn ja, wie macht man das am geschicktesten?

gruß mathias007

@ Larry Laffer: Mein Problem geht in eine etwas andere Richtung: Woher weiß ich bei welchem umgelegten Schalter (Eingang) ich nun da eine 1 oder eine 2 im Akku habe? Wenn ich das PEW nehme und die im Testprogramm umzulegenden Schalter umlege, dann komme ich "Binär" oder "Hex" gezählt nicht auf 1 oder 2 und im Programm selbst kann ich das irgendwie nicht erkennen.

@jabba: das mit den Sprüngen ist einigermaßen klar, ich verstehe nur nicht, dass einmal der befehl "L10" den DB10 aufruft und in der zeile danach mit L14 das Datenwort 14 aufgerufen wird - und vor allem dass es das DW14 aus DB10 ist. Meiner meinung nach ein wenig unverständlich programmiert, oder wird allgemein beim ersten Laden der DB aufgeruzfen und beim nächsten das DW aus diesem DB. könnte dioch auch ein Byte oder sogar ein Bit sein, oder???
 
Zuletzt bearbeitet:
Hallo,

also L 10 , T MW 40-> geht auf den Eingang am FB und teilt den Datenbaustein mit.
L14 , T MW42-> geht auf den Eingan am FB und teilt mit, ab welcher stelle im DB.

Lass das Beispiel fallen, und beschreib einfach was du machen willst.

Im Anhang ein einfach Aufruf von Send, ohne dem Umweg der Merkerworte.
 

Anhänge

  • send.jpg
    send.jpg
    16,5 KB · Aufrufe: 39
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen,

habe nun mal Eure Ratschläge befolgt.

Senden und empfangen klappt schon.

Nun habe ich nur noch eine Frage, was die "Archivierung" der eingehenden Daten betrifft. In diesen Daten stehen "Mischungsdaten" eines Sandmischers. Wie kann man am besten diese Daten in einem anderen DB sichern, so dass man ggf einmal am Tag die Daten auslesen kann.

Hatte es schon mit dem "Move_BLCK" probiert, aber da krieg ich bei einer String-Länge von 256 Zahlen/Buchstaben probleme alles zu verschieben, bzw die verschobenen Daten nicht erneut zu überschreiben.

gruß mathias007
 
Hallo mathias007

schön das es soweit klappt,

Zur Frage: wie oft kommen die Daten, und wie sollen die bereitgestellt werden. Archivieren geht mit Blockmove und indirekter Adressierung, jedoch bei 256 Byte ist die CPU schnell voll.

Andere Ansätze:
- Von einem PC abholen z.B. mit Libnodave
- OPC Server
- Speichern auf die MMC Karte
- Auslagern auf eine CF-Karte mit einer weiteren CP340 und einer Avisaro
- Script im OP und sichern auf CF oder PC
....
 
Dass die CPu schnell voll wird ist nicht so schlimm,

das Programm soll eigentlich nur zum testen sein. Wir haben ein Gerät, welches nach einer fertigen Mischung über RS232 die Mischungsdaten verschickt. dieses soll nun von einem Anlagenhersteller in der SPS eingelesen werden.

An für sich wird das Programm vom Anlagenhersteller ja auch geschrieben, nur wir müssen hier für uns noch einige "Feineinstellungen" an der protokollausgabe un ddem Geräteprogramm machen und brauchen dann etwas zum testen (und so kommt ein SPS-Anfänger wie ich schon an seine grenzen)

gruß Mathias007
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Wenn ich das richtig verstehe, seit ihr dann der Datenlieferant für die S7, und sendet die Daten an die S7.

Dann reicht zum testen doch ein Nullmodemkabel und Hyperterminal.
Es sei denn ihr nehmt z.B. 3964R.
 
Ja, hast es richtig verstanden. Wir senden an die SPS, bekommen aber auch einige Daten von der SPS (welche weiß ich noch nicht genau, da wir das noch mit dem Anlagenbauer abklären müssen, bzw unser Software-Ing. der das zugehörige Programm entsprechend umbauen muß)


Wir verwenden dann das 3964R-Protokoll, aber zum testen hatte ich mal mit ASCII-Übertragung angefangen.

Über 3964R hab ich inzwischen auch etwas verschicken können, hat aber (wohl) noch nicht das richtige "Layout"

gruß Mathias
 
Zurück
Oben