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

Seite 1 von 13 12311 ... LetzteLetzte
Ergebnis 1 bis 10 von 124

Thema: Brauche Hilfe bei ner SCL -> AWL Übersetzung :-)

  1. #1
    Registriert seit
    13.01.2010
    Beiträge
    158
    Danke
    1
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo kenne mich mit AWL nicht ganz so gut aus, ich programmiere lieber in SCL, aber ich darf nun aus SCL-Code AWL-Code machen

    Habe was im Internet gefunden was etwas geholfen hat, aber so ganz passt das alles noch nicht. Also hier mein SCL und mein bisheriger AWL-Code

    Code:
    FUNCTION DCI_SendMessages: VOID    
    
    BEGIN
    NETWORK
    TITLE =   DCI_SendMessages
    
    U        DCI_Messages.MatReceivedFLAG
    NOT
    
    SPB        els1
    
    Call DCI_STARTEVENT(MessageID:=21)        
    
    Call DCI_WRITEINTPARAM(    id    := 102,
                             val    := Data.PortID)
    
    CALL DCI_WRITEINTPARAM(    id  := 103,
                             val : =Data.SlotID)        
    
    Call DCI_WRITESTRINGPARAM(    id  :=202, 
                                val :=Data.MaterialID)
    
    U        FALSE
    DCI_MESSAGECOMPLETE        
    
    L        FALSE
    =         #DCI_Messages.MatReceivedFLAG
    
    els1:
    end1:
    
    U        DCI_Messages.MatRemovedFLAG
    NOT
    
    SPB        els2
    
    L        22
    DCI_STARTEVENT        
    
    L        102
    DCI_WRITEINTPARAM        DATA.PortID
    
    L        103
    DCI_WRITEINTPARAM        DATA.SlotID
    
    L        202
    DCI_WRITESTRINGPARAM        DATA.MaterialID
    
    U        FALSE
    DCI_MESSAGECOMPLETE        
    
    U        FALSE
    =         #DCI_Messages.MatRemovedFLAG
    
    els2:
    end2:
    END_FUNCTION
    So hier noch der SCL Code.

    Code:
    //File: DCI_SendMessages.scl
    FUNCTION DCI_SendMessages:VOID
    IF DCI_Messages.MatReceivedFLAG THEN
        DCI_StartEvent(MessageID:=21);
        DCI_WriteIntParam(id:=102, val:=Data.PortID);
        DCI_WriteIntParam(id:=103, val:=Data.SlotID);
        DCI_WriteStringParam(id:=202, val:=Data.MaterialID);
        DCI_MessageComplete();
        DCI_Messages.MatReceivedFLAG:=False;
    END_IF;
    
    IF DCI_Messages.MatRemovedFLAG THEN
        DCI_StartEvent(MessageID:=22);
        DCI_WriteIntParam(id:=102, val:=Data.PortID);
        DCI_WriteIntParam(id:=103, val:=Data.SlotID);
        DCI_WriteStringParam(id:=202, val:=Data.MaterialID);
        DCI_MessageComplete();
        DCI_Messages.MatRemovedFLAG:=False;
    END_IF;
    
    END_FUNCTION
    dürfte ja eigentlich nicht so schwer sein oder?
    Geändert von kai86 (24.03.2010 um 09:27 Uhr)
    Zitieren Zitieren Brauche Hilfe bei ner SCL -> AWL Übersetzung :-)  

  2. #2
    Registriert seit
    08.08.2007
    Ort
    Dresden
    Beiträge
    9.648
    Danke
    1.059
    Erhielt 2.046 Danke für 1.627 Beiträge

    Standard

    was auch immer du vor hast...

    in SCL proggen, übersetzen, Quelle aus dem Projekt entfernen, fertig ist der sehr leserliche AWL-code
    [SIGNATUR]
    Ironie setzt Intelligenz beim Empfänger voraus.
    [/SIGNATUR]

  3. #3
    kai86 ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    13.01.2010
    Beiträge
    158
    Danke
    1
    Erhielt 0 Danke für 0 Beiträge

    Standard

    für mich ist der absolut nicht leserlich hab das auch schon getestet.
    Ok was ich vor habe. Ich generiere zur Zeit Code-Files aus einer Excel-Tabelle dies aber nur in SCL, dass kann aber nunmal nicht jeder übersetzen, deshalb will ich nun auch AWL-Code Files generieren. und dazu muss ich wissen wie ich IF s usw. in AWL bauen kann.

    Grüße Kai

  4. #4
    Registriert seit
    08.08.2007
    Ort
    Dresden
    Beiträge
    9.648
    Danke
    1.059
    Erhielt 2.046 Danke für 1.627 Beiträge

    Standard

    Zitat Zitat von kai86 Beitrag anzeigen
    und dazu muss ich wissen wie ich IF s usw. in AWL bauen kann.
    Code:
    *
          U     #myCase
          SPBN  else
          //hier IF
          SPA   end
    else: //hier else
    end:  NOP   0
    usw.??
    [SIGNATUR]
    Ironie setzt Intelligenz beim Empfänger voraus.
    [/SIGNATUR]

  5. #5
    kai86 ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    13.01.2010
    Beiträge
    158
    Danke
    1
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Ok mal auf meinen Code angewendet:
    Code:
          U     #DCI_Messages.MatReceivedFLAG      
          SPBN  else
          CALL DCI_StartEvent(MessageID:=22);
          CALL DCI_WriteIntParam(id:=102, val:=Data.PortID);
          CALL DCI_WriteIntParam(id:=103, val:=Data.SlotID);
          CALL DCI_WriteStringParam(id:=202, val:=Data.MaterialID);
          CALL DCI_MessageComplete();
          U FALSE
          = #DCI_Messages.MatRemovedFLAG
          SPA   end
    else: //hier else
    end:  NOP   0
    Ist das so richtig? AWL ist halt etwas fremd für mich

  6. #6
    Registriert seit
    08.08.2007
    Ort
    Dresden
    Beiträge
    9.648
    Danke
    1.059
    Erhielt 2.046 Danke für 1.627 Beiträge

    Standard

    Zitat Zitat von kai86 Beitrag anzeigen
    Ok mal auf meinen Code angewendet:
    wenn du kein ELSE brauchst, kannste auch direkt zu end springen und dir das SPA sparen
    [SIGNATUR]
    Ironie setzt Intelligenz beim Empfänger voraus.
    [/SIGNATUR]

  7. #7
    kai86 ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    13.01.2010
    Beiträge
    158
    Danke
    1
    Erhielt 0 Danke für 0 Beiträge

    Standard

    FUNCTION DCI_SendMessages: VOID

    BEGIN
    NETWORK
    TITLE = DCI_SendMessages

    U #DCI_Messages.MatReceivedFLAG
    SPBN else
    CALL DCI_StartEvent(MessageID:=22);
    CALL DCI_WriteIntParam(id:=102, val:=Data.PortID);
    CALL DCI_WriteIntParam(id:=103, val:=Data.SlotID);
    CALL DCI_WriteStringParam(id:=202, val:=Data.MaterialID);
    CALL DCI_MessageComplete();
    U FALSE
    = #DCI_Messages.MatRemovedFLAG
    end: NOP 0

    U #DCI_Messages.MatRemovedFLAG
    SPBN else
    CALL DCI_StartEvent(MessageID:=22);
    CALL DCI_WriteIntParam(id:=102, val:=Data.PortID);
    CALL DCI_WriteIntParam(id:=103, val:=Data.SlotID);
    CALL DCI_WriteStringParam(id:=202, val:=Data.MaterialID);
    CALL DCI_MessageComplete();
    U FALSE
    = #DCI_Messages.MatRemovedFLAG
    end: NOP 0

    END_FUNCTION

  8. #8
    kai86 ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    13.01.2010
    Beiträge
    158
    Danke
    1
    Erhielt 0 Danke für 0 Beiträge

    Standard

    das sollte jetzt stimmen oder muss der NOP nur am ende vom ganzen AWL-Code?

  9. #9
    Registriert seit
    08.08.2007
    Ort
    Dresden
    Beiträge
    9.648
    Danke
    1.059
    Erhielt 2.046 Danke für 1.627 Beiträge

    Standard

    Zitat Zitat von kai86 Beitrag anzeigen
    das sollte jetzt stimmen oder muss der NOP nur am ende vom ganzen AWL-Code?
    du kannst

    a) die selbe marke, in deinem fall "end" nicht zweimal verwenden und
    b) das NOP 0 auch nur einmal schreiben, wenn du von der ersten IF in die nächste IF springst ...

    NOP 0 ist eine nulloperation, die man benutzt um lücken zu füllen. ich würde sie z.B. drinnen lassen um der übersichtlichkeit genüge zu leisten
    [SIGNATUR]
    Ironie setzt Intelligenz beim Empfänger voraus.
    [/SIGNATUR]

  10. #10
    kai86 ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    13.01.2010
    Beiträge
    158
    Danke
    1
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Also erstmal danke Vierlagig
    Code:
    FUNCTION DCI_SendMessages: VOID	
    
    BEGIN
    NETWORK
    TITLE =   DCI_SendMessages
    
    U     #DCI_Messages.MatReceivedFLAG      
          SPBN  else
          CALL DCI_StartEvent(MessageID:=22);
          CALL DCI_WriteIntParam(id:=102, val:=Data.PortID);
          CALL DCI_WriteIntParam(id:=103, val:=Data.SlotID);
          CALL DCI_WriteStringParam(id:=202, val:=Data.MaterialID);
          CALL DCI_MessageComplete();
          U FALSE
          = #DCI_Messages.MatRemovedFLAG
    end1:  NOP   0
    
    U     #DCI_Messages.MatRemovedFLAG       
          SPBN  else
          CALL DCI_StartEvent(MessageID:=22);
          CALL DCI_WriteIntParam(id:=102, val:=Data.PortID);
          CALL DCI_WriteIntParam(id:=103, val:=Data.SlotID);
          CALL DCI_WriteStringParam(id:=202, val:=Data.MaterialID);
          CALL DCI_MessageComplete();
          U FALSE
          = #DCI_Messages.MatRemovedFLAG
    end2
    
    END_FUNCTION
    Mal noch 2 Fragen, warum muss das else nicht unterschiedlich sein? Ist ja bestimmt kein befehlt oder? Und woher weiß das SPBN wo es hinspringen muss, wann sag ich dem das es zu end muss?

Ähnliche Themen

  1. IM 174, brauche Hilfe
    Von GS-Harri im Forum Simatic
    Antworten: 1
    Letzter Beitrag: 07.01.2011, 00:12
  2. Antworten: 90
    Letzter Beitrag: 21.03.2010, 12:35
  3. Brauche Hilfe OP5
    Von spsler im Forum HMI
    Antworten: 1
    Letzter Beitrag: 16.01.2006, 10:42
  4. bin neu, brauche hilfe
    Von Maddi0406 im Forum Simatic
    Antworten: 5
    Letzter Beitrag: 15.09.2005, 08:26
  5. Brauche mal Hilfe OP 5
    Von Anonymous im Forum HMI
    Antworten: 8
    Letzter Beitrag: 20.02.2005, 11:47

Lesezeichen

Berechtigungen

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