Skip to content
GitLab
Menu
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
Martin Heyden
LabProcesses.jl
Commits
6eee99e0
Commit
6eee99e0
authored
Aug 20, 2017
by
Fredrik Bagge Carlson
Browse files
Update file structure
parent
74386a8a
Changes
3
Hide whitespace changes
Inline
Side-by-side
src/LabProcesses.jl
View file @
6eee99e0
module
LabProcesses
export
AbstractProcess
,
PhycicalProcess
,
SimulatedProcess
,
BallAndBeam
,
BallAndBeamSimulator
,
BallAndBeamType
export
num_outputs
,
num_inputs
,
outputrange
,
inputrange
,
isstable
,
sampletime
,
control
,
measure
using
ControlSystems
include
(
"interface.jl"
)
include
(
"interface_implementations/ballandbeam.jl"
)
include
(
"utilities.jl"
)
include
(
"controllers.jl"
)
# Interface specification ===================================================================
abstract type
AbstractProcess
end
abstract type
PhycicalProcess
<:
AbstractProcess
end
abstract type
SimulatedProcess
<:
AbstractProcess
end
num_outputs
(
p
::
AbstractProcess
)
=
error
(
"Function not implemented for
$
(typeof(p))"
)
num_inputs
(
p
::
AbstractProcess
)
=
error
(
"Function not implemented for
$
(typeof(p))"
)
outputrange
(
p
::
AbstractProcess
)
=
error
(
"Function not implemented for
$
(typeof(p))"
)
inputrange
(
p
::
AbstractProcess
)
=
error
(
"Function not implemented for
$
(typeof(p))"
)
isstable
(
p
::
AbstractProcess
)
=
error
(
"Function not implemented for
$
(typeof(p))"
)
sampletime
(
p
::
AbstractProcess
)
=
error
(
"Function not implemented for
$
(typeof(p))"
)
control
(
p
::
AbstractProcess
,
u
)
=
error
(
"Function not implemented for
$
(typeof(p))"
)
measure
(
p
::
AbstractProcess
)
=
error
(
"Function not implemented for
$
(typeof(p))"
)
initialize
(
p
::
AbstractProcess
)
=
error
(
"Function not implemented for
$
(typeof(p))"
)
finalize
(
p
::
AbstractProcess
)
=
error
(
"Function not implemented for
$
(typeof(p))"
)
# Interface implementation Ball And Beam ====================================================
struct
BallAndBeam
<:
PhysicalProcess
h
::
Float64
end
BallAndBeam
()
=
BallAndBeam
(
0.01
)
struct
BallAndBeamSimulator
<:
SimulatedProcess
h
::
Float64
end
BallAndBeamSimulator
()
=
BallAndBeamSimulator
(
0.01
)
const
BallAndBeamType
=
Union
{
BallAndBeam
,
BallAndBeamSimulator
}
num_outputs
(
p
::
BallAndBeamType
)
=
2
num_inputs
(
p
::
BallAndBeamType
)
=
1
outputrange
(
p
::
BallAndBeamType
)
=
[(
-
10
,
10
),(
-
1
,
1
)]
# Beam angle, Ball position
inputrange
(
p
::
BallAndBeamType
)
=
[(
-
10
,
10
)]
isstable
(
p
::
BallAndBeamType
)
=
false
sampletime
(
p
::
BallAndBeamType
)
=
p
.
h
control
(
p
::
BallAndBeam
,
u
)
=
ccall
((
:
comedi_write
,
comedipath
),
Int32
,
(
Int32
,
Int32
,
Int32
,
Int32
),
0
,
1
,
1
,
num2io
(
u
[
1
]))
measure
(
p
::
BallAndBeam
)
=
io2num
(
ccall
((
:
comedi_read
,
comedipath
),
Int32
,
(
Int32
,
Int32
,
Int32
),
0
,
0
,
0
))
control
(
p
::
BallAndBeamSimulator
,
u
)
=
error
(
"Not yet implemented"
)
measure
(
p
::
BallAndBeamSimulator
)
=
error
(
"Not yet implemented"
)
const
comedipath
=
"../c/comedi_bridge.so"
const
conversion
=
65535
/
20
io2num
(
x
)
=
x
/
conversion
-
10
# Converts from io to float
num2io
(
x
)
=
round
(
Int32
,
x
*
100
+
2050
)
# Converts from regular number to io
initialize
(
p
::
BallAndBeam
)
=
ccall
((
:
comedi_start
,
comedipath
),
Int32
,(
Int32
,),
0
)
finalize
(
p
::
BallAndBeam
)
=
(
control
(
P
,
0
);
ccall
((
:
comedi_stop
,
"../c/comedi_bridge.so"
),
Int32
,(
Int32
,),
0
))
initialize
(
p
::
BallAndBeamSimulator
)
=
nothing
finalize
(
p
::
BallAndBeamSimulator
)
=
nothing
end
# module
src/interface.jl
0 → 100644
View file @
6eee99e0
export
AbstractProcess
,
PhycicalProcess
,
SimulatedProcess
export
num_outputs
,
num_inputs
,
outputrange
,
inputrange
,
isstable
,
sampletime
,
control
,
measure
# Interface specification ===================================================================
abstract type
AbstractProcess
end
abstract type
PhycicalProcess
<:
AbstractProcess
end
abstract type
SimulatedProcess
<:
AbstractProcess
end
num_outputs
(
p
::
AbstractProcess
)
=
error
(
"Function not implemented for
$
(typeof(p))"
)
num_inputs
(
p
::
AbstractProcess
)
=
error
(
"Function not implemented for
$
(typeof(p))"
)
outputrange
(
p
::
AbstractProcess
)
=
error
(
"Function not implemented for
$
(typeof(p))"
)
inputrange
(
p
::
AbstractProcess
)
=
error
(
"Function not implemented for
$
(typeof(p))"
)
isstable
(
p
::
AbstractProcess
)
=
error
(
"Function not implemented for
$
(typeof(p))"
)
sampletime
(
p
::
AbstractProcess
)
=
error
(
"Function not implemented for
$
(typeof(p))"
)
control
(
p
::
AbstractProcess
,
u
)
=
error
(
"Function not implemented for
$
(typeof(p))"
)
measure
(
p
::
AbstractProcess
)
=
error
(
"Function not implemented for
$
(typeof(p))"
)
initialize
(
p
::
AbstractProcess
)
=
error
(
"Function not implemented for
$
(typeof(p))"
)
finalize
(
p
::
AbstractProcess
)
=
error
(
"Function not implemented for
$
(typeof(p))"
)
src/interface_implementations/ballandbeam.jl
0 → 100644
View file @
6eee99e0
# Interface implementation Ball And Beam ====================================================
export
BallAndBeam
,
BallAndBeamSimulator
,
BallAndBeamType
struct
BallAndBeam
<:
PhysicalProcess
h
::
Float64
end
BallAndBeam
()
=
BallAndBeam
(
0.01
)
struct
BallAndBeamSimulator
<:
SimulatedProcess
h
::
Float64
end
BallAndBeamSimulator
()
=
BallAndBeamSimulator
(
0.01
)
const
BallAndBeamType
=
Union
{
BallAndBeam
,
BallAndBeamSimulator
}
num_outputs
(
p
::
BallAndBeamType
)
=
2
num_inputs
(
p
::
BallAndBeamType
)
=
1
outputrange
(
p
::
BallAndBeamType
)
=
[(
-
10
,
10
),(
-
1
,
1
)]
# Beam angle, Ball position
inputrange
(
p
::
BallAndBeamType
)
=
[(
-
10
,
10
)]
isstable
(
p
::
BallAndBeamType
)
=
false
sampletime
(
p
::
BallAndBeamType
)
=
p
.
h
control
(
p
::
BallAndBeam
,
u
)
=
ccall
((
:
comedi_write
,
comedipath
),
Int32
,
(
Int32
,
Int32
,
Int32
,
Int32
),
0
,
1
,
1
,
num2io
(
u
[
1
]))
measure
(
p
::
BallAndBeam
)
=
io2num
(
ccall
((
:
comedi_read
,
comedipath
),
Int32
,
(
Int32
,
Int32
,
Int32
),
0
,
0
,
0
))
control
(
p
::
BallAndBeamSimulator
,
u
)
=
error
(
"Not yet implemented"
)
measure
(
p
::
BallAndBeamSimulator
)
=
error
(
"Not yet implemented"
)
const
comedipath
=
"../c/comedi_bridge.so"
const
conversion
=
65535
/
20
io2num
(
x
)
=
x
/
conversion
-
10
# Converts from io to float
num2io
(
x
)
=
round
(
Int32
,
x
*
100
+
2050
)
# Converts from regular number to io
initialize
(
p
::
BallAndBeam
)
=
ccall
((
:
comedi_start
,
comedipath
),
Int32
,(
Int32
,),
0
)
finalize
(
p
::
BallAndBeam
)
=
(
control
(
P
,
0
);
ccall
((
:
comedi_stop
,
"../c/comedi_bridge.so"
),
Int32
,(
Int32
,),
0
))
initialize
(
p
::
BallAndBeamSimulator
)
=
nothing
finalize
(
p
::
BallAndBeamSimulator
)
=
nothing
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment