Step 7 hat Jemand ein step7 code um Keyence zu steuern ?

samir85

Level-1
Beiträge
42
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Zusammen,
ich benutze Keyence MD-X1500 mit step 7 (profinet).
ich habe ein Problem mit Programmeinstellung, wenn ich ein neues Programm in Marking Builder 3 erstelle, markiere ich diese Programm ohne Problem.
jetzt ich möchte 31 Zeichnen markiere, ich weiss nicht wie kann ich dieses zeichnen zum keyence senden und markieren.
auch wenn ich markiere etwas kriege ich beim 2D-code-leser NG. das bedeutet es ist nicht erkannt.
hat Jemand ein step7 code um Keyence zu steuern ?
vielen dank Im Voraus
LG Samir
 

Anhänge

  • MD-X1000_1500_Prof_UM_420DE_252006_G_1045-2.pdf
    1,5 MB · Aufrufe: 95
noch dazu...paar Programme die mit Marking Builder 3 erstellt, bleibt immer noch in internspeicher von Keyence, ich nicht alle Löschen...immer ein Programm muss da bleiben,
und wenn ich mit step 7 irgendwelche Programm markieren, wird automatich das Programm markiert, welche von Marking Builder 3 erstellt.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

ich habe mir ein SCL-Programm erstellt um den MDX über ProfiNet zu steuern, ein Layout umzuwählen und auch um eigene Beschriftungstexte zu übertragen. Das könnte ich morgen veröffentlichen.
Ob du dann damit klar kommst ist dann noch eine ander Sache ...

M.E. hast du noch ein elementares Verständnis-Problem mit dem Laser (bzw. mit der Beschrifterei generell).
Du mußt mit dem Marking-Builder eine Layout-Datei erstellen (oder mehrere wenn du unterschiedliche Beschriftungs-Aufgaben hast).
In diese Layout-Datei kann die SPS dann Daten eintragen bzw. sie zum Beschriften hernehmen.
Selbstverständlich muß diese Datei im Laser verbleiben. Über die Kommunikation mit dem Laser wählst du an, welche Layout-Datei verwendet werden soll.
Außerdem wählst du über die Kommunikation auch an, in welchen der Blocks in deiner Layout-Datei dein neuer Text geschrieben werden soll.
Ob der Text dann im Klartext oder als Data-Matrix-Code ausgedruckt wird bestimmt dein Layout.

Nur davon, dass du anwählst, dass die Beschriftung als DMC-Code ausgegeben werden soll, ist der Code an sich noch nicht rücklesbar. Dafür müssen zunächst die Laser-Einstellungen passen (das machst du dann wieder im Layout - bei DMC gibt es da so einiges einzustellen). Ist dies nun gegeben (der Code wäre also subjektiv super lesbar) müßtest du für die eingebaute Kamera (ich verwende die nicht) auch noch eine passende Beleuchtung einbauen - ansonsten sieht deine Kamera möglicherweise nur "schwarzen Adler auf schwarzem Hintergrund".
Ich habe, was diese Punkte angeht, ganz gute Erfahrung mit dem für uns zuständigen Keyence-Vertriebler gemacht - vielleicht probierst du das auch mal.

Gruß
Larry
 
vielen Dank Larry für deine Hilfe, ich bin Anfänger, dafür habe ich viele Sache nicht verstanden, und bitte dir um erklären.
zum Info ich muss jedes mal neue 31 Zeichnen als DMC markieren.

wie Kann ich mit dem Marking-Builder eine Layout-Datei erstellen?

wie kann ich In diese Layout-Datei die SPS dann Daten eintragen?

wie kann ich Über die Kommunikation mit dem Laser welche Layout-Datei verwendet werden auswählen?

wie kann ich über die Kommunikation , in welchen der Blocks in Layout-Datei neuer Text geschrieben werden auswählen?

Wie kann ich Laser-Einstellungen passen, um DMC code lesbar zu sein? ich habe externe Beleuchtung verwendet aber immer nur Schwarz

Kannst du mit Bilder erklären? dann wird das sehr hilfreich
vielen Dank im Voraus
LG Samir
 
vielen Dank Larry für deine Hilfe, ich bin Anfänger, dafür habe ich viele Sache nicht verstanden, und bitte dir um erklären.
zum Info ich muss jedes mal neue 31 Zeichnen als DMC markieren.
... ich kann dir einges erklären - einiges andere aber auch nicht.
In jedem Fall solltest du parallel noch Fa. Keyence bemühen - die sind normalerweise sehr hilfreich ...!

wie Kann ich mit dem Marking-Builder eine Layout-Datei erstellen?
Das mußt du schon gemacht haben denn du sagst ja, dass du mit dem Marking Builder schon etwas beschriftet hast.

wie kann ich In diese Layout-Datei die SPS dann Daten eintragen?
Jede auf dem Laser gespeicherte Layout-Datei hat eine Index-Nummer - diese kannst du über die SPS ansprechen/anwählen ...

wie kann ich Über die Kommunikation mit dem Laser welche Layout-Datei verwendet werden auswählen?
genau wie eine Frage weiter oben ...

wie kann ich über die Kommunikation , in welchen der Blocks in Layout-Datei neuer Text geschrieben werden auswählen?
Wenn du einen Text (ich weiß jetzt im Augenblich nicht genau, wie Keyence das nennt) zum Laser schreiben willst so mußt du dafür die Block-Nummer angeben, in die er geschrieben werden soll. Die Block-Formatierung bestimmt dann, wie der Text ausgegeben wird - zum Beispiel auch als DMC ...

Wie kann ich Laser-Einstellungen passen, um DMC code lesbar zu sein? ich habe externe Beleuchtung verwendet aber immer nur Schwarz
Dafür mußt du probieren - das hängt sehr von deinem Werkstoff ab aus den du schreiben willst. Die Schlüssel-Parameter sind hier aber Laser-Leistung und Schreibgeschwindigkeit. Irgendwann kann man dann auch noch mit der Frequenz spielen. Auch hierbei könnte der Keyence-Vertriebler dir behilflich sein ...

Gruß
Larry
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Keyence hat ein Primitiv-Beispiel erstellt. Ich weiß nicht mehr ob ich das extra von deren Homepage habe oder ob das bei den gsdml-Dateien dabei war oder ob ich mit das habe schicken lassen.

