Zuviel Werbung? - > Hier kostenlos beim SPS-Forum registrieren

Ergebnis 1 bis 10 von 10

Thema: Variablenübergabe C++ - TwinCat PLC Control

  1. #1
    Registriert seit
    19.06.2009
    Beiträge
    5
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo zusammen,

    dies ist mein erster Besuch im SPS-Forum und bin gespannt ob man mir helfen kann.

    Ich habe im TwinCat PLC Control ein lauffähiges Programm, welches ich gerne im C++ Code realisieren will (soll in eine bestehende C++ Anwendung eingebunden werden).

    Dafür habe ich das machine-Beispielprogramm von Beckhoff angeschaut und in diesem eine "Testvariable" (Bool) eingefügt, die ich ans PLC Control übergeben möchte.

    Im Beispiel "machine" ist bereits eine Variable "switch" vorhanden, welche ich testweise auch in mein PLC-Control-Programm eingefügt habe, diese switch Variable lässt sich problemlos über die C++-Oberfläche verändern.

    Im C++ Code habe ich meine Testvariable parallel zur Switch-Variablen laufen, (alle Zeilen mit Anweisungen für die Switch-Variable kopiert und mit TestVariable ausgetauscht).

    Leider wird die TestVariable nicht übermittelt, während die Switch-Variable problemlos läuft.

    Ich vermute, dass ich irgendwo übersehen habe wo die Testvariable übermittelt wird.

    Für eine Hilfe wie ich eigene Variablen aus dem C++ ins PLC Control übermittel wäre ich sehr dankbar.


    Viele Grüße

    Andreas
    Zitieren Zitieren Variablenübergabe C++ - TwinCat PLC Control  

  2. #2
    Registriert seit
    29.09.2006
    Beiträge
    368
    Danke
    0
    Erhielt 41 Danke für 38 Beiträge

    Standard

    Hallo,

    vielleicht postest Du Deinen Code?

    Viele Grüße

  3. #3
    AndiM ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    19.06.2009
    Beiträge
    5
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    ...mit einem anderen Namen für die Testvariable funktioniert es.
    Falls jemand weiß, was an dem Namen "TestVariable" nicht stimmt, wäre es interessant zu wissen.

    Somit hat sich mein Problem durch den anderen Variablennamen gelöst, falls doch noch Interesse an dem Code besteht, kann ich ihn noch posten.

  4. #4
    Registriert seit
    29.09.2006
    Beiträge
    368
    Danke
    0
    Erhielt 41 Danke für 38 Beiträge

    Standard

    Hallo,

    Du machst sicher einen AdsWrite per Symbol oder per Adresse, liefert doch dann bestimmt einen Fehler? Den mal auswerten...

    Viele Grüße

  5. #5
    AndiM ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    19.06.2009
    Beiträge
    5
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    hier der Code vom RadioButton des Beispiels:

    void CMachineDlg::OnBnClickedRadio1()
    {
    // Anpassen der "Switch"-Variable, bei klick auf Radio Button "fast"
    // Fits the switch variable if the radio button "fast" was clicked


    bTestVariable = true;
    nTestVariable = AdsSyncReadWriteReq( pAddr, ADSIGRP_SYM_HNDBYNAME, 0x0, sizeof(ULONG), &hTestVariable, 8, ".TestVariable" );
    nTestVariable = AdsSyncWriteReq( pAddr, ADSIGRP_SYM_VALBYHND, hTestVariable, 0x1, &bTestVariable );
    nTestVariable = AdsSyncWriteReq( pAddr, ADSIGRP_SYM_RELEASEHND, 0x0, sizeof(ULONG), &hTestVariable);

    bSwitch = true;
    nSwitch = AdsSyncReadWriteReq( pAddr, ADSIGRP_SYM_HNDBYNAME, 0x0, sizeof(ULONG), &hSwitch, 8, ".switch" );
    nSwitch = AdsSyncWriteReq( pAddr, ADSIGRP_SYM_VALBYHND, hSwitch, 0x1, &bSwitch );
    nSwitch = AdsSyncWriteReq( pAddr, ADSIGRP_SYM_RELEASEHND, 0x0, sizeof(ULONG), &hSwitch );

    bisella = true;
    nisella = AdsSyncReadWriteReq( pAddr, ADSIGRP_SYM_HNDBYNAME, 0x0, sizeof(ULONG), &hisella, 8, ".isella" );
    nisella = AdsSyncWriteReq( pAddr, ADSIGRP_SYM_VALBYHND, hisella, 0x1, &bisella );
    nisella = AdsSyncWriteReq( pAddr, ADSIGRP_SYM_RELEASEHND, 0x0, sizeof(ULONG), &hisella );
    }

    Variablen wurden deklariert, Variablen "Switch" und "isella" funktionieren, Variable "TestVariable" nicht.

    Einen Fehler bekomme ich nicht ausgegeben, daher weiß ich auch nicht wo oder wie ich die Übermittlung der Testvariable auswerten kann.

    Da es aber mit dem Variablennamen "isella" funktioniert, sollte ich erstmal vorankommen.

    Vielen Dank

    Andreas

  6. #6
    Registriert seit
    29.09.2006
    Beiträge
    368
    Danke
    0
    Erhielt 41 Danke für 38 Beiträge

    Standard

    Hallo,

    kann ich nicht glauben, dass es ohne Fehlermeldung nicht gehen soll!? Mal durchgesteppt? Ist "nTestVariable" step-für-step" immer Null? Hast Du ein Handle bekommen? Ist ".TestVariable" eine globale Variable in der SPS mit der richtigen Größe zum C++ Def?

    Viele Grüße

  7. #7
    AndiM ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    19.06.2009
    Beiträge
    5
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    ich bin nun beim Debuggen die Einzelschritte durchgegangen (F11). Bekomme dabei keine Fehlermeldungen in der Ausgabe.

    Ich weiß nicht wo ich sehen kann ob "nTestVariable" step-für-step immer null ist.

    Auch weiß ich nicht ob ich ein Handle bekommen habe, da ich nicht weiß wo ich das sehe.

    "TestVariable" wurde im PLC Control als globale Variable (BOOL) deklariert. Was meinst du mit "richtige Größe zum C++ Def?



    Entschuldigung für mein Nichtwissen, bin ziemlich unerfahren - finde es aber klasse, dass einem trotzdem versucht wird zu helfen!

    Schöne Grüße

  8. #8
    Registriert seit
    29.09.2006
    Beiträge
    368
    Danke
    0
    Erhielt 41 Danke für 38 Beiträge

    Standard

    Hallo,

    muss ja doch einen Unterschied geben..."nTestVariable" siehst Du je nach DeVStudio im WatchWindow oder im QuickWatch. Da kannst Du auch schauen, ob "hTestVariable" != NULL ist.

    Viele Grüße

  9. #9
    Registriert seit
    24.02.2009
    Beiträge
    1.244
    Danke
    23
    Erhielt 276 Danke für 235 Beiträge

    Standard

    Füge doch einfach diese Zeile ein, nachdem du den/das Handle geholt hast :

    Code:
    if (nTestVariable) cerr << "Error: AdsSyncReadWriteReq: " << nTestVariable << '\n';
    und nochmal:

    Code:
    if (nTestVariable) cerr << "Error: AdsSyncWriteReq " << nTestVariable << '\n';
    Nachdem du die Variable holst.


    dann bekommst du die Fehlermeldung wenn da irgendwas faul ist.

  10. #10
    AndiM ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    19.06.2009
    Beiträge
    5
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo,

    vielen Dank für die schnellen Antworten - da die Variablenübergabe mit einem anderen Variablennamen ja funktioniert werde ich nun nicht mehr weiter forschen warum es vorher nicht ging. Das Projekt soll nun weiter vorangebracht werden.

    Ich bin begeistert von den vielen schnellen Antworten die mir als Anfänger Hilfe gegeben haben.

    Somit wünsche ich noch einen erfolgreichen Wochenstart und nochmals "DankeSchön" !

    Viele Grüße

    Andreas

Ähnliche Themen

  1. Tastenkombination TwinCAT PLC Control
    Von HK09 im Forum CODESYS und IEC61131
    Antworten: 4
    Letzter Beitrag: 26.07.2016, 10:52
  2. TwinCAT PLC COntrol VISU
    Von Pinmaster im Forum CODESYS und IEC61131
    Antworten: 2
    Letzter Beitrag: 24.08.2011, 10:47
  3. TwinCat PLC Control 2.11.0
    Von jusi im Forum CODESYS und IEC61131
    Antworten: 5
    Letzter Beitrag: 14.01.2010, 21:30
  4. BK9000 +KL2531 +TwinCAT PLC Control
    Von pec im Forum CODESYS und IEC61131
    Antworten: 2
    Letzter Beitrag: 11.09.2008, 19:10
  5. Codesys bzw. TwinCAT PLC-Control
    Von MarkusP im Forum CODESYS und IEC61131
    Antworten: 8
    Letzter Beitrag: 18.03.2008, 21:45

Stichworte

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •