Communicatie tussen 2 CPL's

De Modulaire PLC die vrijwel alles kan.

Moderator: GJ_

JoopB
Berichten: 955
Lid geworden op: 30-11-2006 20:42:15
Locatie: Weert

Communicatie tussen 2 CPL's

Bericht door JoopB » 25-05-2012 22:20:08

Er is mij via een PB gevraagd om een voorbeeldje te maken voor de koppeling van 2 PLC's met elk een Lean CP zodat de ingangen van de ene plc op de uitgangen van de andere konden worden gezet.
Netpro nieuwe verbinding invoegen.jpg
Netpro nieuwe verbinding invoegen.jpg (193.08 KiB) 3001 keer bekeken
Hier de Code in een v/d PLC's

Code: Selecteer alles

DATA_BLOCK DB 20
TITLE =
VERSION : 0.1


  STRUCT 	
   ZendData : STRUCT 	// 
    IngangCPU1 : STRUCT 	
     I124_0 : BOOL ;	
     I124_1 : BOOL ;	
     I124_2 : BOOL ;	
     I124_3 : BOOL ;	
     I124_4 : BOOL ;	
     I124_5 : BOOL ;	
     I124_6 : BOOL ;	
     I124_7 : BOOL ;	
     I125_0 : BOOL ;	
     I125_1 : BOOL ;	
    END_STRUCT ;	
    Reserve : STRING  [46 ];	
   END_STRUCT ;	
   OntvangsData : STRUCT 	
    IngangCPU2 : STRUCT 	
     I0_0 : BOOL ;	
     I0_1 : BOOL ;	
     I0_2 : BOOL ;	
     I0_3 : BOOL ;	
     I0_4 : BOOL ;	
     I0_5 : BOOL ;	
     I0_6 : BOOL ;	
     I0_7 : BOOL ;	
     I1_0 : BOOL ;	
     I1_1 : BOOL ;	
    END_STRUCT ;	
    Reserve : STRING  [46 ];	
   END_STRUCT ;	
  END_STRUCT ;	
BEGIN
   ZendData.IngangCPU1.I124_0 := FALSE; 
   ZendData.IngangCPU1.I124_1 := FALSE; 
   ZendData.IngangCPU1.I124_2 := FALSE; 
   ZendData.IngangCPU1.I124_3 := FALSE; 
   ZendData.IngangCPU1.I124_4 := FALSE; 
   ZendData.IngangCPU1.I124_5 := FALSE; 
   ZendData.IngangCPU1.I124_6 := FALSE; 
   ZendData.IngangCPU1.I124_7 := FALSE; 
   ZendData.IngangCPU1.I125_0 := FALSE; 
   ZendData.IngangCPU1.I125_1 := FALSE; 
   ZendData.Reserve := ''; 
   OntvangsData.IngangCPU2.I0_0 := FALSE; 
   OntvangsData.IngangCPU2.I0_1 := FALSE; 
   OntvangsData.IngangCPU2.I0_2 := FALSE; 
   OntvangsData.IngangCPU2.I0_3 := FALSE; 
   OntvangsData.IngangCPU2.I0_4 := FALSE; 
   OntvangsData.IngangCPU2.I0_5 := FALSE; 
   OntvangsData.IngangCPU2.I0_6 := FALSE; 
   OntvangsData.IngangCPU2.I0_7 := FALSE; 
   OntvangsData.IngangCPU2.I1_0 := FALSE; 
   OntvangsData.IngangCPU2.I1_1 := FALSE; 
   OntvangsData.Reserve := ''; 
END_DATA_BLOCK

FUNCTION FC 1 : VOID
TITLE =
VERSION : 0.1


VAR_TEMP
  Laddr : WORD ;	
END_VAR
BEGIN
NETWORK
TITLE =Hulp act bit hoogmaken

      UN    M    100.0; 
      L     S5T#2S; 
      SE    T      1; 
NETWORK
TITLE =Act bit 

      O     T      1; 
      O     M    100.1; 
      =     M    100.0; 
NETWORK
TITLE =Adres CP naar hex (Word) formaat

      L     256; 
      T     #Laddr; 
      NOP   0; 
NETWORK
TITLE =
//FC 5 staat in Bibliotheek SIMATIC_NET_CP - CP 330
      U     M    100.0; 
      =     L      2.0; 
      BLD   103; 
      CALL FC     5 (
           ACT                      := L      2.0,
           ID                       := 1,
           LADDR                    := #Laddr,
           SEND                     := DB20.ZendData.IngangCPU1,
           LEN                      := 2,
           DONE                     := M    100.1,
           ERROR                    := M    100.2,
           STATUS                   := MW   102);
      NOP   0; 
NETWORK
TITLE =Data ontvangen
//FC 6 staat in Bibliotheek SIMATIC_NET_CP - CP 330
      CALL FC     6 (
           ID                       := 1,
           LADDR                    := #Laddr,
           RECV                     := DB20.OntvangsData.IngangCPU2,
           NDR                      := M    104.0,
           ERROR                    := M    104.1,
           STATUS                   := MW   106,
           LEN                      := MW   108);
      NOP   0; 
END_FUNCTION

ORGANIZATION_BLOCK OB 1
TITLE = "Main Program Sweep (Cycle)"
VERSION : 0.1


VAR_TEMP
  OB1_EV_CLASS : BYTE ;	//Bits 0-3 = 1 (Coming event), Bits 4-7 = 1 (Event class 1)
  OB1_SCAN_1 : BYTE ;	//1 (Cold restart scan 1 of OB 1), 3 (Scan 2-n of OB 1)
  OB1_PRIORITY : BYTE ;	//Priority of OB Execution
  OB1_OB_NUMBR : BYTE ;	//1 (Organization block 1, OB1)
  OB1_RESERVED_1 : BYTE ;	//Reserved for system
  OB1_RESERVED_2 : BYTE ;	//Reserved for system
  OB1_PREV_CYCLE : INT ;	//Cycle time of previous OB1 scan (milliseconds)
  OB1_MIN_CYCLE : INT ;	//Minimum cycle time of OB1 (milliseconds)
  OB1_MAX_CYCLE : INT ;	//Maximum cycle time of OB1 (milliseconds)
  OB1_DATE_TIME : DATE_AND_TIME ;	//Date and time OB1 started
END_VAR
BEGIN
NETWORK
TITLE =Ingangswoord naar Zend data 
//Eventueel bit voor bit overdragen
//In CPU 2 EW 0 ( IW0 ) nemen
      L     EW   124; 
      T     DB20.DBW    0; 
      NOP   0; 
NETWORK
TITLE =

      CALL FC     1 ;
      NOP   0; 
NETWORK
TITLE =1ste byte van ontvangst data naar uitgangs byte
//Eventueel bit voor bit overdragen (Zijn maar 6 bit uitgangen
//In CPU 2 AB 0 ( QB 0 ) nemen
      L     DB20.DBB   50; 
      T     AB   124; 
      NOP   0; 
END_ORGANIZATION_BLOCK

Als de vraagsteller nog vragen heeft graag een Email adres waar ik de archive file van het project naar toe kan sturen.

Plaats reactie

Terug naar “S7-300”