[r4]: / trunk / SM3_Drive_RaspiStepper / SM3_Drive_RaspiStepper / Function Blocks / StepperControl / svnobj  Maximize  Restore  History

Download this file

73 lines (71 with data), 18.2 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
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
IF hIecTask = SysTypes.RTS_INVALID_HANDLE THEN
	RETURN;
END_IF
CASE eState OF
StepperControl_STATE.INIT:
//Set IO-Pins
	IF eControlType = StepperControlType.DIRECT THEN 
		IF iA > 0 THEN
			GVL.GPIO.aeType[iA]      := GPIOType.O;
		END_IF
		IF iA_ > 0 THEN
			GVL.GPIO.aeType[iA_]     := GPIOType.O;
		IF iB > 0 THEN
			GVL.GPIO.aeType[iB]      := GPIOType.O;
		IF iB_ > 0 THEN
			GVL.GPIO.aeType[iB_]     := GPIOType.O;
		GVL.GPIO.SetType();
	ELSE
		IF iPuls > 0 THEN
			GVL.GPIO.aeType[iPuls]   := GPIOType.O;
		IF iDir > 0 THEN
			GVL.GPIO.aeType[iDir]    := GPIOType.O;
		IF iDisable > 0 THEN
			GVL.GPIO.aeType[iDisable] := GPIOType.O;
		IF iEnable > 0 THEN
			GVL.GPIO.aeType[iEnable] := GPIOType.O;
		xHalfStep := FALSE;
		gvl.GPIO.SetPulsDir(i := iDir, on := xDir);
	END_IF
	
//Get Task-Handle
	SysTask.SysTaskGetCurrent(ADR(hTask));
	IF hTask <> SysTypes.RTS_INVALID_HANDLE THEN
		eState := StepperControl_STATE.OPERATION;
	t := LTIME();
StepperControl_STATE.OPERATION:	
// measure time since last call
	tAlt := t;
	tCycle := t - tAlt;
	IF lrFreq <> 0 THEN
		IF lrMaxFreq > 0 THEN
{a9ed5b7e-75c5-4651-af16-d2c27e98cb94}
VAR_INPUT
	eControlType:StepperControlType;//control type : direct (A, A_,B, B_) or puls/dir
	iA, iA_, iB, iB_ : INT := -1;	//GPIO pins for direct control
	iDisable, iEnable: INT :=-1;	//GPIO pins for power control
	xHalfStep: BOOL;				//Motor takes half steps not full steps if True
END_VAR
	tCycle: LTIME;
VAR
	eState: StepperControl_STATE := StepperControl_STATE.INIT;
	dwCounterStep: DWORD;
	hTask: SysTypes.RTS_IEC_HANDLE := SysTypes.RTS_INVALID_HANDLE;
//current Byte of the Array
//GPIO-Assignments
	xPuls ,xDir : BOOL := TRUE;
	t: LTIME;
	stSleepUs: SYSTIME;
//step time 
//set time for the task and last value
	udiSetTimeSum: UDINT;
	lrLastFreq: LREAL;
	pApp : POINTER TO APPLICATION;
	sTaskName: STRING := 'Task_StepperControl';
	uiInstance : UINT;
	uiInstanceCounter: UINT;
	udiResult: RTS_IEC_RESULT;
	xStep: BOOL;
2056
{8e575c5b-1d37-49c6-941b-5c0ec7874787}
ChildObjectGuids
AddAttributeSubsequent