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

Seite 1 von 4 123 ... LetzteLetzte
Ergebnis 1 bis 10 von 34

Thema: AG_RECV und Pointer(SCL)

  1. #1
    Registriert seit
    07.05.2010
    Beiträge
    32
    Danke
    8
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo,

    ich versuche mit SCL
    AG_RECV(ID := 1 // IN: INT
    ,LADDR := w#16#0100 // IN: WORD
    ,RECV := db1.dbw0 // IN: ANY
    ,NDR := recv_done // OUT: BOOL
    ,ERROR := recv_error// OUT: BOOL
    ,STATUS := recv_status // OUT: WORD
    ,LEN := recv_len // OUT: INT
    ); // VOID

    ein Telegram zu empfangen.
    mein DB1 ist bei DBW0 ein INT, ich versuche den Integerwert 102 zur sps zu schicken, das was da ankommt ist jedoch nur 10.. ich vermute es liegt an meiner RECV := db1.dbw0 Anweisung.
    Ich weiss jedoch nicht wie ich da einen Pointer machen könnte wie zum Beispiel in AWL mit P#DB1.DBX0.0 Byte 2 bräuchte ich ja eigentlich aber ich weiss nicht wie ich das fertig machen kann...
    Ich hoffe es kann mir wer helfen und danke schonmal vorab...
    Die Informationen die ich bislang hier im Forum dazu gefunden habe konnten mir nicht wirklich weiterhelfen.. weil ich auch gerade erst mit SCL angefangen habe zu arbeiten.

    Danke schonmal vorab!
    Zitieren Zitieren AG_RECV und Pointer(SCL)  

  2. #2
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.726
    Danke
    398
    Erhielt 2.402 Danke für 2.001 Beiträge

    Standard

    Hallo,
    ich denke, du vermutest schon richtig ... es wird ein ANY-Pointer auf einen Datenbereich erwartet und nicht eine einzelne Variable.
    Vorschlag :
    Du programmierst das Ganze in einem FB, legst im Bereich VAR einen Puffer an und übergibst den an den FB - da mußt du dann in SCL nicht mal mehr einen Pointer bauen - das macht es schon selbst ...

    Code:
    VAR
    Puffer : Array [0..255] of byte ;
    end_Var
     
    und am Baustein-Aufruf dann :
     
    AG_RECV(ID := 1 // IN: INT
    ,LADDR := w#16#0100 // IN: WORD
    ,RECV := Puffer // IN: ANY
    ,NDR := recv_done // OUT: BOOL
    ,ERROR := recv_error// OUT: BOOL
    ,STATUS := recv_status // OUT: WORD
    ,LEN := recv_len // OUT: INT
    ); // VOID
    Gruß
    Larry

  3. #3
    Registriert seit
    07.05.2010
    Beiträge
    32
    Danke
    8
    Erhielt 0 Danke für 0 Beiträge

    Standard

    würde das evtl auch so gehen?

    receive: ANY;
    NACH AT receive: STRUCT
    ID : WORD;
    NBR : INT;
    DBN : INT;
    PTR : DWORD;
    END_STRUCT;

    NACH.ID := 16#0100;
    NACH.NBR := 2;
    NACH.DBN := 1;
    NACH.PTR:= INT_TO_DWORD (8*10) OR 16#8400_0000;
    und dann den ag_recv aufrufen?!

    AG_RECV(ID := 1 // IN: INT
    ,LADDR := w#16#0100 // IN: WORD
    ,RECV := receive // IN: ANY
    ,NDR := recv_done // OUT: BOOL
    ,ERROR := recv_error// OUT: BOOL
    ,STATUS := recv_status // OUT: WORD
    ,LEN := recv_len // OUT: INT
    ); // VOID

    so??

    weil deinen ansatz versteh ich grad nicht so auf die schnelle.. wie gesagt bin grad neu in der materie =)

  4. #4
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.726
    Danke
    398
    Erhielt 2.402 Danke für 2.001 Beiträge

    Standard

    würde ich so nicht machen (ich mag das Umgehen mit absoluten Aufrufen in SCL gar nicht) ... aber könnte funktionieren ... probier es aus ...

    Mein Ansatz war, den Puffer, den du im DB1 abbildest direkt in dem SCL-Baustein abzubilden (das erspart dann die Pointerei und erspart die Fehlersuche) und dann die weitere Auswertung (die du ja sicherlich auch noch machen willst/mußt) dann auch gleich sauber hinzubekommen ...
    Das ist aber halt meine Sicht der Dinge ...

    Gruß
    Larry

  5. #5
    Registriert seit
    07.05.2010
    Beiträge
    32
    Danke
    8
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Hey.. dankeschön.. aber ich hab grad warum auch immer das Problem, dass aufeinmal die SF-Leuchte leuchtet.. und ich weiss nicht warum.. sobald ich die sps auf run stelle leuchtet sie los.. ich hab schon urlöschen versucht und dann das s7-programm wieder in die cpu zu laden und jedesmal wenn ich die sps wieder starte leuchtet die cpuleuchte rot.. was kann das denn nun sein?

  6. #6
    Registriert seit
    19.06.2008
    Ort
    Ostalbkreis
    Beiträge
    3.140
    Danke
    201
    Erhielt 553 Danke für 498 Beiträge

    Standard

    Hallo,

    Zielsystem-->Baugruppenzustand-->Diagnosepuffer ---Fehler (zB. Bereichslängenfehler beim Lesen).

    da stehts normal drinn warum SF-LED leuchted

    LG


    PS: Datenbaustein übertragen?

  7. Folgender Benutzer sagt Danke zu Verpolt für den nützlichen Beitrag:

    ditj_vitja (24.09.2010)

  8. #7
    Registriert seit
    07.05.2010
    Beiträge
    32
    Danke
    8
    Erhielt 0 Danke für 0 Beiträge

    Standard

    sauber danke.. es lag wohl daran dass ich das mit den pointer versucht habe zu machen und denn sagt er mir dass der OB nicht mehr aufgerufen werden konnte..

  9. #8
    Registriert seit
    07.05.2010
    Beiträge
    32
    Danke
    8
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Hmm...
    mit deiner Variante mit dem Puffer ist das genauso wie wenn ich den Pointer baue.. die CPUleuchte SF wird rot..

    oder ich habs immernoch falsch drin..


    FUNCTION_BLOCK FB1

    VAR_TEMP
    // temporäre Variablen

    recv_done: BOOL;
    recv_error: BOOL;
    recv_status: WORD;
    snd_done:BOOL;
    snd_error:BOOL;
    snd_status: WORD;
    sende: BOOL;
    END_VAR
    VAR
    // statische Variablen
    recv_len :INT ;
    Puffer : Array [0..255] of byte ;
    END_VAR


    IF vor2in = true THEN
    sende := true;
    END_IF;
    IF snd_done = true THEN
    sendemerker := true;
    END_IF;

    IF sendemerker = true THEN
    sende := false;
    END_IF;
    IF vor2in = false THEN
    sende := false;
    sendemerker := false;
    END_IF;
    // Anweisungsteil
    AG_RECV(ID := 1 // IN: INT
    ,LADDR := w#16#0100 // IN: WORD
    ,RECV := puffer // IN: ANY
    ,NDR := recv_done // OUT: BOOL
    ,ERROR := recv_error// OUT: BOOL
    ,STATUS := recv_status // OUT: WORD
    ,LEN := recv_len // OUT: INT
    ); // VOID

    AG_SEND(ACT := sende // IN: BOOL
    ,ID := 1 // IN: INT
    ,LADDR := w#16#0100 // IN: WORD
    ,SEND := db1.dbb9 // IN: ANY
    ,LEN := 1 // IN: INT
    ,DONE := snd_done // OUT: BOOL
    ,ERROR := snd_error // OUT: BOOL
    ,STATUS := snd_status // OUT: WORD
    ); // VOID

    IF recv_done = true THEN
    IF db1.dbw0 = 102 THEN
    fb102.db102();
    ELSIF db1.dbw0 = 103 THEN
    fb103.db103();
    ELSIF db1.dbw0 = 104 THEN
    fb104.db104();
    END_IF;
    END_IF;

    END_FUNCTION_BLOCK

    ORGANIZATION_BLOCK OB1
    VAR_TEMP
    // reserviert
    info : ARRAY[0..19] OF BYTE;
    // temporäre Variab
    END_VAR
    // Anweisungen
    fb1.db2();


    END_ORGANIZATION_BLOCK


    Das ist mein Code der zu dem CPUfehler führt.. ich versteh nicht was da los ist....Oo

  10. #9
    Registriert seit
    19.06.2008
    Ort
    Ostalbkreis
    Beiträge
    3.140
    Danke
    201
    Erhielt 553 Danke für 498 Beiträge

    Standard

    Hast deinen FB gespeichert, deine Aufrufe aktualisiert und alle Fb,DB...
    in die CPU geschleudert?

    Diagnosepuffer?

  11. #10
    Registriert seit
    07.05.2010
    Beiträge
    32
    Danke
    8
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    alles aktualisiert und alles gespeichert....

    der diagnosepufffer sagt sowas:


    STOP-Ursache: STOP durch Programmierfehler (OB nicht geladen oder nicht möglich, bzw. kein FRB vorhanden )
    Anlaufinformation:
    - Anlauf ohne geänderten Systemausbau
    - keine Soll-/Istdifferenz vorhanden
    - Uhr für Zeitstempel bei letztem NETZ-EIN gepuffert
    - Einprozessorbetrieb
    Aktuelle/letzte durchgeführte Anlaufart:
    - Neustart (Warmstart) durch MPI-Bedienung; letzter NETZ-EIN gepuffert
    Zulässigkeit bestimmter Anlaufarten:
    - manueller Neustart (Warmstart) zulässig
    - automatischer Neustart (Warmstart) zulässig
    Letzte gültige Bedienung oder Einstellung der automatischen Anlaufart bei NETZ-EIN:
    - Neustart (Warmstart) durch MPI-Bedienung; letzter NETZ-EIN gepuffert
    Angeforderter OB: Anlauf-OB (OB 100)
    OB nicht vorhanden oder gesperrt oder nicht startbar im aktuellen Betriebszustand
    kommendes Ereignis
    22:35:56.565 07.03.1994

Ähnliche Themen

  1. Probleme mit AG_SEND und AG_RECV
    Von -Melanie- im Forum Simatic
    Antworten: 8
    Letzter Beitrag: 26.05.2011, 14:10
  2. Problem mit AG_Recv
    Von SPS-freak1 im Forum Simatic
    Antworten: 10
    Letzter Beitrag: 15.04.2011, 17:21
  3. AG_Recv /Datenstring Splitten
    Von s_alpen im Forum Simatic
    Antworten: 6
    Letzter Beitrag: 20.10.2010, 10:26
  4. Datenkonsistenz von AG_RECV
    Von oid im Forum Simatic
    Antworten: 8
    Letzter Beitrag: 19.07.2009, 18:42
  5. Datenübernahme beim FC6 AG_RECV
    Von Florian_Niedermaier im Forum Simatic
    Antworten: 10
    Letzter Beitrag: 11.11.2007, 13:37

Lesezeichen

Berechtigungen

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