Man braucht nicht wirklich viel, aber was man auf jeden Fall tun sollte, das Handbuch für die Profinetkommunikation lesen und sich darin die Belegung der Profinet-IN-OUT-Daten ansehen.
Ich hab mit mit diesen Daten einen IN- und eine OUT- Datentyp erstellt. Den kann man dann direkt auf den E- bzw. A-Bereich legen, in der Symbolik.
Ab da kann man dann schön symbolisch arbeiten direkt mit den A/A-Daten arbeiten, ein Umkopieren in Datenbereiche ist bei der 1500-er hier gar nicht zwingend nötig.

Es gibt zum Programmwechsel und zum Ändern eines Strings jeweils ein Bit als Befehl. Vorher muß man die jeweils benötigten Daten (Programmnummer, Blocknummer, String) in den dafür vorgesehenen Datenbereich kopieren.

Jedes Bit hat eine Requestbit, das anzeigt, das der Befehl ausgeführt wurde. Dieses Requestbit muß wiederum mit einem weiteren Bit "Clear Request" gelöscht werden, erst danach kann man die geünschte Funktion erneut starten.

Eine einfache Kommunikation mit Programmwechsel, Stringänderung und StartTrigger hab ich in 6 oder 8 mini-Netzwerken realisiert, da hab ich mal auf einen eignen Baustein verzichtet.

PS Larry: aber interessieren würde mich dein Baustein natürlich, schätze, der ist etwas universeller, als meine faule Minimallösung ;-)
 
Eigentlich wollte ich hier gerade den Code meines Bausteins einstellen - leider ist der viiiiel zu lang für die Forums-Software (ca. 40000 Zeichen). Ich werde also erstmal etwas den Code zerstückeln und dann etwas später posten ...

Gruß
Larry
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hier mal der Code ...
Teil 1 :
Code:
FUNCTION_BLOCK FB313 
TITLE   = 'UP Steuern Keyence-Laser MDX' 
AUTHOR  : 'Larry'
VERSION : '0.3'   //   17.12.2015
KNOW_HOW_PROTECT
//    Baustein-Parameter
VAR_INPUT
   Steuer_Befehle          : BOOL ; 
   _CMD_Laser_beschriften  : BOOL ;       // CMD : Laser Start Beschriftung
   _CMD_Set_Layout         : BOOL ;       // CMD : Layout-Anwahl an den Laser übergeben
   _CMD_Set_Beschriftung   : BOOL ;       // CMD : Beschriftungstext in den Beschriftungsblock des Lasers übergeben
   _CMD_Set_DateTime       : BOOL ;       // CMD : Datum und Uhrzeit der SPS an den Laser übergeben  
   _CMD_Quit               : BOOL ;       // CMD : Quittierung Fehler etc.
   Daten                   : BOOL ; 
   _Layout_Index           : INT := 0   ; // Index-Nummer der Layout-Datei
   _Beschriftungs_Text     : STRING[100] := 'Test RM' ; // Inhalt der Beschriftung (falls verwendet)
   _Beschriftungs_Block    : INT := -1  ; // Block-Nummer für den Beschriftungs-Text  (-1 : keinen Text übetragen)
   _SPS_Datum              : DATE ;       // System-Datum der SPS
   _SPS_Uhrzeit            : TOD ;        // System-Uhrzeit der SPS
   Koppeladressen_E        : BOOL ; 
   _PerE_MachineStatus     : INT ;        // 1. Perepherie-Adresse des Laser-Koppelbereichs "Machine Status"
   _PerE_FunctionStatus    : INT ;        // 1. Perepherie-Adresse des Laser-Koppelbereichs "Function Status"
   _PerE_CompletionStatus  : INT ;        // 1. Perepherie-Adresse des Laser-Koppelbereichs "Completion Status"
   _PerE_Operate_Parameter : INT ;        // 1. Perepherie-Adresse des Laser-Koppelbereichs "Operate Parameters"
   Koppeladressen_A        : BOOL ; 
   _PerA_Generel_Req       : INT ;        // 1. Perepherie-Adresse des Laser-Koppelbereichs "Generel Request"
   _PerA_Function_Req      : INT ;        // 1. Perepherie-Adresse des Laser-Koppelbereichs "Function Request"
   _PerA_CompletionClr_Req : INT ;        // 1. Perepherie-Adresse des Laser-Koppelbereichs "Completion Clear Request"
   _PerA_Req_Parameter     : INT ;        // 1. Perepherie-Adresse des Laser-Koppelbereichs "Request Parameter"
   _PerA_Req_Data          : INT ;        // 1. Perepherie-Adresse des Laser-Koppelbereichs "Request Data"
   Laser_RM                : BOOL ; 
   _RM_PN_Slave_OK         : BOOL ;       // der ProfiNet-Slave des Lasers ist OK
END_VAR
VAR_IN_OUT
  Init                     : BOOL := false ; // Baustein initialisieren
END_VAR
VAR_OUTPUT
   Meldungen               : BOOL ;
   _Einschalten_laeuft     : BOOL ;   // MSG : Einschalten / Hochfahren des Lasers ist gestartet
   _Laser_eingeschaltet    : BOOL ;   // MSG : der Laser ist eingeschaltet
   _Laser_Emission_OK      : BOOL ;   // MSG : die Strahlquelle ist bereit
   _Markieren_laeuft       : BOOL ;   // MSG : Beschriftung läuft
   _Markieren_fertig       : BOOL ;   // MSG : Beschriftung beendet
   
   _Layout_geladen         : BOOL ;   // MSG : Layout-Datei vom Laser geladen
   _Beschriftung_geladen   : BOOL ;   // MSG : Beschriftungs-Text vom Laser geladen
   _DateTime_geladen       : BOOL ;   // MSG : Datum und Uhrzeit vom Laser geladen
   
   _Laser_Fehler           : BOOL ;   // MSG : Laser-Fehler
END_VAR

CONST
   // Schrittketten Enum's
   enum_SK_bereit           := 0 ;
   enum_SK_beendet          := 999 ;
   
   enum_Prg_none            := 0 ;
   enum_Prg_setLayout       := 1 ;  
   enum_Prg_setBeschriftung := 2 ;  
   enum_Prg_setDateTime     := 3 ; 
   enum_Prg_Aktivierung     := 10 ; 
   enum_Prg_Beschriftung    := 11 ;
   
END_CONST

VAR
    
