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

Hans54216

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

ich suche eine Möglichkeit mit der "DotNetSiemensPLCToolBoxLibrary" (LibNoDave) auf den DualPort RAM zuzugreifen.

Die SPS macht dies per FB15, welcher vom FC21 aufgerufen wird.
Zudem kann per FB15 (anhand FB2, FB3) auf NC und Antriebsmaschinendaten zugegriffen werden.

Der FB15 ist jedoch in "C für S7" erstellt. Somit kann ich diesen nicht öffnen.

Hardware ist eine 840dsl: NCU730.3 PN mit CPU 317F-3 PN/DP


Mir stellt sich nun die Frage, wie ich auf diese Daten zugreifen kann.

Code:
//FC21
      U     #Enable
      SPBN  noFB
      =     #C_LEnable
      L     #Funct
      T     #C_LFunct
      L     #IVAR1
      T     #C_LIVAR1
      L     #IVAR2
      T     #C_LIVAR2
      L     #Funct
      T     #C_LFunct
      L     P##S7Var
      LAR1  
      L     B [AR1,P#1.0]
      T     #C_Ltype
      L     W [AR1,P#2.0]
      T     #C_LnumberElements
      L     W [AR1,P#4.0]
      T     #C_LsubArea
      L     D [AR1,P#6.0]
      T     #C_Lmc7Ptr


      L     21
      T     #C_LBlockNo
      L     15
      T     #BpBlockNo
      UC    FB [#BpBlockNo]


      L     #C_LBlockFB15Return
      L     B#16#0
      ==I   
      SPBNB end


      L     #C_LErrCode
      T     #ErrCode
      U     #C_LError
      =     #Error
      NOT   
      SAVE  
      BE    
noFB: L     B#16#0
      T     #ErrCode
      R     #Error
      SAVE  


end:  BE
 

Anhänge

  • SIMATIC Manager - [FB15 -- C______Fb15].png
    SIMATIC Manager - [FB15 -- C______Fb15].png
    3,6 KB · Aufrufe: 63
Zuletzt bearbeitet:
AGLink ist zum einen Lizenzpflichtig, anderseits geht AGLink doch auch über TCP/IP, oder?

Kennt sich einer alternativ mit der Cap-Schnittstelle aus? Das HMI kann ja auch auf alles zugreifen.
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
AGLink ist zum einen Lizenzpflichtig

yupp

anderseits geht AGLink doch auch über TCP/IP, oder?
wie stellst du dir denn vor von außen auf die SL zu kommen?
die DotNetSiemensPLCToolBoxLibrary nutzt doch auch nur TCP/IP für die Verbindung auf die 840D SL S7 (NC geht damit nicht)

also was hoffst/denkst/vermutest du wie erreichen zu können?
 
wie stellst du dir denn vor von außen auf die SL zu kommen?
die DotNetSiemensPLCToolBoxLibrary nutzt doch auch nur TCP/IP für die Verbindung auf die 840D SL S7 (NC geht damit nicht)

AGLink, sowie HMI Operate laufen ja auch auf dem Laptop und greifen per Ethernet auf alle Daten(NC, PLC, DP) zu.

also was hoffst/denkst/vermutest du wie erreichen zu können?

Die SPS greift ja per FB15 auf die NC zu. Wenn ich nun mit LibNoDave auf die gleiche Schnittstelle zugreife und das Ergebnis abfange hab ich ja die gewünschte Funktion.
 
Hab mit der AGLink demo schon einzelne NC- sowie Antriebsmaschinendaten geschreiben, sowie ausgelesen.

und du willst einfach das gleiche mit DotNetSiemensPLCToolBoxLibrary, LibNoDave machen?

Problem:
DotNetSiemensPLCToolBoxLibrary, LibNoDave implementieren NUR das S7 Protokoll - aber nicht das NCK-Protokoll

kann es sein das der FB15 das NCK-Protkoll spricht?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
und du willst einfach das gleiche mit DotNetSiemensPLCToolBoxLibrary, LibNoDave machen?

Ich verwende im Moment erfolgreich die "
DotNetSiemensPLCToolBoxLibrary", welche mir auch recht gut gefällt. Zusätzlich kann im Fehlerfall oder implementieren zusätzlicher Funktionen einfach im Projekt nachgesehen werden, da Open Source und frei zugänglich über Github.


Problem:
DotNetSiemensPLCToolBoxLibrary, LibNoDave implementieren NUR das S7 Protokoll - aber nicht das NCK-Protokoll

kann es sein das der FB15 das NCK-Protkoll spricht?

FB15 ist in "C für S7" erstellt. Ich weis nicht was dieser genau macht.
 
Der FB15 handelt oder macht die Kommuniaktion/Verbindung zwischen PLC und NC ...

Evtl. solltest Dir halt einmal "Create MyHMI-3GL ..." anschauen, da ist es von Siemens beschrieben wie man auf die Schnitstelle zugreift.
Kostet aber auch wieder etwas, da Optionspacket für OEM ...
 
Dafür ist definitiv nichts in meiner Bibliothek implementiert. Hab auch noch nie an einer NC gearbeitet, und keine zum Testen zur verfügung, daher kann Ich da auch nichts implementieren.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich verwende im Moment erfolgreich die "DotNetSiemensPLCToolBoxLibrary", welche mir auch recht gut gefällt. Zusätzlich kann im Fehlerfall oder implementieren zusätzlicher Funktionen einfach im Projekt nachgesehen werden, da Open Source und frei zugänglich über Github.

Dafür ist definitiv nichts in meiner Bibliothek implementiert. Hab auch noch nie an einer NC gearbeitet, und keine zum Testen zur verfügung, daher kann Ich da auch nichts implementieren.

das spezifische NC-Protokoll (nicht das S7-Protokoll) ist nicht in DotNetSiemensPLCToolBoxLibrary und LibNodave implementiert - darum geht es nicht
 
Wobei es jetzt nicht der große Aufwand ist, das bei libnodave hinzuzufügen. Das sind vielleicht 20-30 Zeilen Code.
Ich komme an sowas zum Testen aber auch nicht ran.
 
Wobei es jetzt nicht der große Aufwand ist, das bei libnodave hinzuzufügen. Das sind vielleicht 20-30 Zeilen Code.
Ich komme an sowas zum Testen aber auch nicht ran.

Das testen ist kein Problem. Ich hab mehrere Maschinen, sowie nen Teststand zum ausprobieren.
Mein Problem ist, dass ich nicht weiß wo ich ansetzen muss.

Wenn ihr mir helft das in libnodave zu integrieren, kann ich das gerne testen.
 
Ohne das jetzt einmal durch einen Compiler geschickt zu haben, müsste dazu eine Funktion wie diese hinzugefügt werden:
Code:
void DECL2 daveAddNCKToReadRequest(PDU *p, int area, int unit, int column, int line, int module, int linecount) {
    uc pa[] = {
        0x12, 0x08, 0x82,   /* VarSpec, Length, SyntaxId */
        0x00,               /* Area/Unit: 3 Bits Area, 5 Bits unit */
        0x00, 0x00,         /* column */
        0x00, 0x00,         /* line */
        0x00,               /* module */
        0x01,               /* linecount */
    };
    pa[3] = ((area & 0x07) << 5) | (unit & 0x1f);
    pa[4] = column / 256;
    pa[5] = column & 0xff;
    pa[6] = line / 256;
    pa[7] = line & 0xff;
    pa[8] = module;
    pa[9] = linecount;

    p->param[1]++;
    memcpy(p->param+p->plen, pa, sizeof(pa));
    p->plen += sizeof(pa);

    ((PDUHeader2*)p->header)->plenHi = p->plen / 256;
    ((PDUHeader2*)p->header)->plenLo = p->plen % 256;

    p->data = p->param+p->plen;
    p->dlen = 0;
    if (daveDebug & daveDebugPDU) {
        daveDumpPDU(p);
    }
}
 
Ich würd das am Montag mal in meinen LibNoDave Fork und meine Toolbox einbauen!
@Hans, könntest du das dann mal testen? (Aber bitte nicht an einer Produktiv Maschine)
 
Zurück
Oben