DotNetSiemensPLCToolBoxLibrary (LibNoDave) Zugriff auf Dual-Port RAM / FB15

Zuviel Werbung?
-> Hier kostenlos registrieren
Sagt euch das s7comm-plus Protokoll etwas? Ist das für TIA ohne PUT, GET Freigabe?

https://plc4x.apache.org/protocols/s7/s7comm-plus.html

Das ist das Standard-Protokoll für die 1200/1500. Ich habe dafür auch einen Wireshark-Treiber der würde ich sagen zu 95% alles dekodiert was so möglich ist, den musst du aber in Form einer dll in den plugins Ordner von Wireshark packen:
https://sourceforge.net/projects/s7commwireshark/

An dem Apache PLC4X Projekt stört mich, dass es eine Java-Software sein soll. Für einen Treiber ist Java meiner Meinung nach die schlechteste Wahl, außer wenn man diese Software nur für sich selber benötigt. Eine Bibliothek mit C-Api ist das Mittel der Wahl, diese kann in so gut wie jeder anderen Sprache verwendet werden.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
wie kannst du denn das meiste dekodieren wenn es verschlüsselt ist? Hast du denn das Protokoll irgendwo beschrieben?
Es ist ja nicht verschlüsselt, außer evtl. einige wenige Objektdaten.
Du musst dich gegenüber der Steuerung nur authentifizieren, bei den ersten Versionen der 1200er vor Firmware Version 3 nicht einmal das.
 
Im Prinzip ja, da gibt es aber mindestens 3 Möglichkeiten und Formate. Einmal für alle 1200er vor v3, dann für alles danach und 1500, und du kannst auch alles in einem Rutsch im xml-Format lesen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hat schon jemand bei der S7-300 per LibNoDave Force Werte gesetzt/gelesen/gelöscht?

Ich hab mal ein paar Wireshark erstellt.

Anhang anzeigen PLC Force_20190618.rar

In der NoDave hab ich nur die "daveForce200" gefunden, was wohl für die 200er SPS steht.

Wie kann ich die pa, da, da2 und den Wireshark zusammenbringen? Bzw. was ist das im Wireshark (Header, Parameter, Data,...)

Code:
int DECL2 daveForce200(daveConnection * dc, int area, int start, int val) {
    int res;
    PDU p2;
    //    uc pa[]={0,1,18,4,17,67,2,0};
    //    uc da[]={'0','0'};


    //32,7,0,0,0,0,0,c,0,16,


    uc pa[] = { 0, 1, 18, 8, 18, 72, 14, 0, 0, 0, 0, 0 };
    uc da[] = { 0, 1, 0x10, 2,
        0, 1,
        0, 0,
        0,        // area
        0, 0, 0,        // start
    };
    uc da2[] = { 0, 4, 0, 8, 0, 0, };
    //    uc da2[]={0,4,0,8,7,0,};


    if ((area == daveAnaIn) || (area == daveAnaOut) /*|| (area==daveP)*/) {
        da[3] = 4;
        start *= 8;            /* bits */
    }
    else if ((area == daveTimer) || (area == daveCounter) || (area == daveTimer200) || (area == daveCounter200)) {
        da[3] = area;
    }
    else {
        start *= 8;
    }
    /*    else {
    if(isBit) {
    pa[3]=1;
    } else {
    start*=8;
    }
    }
    */
    da[8] = area;
    da[9] = start / 0x10000;
    da[10] = (start / 0x100) & 0xff;
    da[11] = start & 0xff;




    da2[4] = val % 0x100;
    da2[5] = val / 0x100;
    res = BuildAndSendPDU(dc, &p2, pa, sizeof(pa), da, sizeof(da), da2, sizeof(da2));
    return res;
}
 
Hallo euch allen!
Sorry das ich hier einfach so reinplatze, der Grund ist das mir dieser Thred im Forum bei meinem Problem schon eine Menge weiter geholfen hat und ich gehoft habe das ihr mir einen Tipp geben könntet.
Ich schreibe gerade ein Programm das GUD Variablen und A_DBB Variablen einlesen muss.
Mit der LibNoDave habe ich es bereits geschäft sämtliche GUDs+R Parameter +Maschinendaten auf einmal in einer Datei einzulesen.
Leider funktioniert das nicht mit A_DBB. Deshalb meine Frage, wie kann ich mit LibNoDave A_DBB lesen bzw. Schreiben?

Danke für jede Hilfe!

Schöne Grüße

Manuel
 
Hallo Manuel,

das funktioniert genau so wie die R-Parameter oder die Maschinendaten.
Mit dem NC-VAR-Selector musst du dir die ST_NC_VAR raussuchen und anschließend kannst du diese lesen/schreiben (je nach rechte der Variable).

In der Lib hab ich dafür die Klasse NC_Var hinzugefügt.

Beispiel für $A_DBB[0]
public static readonly NC_Var S_aDbb = new NC_Var(0x82, 0x1, 0x1E, 0x0, 0x7F, 0x1, 0x4, 0x2);


PS: Dass hab ich doch schon vor nen halben Jahr auf deine Frage an der Pinwand beantwortet.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Hans,

Ja danke dafür, aber ich brauche eine Möglichkeit ohne den NC Var Selector verwenden zu können. Weil es im verschiedene Projekte geht die das Programm automatisch einlesen können muss. Genauer geht es darum das man von einem Projekt eine spf öffnen kann und dann muss ich automatisch die darin enthaltenen a_dbb Variablen einlesen.
 
Also noch einfacher kann ich es dir nicht machen.
Eine Variable "S_aDbb" des Types NC_Var in deinem Programm anlegen und je nach Adresse den Rot Markierten Wert ändern. (siehe oben)

S_aDbb.GetNckTag(0,0)
 
Oh okay, jetzt hab ichs verstanden, ich hatte das Nc Var Selector Programm nämlich nicht installiert, weil ich davon ausgegangen bin, dass man darin für ein bestimmtest Projekt die A_DBB Adressen raussuchen kann, aber das es je nach Anzahl der Variablen zu verschiedenen Adressen kommt. Aber wie es scheint ist der Nc Var Selektor projektunabhängig. Perfekt, vielen Dank für deine Hilfe. Das war genau das was ich gesucht hatte.
Leider finde ich im Nc Var Selektor keine M und H Funktionen, kann man die Bits nur einlesen wenn man die DB Nummer kennt? Lässt sich die irgendwie rausbekommen?
Schöne Grüße

Manuel
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hat schon jemand bei der S7-300 per LibNoDave Force Werte gesetzt/gelesen/gelöscht?

Die Force-Funktionen und diverse andere Test und Installationsfunktionen waren bisher in Wireshark nicht vollständig oder fehlerhaft.
In der Testversion die ich dir mal zur Verfügung gestellt habe, sind alle Funktionen integriert. D.h. alle die in SZL 0x131 Index 2 unter funkt_0, 1, 2 gemeldet werden.

Ich habe das bisher noch nicht im offiziellen Wireshark-Release veröffentlicht, weil ich recht umfangreiche Änderungen vorgenommen habe und ich keinen anderen Tester habe. Es gibt auch noch ein paar Parameter von denen ich nicht die genaue Bedeutung weiß und aktuell nur vermutete Funktionen stehen, weil da annähernd immer die gleichen Werte enthalten sind.

Die Force-Funktion ist etwas aufwändiger, weil das nicht nur eine Funktion ist sondern aus mehreren besteht. Jobs lesen, Job anlegen bzw. ersetzen, Force aktivieren, Jobs löschen. Und vorab am besten erstmal die SZL auslesen um zu sehen was die CPU überhaupt davon beherrscht.
 
Währ top wenn du mir ne Basis für die Methoden hast. Testen plus Bug fix kann ich gern machen. Bei der PLC hab ich es meist mit ner 317 oder 319 zu tun.
 
Zuletzt bearbeitet:
@Manuel: Der NC Var Selector ist ein Tool mit dem die Adressen der NC Variablen gesucht werden kann. Die Variablen sind abhängig von der NCK Version. Grundsätzlich löscht Siemens keine Variablen (Adressen). Bei Erweiterungen werden neue Bereiche hinzugefügt, alte funktionieren eigentlich lich immer weiter.

M und H Funktionen werden per FB2 mit den Kanal DB21... synchronisiert. Schau dir den UDT21 an.
M-Funktionen bis 100 hat Siemens bereits auskodiert. Die restlichen musst du über die allgemeine Schnittstelle für M-Funktionen (auch Kanal DB) selber auskodiert.

Es gibt im NC Var Selector die M Funktionen, jedoch nur für einen IPO Takt. Also besser aus der PLC.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Danke für die Info, aber wie gesagt leider habe ich keine Möglichkeit in die Software einzugreifen, das Programm muss alles lesen können ohne das man dafür was anpassen kann.
Aber ich kann zumindest mal die ersten 100 M funktionen aus dem db21. Dbx194. 0+ holen und den Rest aus dem DB der bei dem Projekt verwenden wird.
Dazu wollte ich ihn mir gerne über den Namen suchen, darum muss ich mir mal das Tool zum Projekt einlesen anschauen. Ausser dir fällt noch was weniger umständliches ein um den DB rauszubekommen...
Schöne Grüße
Manuel
 
