Siemens - STL to SCL

SHKODRAN

Member
Join Date
May 2010
Location
Italy
Posts
102
someone is able to do the conversion?
Thank you.
Code:
A     BOOL 1
      A     BOOL 2
      AN    BOOL 3
      AN    BOOL 4
      JCN   Y030

      L     INT 1
      +     1
      T     INT 1
      L     50                          
      >I    
      JCN   Y040

      L     0
      T     INT 1
      S     BOOL 4
//*
Y030: A     BOOL 1
      A     BOOL 4
      JCN   Y040

      L     INT 1
      +     1
      T     INT 1
      L     10                         
      >=I   
      JCN   Y040

      L     0
      T     INT 1
      R     BOOL 4

Y040: NOP 0
 
Literal conversion:

Code:
FUNCTION FC10:VOID
VAR_in_out
bool1:BOOL;
bool2:BOOL;
bool3:BOOL;
bool4:BOOL;
int1:INT;

END_VAR
var
L:INT;
nbool3:BOOL;
nbool4:BOOL;
END_VAR
LABEL
  Y030,Y040;
END_LABEL  

BEGIN
nbool3:=NOT bool3;
nbool4:=NOT bool4;
IF NOT (bool1 AND bool2 AND nbool3 AND nbool4) THEN GOTO Y030;
END_IF;
int1:=int1+1;

IF NOT (int1 > 50) THEN GOTO Y040;
END_IF;

int1:=0;
bool4:=True;

Y030: IF NOT(bool1 AND bool4) THEN GOTO Y040;
END_IF;    

int1:=int1+1;
IF NOT (int1 >= 10) THEN GOTO Y040;
END_IF;

int1:=0;
bool4:=False;


Y040: L:=L; //instead of nop


END_FUNCTION;
 
Hello, can you please help me on this?
SET ;
SAVE ;
= L 26.1;
L DW#16#10020008;
T LD 28;
L DINO;
T LW 32;
TAR2 ;
+ L#384;
T LD 34;
L LD 28;
T LD 0;
L LD 32;
T LD 4;
L LW 36;
T LW 8;
L DID [AR2,P#0.0];
T LD 10;
L DID [AR2,P#4.0];
T LD 14;
L DIW [AR2,P#8.0];
T LW 18;
L LW 2;
T LW 12;
L LD 10;
T LD 28;
L LD 14;
T LD 32;
L LW 18;
T LW 36;
L LD 0;
T LD 38;
L LD 4;
T LD 42;
L LW 8;
T LW 46;
TAR2 LD 48;
UC "BLKMOV" {
P#L 28.0,
P#L 22.0,
P#L 38.0};
LAR2 LD 48;
 
SET
SAVE
= L 26.1
L DW#16#10020008
T LD 28
L DINO
T LW 32
TAR2
+ L#384
T LD 34
L LD 28
T LD 0
L LD 32
T LD 4
L LW 36
T LW 8
L DID [AR2,P#0.0]
T LD 10
L DID [AR2,P#4.0]
T LD 14
L DIW [AR2,P#8.0]
T LW 18
L LW 2
T LW 12
L LD 10
T LD 28
L LD 14
T LD 32
L LW 18
T LW 36
L LD 0
T LD 38
L LD 4
T LD 42
L LW 8
T LW 46
TAR2 LD 48
UC "BLKMOV"
P#L 28.0
P#L 22.0
P#L 38.0
LAR2 LD 48
L #iTemp
L #Gross_In.GrossWeight
T #GrossPV.Value
L #Gross_In.NetWeight
T #NetPV.Value
L DIB [AR2,P#14.0]
L B#16#0
<>I
L DIB [AR2,P#15.0]
L B#16#0
= L 26.2
<>I
O L 26.2
= #Error.Value
L #Ls****chdog
L #WATCHDOG
<>R
JCN A7d0
CLR
= #Bad.Value
L B#16#80
T #Bad.ST
JU A7d1
A7d0: SET
= #Bad.Value
L B#16#0
T #Bad.ST
A7d1: L DW#16#10020008
T LD 28
L DINO
T LW 32
TAR2
+ L#448
T LD 34
L LD 28
T LD 0
L LD 32
T LD 4
L LW 36
T LW 8
L DID [AR2,P#16.0]
T LD 10
L DID [AR2,P#20.0]
T LD 14
L DIW [AR2,P#24.0]
T LW 18
L W#16#8
T LW 2
L LW 2
T LW 12
CLR
A #PresetReq
A #ClearReq
JCN A7d2
CLR
= #PresetReq
= #ClearReq
= #sx_SetClear
= #sx_ResetClear
= #sx_SetPreset
= #sx_ResetPreset
= #sx_SetTare
= #PresetReq
A7d2: CLR
A #PresetReq
JCN A7d3
A #sx_SetClear
NOT
= L 26.2
A #sx_ResetClear
NOT
A L 26.2
= L 26.2
A #sx_SetPreset
NOT
A L 26.2
= L 26.2
A #sx_ResetPreset
NOT
A L 26.2
= L 26.2
A #sx_SetTare
NOT
A L 26.2
JCN A7d4
L W#16#1
T #Data_Out.ClearReq
SET
= #sx_SetClear
JU A7d3
A7d4: CLR
A #sx_ResetClear
NOT
A #sx_SetClear
= L 26.2
A #sx_SetPreset
NOT
A L 26.2
= L 26.2
A #sx_ResetPreset
NOT
A L 26.2
= L 26.2
A #sx_SetTare
NOT
A L 26.2
JCN A7d6
L W#16#0
T #Data_Out.ClearReq
SET
= #sx_ResetClear
JU A7d3
A7d6: CLR
A #sx_SetClear
A #sx_ResetClear
= L 26.2
A #sx_SetPreset
NOT
A L 26.2
= L 26.2
A #sx_ResetPreset
NOT
A L 26.2
= L 26.2
A #sx_SetTare
NOT
A L 26.2
JCN A7d7
L W#16#1
T #Data_Out.PresetReq
SET
= #sx_SetPreset
JU A7d3
A7d7: CLR
A #sx_SetClear
A #sx_ResetClear
A #sx_SetPreset
= L 26.2
A #sx_ResetPreset
NOT
A L 26.2
= L 26.2
A #sx_SetTare
NOT
A L 26.2
JCN A7d8
L W#16#0
T #Data_Out.PresetReq
SET
= #sx_ResetPreset
JU A7d3
A7d8: CLR
A #sx_SetClear
A #sx_ResetClear
A #sx_SetPreset
A #sx_ResetPreset
= L 26.2
A #sx_SetTare
NOT
A L 26.2
JCN A7d9
L #TareValue
T #sr_Tare
SET
= #sx_SetTare
JU A7d3
A7d9: CLR
A #sx_SetTare
JCN A7d3
CLR
= #sx_SetClear
= #sx_ResetClear
= #sx_SetPreset
= #sx_ResetPreset
= #sx_SetTare
= #PresetReq
A7d3: CLR
A #ClearReq
JCN A7db
A #sx_SetClear
NOT
= L 26.2
A #sx_ResetClear
NOT
A L 26.2
= L 26.2
A #sx_SetTare
NOT
A L 26.2
JCN A7dc
L W#16#1
T #Data_Out.ClearReq
SET
= #sx_SetClear
JU A7db
A7dc: CLR
A #sx_ResetClear
NOT
A #sx_SetClear
= L 26.2
A #sx_SetTare
NOT
A L 26.2
JCN A7de
L W#16#0
T #Data_Out.ClearReq
SET
= #sx_ResetClear
JU A7db
A7de: CLR
A #sx_SetClear
A #sx_ResetClear
= L 26.2
A #sx_SetTare
NOT
A L 26.2
JCN A7df
L #TareValue
T #sr_Tare
SET
= #sx_SetTare
JU A7db
A7df: CLR
A #sx_SetTare
JCN A7db
CLR
= #sx_SetClear
= #sx_ResetClear
= #sx_SetPreset
= #sx_ResetPreset
= #sx_SetTare
= #ClearReq
A7db: L #sr_Tare
T #Data_Out.TareValue
L LD 0
T LD 28
L LD 4
T LD 32
L LW 8
T LW 36
L LD 10
T LD 38
L LD 14
T LD 42
L LW 18
T LW 46
TAR2 LD 48
UC "BLKMOV"
P#L 28.0
P#L 22.0
P#L 38.0
LAR2 LD 48
L #iTemp
A L 26.1
SAVE
BE
 
That is not source code. Generate source code for the block and then export the source and attach.

srca.jpg
 
You have to create the source files from the FB.
This gives some pointers on how to do it.

Without the source we can't see the local variables and interface configured for the FB and as such this particular bit of code (and another below)
is somewhat meaningless.


T LD 28
L DINO
T LW 32
TAR2
+ L#384
T LD 34
L LD 28
T LD 0
L LD 32
T LD 4
L LW 36
T LW 8
L DID [AR2,P#0.0]
T LD 10
L DID [AR2,P#4.0]
T LD 14
L DIW [AR2,P#8.0]
T LW 18
L LW 2
T LW 12
L LD 10
T LD 28
L LD 14
T LD 32
L LW 18
T LW 36
L LD 0
T LD 38
L LD 4
T LD 42
L LW 8
T LW 46
 
We couldn’t find the code back to archive project, now time to upgrade and we need the source code, the “generate scl” code, did the I/Os only
 
Help with program STL convert SLC

Hello everyone,

I am migrating a program from STL to SCL via S7-1200 portal, I would like you to help me by converting these lines of code.

Cheers,


L DBW 4
L DBW 6
-I
JM M001
JP M002
JU M003
M001: L DBW 10
-I
JM M004
JU M003
M002: L DBW 12
-I
JP M004
M003: L DBW 4
L DBW 8
-I
JM M005
JP M006
JU M007
M005: L DBW 10
-I
JM M004
JU M007
M006: L DBW 12
-I
JP M004
M007: L DBW 4
L DBW 6
+I
L DBW 8
+I
T DBW 14
L DBW 14
SRW 1
T DBW 16
L DBW 20
+I
T DBW 24
L DBW 0
S C 9
S C 10
L DBW 2
S C 20
S C 21
R M 0.3
R M 2.0
R M 2.1
R M 2.2
R M 2.3
R M 2.4
R M 2.5
M004: NOP 0
 
In another thread someone suggested a more direct route; you should try that first.


Here is an awkward guess using what I think can be called transliteration; it only works because there are no reverse jumps. I don't understand addressing in STL at all; you are on your own for the VAR...END_VAR blocks. No warranty expressed or implied.

I would use this as a start to add SCL comments and understand what the program is doing, then re-write the SCL again using that understanding.

L DBW 4 ACC1 := DBW4;
L DBW 6 ACC2 := ACC1; ACC1 := DBW6;
-I ACC1 := ACC2 - ACC1;

JM M001 IF ACC1 < 0 THEN next := 1; ELSE
JP M002 IF ACC1 > 0 THEN next := 2;
JU M003 ELSE next := 3; END_IF;
END_IF;

M001: L DBW 10 IF next = 1 THEN ACC2 := ACC1; ACC1 := DBW10;
-I ACC1 := ACC2 - ACC1;
JM M004 IF ACC1 < 0 THEN next := 4;
JU M003 ELSE next := 3; END_IF;
END_IF;

M002: L DBW 12 IF next = 2 THEN ACC2 := ACC1; ACC1 := DBW12;
-I ACC1 := ACC2 - ACC1;
JP M004 IF ACC1 > 0 THEN next := 4;
ELSE next := 3; END_IF; (* Drop through to M003: if ACC1 is not positive *)

M003: L DBW 4 IF next = 3 THEN ACC2 := ACC1; ACC1 := DBW4;
L DBW 8 ACC2 := ACC1; ACC1 := DBW4;
-I ACC1 := ACC2 - ACC1;
JM M005 IF ACC1 < 0 THEN next := 5;
JP M006 ELSE IF ACC1 > 0 THEN next := 6; END_IF;
JU M007 ELSE next := 7; END_IF;
END_IF;

M005: L DBW 10 IF next = 5 THEN ACC2 := ACC1; ACC1 := DBW10;
-I ACC1 := ACC2 - ACC1;
JM M004 IF ACC1 < 0 THEN next := 4;
JU M007 ELSE next := 7; END_IF;
END_IF;

M006: L DBW 12 IF next = 6 THEN ACC2 := ACC1; ACC1 := DBW12;
-I ACC1 := ACC2 - ACC1;
JP M004 IF ACC1 > 0 THEN next := 4;
ELSE next := 7; END_IF; (* Drop through to M007: if ACC1 is not positive *)
END_IF;

M007: L DBW 4 IF next = 7 THEN ACC2 := ACC1; ACC1 := DBW4;
L DBW 6 ACC2 := ACC1; ACC1 := DBW6;
+I ACC1 := ACC2 + ACC1;
L DBW 8 ACC2 := ACC1; ACC1 := DBW8;
+I ACC1 := ACC2 + ACC1;
T DBW 14 DBW14 := ACC1;
L DBW 14 ACC2 := ACC1; ACC1 := DBW14;
SRW 1 ACC1 := (ACC1 & 16:FFFE) / 2;
T DBW 16 DBW16 := ACC1;
L DBW 20 ACC2 := ACC1; ACC1 := DBW20;
+I ACC1 := ACC2 + ACC1;
T DBW 24 DBW24 := ACC1;
L DBW 0 ACC2 := ACC1; ACC1 := DBW0;
S C 9 C9 := TRUE; (* Boolean ; I assume RLO is 1? *)
S C 10 C10 := TRUE;
L DBW 2 ACC2 := ACC1; ACC1 = DBW2;
S C 20 C20 := TRUE;
S C 21 C21 := TRUE;
R M 0.3 M0_3 := FALSE
R M 2.0 M2_0 := FALSE
R M 2.1 M2_1 := FALSE
R M 2.2 M2_2 := FALSE
R M 2.3 M2_3 := FALSE
R M 2.4 M2_4 := FALSE
R M 2.5 M2_5 := FALSE
next := 4; END_IF; (* Drop through to M004: *)

M004: NOP 0 IF next = 4 THEN
...
END_IF;



 

Similar Topics

Could someone help me to convert following from STL to SCL? AN #PV_EXT_S JC MEAS L #PV_EXT L 1.000000e+000...
Replies
9
Views
2,643
Hi All, In FB and FC that are compiled it to STL language. When i open it those FB and FC, i have noticed that every start and End of code is...
Replies
15
Views
6,724
Hi all, i recently purchased a second hand copy of hans bergers scl/stl book,but unfortunately the floppy disc supplied with the...
Replies
2
Views
4,102
Hi Siemens Experts, I am hoping someone can shed some light on my issue. I have uploaded the code from a S7-300 (317-2PN/DP) using Step 7...
Replies
9
Views
591
I'm having trouble trying to convert this code to ladder, anyone able to help me? A M4.0 A M4.1 A M117.0 AN M17.7 A ( A I38.6 AN I3.7 O ( A M4.5...
Replies
8
Views
1,167
Back
Top Bottom