Ich hatte auf eine Loesung mit libnodave gehofft. Allerdings habe ich bis jetzt nur die "daveGetProgramBlock" Funktion gefunden.
Kann libnodave auch Bloecke schreiben?
Im Prinzip ja. Problem: wohin? Die S5 hat im Prinzip einen linearen Speicher. Wenn du einen Baustein mit Step5 änderst, wird er in freien Speicher geschrieben. Anschließend wird die neue Adresse in eine Liste eingetragen. Im nächsten Zyklus wird die neue Adresse zum Bausteinaufruf benutzt.
Nach etlichen Änderungen gibt es keinen freien Speicher mehr. Dann rufst du "Speicher komprimieren" auf und die SPS legt die gültigen Blöcke hintereinander so daß dahinter oder davor wieder freier Speicher am Stück vorhanden ist.
Probleme bzw. offene Fragen:
- Wo darf der nächste Baustein hingeschrieben werden? Vermutung: egal.
- Wer manipuliert die Bausteinliste, PG oder CPU? Weiß ich nicht.
- Wo ist die Bausteinliste? Weiß ich nicht mehr, aber mit etwas stöbern findet man sie.
- Wie ist die Bausteinliste aufgebaut? Lauter Word-Einträge. Im 1. Wort steht die Adresse der niedrigsten Bausteinnummer. Für nicht vorhandene Bausteine steht ein Platzhalter (0000?). Für jede BS Art (PB,FB,...) gibt es eine Liste mit 256 Einträgen.
- Wie schreibt man eine beliebige Adresse mit Libnodave? Bei S5-Protokoll ruft daveWriteBytes() daveWriteS5Bytes() auf. daveWriteS5Bytes() addiert je nach Speicherbereich (Parameter area) die Anfangsadresse der Merker, des PAE/PAA oder des Datenbausteins. Zusätzlich gibt es die area-Konstante daveRawMemoryS5. In diesem Fall wird nichts addiert, sondern der Parameter start liefert direkt die Anfangsadresse im Speicher.
Gleiches gilt für Lesen.
Question_mark schrieb:
Vielleicht über libnodave mit AS511-Protokoll, der würde dir den Baustein richtig in die S5 Speicherverwaltung einbinden.
Nein, dieses Einbinden ist nicht implementiert. Für S7 ja, da übergibt man der CPU einige Informationen über den Baustein und dann lädt sie ihn vom PG und bindet ihn ein. Für S5 ist auch "daveGetProgramBlock" nicht implementiert...
Wie lang der header ist, habe ich vergessen. Einfach mal einen Baustein mit bekanntem Code (Codetabelle) schreiben, dann siehst du´s schon.
Noch was anderes.
Ich habe etwas Erfahrung mit libnodave und S7. Gerade versuche ich die Verindung mit einer S5 aufzunehmen und bleibe iregenwie beim daveConnectPLC (-21) haengen.
Funktioniert S7 seriell? Durch eine Anfrage gestern oder vorgestern habe ich gesehen, daß ich in 0.8.4 einen Patch "in gutem Glauben" übernommen habe, der möglicherweise jede serielle Verbindung unter Windows stört...
Trotz 9840 Downloads hat sich keiner gemeldet (oder nicht deutlich genug)...