Diff of /trunk/I2C_Template.library.md [000000] .. [r13]  Maximize  Restore

Switch to side-by-side view

--- a
+++ b/trunk/I2C_Template.library.md
@@ -0,0 +1,75 @@
+---
+
+~~~ST
+FUNCTION_BLOCK I2CTemplate EXTENDS i2c
+VAR_INPUT
+    lrMinDistance: LREAL;
+    lrMaxDistance: LREAL;
+END_VAR
+VAR_OUTPUT
+    lrDistance: LREAL;
+    xValid: BOOL;
+    xNewMeasurement: BOOL;
+END_VAR
+VAR
+    timer: TON;
+END_VAR
+
+~~~
+~~~ST
+xNewMeasurement := FALSE;
+
+SUPER^();
+
+CASE _iState OF
+0:
+	IF usiAddress = 0 THEN
+		usiAddress := 16#70;
+	END_IF
+	IF SUPER^.init() THEN
+		_iState := 5;
+	END_IF	
+
+5:	
+	Timer.pt := T#70MS;
+	_iState := 10;	
+	xValid := FALSE;
+END_CASE
+~~~
+---
+~~~ST
+METHOD AfterReadInputs: INT
+VAR
+    Buffer: ARRAY [..] OF ;
+    len: DINT;
+END_VAR
+
+~~~
+~~~ST
+SUPER^.AfterReadInputs();
+
+IF _iState = 10 THEN
+	timer(IN:=TRUE);
+	IF timer.Q THEN	
+		len := Read(ADR(Buffer), 4);
+		IF len = 4 THEN
+			lrDistance := BYTE_TO_LREAL(Buffer[2])*0.01 + BYTE_TO_LREAL(Buffer[3]) * 2.56;
+			xValid := (lrDistance >= lrMinDistance AND lrDistance <= lrMaxDistance);
+			xNewMeasurement := TRUE;
+		ELSE
+			xValid := FALSE;
+		END_IF
+		Write8(0, 16#51);	//new measurement
+		timer(IN:=FALSE);
+	END_IF		
+END_IF
+~~~
+---
+~~~ST
+METHOD BeforeWriteOutputs: INT
+
+~~~
+~~~ST
+SUPER^.BeforeWriteOutputs();
+
+~~~