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

Ergebnis 1 bis 8 von 8

Thema: TWINCAT3 TcCom Object IOs Global setzen

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

    Frage


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo Zusammen,
    ich habe Matlab-Modelle in TCCOM Objekte kompiliert und in TC3 importiert.
    Nun möchte ich die I/Os als Globale Variablen setzen, weil ich diese in einigen SPS-Programmen benötige.
    Habe bereits versucht mehrere Variablen über den Weg "Variable verknüpfen" zu verbinden aber eine Mehrfachverknüpfung scheint nicht zu funktionieren.

    Habe dann sowas in einigen Varianten im SPS-Programm versucht:
    .GlobalVar := TCCOMName.Variable;
    aber ohne Erfolg.

    Wie bekomme ich das hin, quasi Ausgänge von TCCOM Objekte zu lesen und Eingänge zu schreiben (innerhalb ST)?

    Viele Grüße
    Hannes
    Zitieren Zitieren TWINCAT3 TcCom Object IOs Global setzen  

  2. #2
    Registriert seit
    24.04.2008
    Ort
    Lübeck
    Beiträge
    324
    Danke
    8
    Erhielt 64 Danke für 62 Beiträge

    Standard

    Das Schlüsselwort ist DataAreaPointer.
    Schau mal in InfoSys ganz unten unter "Aufruf über die SPS" nach: http://infosys.beckhoff.com/content/...189863947.html
    Den Baustein kannst du dann deinen Wünschen entsprechend anpassen.

  3. Folgender Benutzer sagt Danke zu Neals für den nützlichen Beitrag:

    s_haroth (30.06.2014)

  4. #3
    s_haroth ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    29.06.2014
    Beiträge
    5
    Danke
    1
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Danke Neals, wäre nicht draufgekommen das unter Matlab zu suchen, da ich dachte TCComObject wäre was Allgemeines.
    Mit der Anleitung hat es geklappt.

  5. #4
    s_haroth ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    29.06.2014
    Beiträge
    5
    Danke
    1
    Erhielt 0 Danke für 0 Beiträge

    Standard

    sry Doppelpost...
    Geändert von s_haroth (01.07.2014 um 19:58 Uhr)

  6. #5
    s_haroth ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    29.06.2014
    Beiträge
    5
    Danke
    1
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Hätte da noch eine Frage, wie kann ich sämtliche Variablen oder das gesamte TcCom-Objekt auf den ursprünglichen Zustand zurücksetzen?
    Können Modell-Parameter des TCCom-Objekte aus einem SPS Code heraus verändert werden?

  7. #6
    Registriert seit
    24.04.2008
    Ort
    Lübeck
    Beiträge
    324
    Danke
    8
    Erhielt 64 Danke für 62 Beiträge

    Standard

    Wenn du über das ITcADI-Interface dir den ImagePointer auf die DataArea geholt hast, könntest du über MEMSET(pInputs, 0, SIZEOF(ST_Inputs)) den gesamten Speicherbereich auf Null setzen.

    Bei Parameter ist es die Frage, ob diese im TcCOM-Objekt als Parameter oder DataArea angelegt sind. Die Parameter eines TcCOM-Objektes kannst du über das ITComObject-Interface mit der Methode TcSetPara ändern. Für die DataArea könntest du über das ITcADI-Interface einen Pointer holen und darüber die Parameter ändern.

    Für Details müsste man die TMC kennen.

  8. #7
    s_haroth ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    29.06.2014
    Beiträge
    5
    Danke
    1
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Zitat Zitat von Neals Beitrag anzeigen
    Wenn du über das ITcADI-Interface dir den ImagePointer auf die DataArea geholt hast, könntest du über MEMSET(pInputs, 0, SIZEOF(ST_Inputs)) den gesamten Speicherbereich auf Null setzen.

    Bei Parameter ist es die Frage, ob diese im TcCOM-Objekt als Parameter oder DataArea angelegt sind. Die Parameter eines TcCOM-Objektes kannst du über das ITComObject-Interface mit der Methode TcSetPara ändern. Für die DataArea könntest du über das ITcADI-Interface einen Pointer holen und darüber die Parameter ändern.

    Für Details müsste man die TMC kennen.
    Leider habe ich noch nicht mit Data Areas und ImagePointer(=InterfacePointer?) gearbeitet. Kannst du mir den ersten Abschnitt ausführlicher erklären? Dazu habe ich mir das Sample10 angeschaut. Im SPS Programm weis ich nun dass ich die tmc Datei öffnen muss um dort DataAreas usw. anzulegen.
    Das ITcADI-Interface liegt im SPS Programm unter ExternalTypes wie kann ich dort die DataArea des TcCOMObjects holen?

    Zu den Parametern:
    In dem TcCOMObject liegen die ModellParameter sowohl unter Parameter (Init) als auch unter DataArea.
    Wie kann ich die Methode TcSetPara vom ITComObject-Interface im SPS Programm verwenden? Finde einfach nichts darüber in der InfoSys!

  9. #8
    Registriert seit
    24.04.2008
    Ort
    Lübeck
    Beiträge
    324
    Danke
    8
    Erhielt 64 Danke für 62 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hier mal ein bisschen Sample-Code. Ohne Gewähr.

    Code:
    FUNCTION_BLOCK FB_MyObjPtr
    VAR
        ipObjSrv : ITComObjectServer;
        ipObj : ITComObject;
        ipADI : ITcADI;
        pData : POINTER TO UDINT;
    END_VAR
    Code:
    METHOD FB_init : BOOL
    VAR_INPUT
        bInitRetains : BOOL;
        bInCopyCode : BOOL;
        OID : OTCID;
    END_VAR
    VAR
        hr : DINT;
        nPar : UDINT;
    END_VAR
    VAR CONSTANT
        cnDataAreaID : UDINT := 0;
    END_VAR
    Code:
    // Pointer auf den "globalen" Object Server holen.
    hr := FW_ObjMgr_GetObjectServer(_AppInfo.ObjId, ADR(ipObjSrv));
    IF hr <> 0 OR ipObjSrv = 0 THEN FB_Exit(FALSE); RETURN; END_IF
    
    // ITComObject-InterfacePointer auf Objekt mit angegebener OID holen.
    hr := ipObjSrv.TcQueryObjectInterface(oid := OID, iid := IID_ITComObject, pipItf := ADR(ipObj));
    IF hr <> 0 OR ipObj = 0 THEN FB_Exit(FALSE); RETURN; END_IF
    
    // Parameter vom Object mit der angegebenen ID setzen.
    hr := ipObj.TcSetObjPara(16#00000000, SIZEOF(nPar), ADR(nPar), 0);
    IF hr <> 0 OR ipObj = 0 THEN FB_Exit(FALSE); RETURN; END_IF
    
    // ITcADI-InterfacePointer vom Objekt anfordern.
    hr := ipObj.TcQueryInterface(IID_ITcADI, ADR(ipADI));
    IF hr <> 0 OR ipADI = 0 THEN FB_Exit(FALSE); RETURN; END_IF
    
    // DataArea-Pointer anfordern.
    hr := ipADI.GetImagePtr(SIZEOF(UDINT), 0, cnDataAreaID, ADR(pData));
    IF hr <> 0 OR pData = 0 THEN FB_Exit(FALSE); RETURN; END_IF
    
    // Wert in DataArea schreiben.
    pData^ := nPar;
    Code:
    METHOD FB_exit : BOOL
    VAR_INPUT
        bInCopyCode : BOOL;
    END_VAR
    Code:
    IF ipADI <> 0 THEN
        IF pData <> 0 THEN
            ipADI.ReleaseImagePtr(pData);
            pData := 0;
        END_IF
        ipADI.TcRelease();
        ipADI := 0;
    END_IF
    
    IF ipObj <> 0 THEN
        ipObj.TcRelease();
        ipObj := 0;
    END_IF
    
    IF ipObjSrv <> 0 THEN
        ipObjSrv.TcRelease();
        ipObjSrv := 0;
    END_IF
    Geändert von Neals (03.07.2014 um 02:43 Uhr)
    Zitieren Zitieren TcCOM Parameter oder DataArea setzen  

Ähnliche Themen

  1. TcCOM Objekt einbiden, TwinCat
    Von haukehansen im Forum CODESYS und IEC61131
    Antworten: 1
    Letzter Beitrag: 16.06.2014, 15:59
  2. Antworten: 4
    Letzter Beitrag: 08.02.2014, 18:02
  3. SPScontrol | iOS-Visualisierung
    Von SPScontrol im Forum Werbung und Produktneuheiten
    Antworten: 7
    Letzter Beitrag: 12.01.2014, 15:53
  4. S5 100U IOs an S7 oder ander CPU
    Von Carsten38 im Forum Simatic
    Antworten: 6
    Letzter Beitrag: 31.10.2010, 16:53
  5. Interface vs. Object ??
    Von Plea im Forum Programmierstrategien
    Antworten: 7
    Letzter Beitrag: 06.10.2010, 10:46

Lesezeichen

Berechtigungen

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