#readdi #read_di #pointers #### CreateAnyPointer: #Pointers #CreateAnyPointer ![[Pasted image 20231017112006.png]] FB905 - Supervisor Henkel ```pascal L P##o_anyAddress LAR1 // I prepare the ANY parameter of the pointer L WORD#16#1002 // h10 Standard Siemens, 02 = Byte T W [ AR1 , P#0.0 ] L #i_udiLength // Byte number to copy T W [ AR1 , P#2.0 ] L #i_DB // Reference DB T W [ AR1 , P#4.0 ] L #i_udiStartByte SLD 3 L P#DBX0.0 OW T D [ AR1 , P#6.0 ] ``` #### FC Read DI: #FCReadDI #Pointers ```pascal L #Address L 0 ==I SPB fine L #Address L 1 ==I SPB fin2 L #Address L 10 /I T "MD240" L "MW242" SLW 3 L "MW240" +D T #punt U E [ #punt] = #Input BEA fine: NOP 0 R #Input BEA fin2: NOP 0 S #Input BEA ``` ```pascal U #Mot_DB.CFG_VIS_SA SPBN SA CALL "FC Read DI" Address :=#Mot_DB.CFG_Add_Signal_SA Input :=#Mot_DB.IN_Signal_SA SA: NOP 0 ``` The address is given as an integer 235 for example. Then this FC convert the integer as a pointer to E23.5 and return the input as a Return. ```pascal IF #Address = 0 THEN #Input := FALSE; #ReadDI := FALSE; RETURN; END_IF; IF #Address = 1 THEN #Input := TRUE; #ReadDI := TRUE; RETURN; END_IF; #DMem := INT_TO_DWORD(#Address / 10); #punt := SHL( IN:=#WMem[1],N:=3) + #WMem[0]; ``` ```pascal U E [ #punt] = #Input = #ReadDI ``` Controlar lo siguiente: ```pascal #byte1 := BYTE_TO_DWORD(PEEK(area := 16#1, dbNumber := 0, byteOffset := #InterfaceParam1 + 1)); ``` ![[Pasted image 20231019093044.png]] #### Ultima version: *** ```pascal // FC Read DI: Reads peripheral inputs from the Input parameter. Converts the UINT XXXXX to XXXX.X and returns the XXXX.X value, except // in the special cases where the addresses are 0 and 1. // // FC Read DI: Legge gli input periferici dal parametro Input. Converte l'UINT XXXXX in XXXX.X e restituisce il valore XXXX.X, eccetto // nei casi speciali in cui gli indirizzi sono 0 e 1. CASE #Address OF 0: #Input := FALSE; 1: #Input := TRUE; ELSE #Input := PEEK_BOOL(area := 16#81, dbNumber := 0, byteOffset := (#Address / 10), bitOffset := UINT_TO_INT(#Address MOD 10)); END_CASE; ```