[r84]: / trunk / IoDrvMEGAIO / MEGAIO / MEGAIO / svnobj  Maximize  Restore  History

Download this file

52 lines (50 with data), 4.8 kB

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
FUNCTION_BLOCK MEGAIO EXTENDS i2c
VAR_INPUT
	udtConfig : IoDrvConfig; // Configuration
	udtOutput : IoDrvOutput; // Contains DO/AO
END_VAR
VAR_OUTPUT	
	udtInput : IoDrvInput; // Contains DI/AI
VAR
	timer: TON := (IN:=TRUE);
	dacRawValue: UINT :=0;
	relayRaw: USINT :=0;
	odRaw: USINT := 0;
	odLastState: ARRAY[0..3] OF BOOL;
	gpioDirRaw: USINT := 16#FF;
	gpioOutLastState: ARRAY[0..5] OF BOOL;
	_byHardwareAddress: BYTE;
	//StackLevel: USINT;
	_AfterReadInputs : UINT;
	_BeforeWriteOutputs : UINT;
	_Initialize : UINT;
VAR_TEMP	
	i, usi: USINT;
	buff: ARRAY[0..2] OF USINT;	
SUPER^();
CASE _iState OF
0:	
	IF usiAddress = 0 THEN
		usiAddress := _byHardwareAddress;
	END_IF
	IF usiAddress < 16#31 OR  usiAddress > 16#34 THEN
		usiAddress := 16#31;
	//usiAddress := 16#31 + StackLevel;
	IF SUPER^.init() THEN
		_iState := 5;
	END_IF	
5:	
	Timer.pt := T#70MS;
	buff[0] := MEGAIO_DAC_ADD;
	buff[1] := 0;
	buff[2] := 0;
	// init DAC 0.0V
  	write(ADR(buff), 3);
	// init all relay off
	write8(0, relayRaw);
	// set all gpio input
	write8(GPIO_DIR_ADD, gpioDirRaw);
	// set all open drain
	write8(MEGAIO_OD_ADD, odRaw);
	
	_iState := 10;
END_CASE