// Koppelbereiche Laser
   Read_Data : STRUCT    
      MachineStatus : STRUCT
         Ready   : BOOL ;    // - 
         Error   : BOOL ;    // -    
         Warning  : BOOL ;    // -    
         Notice   : BOOL ;    // -    
         Shutter  : BOOL ;    // -
         Start_Up  : BOOL ;    // -
         x06   : BOOL ;    // -
         x07   : BOOL ;    // - 
                             
         Laser_Emit  : BOOL ;    // -
         Shutter_Control : BOOL ;    // -                      
         Remote_Interlock : BOOL ;    // -                      
         Contacter  : BOOL ;    // -   
         x14   : BOOL ;    // -
         x15   : BOOL ;    // - 
         x16   : BOOL ;    // -
         x17   : BOOL ;    // - 
                    
         Busy   : BOOL ;    // -                      
         Print_Busy   : BOOL ;    // -                      
         Guide_Print_Busy : BOOL ;    // -                      
         Change_Busy  : BOOL ;    // -                      
         Lock_Busy  : BOOL ;    // -                      
         Edit_Busy   : BOOL ;    // -                      
         Code_Reader_Busy : BOOL ;    // -                      
         x27   : BOOL ;    // -
        
         x30   : BOOL ;    // - 
         x31   : BOOL ;    // - 
         x32   : BOOL ;    // - 
         x33   : BOOL ;    // - 
         x34   : BOOL ;    // - 
         x35   : BOOL ;    // - 
         x36   : BOOL ;    // - 
         x37   : BOOL ;    // - 
      END_STRUCT ;
    
      FunctionStatus : STRUCT
         Trigger_Lock_iState : BOOL ;    // - 
         OperationMode_iState : BOOL ;    // -    
         Laser_Control_iState : BOOL ;    // -    
         Date_hold_iState  : BOOL ;    // -    
         x04   : BOOL ;    // -
         x05   : BOOL ;    // -
         x06    : BOOL ;    // -
         x07   : BOOL ;    // - 
                             
         Date_hold_attached : BOOL ;    // -
         Counter_End1  : BOOL ;    // -                      
         Counter_End2  : BOOL ;    // -                      
         Counter_End3  : BOOL ;    // -                      
         Counter_End4  : BOOL ;    // -                      
         DMC_CodeResult_IO  : BOOL ;    // -                      
         DMC_CodeResult_NIO : BOOL ;    // -                      
         x17   : BOOL ;    // - 
        
         x20   : BOOL ;    // - 
         x21   : BOOL ;    // - 
         x22   : BOOL ;    // - 
         x23   : BOOL ;    // - 
         x24   : BOOL ;    // - 
         x25   : BOOL ;    // - 
         x26   : BOOL ;    // - 
         x27   : BOOL ;    // - 
        
         x30   : BOOL ;    // - 
         x31   : BOOL ;    // - 
         x32   : BOOL ;    // - 
         x33   : BOOL ;    // - 
         x34    : BOOL ;    // - 
         x35   : BOOL ;    // - 
         x36   : BOOL ;    // - 
         x37   : BOOL ;    // - 
      END_STRUCT ;
    
      CompletionStatus : STRUCT
         Print_Complete   : BOOL ;    // - 
         Guide_Print_Complete  : BOOL ;    // -    
         Print_Stop_Complete  : BOOL ;    // -    
         Error_Clear_Complete  : BOOL ;    // -    
         Code_Read_Complete  : BOOL ;    // -
         x05    : BOOL ;    // -
         x06    : BOOL ;    // -
         x07    : BOOL ;    // - 
                             
         Edit_Complete   : BOOL ;    // -
         x11    : BOOL ;    // -
         x12    : BOOL ;    // -
         x13    : BOOL ;    // - 
         x14    : BOOL ;    // -
         x15    : BOOL ;    // -
         x16    : BOOL ;    // - 
         x17    : BOOL ;    // - 
        
         Prg_Chg_Complete  : BOOL ;    // -                      
         Rank_Chg_Complete  : BOOL ;    // -                      
         CounterNr_Chg_Complete  : BOOL ;    // -                      
         CounterVal_Chg_Complete : BOOL ;    // -                      
         Count_Up_Complete  : BOOL ;    // -                      
         Count_Dn_Complete  : BOOL ;    // -                      
         Counter_Reset_Complete  : BOOL ;    // -                      
         x27    : BOOL ;    // - 
        
         x30    : BOOL ;    // -
         x31    : BOOL ;    // -
         x32    : BOOL ;    // -
         x33    : BOOL ;    // - 
         x34    : BOOL ;    // -
         x35    : BOOL ;    // -
         x36    : BOOL ;    // - 
         x37    : BOOL ;    // - 
         CharStr_ReadReq_Complete : BOOL ;    // -                      
         CharStr_Print_Complete  : BOOL ;    // -                      
         CharStr_Change_Complete : BOOL ;    // -                      
         x43    : BOOL ;    // - 
         x44    : BOOL ;    // -
         x45    : BOOL ;    // -
         x46    : BOOL ;    // - 
         x47    : BOOL ;    // - 
        
         x50    : BOOL ;    // -
         x51    : BOOL ;    // -
         x52    : BOOL ;    // -
         x53    : BOOL ;    // - 
         x54    : BOOL ;    // -
         x55    : BOOL ;    // -
         x56    : BOOL ;    // - 
         x57    : BOOL ;    // - 
        
         x60    : BOOL ;    // -
         x61    : BOOL ;    // -
         x62    : BOOL ;    // -
         x63    : BOOL ;    // - 
         x64    : BOOL ;    // -
         x65    : BOOL ;    // -
         x66    : BOOL ;    // - 
         x67    : BOOL ;    // - 
         Command_Req_Complete  : BOOL ;    // -
         x71    : BOOL ;    // -
         x72    : BOOL ;    // -
         x73    : BOOL ;    // - 
         x74    : BOOL ;    // -
         x75    : BOOL ;    // -
         x76     : BOOL ;    // - 
         x77    : BOOL ;    // - 
      END_STRUCT ;
      Operate_Parameters : STRUCT
         akt_Programm_Nr : INT ;    // -    
         Zaehler_Nr  : INT ;    // -  
         Zahlerwert  : INT ;    // -  
         Rank_Nr  : INT ;    // -  
      END_STRUCT ;
   END_STRUCT ;
    
   at_Read_Data AT Read_Data : STRUCT    
      MachineStatus  : DWORD ; 
      FunctionStatus  : DWORD ; 
      CompletionStatus  : ARRAY [1..2] OF DWORD ;  
      Operate_Parameters : ARRAY [1..2] OF DWORD ;   
   END_STRUCT ;
    
   Write_Data : STRUCT     
      Generel_Request : STRUCT
         Print   : BOOL ;    // - 
         Guide_Print  : BOOL ;    // -    
         Print_Stop  : BOOL ;    // -    
         Error_Clear  : BOOL ;    // -    
         Code_Read  : BOOL ;    // -
         x05   : BOOL ;    // -
         x06   : BOOL ;    // -
         x07   : BOOL ;    // - 
        
         x10   : BOOL ;    // -
         x11   : BOOL ;    // -
         x12   : BOOL ;    // -
         x13   : BOOL ;    // - 
         x14   : BOOL ;    // -
         x15   : BOOL ;    // -
         x16   : BOOL ;    // - 
         x17   : BOOL ;    // - 
                             
         Prg_ChangeReq  : BOOL ;    // -
         Rank_ChangeReq  : BOOL ;    // -                      
         Counter_Nr_ChangeReq : BOOL ;    // -                      
         Counter_Val_ChangeReq : BOOL ;    // -                      
         Count_Up_Req  : BOOL ;    // -                      
         Count_Dn_Req  : BOOL ;    // -                      
         Counter_Reset_Req  : BOOL ;    // -                      
         x27   : BOOL ;    // - 
        
         x30   : BOOL ;    // -
         x31   : BOOL ;    // -
         x32   : BOOL ;    // -
         x33   : BOOL ;    // - 
         x34   : BOOL ;    // -
         x35   : BOOL ;    // -
         x36   : BOOL ;    // - 
         x37   : BOOL ;    // - 
        
         x40   : BOOL ;    // -
         x41   : BOOL ;    // -
         x42   : BOOL ;    // -
         x43   : BOOL ;    // - 
         x44   : BOOL ;    // -
         x45   : BOOL ;    // -
         x46   : BOOL ;    // - 
         x47   : BOOL ;    // - 
        
         CharString_Read_Req : BOOL ;    // -                      
         CharString_Print_Req : BOOL ;    // -                      
         CharString_Change_Req : BOOL ;    // -                      
         x53   : BOOL ;    // - 
         x54   : BOOL ;    // -
         x55   : BOOL ;    // -
         x56   : BOOL ;    // - 
         x57   : BOOL ;    // - 
        
         x60   : BOOL ;    // -
         x61   : BOOL ;    // -
         x62   : BOOL ;    // -
         x63   : BOOL ;    // - 
         x64   : BOOL ;    // -
         x65   : BOOL ;    // -
         x66   : BOOL ;    // - 
         x67   : BOOL ;    // - 
        
         Command_Req   : BOOL ;    // -                      
         x71   : BOOL ;    // -                      
         x72   : BOOL ;    // -                      
         x73   : BOOL ;    // - 
         x74   : BOOL ;    // -
         x75   : BOOL ;    // -
         x76   : BOOL ;    // - 
         x77   : BOOL ;    // - 
      END_STRUCT ;
    
      Function_Request : STRUCT
         Trigger_Lock_Req : BOOL ;    // - 
         Machine_Dis_Req : BOOL ;    // -    
         Laser_Control_Req : BOOL ;    // -    
         Date_hold_Req  : BOOL ;    // -    
         x04   : BOOL ;    // -
         x05   : BOOL ;    // -
         x06   : BOOL ;    // -
         x07   : BOOL ;    // - 
                             
         x10   : BOOL ;    // -
         x11   : BOOL ;    // -                      
         x12   : BOOL ;    // -                      
         x13   : BOOL ;    // -                      
         x14   : BOOL ;    // -                      
         x15   : BOOL ;    // -                      
         x16    : BOOL ;    // -                      
         x17   : BOOL ;    // - 
        
         x20   : BOOL ;    // - 
         x21   : BOOL ;    // - 
         x22   : BOOL ;    // - 
         x23   : BOOL ;    // - 
         x24   : BOOL ;    // - 
         x25   : BOOL ;    // - 
         x26   : BOOL ;    // - 
         x27   : BOOL ;    // - 
        
         x30   : BOOL ;    // - 
         x31   : BOOL ;    // - 
         x32   : BOOL ;    // - 
         x33   : BOOL ;    // - 
         x34   : BOOL ;    // - 
         x35   : BOOL ;    // - 
         x36   : BOOL ;    // - 
         x37   : BOOL ;    // - 
      END_STRUCT ;
    
      CompletionClr_Request : STRUCT
         Print_Complete   : BOOL ;    // - 
         Guide_Print_Complete  : BOOL ;    // -    
         Print_Stop_Complete  : BOOL ;    // -    
         Error_Clear_Complete  : BOOL ;    // -    
         Code_Read_Complete  : BOOL ;    // -
         x05    : BOOL ;    // -
         x06    : BOOL ;    // -
         x07    : BOOL ;    // - 
                             
         Edit_Complete   : BOOL ;    // -
         Time_Update   : BOOL ;    // -
         x12    : BOOL ;    // -
         x13    : BOOL ;    // - 
         x14    : BOOL ;    // -
         x15    : BOOL ;    // -
         x16    : BOOL ;    // - 
         x17    : BOOL ;    // - 
        
         Prg_Chg_Complete  : BOOL ;    // -                      
         Rank_Chg_Complete  : BOOL ;    // -                      
         CounterNr_Chg_Complete  : BOOL ;    // -                      
         CounterVal_Chg_Complete : BOOL ;    // -                      
         Count_Up_Complete  : BOOL ;    // -                      
         Count_Dn_Complete  : BOOL ;    // -                      
         Counter_Reset_Complete  : BOOL ;    // -                      
         x27    : BOOL ;    // - 
        
         x30    : BOOL ;    // -
         x31    : BOOL ;    // -
         x32    : BOOL ;    // -
         x33    : BOOL ;    // - 
         x34    : BOOL ;    // -
         x35    : BOOL ;    // -
         x36    : BOOL ;    // - 
         x37    : BOOL ;    // - 
         CharStr_ReadReq_Complete : BOOL ;    // -                      
         CharStr_PrintReq_Complet : BOOL ;    // -                      
         CharStr_ChgReq_Complete : BOOL ;    // -                      
         x43    : BOOL ;    // - 
         x44    : BOOL ;    // -
         x45    : BOOL ;    // -
         x46    : BOOL ;    // - 
         x47    : BOOL ;    // - 
        
         x50    : BOOL ;    // -
         x51    : BOOL ;    // -
         x52    : BOOL ;    // -
         x53    : BOOL ;    // - 
         x54    : BOOL ;    // -
         x55    : BOOL ;    // -
         x56    : BOOL ;    // - 
         x57    : BOOL ;    // - 
        
         x60    : BOOL ;    // -
         x61    : BOOL ;    // -
         x62    : BOOL ;    // -
         x63    : BOOL ;    // - 
         x64    : BOOL ;    // -
         x65    : BOOL ;    // -
         x66    : BOOL ;    // - 
         x67    : BOOL ;    // - 
         Command_Req_Complete  : BOOL ;    // -
         x71    : BOOL ;    // -
         x72    : BOOL ;    // -
         x73    : BOOL ;    // - 
         x74    : BOOL ;    // -
         x75    : BOOL ;    // -
         x76    : BOOL ;    // - 
         x77    : BOOL ;    // - 
      END_STRUCT ;
 
      Parameter_Nr : DINT ; 
      
      Parameter_Data : STRUCT
         Size                        : INT ;    
         Inhalt                      : ARRAY [0..127] OF BYTE ;   
      END_STRUCT ;
   END_STRUCT ;
    
   at_Write_Data AT Write_Data : STRUCT     
      Generel_Request        : ARRAY [1..2] OF DWORD ;  
      Function_Request       : DWORD ; 
      CompletionClr_Request  : ARRAY [1..2] OF DWORD ;  
      Parameter_Nr           : DWORD ;    
      Parameter_Data         : ARRAY [0..64] OF WORD ;   
   END_STRUCT ;
  
   LaserStatus  : STRUCT 
      Init_OK                : BOOL ;   // der Baustein ist initialisiert
       
      Markieren_aktiv        : BOOL ;   // Beschriftung läuft
      Markieren_fertig       : BOOL ;   // Beschriftung beendet
       
      Layout_geaendert       : BOOL ;   // die Layout-Datei hat sich geändert
      Layout_geladen         : BOOL ;   // Layout  geladen
      Beschriftung_geaendert : BOOL ;   // der Beschriftungs-Text hat sich geändert
      Beschriftung_geladen   : BOOL ;   // Beschriftung geladen
       
      deaktivieren           : BOOL ;   // Anwahl : Laser de-aktivieren
      aktivieren             : BOOL ;   // Anwahl : Laser aktivieren
       
      Laser_Ein              : BOOL ;   // Laser eingeschaltet
      Laser_Trigger          : BOOL ;   // RM Laser getriggert
      Shutter_Open           : BOOL ;   // RM Shutter öffnen
      Emission               : BOOL ;   // RM Laser-Emission möglich
      Fehler                 : BOOL ;   // RM Störung / Fehler beim Laser
   END_STRUCT ;
    
   Save_Daten : STRUCT       
      Layout_Index  : INT := 0 ;
      Beschriftung  : STRING [100] := '' ; 
   END_STRUCT ;
   
   at_Save_Daten AT Save_Daten : STRUCT       
      Layout_Index : INT ;
      
      Beschriftung  : STRUCT 
         Total  : BYTE ;
         Length : BYTE ;
         Chars  : ARRAY [1..100] OF BYTE ;
      END_STRUCT ;
   END_STRUCT ;
  
  
   AblaufPrg : STRUCT
      aktiv           : INT := enum_Prg_none ;   // Index des gewählten aktiven Programm-Teils
      
      setLayout       : INT := enum_SK_bereit ;  // Programmteil um das Layout im Laser umzuwählen
      setBeschriftung : INT := enum_SK_bereit ;  // Programmteil um einen benutzer-definierten Beschriftungstext an den Laser zu übertragen
      setDateTime     : INT := enum_SK_bereit ;  // Programmteil um das Datum/die Uhrzeit der SPS an den Laser zu übertragen
      
      Beschriftung    : INT := enum_SK_bereit ;  // Ablauf Beschriftung
   END_STRUCT ;
    
   erster_Start : STRUCT            // der Baustein wird das erste Mal (nach Neustart oder Init) benutzt
      setLayout       : BOOL := true ;  // Programmteil um das Layout im Laser umzuwählen
      setBeschriftung : BOOL := true ;  // Programmteil um einen benutzer-definierten Beschriftungstext an den Laser zu übertragen
      setDateTime     : BOOL := true ;  // Programmteil um das Datum/die Uhrzeit der SPS an den Laser zu übertragen
   END_STRUCT ;
     
   Impuls_Timer : SFB4 ;
   
END_VAR     
 
VAR_TEMP
  i , L , Error : INT ;
  
  TT, MM , JJ , WT , JT , KW , SJ : INT ;
  H, M , S , MS                   : INT ;
  
  xf : BOOL ;
END_VAR
 
... und der 2.Teil :
Code:
BEGIN 
//    Perepherie-Daten laden  
at_Read_Data.MachineStatus         := PED[_PerE_MachineStatus] ;
at_Read_Data.FunctionStatus        := PEW[_PerE_FunctionStatus] ;
at_Read_Data.CompletionStatus[1]   := PED[_PerE_CompletionStatus +0] ;
at_Read_Data.CompletionStatus[2]   := PED[_PerE_CompletionStatus +4] ;
at_Read_Data.Operate_Parameters[1] := PED[_PerE_Operate_Parameter +0] ;
at_Read_Data.Operate_Parameters[2] := PED[_PerE_Operate_Parameter +4] ;
LaserStatus.Shutter_Open  := Read_Data.MachineStatus.Shutter ;
LaserStatus.Fehler        := Read_Data.MachineStatus.Error ;
LaserStatus.Laser_Trigger := Read_Data.MachineStatus.Print_Busy ;

//    Baustein initialisieren  
IF Init THEN
   AblaufPrg.aktiv           := enum_Prg_none ;  
       
   AblaufPrg.setLayout       := enum_SK_bereit ;  
   AblaufPrg.setBeschriftung := enum_SK_bereit ;  
   AblaufPrg.setDateTime     := enum_SK_bereit ; 
      
   AblaufPrg.Beschriftung    := enum_SK_bereit ;
   
   LaserStatus.Init_OK       := true ;
   
   erster_Start.setLayout       := true ;
   erster_Start.setBeschriftung := true ;
   erster_Start.setDateTime     := true ;
   
   at_Write_Data.Generel_Request[1] := 0 ;
   at_Write_Data.Generel_Request[2] := 0 ;
   
   at_Write_Data.CompletionClr_Request[1] := 0 ;
   at_Write_Data.CompletionClr_Request[2] := 0 ;
   
   Init := false ;
