11/10/2010 1:15 PM | |
Joined: 1/17/2007 Last visit: 9/30/2024 Posts: 1546 Rating: (537)
|
Easy:- In your TEMP definition area add:- pDB : ANY; // DB address ANY pointer - used for accessing DB data pAny AT pDB : STRUCT // Diassembled ANY pointer structure S7Code : BYTE; // Code for S7 (fixed at 16#10) DataType : BYTE; // Code for data type Length : INT; // Repetition factor = Send/receive length DBNumber : INT; // Data block Number MemoryArea : BYTE; // Specified memory area ByteAddressMSB : BYTE; // Byte address most significant bits ByteAddressLSB : WORD; // Byte address least significant bits END_STRUCT; Then you build your ANY pointer up with your details. The S7Code member is fixed at 16#10. The DataType member is set to your desired data type (16#01=BOOL, 16#02=BYTE, 16#03=CHAR, 16#04=WORD, 16#05=INT, 16#06=DWORD, 16#07=DINT, 16#08=REAL, 16#09=DATE, 16#0A=TOD, 16#0B=TIME, 16#0C=S5TIME, 16#0E=DT, 16#13=STRING). The Length member is set to the amount of data to access. The DBNumber member is set to your DB number. The MemoryArea is the code for the area of the PLC memory to wish to access (16#81=Input area (I), 16#82=Output area (O), 16#83=Bit memory area (M), 16#84=Shared Data Block (DB), 16#85=Instance Data Block (DI), 16#86=Local data (L stack), 16#87=Previous local data (V). The ByteAddressLSB / ByteAddressMSB are the address of the memory you wish to access. So for your particular case the code would be:- pAny.S7Code := 16#10; pAny.DataType := 16#02; pAny.Length := 48; pAny.DBNumber := 125; pAny.MemoryArea := 16#84; pAny.ByteAddressMSB := 0; pAny.ByteAddressLSB := 0; Now the pDB ANY pointer is setup to access DB 125 at address 0.0 with data length 48. If you need a different address then pAny.ByteAddressLSB should be modifed to your n.n address. E.G. to access DBX 5.4 the value would be (5 * 8) + 4 = 44. Generally, you can leave pAny.ByteAddressMSB at zero unless you are using very large DB's (greater than 8192 bytes). If you wish to do this, please tell me as you will need a bit more to do that. I didn't include it here as it could possibly cause confusion. Once built up, you can use your ANY pointer as you would with any other ANY pointer (e.g. in BLKMOV etc.) |
Programming today is the race between software engineers building bigger and better idiot proof programs, and the universe producing bigger and better idiots. |
|
This contribution was helpful to32 thankful Users
|
11/10/2010 1:42 PM | |
Posts: 87 Rating: (1) |
Big thank you! It is very good example....I will try touse this.... |
6/23/2011 4:15 AM | |
Posts: 11 Rating: (0) |
Maybe , you can use the system function BLKMOV to get it . |
Follow us on