Új hozzászólás Aktív témák
-
Szirty
őstag
Helló DP_Joci!
"Az ANY pointeres dolog az érdekes lehet.
Van esetleg egy példád erre, megpróbáltam kreálni egy ilyen pointert, de nem igazán tudok DB-re hivatkozni vele."Egyszer csináltam olyat, hogy különböző számú egyforma szerkezető DB-kből másoltam adatokat, ahol a DB számát a program kalkulálta ki. Itt ANY pointertípusban kellett összeállítani a címet, mert a másolás BLKMOV hívással történt, aminek ANY kell.
Persze hogy nem találom.Ha megnézed az ANY felépítését:

Akkor hamar kiderül hogyan kell összesakkozni egy címet.
Csak arra kell nagyon vigyázni nehogy mellécímezzen az ember. Az indirekt címzés már csak ilyen. Jó nagyokat lehet vele szívni és alaposan tesztelni kell.A helpben van példa az "Example of the Data Type ANY" címszó alatt.
FUNCTION FC1: INT
TITLE = Transfer and handling of ANY pointers
// Task :
// This block should copy a source area to a target area using
// SFC20 (BLKMOV) where the source is put together from
// a number of individual parameters to form an Any pointer
// and the target is already specified as an Any pointer.
AUTHOR: SIEMENS
FAMILY: TOOLS
NAME: ANY_PTR
VERSION: 00.01
VAR_INPUT
SRC_DB : INT;
SRC_Byte : INT;
SRC_Type : BOOL;
SRC_Len : INT;
DEST_Any : ANY;
END_VAR
VAR_TEMP
T_AR1 : DWORD;
T_AR2 : DWORD;
T_SRC_Any : ANY;
T_DEST_Any : ANY;
Count : INT;
SFC_Ret_Val: INT;
END_VAR
BEGIN
NETWORK
TITLE = Save the contents of the address registers AR1 and AR2
TAR1 T_AR1;
TAR2 T_AR2;
NETWORK
TITLE = Put together and check source area
LAR1 P#T_SRC_Any; //Load start address of the source Any
//pointer into AR1
L B#16#10; //Enter syntax ID in the Any pointer
T LB [AR1, P#0.0];
L B#16#2; //Load area type BYTE
AN SRC_Type; //If BYTE was chosen, then
//jump to entry
JC Tran;
L B#16#4; //Otherwise load area type WORD
Tran: T LB [AR1, P#1.0]; //and store in the Any pointer
L SRC_Len; //Enter number of bytes/words to be
//transferred
T LW [AR1, P#2.0];
L SRC_DB; //Enter source DB number
T LW [AR1, P#4.0];
L 0; //If source DB number = 0 then
//transfer from bit memory area,
==I ; //otherwise from a DB
JC Mem;
L P#DBX0.0; //Load area pointer in data block
JU Offs;
Mem: L P#M0.0; //Load area pointer in bit memory area
Offs: L SRC_Byte; //Load copy of the number of the first bytes to be copied SLD 3; //Convert to pointer format
+D ; //Add to area pointer
T LD [AR1, P#6.0]; //Enter result in ANY pointer
NETWORK
TITLE = Enter and check the target Any pointer
L P#DEST_Any; //Place address of Any pointer in AR1
LAR1 ;
L B#16#2; //If the area type of the transferred
//Any pointer
L B [AR1, P#1.0]; //= byte or = word, the jump
//follows
==I ;
O( ;
L B#16#4;
==I ;
) ;
JC Copy;
L W#16#80FF; //Otherwise load error code
T RET_VAL; //Transfer to the caller
JU End; //Finish block processing
Copy: LAR2 P#T_DEST_Any; //Load address of temp. Any pointer
L 5; //5 words must be copied
Back: T Count;
L W [AR1, P#0.0]; //Move the Any pointer
//as an input variable to
T LW[AR2, P#0.0]; //the local data
+AR1 P#2.0;
+AR2 P#2.0;
L Count;
LOOP Back;
NETWORK
TITLE = Call SFC20 (BLKMOV)
CALL SFC20
(
SRCBLK := T_SRC_Any,
RET_VAL := SFC_Ret_Val,
DSTBLK := T_DEST_Any
);
NETWORK
TITLE = Pass on return value of SFC
L SFC_Ret_Val;
T RET_VAL;
NETWORK
TITLE = Restore the contents of the address registers AR1 and AR2
End: LAR1 T_AR1;
LAR2 T_AR2;
END_FUNCTION
DATA_BLOCK DB10
TITLE = Copy_In
AUTHOR: SIEMENS
FAMILY: EXAMPLE
NAME: COPY_IN
VERSION: 00.01
STRUCT
test: ARRAY[0..29] of BYTE;
END_STRUCT;
BEGIN
END_DATA_BLOCK
DATA_BLOCK DB11
TITLE = Copy_Out
AUTHOR: SIEMENS
FAMILY: EXAMPLE
NAME: COPY_OUT
VERSION: 00.01
STRUCT
test: ARRAY[0..29] of BYTE;
END_STRUCT;
BEGIN
END_DATA_BLOCK
ORGANIZATION_BLOCK OB1
TITLE = Cycle
AUTHOR: SIEMENS
FAMILY: EXAMPLE
NAME: OB_CYC
VERSION: 00.01
VAR_TEMP
OB1_System: array [1..20] of byte;
Src_Db : INT;
Src_Byte : INT;
Src_Type : BOOL;
Src_Len : INT;
END_VAR
BEGIN
NETWORK
TITLE = First call example for FC1
// This call for FC1 copies 5 words from memory byte 33
// to DB10 from data byte 3. This means the memory
// words 33, 35, 37, 39, and 41 are copied to the data
// words 3, 5, 7, 9, and 11 of DB10.
L 0;
T Src_Db;
L 33;
T Src_Byte;
Set ;
= Src_Type;
L 5;
T Src_Len;
CALL FC1
(
SRC_DB := Src_Db,
SRC_Byte := Src_Byte,
SRC_Type := Src_Type,
SRC_Len := Src_Len,
DEST_Any := P# DB10.DBX 3.0 BYTE 20,
RET_VAL := MW100
);
NETWORK
TITLE = Second call example for FC1
// This call for FC1 copies 7 bytes from DB11 from
// data byte 13 to the process output image from
// QB99. This means the data bytes 13 to 19
// of DB11 are copied to the output bytes 99 - 105.
L 11;
T Src_Db;
L 13;
T Src_Byte;
CLR ;
= Src_Type;
L 7;
T Src_Len;
CALL FC1
(
SRC_DB := Src_Db,
SRC_Byte := Src_Byte,
SRC_Type := Src_Type,
SRC_Len := Src_Len,
DEST_Any := P# Q 99.0 WORD 5,
RET_VAL := MW100
);
END_ORGANIZATION_BLOCK
Új hozzászólás Aktív témák
- NVIDIA GeForce RTX 5070 / 5070 Ti (GB205 / 203)
- Futás, futópályák
- Milyen billentyűzetet vegyek?
- Kormányok / autós szimulátorok topikja
- 5.1, 7.1 és gamer fejhallgatók
- Okos Otthon / Smart Home
- Nem kilincselhet tovább a Tesla Kínában
- Apple iPhone 17 Pro Max – fennsík
- Samsung kuponkunyeráló
- ldave: New Game Blitz - 2025
- További aktív témák...
- IPhone 12 Pro 128GB gyári független Silver új akku
- Apple watch Series 9 45mm stainless steel bontatlan! 1 év Apple jótállás
- Apple watch Series 10 46mm cellular jet black bontatlan 1 év Apple JÓTÁLLÁS AKCIÓ!
- Szép állapotú iPad Pro M1 256GB wifi + cellular. Kijelző karcmentes. Kamera résznél mintha lenne egy
- G.SKILL Trident Z RGB 64GB (2x32GB) DDR5 6000MHz CL30 - XMP - 99 hó garancia
- ÁRGARANCIA!Épített KomPhone i5 10400F 16/32/64GB RAM RTX 3060 12GB GAMER PC termékbeszámítással
- Apple iPhone 12 Mini 64GB, Kártyafüggetlen, 1 Év Garanciával
- GYÖNYÖRŰ iPhone 13 mini 128GB Blue -1 ÉV GARANCIA - Kártyafüggetlen, MS3847
- GYÖNYÖRŰ iPhone 12 mini 64GB Purple -1 ÉV GARANCIA - Kártyafüggetlen, MS3851
- Dell Precision 5520 15,6" FHD, Xeon E3-1505M v5, 16GB RAM, Quadro 4GB VGA, SSD, jó akku, számla, gar
Állásajánlatok
Cég: Laptopszaki Kft.
Város: Budapest
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest

