I have a few program samples to give !

Sioan

Member
Join Date
Jan 2014
Location
Graz
Posts
91
Feedback me if you need more 🍻

intermediate level

Code:
DATA_BLOCK "a"
TITLE =
VERSION : 0.1
  STRUCT 	
   a : ARRAY  [0 .. 3 ] OF INT  := 23;	
  END_STRUCT ;	
BEGIN
   a[0] := 23; 
   a[1] := 0; 
   a[2] := 0; 
   a[3] := 0; 
END_DATA_BLOCK

DATA_BLOCK "b"
TITLE =
VERSION : 0.1
  STRUCT 	
   b : INT  := 45;	
  END_STRUCT ;	
BEGIN
   b := 45; 
END_DATA_BLOCK

FUNCTION "ANY" : VOID
TITLE =
//ERSATZ "P##..."   für Pointer auf Elemente in  Strukturen , UDT , Arrays , Multiinstanzen...etc
VERSION : 0.1
VAR_INPUT
  LAR1 : ANY ;	//ALLE mögliche Daten
END_VAR
VAR_TEMP
  PNTR : DWORD ;	//POINTER
  DBNO : DWORD ;	//DBNO
END_VAR
BEGIN
NETWORK
TITLE =SIOAN
//Hier wird der Speicherbereich für die Benutzung des Pointers ausserhalb der "ANY" Funktion korrigiert und (Pointer) gleich im AR1 geladen 
      T     #PNTR; //Lade Pointerdaten    aus AKKU1
      TAK   ; 
      T     #DBNO; // Lade DB Nr aus AKKU2

      L     P##PNTR; //Lade Pointer auf #PNTR Anfang
      LAR1  ; 
      L     B [AR1,P#0.0]; 
      L     B#16#87; 
      ==D   ; //Speicherbereich abfragen
      SPBN  VL; //IF THEN  
      L     B#16#86; 
      T     B [AR1,P#0.0]; 
VL:   U(    ; 
      L     #DBNO; 
      L     L#0; 
      <>D   ; // #DBNO auf NULL abfragen  
      )     ; 
      U(    ; 
      L     #DBNO; 
      L     DINO; 
      ==D   ; // #DBNO = DINO abfragen
      )     ; 
      U(    ; 
      L     B [AR1,P#0.0]; 
      L     B#16#84; 
      ==D   ; //Speicherbereich abfragen  
      )     ; 
      SPBN  DI; //IF THEN  
      L     B#16#85; 
      T     B [AR1,P#0.0]; 
DI:   L     #PNTR; 
      LAR1  ; 
END_FUNCTION

FUNCTION_BLOCK FB 1
TITLE =
VERSION : 0.1
VAR_INPUT
  z : ARRAY  [0 .. 3 ] OF INT ;	
END_VAR
VAR
  x : INT ;	
END_VAR
VAR_TEMP
  v : INT ;	
  y : WORD ;	
END_VAR
BEGIN
NETWORK
TITLE =
      CALL "ANY" (
           LAR1                     := #x);
      AUF   "a"; 
      L     3; 
      T     W [AR1,P#0.0]; 
      L     #x; 
      T     MD     0; 
NETWORK
TITLE =
      CALL "ANY" (
           LAR1                     := "a".a[0]);
      AUF   "a"; 
      L     7; 
      T     W [AR1,P#0.0]; 
      L     "a".a[0]; 
      T     MD     4; 
NETWORK
TITLE =
      CALL "ANY" (
           LAR1                     := "b".b);
      AUF   "b"; 
      L     15; 
      T     W [AR1,P#0.0]; 
      L     "b".b; 
      T     MD     8; 
     BE    ; 
NETWORK
TITLE =
      CALL "ANY" (
           LAR1                     := #z[0]);
      L     0; 
u:    U(    ; //WHILE   
      T     #v; 
      L     4; 
      <I    ; 
      )     ; 
      SPBN  o; //IF THEN 
      L     31; 
      T     W [AR1,P#0.0]; 
      +AR1  P#2.0; 
      L     #v; 
      +     1; 
      SPA   u; //LOOP
o:    NOP   0; 
      L     #z[3]; 
      T     MD    12; 
      BE    ; 
END_FUNCTION_BLOCK

DATA_BLOCK DB 1
TITLE =
VERSION : 0.0
 FB 1
BEGIN
   z[0] := 0; 
   z[1] := 0; 
   z[2] := 0; 
   z[3] := 0; 
   x := 0; 
END_DATA_BLOCK

FUNCTION FC 2 : VOID
TITLE =
VERSION : 0.1
VAR_TEMP
  z : ARRAY  [0 .. 3 ] OF INT ;	
  v : INT ;	
END_VAR
BEGIN
NETWORK
TITLE =
      CALL "ANY" (
           LAR1                     := #z[0]);
      L     0; 
u:    U(    ; //WHILE   
      T     #v; 
      L     4; 
      <I    ; 
      )     ; 
      SPBN  o; //IF THEN 
      L     255; 
      T     W [AR1,P#0.0]; 
      +AR1  P#2.0; 
      L     #v; 
      +     1; 
      SPA   u; //LOOP
o:    NOP   0; 
      L     #z[3]; 
      T     MD    12; 
      BE    ; 
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 =
      CALL FB     1 , DB     1 ;
NETWORK
TITLE =
      CALL FC     2 ;
END_ORGANIZATION_BLOCK
...........................................................................................................................................................................................................................................................................................................................................................................
DATA_BLOCK "b1"
TITLE =Sioan
VERSION : 0.0
 FB 1
BEGIN
   x := FALSE; 
   a[0] := 0; 
   a[1] := 0; 
   a[2] := 0; 
   a[3] := 0; 
END_DATA_BLOCK

DATA_BLOCK "b2"
TITLE =Sioan
VERSION : 0.1
  STRUCT     
   a : BOOL ;    
   b : ARRAY  [0 .. 3 ] OF INT  := 0;    
  END_STRUCT ;    
BEGIN
   a := FALSE; 
   b[0] := 2; 
   b[1] := 22; 
   b[2] := 222; 
   b[3] := 2222; 
END_DATA_BLOCK

DATA_BLOCK "b3"
TITLE =Sioan
VERSION : 0.1
  STRUCT     
   x : BOOL ;    
   y : ARRAY  [0 .. 3 ] OF INT  := 6, 66, 666, 6666;    
  END_STRUCT ;    
BEGIN
   x := FALSE; 
   y[0] := 6; 
   y[1] := 66; 
   y[2] := 666; 
   y[3] := 6666; 
END_DATA_BLOCK

FUNCTION_BLOCK FB 1
TITLE =Sioan
VERSION : 0.1
VAR_INPUT
  x : BOOL ;    
  a : ARRAY  [0 .. 3 ] OF INT ;    
END_VAR
VAR_TEMP
  e : INT ;    
END_VAR
BEGIN
NETWORK
TITLE = Sioan
      U     #x; 
      SPBN  o; 
      L     MW     0; 
      T     "b2".b[0]; 
      CALL "BLKMOV" (
           SRCBLK                   := "b2".b,
           RET_VAL                  := #e,
           DSTBLK                   := #a);
o:    NOP   0; 
END_FUNCTION_BLOCK

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 =Sioan
      CALL FB     1 , "b1"  (
           x                        := E      0.0,
           a                        := "b3".y);
END_ORGANIZATION_BLOCK
...........................................................................................................................................................................................................................................................................................................................................................................
.
 
Code:
FUNCTION FC 1 : VOID
TITLE =
//[L S5T#_..H_..M_..S_..MS] ; L W#16#BHHH ; B = Zeitbasis[HEX 0=centis 1=decis  2=s  3=dekas] ; HHH = Zeitwert[HEX000-HEX999]
VERSION : 0.1
BEGIN
NETWORK
TITLE =
//SI ; SV    FP       FR     R    
//SE ; SS   FP        FR     R
//SA         FN        FR     R    
//  L     W#16#BHHH;//B=0cs,1ds,2s,3das
      L     S5T#20S;//Wert
      U     E      0.0;//STARTFLANKE
      SV    T      1; 

      L     T      1;//AKTUELLER ZEITWERT-centisecunden
      T     MD     0; 

      U     T      1;//Z U W E I S E N 
      =     A      0.0; 

      U     E      0.1;//RESET
      R     T      1; 

      U     E      0.2;//SF-2
      FR    T      1; 
NETWORK
TITLE =
//ZR,ZV   FP    (  FR   R) 
//[HEX000-HEX999]
//  L     W#16#HHH                    
      L     C#20; //Wert (hex)
      U     E      0.4;//STARTFLANKE
      S     Z      1; 

      U     E      0.5;//ZÄHLFLANKE
      ZR    Z      1; 

      L     Z      1;//AKTUELLER ZÄHLWERT 
      T     MD     4; 

      U     Z      1;//Z U W E I S E N
      =     A      0.1; 

      U     E      0.6;//RESET
      R     Z      1; 

      U     E      0.7;//ZF-2
      FR    Z      1; 
END_FUNCTION
...........................................................................................................................................................................................................................................................................................................................................................................
FUNCTION_BLOCK FB 0
TITLE =CONCURENCY
VERSION : 0.1
VAR	
  m1 : BOOL ; //0	
  m2 : BOOL ; //0	
  m3 : BOOL ; //0
  m0 : BOOL ; //0	
END_VAR
BEGIN
NETWORK
TITLE =S P L
      UN    #m1; 
      UN    #m2; 
      UN    #m3; 
      =     #m0; 

      U   "S_in1";
      U     #m0; 
      O     #m1; 
      SPB   o1;
 
      U   "S_in2";
      U     #m0;
      O     #m2; 
      SPB   o2;

      U   "S_in3";
      U     #m0; 
      O     #m3; 
      SPB    o3;
NETWORK
TITLE =PROZESS 1
o1:SET; 
      =     #m1; 
      W O R K
      U     "S_out1";
      UN  "S_in1";
      R     #m1; 
//EVENTUELL RESET AUSGÄNGE
      BE;
NETWORK
TITLE =PROZESS 2 
o2: SET; 
      =     #m2; 
      W O R K
      U     "S_out2";
      UN  "S_in2";  
      R     #m2; 
//EVENTUELL RESET AUSGÄNGE
      BE; 
NETWORK
TITLE =PROZESS 3  
o3: SET; 
      =     #m3; 
      W O R K
      U     "S_out3";
      UN  "S_in3";
      R     #m3; 
//EVENTUELL RESET AUSGÄNGE
      BE; 
            END_FUNCTION_BLOCK
...........................................................................................................................................................................................................................................................................................................................................................................
FUNCTION_BLOCK "RINGPUFFER"//DINT,REAL
TITLE =
VERSION : 0.1
VAR_INPUT
  INIT : BOOL ;//Initialisieren
  EIN : BOOL ;//Schreibsignal
  AUS : BOOL ;//Lesesignal
  INPUT : DINT ;//WOHER SCHREIBEN ?
END_VAR
VAR_OUTPUT
  OUTPUT : DINT ;	//WOHIN  LESEN ?
END_VAR
VAR
  Sidx : INT ;//Schreibindex
  Lidx : INT ;//LeSidx
  INflanke : BOOL ;//Schreibsignal Flanke
  AUSflanke : BOOL ;//Lesesignal Flanke
  INITflanke : BOOL ;//Nullensignal Flanke
  LFM : BOOL ;//Leseflanke Merker
  SFM : BOOL ;//Schreibflanke Merker
  Besetzt : BOOL ;//1=Lesen möglich
  Platz : ARRAY  [0 .. 11 ] OF DINT ;//ARRAY grösse änderbar	
END_VAR
BEGIN
NETWORK
TITLE =SPRUNGLEISTE
      U     #INIT; 
      FP    #INITflanke; 
      SPB   INIT;//INITIALISIEREN

      U     #AUS; 
      FP    #AUSflanke; 
      =     #LFM; 
      U     #IN; 
      FP    #INflanke; 
      =     #SFM; 

      U     #SFM; 
      SPB   INS;//SCHREIBEN
      U     #LFM; 
      SPB   AUSL;//LESEN
      BE    ; 
NETWORK
TITLE =INITIALISIERN
INIT: L     0; 
      T     #Lidx; 
      T     #Sidx; 
      L     P##Platz; 
      LAR1  ; 
      TAR2  ; 
      +AR1  ; 
      L     0; 
      T     D [AR1,P#0.0];//(D=D;W=W;X= )
      T     #OUTPUT; 
      CLR   ; 
      =     #Besetzt; 
      BE    ; 
NETWORK
TITLE =SCHREIBEN
EINS: L     #Lidx; 
      L     #Sidx; 
      ==I   ; 
      SPBN  e0; 
      UN    #Besetzt; 
      SPBN  e1; 
e0:   L     P##Platz; 
      LAR1  ; 
      L     #Sidx; 
      SLD   5;//(D=5;W=4;B=3;X=0)
      +AR1  ; 
      TAR2  ; 
      +AR1  ; 
      L     #INPUT; 
      T     D [AR1,P#0.0];//(D=D;W=W;X= )
      L     11; 
      L     #Sidx; 
      +     1; 
      <I    ; 
      SPBN  e2; 
      L     0; 
e2:   T     #Sidx; 
      SET   ; 
      =     #Besetzt; 
e1:   U    #LFM; 
      SPB  AUSL; 
      BE    ; 
NETWORK
TITLE =LESEN
AUSL: L     #Sidx; 
      L     #Lidx; 
      ==I   ; 
      SPBN  a0; 
      U     #Besetzt; 
      SPBN  a1; 
a0:   L     P##Platz; 
      LAR1  ; 
      L     #Lidx; 
      SLD   5;//(D=5;W=4;B=3;X=0)
      +AR1  ; 
      TAR2  ; 
      +AR1  ; 
      L     D [AR1,P#0.0];//(D=D;W=W;X= )
      T     #OUTPUT; 
      L     11; 
      L     #Lidx; 
      +     1; 
      <I    ; 
      SPBN  a2; 
      L     0; 
a2:   T     #Lidx; 
      CLR   ; 
      =     #Besetzt; 
      BE    ; 
a1:   L     0; 
      T     #OUTPUT; 
      BE    ; 
END_FUNCTION_BLOCK
...........................................................................................................................................................................................................................................................................................................................................................................
FUNCTION_BLOCK "RINGPUFFER" //BOOL
TITLE =
VERSION : 0.1
VAR_INPUT
  INIT : BOOL ;	//Initialisieren
  EIN : BOOL ;	//Schreibsignal
  AUS : BOOL ;	//Lesesignal
  INPUT : BOOL ;//WOHER SCHREIBEN ?
END_VAR
VAR_OUTPUT
  OUTPUT : BOOL ;//WOHIN  LESEN ?
END_VAR
VAR
  Sidx : INT ;	//Schreibindex
  Lidx : INT ;	//Leseindex
  EINflanke : BOOL ;	//Schreibsignal Flanke
  AUSflanke : BOOL ;//Lesesignal Flanke
  INITflanke : BOOL ;//Nullensignal Flanke
  LFM : BOOL ;	//Leseflanke Merker
  SFM : BOOL ;	//Schreibflanke Merker
  Besetzt : BOOL ;//1=Lesen möglich
  Platz : ARRAY  [0 .. 11 ] OF BOOL ;	
END_VAR
BEGIN
NETWORK
TITLE =SPRUNGLEISTE
      U     #INIT; 
      FP    #INITflanke; 
      SPB   INIT; //INITIALISIEREN

      U     #AUS; 
      FP    #AUSflanke; 
      =     #LFM; 
      U     #EIN; 
      FP    #EINflanke; 
      =     #SFM; 

      U     #SFM; 
      SPB   EINS; //SCHREIBEN
      U     #LFM; 
      SPB   AUSL; //LESEN
      BE    ; 
NETWORK
TITLE =INITIALISIERN
INIT: L     0; 
      T     #Lidx; 
      T     #Sidx; 
      L     P##Platz; 
      LAR1  ; 
      TAR2  ; 
      +AR1  ; 
      CLR   ; 
      =      [AR1,P#0.0];//(D=D;W=W;X= )
      =     #Besetzt; 
      =     #OUTPUT; 
      BE    ; 
NETWORK
TITLE =SCHREIBEN
EINS: L     #Lidx; 
      L     #Sidx; 
      ==I   ; 
      SPBN  e0; 
      UN    #Besetzt; 
      SPBN  e1; 
e0:   L     P##Platz; 
      LAR1  ; 
      L     #Sidx;
      SLD   0;//(D=5;W=4;B=3;X=0) 
      +AR1  ; 
      TAR2  ; 
      +AR1  ; 
      U     #INPUT; 
      =      [AR1,P#0.0];//(D=D;W=W;X= )
      L     11; 
      L     #Sidx; 
      +     1; 
      <I    ; 
      SPBN  e2; 
      L     0; 
e2:   T     #Sidx; 
      SET   ; 
      =     #Besetzt; 
e1:   UN    #LFM; 
      SPBN  AUSL; 
      BE    ; 
NETWORK
TITLE =LESEN
AUSL: L     #Sidx; 
      L     #Lidx; 
      ==I   ; 
      SPBN  a0; 
      U     #Besetzt; 
      SPBN  a1; 
a0:   L     P##Platz; 
      LAR1  ; 
      L     #Lidx; 
      SLD   0;//(D=5;W=4;B=3;X=0)
      +AR1  ; 
      TAR2  ; 
      +AR1  ; 
      U      [AR1,P#0.0];//(D=D;W=W;X= )
      =     #OUTPUT; 
      L     11; 
      L     #Lidx; 
      +     1; 
      <I    ; 
      SPBN  a2; 
      L     0; 
a2:   T     #Lidx; 
      CLR   ; 
      =     #Besetzt; 
      BE    ; 
a1:   CLR   ; 
      =     #OUTPUT; 
      BE    ; 
END_FUNCTION_BLOCK
..........................................................................................................................................................................................................................................................................................................................................................................
 
About ...30 Samples ... PLC BASIC BRICKS !

I'll post more ... try them , ask me and ...?....learn !
 
Last edited:
I think that most members on this forum understand english, but only a few german.
I think that you should switch your STEP7 to english language mnemonics before you export the source code.
And you comments needs translation to english.

I also think your symbols could be a little bit more descriptive.
And you could place many more comments in you code.
You dont tell what the sample code is supposed to do.
Is it because people are supposed to guess what the code does !?

And, in your 1st post you have several OB1s. Is that the same sample program or different programs ?

That is just from a quick glance at your code.
 
I think that most members on this forum understand english, but only a few german.
I think tha chineseat you should switch your STEP7 to english language mnemonics before you export the source code.
And you comments needs translation to english.

I also think your symbols could be a little bit more descriptive.
And you could place many more comments in you code.
You dont tell what the sample code is supposed to do.
Is it because people are supposed to guess what the code does !?

And, in your 1st post you have several OB1s. Is that the same sample program or different programs ?

That is just from a quick glance at your code.
FIRST: I'll do what I can do but I'll do it only ... for free !
As you see english is not my mother language ( I'm a chinese jew form Oblast now living in Graz , Austria) .
I'm working with google translate ( make me tired!).
There are more code fragments ...and yes more programs ( this while more OB1).
The examples are not for beginners , the intermediate ones will understand the code ...
Is more a kind of ideea challenging than ... trying to intoxicate beginners !
They (beginners) should not trust me without testing my programs ...but nevertheless I will answer with ... arguments !

SECOND: 🍻
 
That you dont have much time at hand and dont speak english fluently, I can understand.
Even so, when you post something you must be prepared to get some critique.

I dont consider myself a beginner, but I have no idea what your code is supposed to do, and I do understand german quite well.
 
sioan
please have a look at www.oscat.de
a nice library probably covering a lot of your blocks.
also have a view how he commented the functions so people can understand what it is doing.
put all your blocks into one rar or zip file so we can download them.
and jesper is right i do understand both languages, however siemens is not my thing codesys is.
 

Similar Topics

Hello all, I'm a new member here. I've joined as I want to learn about PLC programming. I've got a few questions to begin with. To get me...
Replies
37
Views
4,525
Hi, it's been a few years since I have posted in this group. I'm looking for a product of some sort that can connect a handful of I/O's a few...
Replies
13
Views
4,348
Any advice on below issue? ➢ IFix 5.0 with USB Hardware Dongle License Standalone application connected to RX3i PLC units via Ethernet (bridged...
Replies
1
Views
1,609
Good Afternoon , I'm having my first experience with a Guardmaster Configurable Safety Relay 440C-CR30. So far , I really like the...
Replies
1
Views
1,621
Good Evening , We have a few AB PLC-5 PLC's left . I took notice that we do not have and PCMCIA slots in our laptops . Do they make any...
Replies
12
Views
2,516
Back
Top Bottom