MC7-Code in AWL umzuwandeln

Zuviel Werbung?
-> Hier kostenlos registrieren
So eine einfache 3 Funktionen wie Upload-Funktionen, das sieht irgendwie kompliziert aus?
Damit ich den obenstehenden Satz zu verstehe, solltest du ihn neu formulieren. Damit ich seinen Sinn erraten könnte, soltest du meine vorige Frage beantworten: 'Da mußt du mir erstmal sagen, welche Richtung du mit "upload" meinst?'
Der kompliziertere Vorgang ist der zum Laden eines Bausteins in die CPU.
Das geschieht in etwa so:
1 PG sagt der CPU, daß es einen bestimmten Baustein in die CPU laden will.
2 CPU fordert Bausteindaten vom PG an.
3 PG sendet soviel Daten, wie in eine PDU passen und sagt, ob mehr folgen.
4 Wenn ja, weiter bei 2
5 Nun existiert der neue Baustein im Speicher der CPU. Vermutlich wird er aber noch noicht ausgeführt.
6 PG schickt den request mit dem Wort "INSERT". Vermutlich wird daraufhin der alte durch den neuen Baustein ersetzt.

Beachte, daß zwischen 1 und 2 die CPU sozusagen die Rolle des Initiators für den weiteren Dialog übernimmt.
 
Hi Human,

die Netzwerkaufteilung steht meiner Meinung nach am Bausteinende
nach HexCode 55, gefolgt von der Anzahl der Netzwerke
erst Low dann Highbyte. Die folgenden Bytes geben die Länge des Netzwerks an. Auch wieder Low- dann Highbyte.

Nicht wundern wenn nur ein paar Einträge möglich sind.
Wenn mehr Netzwerke angelegt werden vergrösser sich das Feld.
Beim Löschen von Netzwerken wird das Feld aber nicht mehr verkleinert.


Beispiel

0:x55 Kennung
0:x02 Anzahl NW's Low => 2 NW's
0:x00 Anzahl NW's High
0:x04 Länge 1. NW Low
0:x00 Länge 1. NW High
0:x06 Länge 2. NW Low
0:x00 Länge 2. NW High
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Sodele und ich hab mal ein bisschen was an der Snittstellensuche gemacht, bei den OBs, FCs und SFCs funktioniert das schon.

Was jetzt noch nicht funktioniert ist wenn ein Befehl auf die Ret_Val-, In-, Out-, In_Out-Parameter zugreift, dann ist die Zeile noch leer, weil ich das über einen ganz anderen Speicherbereich geht, der über die Schnittstelle herausgelesen werden muss, ein bisschen komisch, die Netzwerke kommen in den nächsten Tagen auch noch, was mir noch ein bisschen Sorgen macht ist wo die Schnittstellenlänge bei den FBs und SFBs stehen, das ist irgendwie anders als bei den OBs, FCs und SFCs oder ich muss die Bytes dann drehen, bin noch da dran, wenn ich das habe dann sag ich auch wie das dann ganz funktioniert.

Im Anhang mal die aktuelle Version, meiner MC7-Doku, es sind die UC- und CC-Befehle noch hinzugekommen, wie auch die indirekte Addressierung und die Pointerbefehle (sind auch schon im Programm drin)... wegen dem CALL-Befehl bin ich noch nicht wirklich weiter gekommen, der ist echt zu hart...

Und das mit dem Netzwerken fehlt mir auch noch ein wenig und DBs sind auch noch nicht die Stärke des Programms... :cool:
 
Zuletzt bearbeitet:
Hi Human

was fehlt dir denn genau mit bei den Netzwerken?
War mein Beispiel nicht Aussagekräftig genug?
 