END_IF ;

//    Layout setzen / Programm-Nummer umwählen  
IF (AblaufPrg.aktiv = enum_Prg_none) OR (AblaufPrg.aktiv = enum_Prg_setLayout) THEN // Verriegelung gegen andere Abläufe
    CASE AblaufPrg.setLayout OF
        enum_SK_bereit :
            IF _CMD_Set_Layout THEN 
               AblaufPrg.aktiv := enum_Prg_setLayout ;
               AblaufPrg.setLayout := 1 ;
            END_IF ;
        1 : // neue Layout-Nummer schreiben
            Save_Daten.Layout_Index := _Layout_Index ;
            Write_Data.Parameter_Nr := INT_TO_DINT(_Layout_Index) ;
               PAD[_PerA_Req_Parameter] := at_Write_Data.Parameter_Nr ; 
            AblaufPrg.setLayout := 2 ;  
        2 : // Steuerbit für Daten-Übernahme an Laser setzen
            Write_Data.Generel_Request.Prg_ChangeReq := true ;
            AblaufPrg.setLayout := 3 ;
        3 : // Feedback abfragen und auswerten - Daten-Übernahme quittieren
            IF Read_Data.CompletionStatus.Prg_Chg_Complete THEN 
               Write_Data.Generel_Request.Prg_ChangeReq := false ;
               at_Read_Data.Operate_Parameters[1] := PED[_PerE_Operate_Parameter] ;
               IF Read_Data.Operate_Parameters.akt_Programm_Nr = _Layout_Index THEN
                  Write_Data.Generel_Request.Prg_ChangeReq := false ;
                  Write_Data.CompletionClr_Request.Prg_Chg_Complete := true ;
                  AblaufPrg.setLayout := 4 ;
               END_IF ;   
            END_IF ; 
        4 : // Feedback abfragen
            IF NOT Read_Data.CompletionStatus.Prg_Chg_Complete THEN 
               Write_Data.CompletionClr_Request.Prg_Chg_Complete := false ;
               erster_Start.setLayout := false ;
               AblaufPrg.setLayout := enum_SK_beendet ;
            END_IF ; 
        enum_SK_beendet : // fertig
            IF NOT _CMD_Set_Layout THEN 
               AblaufPrg.aktiv := enum_Prg_none ;
               AblaufPrg.setLayout := enum_SK_bereit ;
            END_IF ;
    END_CASE ;
END_IF ; 
_Layout_geladen := (Save_Daten.Layout_Index = _Layout_Index) AND ((AblaufPrg.setLayout = enum_SK_bereit) or (AblaufPrg.setLayout = enum_SK_beendet)) ;
LaserStatus.Layout_geladen := _Layout_geladen ;

//    Beschriftungstext übertragen  
IF (AblaufPrg.aktiv = enum_Prg_none) OR (AblaufPrg.aktiv = enum_Prg_setBeschriftung) THEN  // Verriegelung gegen andere Abläufe
    CASE AblaufPrg.setBeschriftung OF
        enum_SK_bereit :
            IF _CMD_Set_Beschriftung THEN 
               AblaufPrg.aktiv := enum_Prg_setBeschriftung ;
               AblaufPrg.setBeschriftung := 1 ;
            END_IF ;
        1 :
            Save_Daten.Beschriftung := _Beschriftungs_Text ;
      //      Save_Daten.Beschriftung := 'dies ist ein Test' ;
            IF _Beschriftungs_Block < 0 THEN  // keinen Text setzen
               AblaufPrg.setBeschriftung := enum_SK_beendet ;
            ELSE
               // Block-Nr. wählen
               Write_Data.Parameter_Nr := INT_TO_DINT(_Beschriftungs_Block) ;
                  PAD[_PerA_Req_Parameter] := at_Write_Data.Parameter_Nr ; 
               // Beschriftungs-Text übergeben
               L := BYTE_TO_INT(at_Save_Daten.Beschriftung.Length) ;
               FOR i := 1 TO L BY 1 do
                  Write_Data.Parameter_Data.Inhalt[i-1] := at_Save_Daten.Beschriftung.Chars[i] ;
               END_FOR ;
               Write_Data.Parameter_Data.Size := L ;
               FOR i := L TO 127 BY 1 do
                  Write_Data.Parameter_Data.Inhalt[i] := 0 ;
               END_FOR ;
               FOR i := 0 TO 64 BY 1 DO
                  PAW[i*2 + _PerA_Req_Data] := at_Write_Data.Parameter_Data[i] ; 
               END_FOR ;
 
               AblaufPrg.setBeschriftung := 2 ;
            END_IF ;   
        2 : // Steuerbit für Daten-Übernahme an Laser setzen
            Write_Data.Generel_Request.CharString_Change_Req := true ;
            AblaufPrg.setBeschriftung := 3 ;
        3 : // Feedback abfragen und auswerten - Daten-Übernahme quittieren
            IF Read_Data.CompletionStatus.CharStr_Change_Complete THEN 
               Write_Data.Generel_Request.CharString_Change_Req := false ;  
               Write_Data.CompletionClr_Request.CharStr_ChgReq_Complete := true ;
               AblaufPrg.setBeschriftung := 4 ;
            END_IF ; 
        4 : // Feedback abfragen
            IF NOT Read_Data.CompletionStatus.CharStr_Change_Complete THEN 
               Write_Data.CompletionClr_Request.CharStr_ChgReq_Complete := false ;
               erster_Start.setDateTime := false ;
               AblaufPrg.setBeschriftung := enum_SK_beendet ;
            END_IF ; 
       enum_SK_beendet :
            IF NOT _CMD_Set_Beschriftung THEN 
               AblaufPrg.aktiv := enum_Prg_none ;
               AblaufPrg.setBeschriftung := enum_SK_bereit ;
            END_IF ;
    END_CASE ;
END_IF ; 
_Beschriftung_geladen := EQ_STRNG(S1:=Save_Daten.Beschriftung , S2:=_Beschriftungs_Text) AND ((AblaufPrg.setBeschriftung = enum_SK_bereit) or (AblaufPrg.setBeschriftung = enum_SK_beendet)) ;
LaserStatus.Beschriftung_geladen := _Beschriftung_geladen ;