@Manuel: Da es sich bei den Hilfsfunktionen um Standard Signale aus der Nahtstellen zwischen NC und PLC handelt sind die DB's ja fest vom System vorgegeben.
DB21 => Kanal 1
DB22 => Kanal 2
- - -
DB30 => Kanal 10

Eine Beschreibung der Signale findest du z.B. in DocOnWeb / SINUMERIK 840D sl NC-Variable und Nahtstellensignale
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Hans,
das mit dem NC Var Selektor klappt hervorragend. Du hattest gesagt das du einen Bereich für M-Funktionen kennst aber der nur einen IPO Takt geht. Wie heißt den der Bereich, leider finde ich ihn nicht und was meinst du mit einem Takt. Wenn man ihn öfter liest, wird er nicht mehr aktualisiert oder wie?
Nachdem mein Programm alle Variablen abdecken soll ist das jetzt ein extremer Aufwand für mich, nachdem ich gesehen habe wie viele Variablen es gibt im Var Selektor, darum versuche ich am Wochenende mal die Datenbank die hinter dem Programm steckt selbst zu verwenden und im DotNetLib eine Klasse zu machen mit der man dann eine Variable in die benötigten Daten umwandeln kann um sie auszulesen. Falls das klappt könntet ihr das ja eventuell zu eurer Bibliothek hinzufügen, dann braucht niemand mehr den Var Selektor zu verwenden, der ist ja echt ziemlich umständlich.
Ich finde darin auch keinen Bereich für selbstangelegte GUDs, weil ich die auch schreiben möchte. Das Auslesen über Datei ist ja super, aber damit kann man leider nicht schreiben.
Habe übrigens probiert eine Schreibfunktion für die PlcNckVars dazu zu machen, das klappt gut. Warum fehlte eigentlich die Schreibfunktion?
In der Firma für die ich gerade arbeite, haben sie in der PLC ein Programm geschrieben, das der man eine GUD Variable angeben kann und aus dieser wird dann der Bereich und die anderen Daten gelesen, damit schreiben sie sie dann auch wieder.
Gibt es in der LibNoDave eine Möglichkeit Gud zu schreiben?

Schöne Grüße

Manuel
 
das mit dem NC Var Selektor klappt hervorragend. Du hattest gesagt das du einen Bereich für M-Funktionen kennst aber der nur einen IPO Takt geht. Wie heißt den der Bereich, leider finde ich ihn nicht und was meinst du mit einem Takt.
. . .
Falls das klappt könntet ihr das ja eventuell zu eurer Bibliothek hinzufügen, dann braucht niemand mehr den Var Selektor zu verwenden, der ist ja echt ziemlich umständlich.
Ich finde darin auch keinen Bereich für selbstangelegte GUDs, weil ich die auch schreiben möchte. Das Auslesen über Datei ist ja super, aber damit kann man leider nicht schreiben.
Habe übrigens probiert eine Schreibfunktion für die PlcNckVars dazu zu machen, das klappt gut. Warum fehlte eigentlich die Schreibfunktion?
Moin Manuel!
Weisst Du, was eine NC ist?
Würdest Du für eine Maschine/Anlage ein NC- oder ein PLC-Programm schreiben und damit immens viel Verantwortung übernehmen wollen, wenn Du wüsstest, dass jeder dahergelaufene Abenteurer Deine Arbeit sabotieren und Menschenleben gefährden kann - ganz zu schweigen von Sachschäden anrichten?
Was sagen denn unsere SicherheitsExperten hier im Forum zu Deinem Ansinnen?

Gruss, Heinileini
 
Was ist denn das für eine Frage?!? Du weißt ja überhaupt nicht was ich vorhabe und redest irgend einen an den Haaren herbei gezogen Blödsinn über Sabotage!?!
Ja ich weiß was eine NC ist, weil ich selber seit 10 Jahren NC und seit 20 Jahren Hochsprachen programmiere.
Aber wenn du es unbedingt willst willst was ich damit vorhabe. Es geht um ein Programm für NC Programmierer, weil jeder den ich kenne und auch ich selber nur mit einem Texteditor programmieren. Ohne Autocomplete, Folding, Syntaxcheck, Programme direkt hoch und runterladen, Zeilennummer automatisch generieren/einfügen, und vieles mehr was ich ZB. In Visual Studio gewohnt bin. Darum habe ich es auf mich genommen das zu ändern, weil ich genug Erfahrung mit NC habe und ein NC Studio in C++ programmieren kann um den NC Programmierern das Leben zu erleichtern.
Weil man mit meinem Programm auch NC Programme Debuggen kann um Fehler zu suchen muss ich dazu natürlich vorher die Werte einlesen.
Schöne Grüße
Manuel
 
Zurück
Oben