@SPS_PC
Das Beispiel ist super, aber das fängt ja auch nicht einfach so mal an weils lustig ist, sondern da kommen ja zuerst die Ganzen Schnittstellensachen und dann die Eigenschaften (Name, Familie usw.) und dann kommen ja die Netzwerke und das muss man ja auch irgendwie rauskriegen (hier mal ein Längenangabe, dann mal eine fest definierte Länge usw...), ich glaub ich hab heute abend mal wieder eine ruhige Minute in der ich das mal wieder ein bisschen näher an mich ranführen kann... ;)
und dann sollte ich das auch noch für die anderen Verbindungstypen zuganglich machen... wer hat außer mir schone eine Ethernat-Spiel-CPU rumstehen? :cool:
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Sodele, hab mal wieder ein bisschen Zeit gefunden und hab meine Schnittstellensuche beendet und hab dann auch gleich noch eine seperate Anzeige für Datenbausteine eingabaut, die allerdings noch nicht ganz fertig ist. :cool:

Wie die Schnittstellenbeschreibung aufgebaut ist und DBs usw. schreib ich demnächst auch mal auf und meine Quellen stell ich dann auch mal rein, aber kann ich so noch nicht! ;)
 
Zuletzt bearbeitet:
Und schon wieder ist ein wunderschönes Wochenende vorbei und ich war nicht ganz untätig.

Es sind noch ein paar Bausteinangaben dazugekommen wie Autor, Famile, Name, Version, uvm., die Addressierung der Datenbausteine müsste jetzt stimmen und die Aktualwerte der Datenbausteine werden auch noch angezeigt.

An dieser Stelle möchte ich mich dann auch mal an der Mithilfe von Rainer Hönle bedanken, der mir mit der einen Seite aus seinen privaten Archiven sehr sehr weitergeholfen hat (die Seite wird noch eingerahmt :cool:)!

Dann möchte ich mich noch bei Zottel bedanken, der mir bisher immer mit seinem Rat zur Seite stand.


Dann werde ich auch gerade hin und wieder auf die Ziele meiner Arbeit gefragt.
Ich mache das was ich mache einfach so just for fun! Ich beabsichtige nicht eine neue Super-Programmiersoftware a la Step7 zu kreieren und das sowieso nicht aus verschieden Gründen:
1. Würde das wahrscheinlich keine Sau nutzen (nichtmal ich!!!),
2. Hab ich dazu keine Zeit, Siemens hat das ja auch nicht über Nacht gemacht und ich hab auch keine anderen Programmierer.
3. Eigentlich will ich damit nur meine Kollegen die lieben SPS-Programmierer ein bisschen überwachen können, die immer behaupten: "Jaja, ich hab alles richtig, bei mir tut das!", ohne dass ich immer mein Step7-Laptop mitschleifen muss. *ROFL*

Und dann noch was zum Anhang:

Ich würde mich sehr über ein Feedback freuen!!!
 
Zuletzt bearbeitet:
ich habe endlich auch ein bisschen Zeit gefunden und weiter
am MC7-Code geforscht. Das Ergebnis sieht wie folgt aus

++++++++++++++ Übergabeparameter +++++++++++++++++++++++++
Bsp.: 1
...... // MC7-Code
0x 65, 0x 00, // MC7-Code Bausteinende
0x 01, // ??
0x 01, 0x 00, // Bausteinnummer low+high hier 1
0x 00, 0x 00, // Länge der Parameter low+high in Byte hier 0
0x 00, 0x 00, // ??
0x vv, // ??
0x 02, 0x 00, // Anzahl Netzwerke low+high
0x 08, 0x 00, // Länge NW 1
0x 0C, 0x 00, // Länge NW 2


Bsp.: 2
...... // MC7-Code
0x 65, 0x 00, // MC7-Code Bausteinende
0x 01, // ??
0x 0A, 0x 00, // Bausteinnummer low+high hier 10
0x 04, 0x 00, // Länge der Parameter in Byte hier 4
0x 00, 0x 00, // ??

0x bb, 0x cc, // 1. Parameter
0x 02, 0x 01, // 2. Parameter
0x vv // ??
0x 02, 0x 00, // Anzahl Netzwerke low+high
0x 08, 0x 00, // Länge NW 1
0x 0C, 0x 00, // Länge NW 2
.....