//    Datum und Uhrzeit übertragen  
(*
IF (AblaufPrg.aktiv = enum_Prg_none) OR (AblaufPrg.aktiv = enum_Prg_setDateTime) THEN  // Verriegelung gegen andere Abläufe
    CASE AblaufPrg.setDateTime OF
        enum_SK_bereit :
            IF _CMD_Set_DateTime THEN 
               AblaufPrg.aktiv := enum_Prg_setDateTime ;
               AblaufPrg.setDateTime := 1 ;
            END_IF ;
        1 : // Systemuhr auslesen und Daten in Übertragungspuffer schreiben
            Conv_Date_TTMMJJ (IN_Date := _SPS_Datum
                             ,Jahr  := JJ
                             ,Monat := MM
                             ,Tag   := TT
                             ,Wochentag     := WT
                             ,Schaltjahr    := SJ
                             ,Jahrestag     := JT
                             ,Kalenderwoche := KW
                             ) ; 
            Conv_TOD_HHMMSS  (IN_Uhrzeit := _SPS_Uhrzeit
                             ,Stunden       := H
                             ,Minuten       := M
                             ,Sekunden      := S
                             ,Millisekunden := MS
                             ) ;
 //           JJ := JJ-2 ; TT := TT-2 ; H := H-2 ;
            
            Write_Data.Parameter_Data.Inhalt[00] := CHAR_TO_BYTE('D') ;
            Write_Data.Parameter_Data.Inhalt[01] := CHAR_TO_BYTE('A') ;
            Write_Data.Parameter_Data.Inhalt[02] := CHAR_TO_BYTE(',') ;
            Write_Data.Parameter_Data.Inhalt[03] := INT_TO_BYTE(((JJ / 1000) MOD 10) + 48) ;
            Write_Data.Parameter_Data.Inhalt[04] := INT_TO_BYTE(((JJ /  100) MOD 10) + 48) ;
            Write_Data.Parameter_Data.Inhalt[05] := INT_TO_BYTE(((JJ /   10) MOD 10) + 48) ;
            Write_Data.Parameter_Data.Inhalt[06] := INT_TO_BYTE(((JJ /    1) MOD 10) + 48) ;
            Write_Data.Parameter_Data.Inhalt[07] := CHAR_TO_BYTE(',') ;
            Write_Data.Parameter_Data.Inhalt[08] := INT_TO_BYTE(((MM /   10) MOD 10) + 48) ;
            Write_Data.Parameter_Data.Inhalt[09] := INT_TO_BYTE(((MM /    1) MOD 10) + 48) ;
            Write_Data.Parameter_Data.Inhalt[10] := CHAR_TO_BYTE(',') ;
            Write_Data.Parameter_Data.Inhalt[11] := INT_TO_BYTE(((TT /   10) MOD 10) + 48) ;
            Write_Data.Parameter_Data.Inhalt[12] := INT_TO_BYTE(((TT /    1) MOD 10) + 48) ;
            Write_Data.Parameter_Data.Inhalt[13] := CHAR_TO_BYTE(',') ;
            Write_Data.Parameter_Data.Inhalt[14] := INT_TO_BYTE(((H / 10) MOD 10) + 48) ;
            Write_Data.Parameter_Data.Inhalt[15] := INT_TO_BYTE(((H /  1) MOD 10) + 48) ;
            Write_Data.Parameter_Data.Inhalt[16] := CHAR_TO_BYTE(',') ;
            Write_Data.Parameter_Data.Inhalt[17] := INT_TO_BYTE(((M / 10) MOD 10) + 48) ;
            Write_Data.Parameter_Data.Inhalt[18] := INT_TO_BYTE(((M /  1) MOD 10) + 48) ;
            Write_Data.Parameter_Data.Inhalt[19] := CHAR_TO_BYTE(',') ;
            Write_Data.Parameter_Data.Inhalt[20] := INT_TO_BYTE(((S / 10) MOD 10) + 48) ;
            Write_Data.Parameter_Data.Inhalt[21] := INT_TO_BYTE(((S /  1) MOD 10) + 48) ;
            Write_Data.Parameter_Data.Inhalt[22] := 0 ;
            
            Write_Data.Parameter_Data.Size := 22 ;
            FOR i := 0 TO 7 BY 1 DO
               PAD[i*4 + _PerA_Req_Data] := at_Write_Data.Parameter_Data[i] ; 
            END_FOR ;
            AblaufPrg.setDateTime := 2 ;
        2 : // Steuerbit für Daten-Übernahme an Laser setzen
            Write_Data.Generel_Request.Command_Req := true ;
            AblaufPrg.setDateTime := 3 ;
        3 : // Feedback abfragen und auswerten - Daten-Übernahme quittieren
            IF Read_Data.CompletionStatus.Command_Req_Complete THEN 
               Write_Data.Generel_Request.Command_Req := false ; 
               at_Read_Data.Operate_Parameters[1] := PED[_PerE_Operate_Parameter] ;
               Write_Data.CompletionClr_Request.Command_Req_Complete := true ;
               AblaufPrg.setDateTime := 4 ;
            END_IF ; 
        4 : // Feedback abfragen
            IF NOT Read_Data.CompletionStatus.Command_Req_Complete THEN 
               Write_Data.CompletionClr_Request.Command_Req_Complete := false ;
               erster_Start.setDateTime := false ;
               AblaufPrg.setDateTime := enum_SK_beendet ;
            END_IF ; 
        enum_SK_beendet :
            IF NOT _CMD_Set_DateTime THEN 
               AblaufPrg.aktiv := enum_Prg_none ;
               AblaufPrg.setDateTime := enum_SK_bereit ;
            END_IF ;
    END_CASE ;
END_IF ; 
_DateTime_geladen := (AblaufPrg.setDateTime >= 4) ;
*)
//    Beschriftung durchführen  
IF (AblaufPrg.aktiv = enum_Prg_none) OR (AblaufPrg.aktiv = enum_Prg_Beschriftung) THEN  // Verriegelung gegen andere Abläufe
    
   CASE AblaufPRG.Beschriftung OF
      enum_SK_bereit :
          IF  _CMD_Laser_beschriften 
          AND LaserStatus.Layout_geladen AND LaserStatus.Beschriftung_geladen 
          AND LaserStatus.Laser_Ein AND LaserStatus.Emission THEN 
             AblaufPrg.aktiv := enum_Prg_Beschriftung ;
             AblaufPRG.Beschriftung := 1 ;
          END_IF ;
      1 :
          LaserStatus.Markieren_aktiv := true ;
          IF Read_Data.MachineStatus.Print_Busy OR NOT  _CMD_Laser_beschriften THEN   
             AblaufPRG.Beschriftung := 2 ;
          END_IF ;
      2 :
          IF Read_Data.CompletionStatus.Print_Complete OR NOT Read_Data.MachineStatus.Print_Busy THEN 
             LaserStatus.Markieren_aktiv := false ;
             AblaufPRG.Beschriftung := enum_SK_beendet ;
          END_IF ;
      enum_SK_beendet :
          IF NOT  _CMD_Laser_beschriften THEN 
             AblaufPRG.Beschriftung := enum_SK_bereit ;
             AblaufPrg.aktiv := enum_Prg_none ;
          END_IF ;
   END_CASE ;
