Obsidean_VM/04-SIDEL/06 - E5.007363 - Modifica O.../Source/source/REPLACE_Mod.md

3.6 KiB

// Block Type: FC
// Block Number: 32
// Original Network Languages: STL

FUNCTION "REPLACE_Mod" : String[254]
{ S7_Optimized_Access := 'TRUE' }
VERSION : 0.1

VAR_INPUT
  IN1 : String[254];
  IN2 : String[254];
  L : Int;
  P : Int;
END_VAR

VAR_TEMP
  w_Temp : Word;
  w_DBNR1 : Word;
  w_DBNR2 : Word;
  d_AR_IN1 : DWord;
  d_AR_IN2 : DWord;
  yAnzChar : Byte;
  yMaxZiel : Byte;
  yAnzIN1 : Byte;
  yAnzIN2 : Byte;
  yLoopCnt : Byte;
  b_Fehl : Bool;
  b_P_Null : Bool;
  b_L_Null : Bool;
  b_PgAnz1 : Bool;
END_VAR

BEGIN

  // Network 1: Merker L=0 (Original Language: STL)
  //   Adressen Quelle/Ziel bestimmen

  // --- BEGIN STL Network 1 ---
   
     	SET
     	SAVE
     	L	_ERR_CONST_
     	LAR1_ACCU1
     	L	NoneW[AR1,P#0.0]
     	T	"w_DBNR1"
     	AUF	DBB[AR?,P#0.0]
     	L	NoneD[AR1,P#2.0]
     	LAR1_ACCU1
     	T	"d_AR_IN1"
     	L	NoneB[AR1,P#0.0]
     	T	"yAnzIN1"
     	L	_ERR_CONST_
     	LAR2_ACCU1
     	L	NoneW[AR2,P#0.0]
     	T	"w_DBNR2"
     	AUF	DBB[AR?,P#0.0]
     	L	NoneD[AR2,P#2.0]
     	LAR2_ACCU1
     	T	"d_AR_IN2"
     	L	NoneB[AR2,P#0.0]
     	T	"yAnzIN2"
     	L	_ERR_CONST_
     	LAR2_ACCU1
     	L	NoneW[AR2,P#0.0]
     	T	"w_Temp"
     	AUF	DIB[AR?,P#0.0]
     	L	NoneD[AR2,P#2.0]
     	OD	DW#16#0100_0000
     	LAR2_ACCU1
     	L	NoneB[AR2,P#0.0]
     	T	"yMaxZiel"
     
     	L	0
     	T	"yAnzChar"
     	CLR
     	=	"b_L_Null"
     	=	"b_PgAnz1"
     
     	L	"L"
     	GT_I
     	CAC
     	L	"P"
     	ADD_I
     	O	_Statusword_?
     	=	"b_Fehl"
     	JC	AZIL
     
     	L	"P"
     	L	0
     	EQ_I
     	=	"b_P_Null"
     	JC	QUE2
     
     	L	"L"
     	EQ_I
     	=	"b_L_Null"
     	L	"yAnzIN1"
     	JC	LCNT
     
     	L	"P"
     	L	"yAnzIN1"
     	GT_I
     	=	"b_PgAnz1"
     	JC	LCNT
     	CAC
     	DEC	1
     
     LCNT:   		L	"yMaxZiel"
     	GT_I
     	S	"b_Fehl"
     	JC	VGL1
     	CAC
     VGL1:   		L	0
     	ADD_I
     	JZ	QUE2
     	T	"yAnzChar"
     
     	AUF	DBB[AR?,P#0.0]
     LOP1:   		T	"yLoopCnt"
     	L	NoneB[AR1,P#2.0]
     	T	NoneB[AR2,P#2.0]
     	ADDAR1	P#1.0
     	ADDAR2	P#1.0
     	L	"yLoopCnt"
     	LOOP	LOP1
     	TAR1_ACCU1
     	T	"d_AR_IN1"
     QUE2:   		O	"b_L_Null"
     	O	"b_Fehl"
     	JC	AZIL
     
     	AUF	DBB[AR?,P#0.0]
     	L	"d_AR_IN2"
     	LAR1_ACCU1
     	L	"yMaxZiel"
     	L	"yAnzChar"
     	SUB_I
     	L	"yAnzIN2"
     	GE_I
     	JC	VGL2
     	S	"b_Fehl"
     	CAC
     VGL2:   		L	0
     	ADD_I
     	T	"w_Temp"
     	JZ	QUE3
     	L	"yAnzChar"
     	ADD_I
     	T	"yAnzChar"
     	L	"w_Temp"
     LOP2:   		T	"yLoopCnt"
     	L	NoneB[AR1,P#2.0]
     	T	NoneB[AR2,P#2.0]
     	ADDAR1	P#1.0
     	ADDAR2	P#1.0
     	L	"yLoopCnt"
     	LOOP	LOP2
     
     QUE3:   		A	"b_PgAnz1"
     	JC	AZIL
     
     	L	"d_AR_IN1"
     	L	"L"
     	SLW	3
     	ADD_D
     	LAR1_ACCU1
     
     	AUF	DBB[AR?,P#0.0]
     	L	"yAnzIN1"
     	A	"b_P_Null"
     	JC	PNUL
     	L	"P"
     	DEC	1
     	SUB_I
     PNUL:   		L	"L"
     	SUB_I
     	JMZ	AZIL
     	T	"w_Temp"
     	L	"yMaxZiel"
     	L	"yAnzChar"
     	SUB_I
     	L	"w_Temp"
     	GE_I
     	JC	VGL3
     	S	"b_Fehl"
     	CAC
     VGL3:   		L	0
     	ADD_I
     	T	"w_Temp"
     	JZ	AZIL
     	L	"yAnzChar"
     	ADD_I
     	T	"yAnzChar"
     	L	"w_Temp"
     LOP3:   		T	"yLoopCnt"
     	L	NoneB[AR1,P#2.0]
     	T	NoneB[AR2,P#2.0]
     	ADDAR1	P#1.0
     	ADDAR2	P#1.0
     	L	"yLoopCnt"
     	LOOP	LOP3
     
     AZIL:   		TAR2_ACCU1
     	L	"yAnzChar"
     	SLW	3
     	SUB_D
     	LAR2_ACCU1
     	L	"yAnzChar"
     	T	NoneB[AR2,P#1.0]
     	AN	"b_Fehl"
     	JC	ENDE
     	CLR
     	SAVE
     ENDE:   		BE
   
  // --- END STL Network 1 ---

END_FUNCTION