// ----------- Beschreibung ---------------------
bb = Datentyp des Parameters
01 = Bool
02 = Byte
03 = Char
04 = Word
05 = Int
06 = DWord
07 = DInt
08 = Real
09 = Date
0A = Time of Date
0B = Time
0C = S5Time
0D =
0E = Date_And_Time
0F =
10 = Array z.B 10 02 02 = out
.....................01 = ?? Beginn der Deklaration
.....................14 = low Byte Startwert
.....................00 = high Byte Startwert Array hier 20
.....................19 = low Byte Endwert Array
.....................00 = high Byte Endwert hier 25
.....................05 = DatenTyp des Arrays hier Int
.....................02 = ?? Ende der Deklaration
11 = UDT z.B 11 01 01 = in
...................02 = Anzahl der Deklarationen
...................04 02 = Word out
...................01 02 = Bool out
13 = String z.B 13 01
.....................FE
14 = Pointer
15 =
16 = Any
FE = String

cc = Typ des Parameters
01 = in
02 = out
03 = in_out
04 = stat
05 = temp
06 = Ret_Val

vv = ??????



__________________________________________________________
+++++++++++++++++++ Autor Familie usw... +++++++++++++++++
0x 2, 0x 0, 0x 8, 0x 0, 0x C, 0x 0, // NW Angaben dieser Bereich
ist in der Länge variabel
0x 0, 0x 0, 0x C, 0x 0, 0x C, 0x 0, 0x 0, 0x 0,
0x F, 0x 0,
0x4A, 0x41, 0x4A, 0x41, 0x4A, 0x41, 0x4A, 0x41, // Autor
0x54, 0x65, 0x73, 0x74, 0x54, 0x65, 0x73, 0x74, // Familie
0x42, 0x41, 0x55, 0x42, 0x41, 0x55, 0x42, 0x41, // Name
0x67, // Version 6.7
0x 0, 0xC5, 0xE3, 0x 0, 0x 0, 0x 0, 0x 0, 0x 0, 0x 0, 0x 0, 0x 0,


Human hätte ich dein Tool eher gesehen, hätte ich mir viel Arbeit sparen
können. Dein Tool ist echt gut. Nur bei dem Übergabeparameter "string"
stimmt was nicht. Vielleicht kannst du ja mal deine Erkenntnisse mit meinen vergleichen.
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Naja, kann UDT sein, aber eigentlich ist es STRUCT, lade mal deinen Baustein in die CPU und lade ihn wieder in ein anderes Projekt zurück, dann kommt ein STRUCT raus mit dem was im UDT drinstand! ;)

Human hätte ich dein Tool eher gesehen, hätte ich mir viel Arbeit sparen
können. Dein Tool ist echt gut. Nur bei dem Übergabeparameter "string"
stimmt was nicht. Vielleicht kannst du ja mal deine Erkenntnisse mit meinen vergleichen.

Endlich mal ein Feedback, ich danke dir!
Den String hatte ich irgendwie vergessen... mach ich jetzt mal rein... :D
 
Zuletzt bearbeitet:
Du hast den Spaß mit den Startwerten vergessen:

cc = Typ des Parameters
01 = in
02 = out
03 = in_out
04 = stat
05 = temp
06 = Ret_Val
09 = in mit Startwert
0A = out mit Startwert
0B = in_out mit Startwert
0C = stat mit Startwert

0x 04, 0x 00, // Länge der Parameter in Byte hier 4
0x 00, 0x 00, // ??
?? = Länge der Startwerte auch in Byte
 
Mit den Startwerten war ich noch nicht so weit,
deshalb hab ich es weggelassen. Da du sonst keine Einwende hast, gehe ich mal davon aus, dass meine Annahmen (Angaben) stimmen.

Heute will ich mich mal die DB's machen. Der Kopf und das Ende sieht auf den ersten Blick aus wie bei den anderen Bausteinen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
So hier noch ein Bsp für die Startwerte

......
0x 01, 0x 00
0x 04, 0x 00 // 4 Byte Parameter
0x 03, 0x 00 // 3 Byte Startwerte
0x 02, 0x 09 // Byte, in mit Startwert
0x 04, 0x 0C // Word, stat mit Startwert
0x CC // 1. Startwert Byte mit Wert 'CC'
0x BB, 0x 00 // 2. Startwert Word mit wert '00 BB'
......
 