END_IF ;
LaserStatus.Markieren_aktiv := (AblaufPRG.Beschriftung = 1) OR (AblaufPRG.Beschriftung = 2) ;
LaserStatus.Markieren_fertig := (AblaufPRG.Beschriftung = 3) ;
Write_Data.Generel_Request.Print := LaserStatus.Markieren_aktiv ;
_Markieren_laeuft := LaserStatus.Markieren_aktiv ;
_Markieren_fertig := LaserStatus.Markieren_fertig ;
 
//    Status-Meldungen ausgeben  
 
LaserStatus.aktivieren := NOT Read_Data.MachineStatus.Ready AND Read_Data.MachineStatus.Start_Up ;
LaserStatus.Laser_Ein  := Read_Data.MachineStatus.Ready AND Read_Data.MachineStatus.Start_Up ;
LaserStatus.Emission   := LaserStatus.Laser_Ein AND Read_Data.MachineStatus.Laser_Emit ;
_Einschalten_laeuft := LaserStatus.aktivieren ;
_Laser_eingeschaltet := LaserStatus.Laser_Ein ;
_Laser_Emission_OK   := LaserStatus.Emission ;
_Laser_Fehler        := LaserStatus.Fehler ;
   
Write_Data.Generel_Request.Error_Clear := _CMD_Quit ; // or LaserStatus.aktivieren ; 
  
Write_Data.CompletionClr_Request.Error_Clear_Complete := Read_Data.CompletionStatus.Error_Clear_Complete ;
Write_Data.CompletionClr_Request.Edit_Complete        := Read_Data.CompletionStatus.Edit_Complete ;
   
Impuls_Timer (IN := (AblaufPrg.setLayout = 4) OR (AblaufPrg.setBeschriftung = 3) OR (AblaufPrg.setDateTime = 4) OR Write_Data.Generel_Request.Error_Clear
             ,PT := t#500ms
             ) ;    

//    Perepherie-Daten schreiben  
PAD[_PerA_Generel_Req +0]       := at_Write_Data.Generel_Request[1] ;
PAD[_PerA_Generel_Req +4]       := at_Write_Data.Generel_Request[2] ;
PAD[_PerA_CompletionClr_Req +0] := at_Write_Data.CompletionClr_Request[1] ;
PAD[_PerA_CompletionClr_Req +4] := at_Write_Data.CompletionClr_Request[2] ;
END_FUNCTION_BLOCK
 
Hi Mike,
dieser Code sollte im TIA-Portal genauso funktionieren - du solltest aber die Sache mit dem "optimierten Bausteinzugriff" abschalten.

Gruß
Larry
 
Im Tia kann man sich die In und Out des Lasers komplett auf je eine Strucktur legen und diese Struktur dann dem FB übergeben. IM FB arbeitet man dann mit der Struktur, sehr praktisch. Das zumindest fürde ich dann für TIA ändern. Dazu muß man sich natürlich auch die Struktur anlegen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Larry ich weiss das Thema ist schon älter aber wollte trozdem was fragen betreffend deinem Keyence Program

Warum brauchst du nicht die beiden Siemensbausteine SFC14 /15? + 2 zwei UDT's ein in und ein out?

wäre dies nicht viel praktischer und übersichtlicher? oder wolltest du einfach 1 Baustein haben der alles macht?

Grüsse aus der Schweiz :)
 
Hallo Larry ich weiss das Thema ist schon älter aber wollte trozdem was fragen betreffend deinem Keyence Program

Warum brauchst du nicht die beiden Siemensbausteine SFC14 /15? + 2 zwei UDT's ein in und ein out?

wäre dies nicht viel praktischer und übersichtlicher? oder wolltest du einfach 1 Baustein haben der alles macht?

Grüsse aus der Schweiz :)

Hi, mir fällt jetzt gerade wieder ein dass Keyence da eine GSDML mit vielen Submodulen hat. Ich bin grad nicht sicher ob man da einen SFC14 fürs gesamte verwenden kann, oder ob man für jedes Modul einen braucht.
 
Warum brauchst du nicht die beiden Siemensbausteine SFC14 /15?

Weil in seinem Beispiel die ganzen EAs zum Gerät im Prozessabbild liegen und damit schon konsistent vorliegen.

Und da er alle Prozesse in dem Baustein macht, braucht er ja nur die Signale nach aussen legen welche er wirklich braucht und schiebt damit keine unnötigen Daten beim Bausteinaufruf hin und her.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hier hatte ich mal die UDT für einen Keyence Scanner und einen MDX gepostet. Die kann man dann direkt in der Symboltabelle mit der Startadresse für E und A vergeben und so voll symbolisch mit den E/A arbeiten.

PS: Bei einer 1500-er liegt die Peripherie ja in der Regel im EA-Abbild und man braucht keine SFC, um die normalen E/A zu holen.
 
Danke für die Infos, naja das mit den prozessabbilder bzw peripherieadressierung habe ich noch nicht ganz verstanden aber dies kommt bestimmt sobald ich mehr erfahrung habe :)

Ach und Ralle es ist eine 300 steuerung mit step 7 classic

falls jemand interesse hat wäre hier noch mein Tread
Hardware eingänge automatisch auf ein UDT mappen ohne Globalen DB

Danke für die Antworten :)

Ok, in diesem Fall hab ich die E/A immer mit den SFC in einen DB übernommen, der die korrekten Strukturen hatte.
 
Zurück
Oben