Im DB steht alles im STAT-Interface in einem STRUCT und wo sonst der Pogrammcode ist sind die Aktualwerte des Bausteins und sonst ist eigentlich alles gleich! ;)
 
Hab mal wieder das Wochenende genutzt und wieder was gemacht:

- den Typ String hinzugefügt,
- den AWL-Text strukturiert,
- alle NoDave-Verbindungen eingefügt (ich denke mal, dass nicht alle funktionieren)
- bisschen am Layout was herumgeschraubt,
- eine Korrektur in der Doku bei den UC/CC-FC-Aufrufen,
- ein paar kleine Bugs entfernt

[ironie]
Wie immer freue ich mich jetzt schon, dass niemand was dazu schreibt...
[/ironie]
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Maybe you do not get much reaction, but your contributions are read :)!

In your doc's I couldn't find:

U OS
U OV
U >0
U <0
U UO
U <>0
U ==0
U >=0
U BIE

also same list for UN, O, ON, X, and XN.

mc7.exe gets me only a list of OB's and DB's when I try it on the current PLC's I work on (all VIPA), than it stops and does nothing. Will try latest version next week.
 
Maybe you do not get much reaction, but your contributions are read :)!

In your doc's I couldn't find:

U OS
U OV
U >0
U <0
U UO
U <>0
U ==0
U >=0
U BIE

also same list for UN, O, ON, X, and XN.
I didn't know that this operations exist... thank you (in you docs it is not too!) :cool:

If you (or someone else) knows exotic undocumented operators like this tell it me! :D

mc7.exe gets me only a list of OB's and DB's when I try it on the current PLC's I work on (all VIPA), than it stops and does nothing. Will try latest version next week.

I think this is because this problem: http://www.sps-forum.de/showthread.php?t=27801

It is fixed in the new version! :cool:

[EDIT]
Die oben genannten fehlenden Operatoren sind jetzt auch implementiert!

Noch was zu den oben genannten Datenbausteinen:
Die normalen DBs haben nur ein STAT-Interface, die Instanz-Datenbausteine haben auch ein IN, OUT, IN_OUT und STAT-Interface, sollte ich vielleicht in der nächsten Version auch noch hinzufügen...
[/EDIT]
 
Zuletzt bearbeitet:
I didn't know that this operations exist... thank you (in you docs it is not too!) :cool:

Haven't updated my online docs yet. Want it to be as complete as possible before I dothat again. Yesterday I started on comparing our docs, and found this. A complete compare will take some time (Time is a critical resource here...)

It is fixed in the new version! :cool:

Yep, now it works for me!

[ironie]
Wie immer freue ich mich jetzt schon, dass niemand was dazu schreibt...
[/ironie]

Maybe you are going too fast for us...:)
 
Zuviel Werbung?
-> Hier kostenlos registrieren
10 = Array z.B 10 02 02 = out
.....................01 = Anzahl der Dimensionen
.....................14 = low Byte Startwert
.....................00 = high Byte Startwert Array hier 20
.....................19 = low Byte Endwert Array
.....................00 = high Byte Endwert hier 25
.....................05 = DatenTyp des Arrays hier Int
.....................02 = ?? Ende der Deklaration

Das eine unbekannte Byte ist mir durch einen Zufall (SFB32) einfach so in die Hände gefallen! :D
 
Und mal wieder ein bisschen was erweitert:

- Die Aufteiung durch die Netzwerke werden angezeigt,
- Die Bausteine sind in englischer und deutscher Mnemonik anzeigbar,
- hab noch einen fehlenden Operator gefunden (TAK) und in Programm wie auch Doku aktualisiert,
- kleinere Fehlerbehebungen

Und da ist es :cool::
 
Zuletzt bearbeitet:
Was mir gerade aufgefallen ist: wenn man einen komplett leeren Baustein auslesen will gibt es einen Fehler wegen Zugriffsverletzung.

Ansonsten ist das ja schon ziemlich vollständig oder? (Bis auf Parameter...)
 
Zuletzt bearbeitet:
Zurück
Oben