Skip to content

Commit 054402f

Browse files
author
AutomotiveDevops
committed
Edited readme files.
Updated pytest for the return of the non-dev version of python-control.
1 parent a2c0286 commit 054402f

File tree

5 files changed

+29
-942
lines changed

5 files changed

+29
-942
lines changed

Example1/README.md

Lines changed: 2 additions & 231 deletions
Original file line numberDiff line numberDiff line change
@@ -1,235 +1,6 @@
1-
# dllModel - Python Runner Notebook
2-
3-
![](dllModel.png)
4-
5-
# Python Setup
6-
7-
This is the boilerplate setup needed before running the model. For readability the [`rtwtypes.h`](https://github.com/dapperfu/python_SimulinkDLL/blob/master/Example1/rtwtypes.py) is in a separate file.
8-
9-
10-
```python
11-
from rtwtypes import *
12-
```
13-
14-
### ```dllModel.h```
15-
16-
17-
```python
18-
class B_dllModel_T(ctypes.Structure):
19-
_fields_ = [
20-
("SimulationSignal1", real_T),
21-
("SignalOut3", real32_T),
22-
("SignalOut2", uint16_T),
23-
24-
]
25-
class ExtU_dllModel_T(ctypes.Structure):
26-
_fields_ = [
27-
("SignalIin2", uint16_T)
28-
]
29-
class ExtY_dllModel_T(ctypes.Structure):
30-
_fields_ = [
31-
("OutputPort2", real32_T)
32-
]
33-
class P_dllModel_T(ctypes.Structure):
34-
_fields_ = [
35-
("K2", uint16_T)
36-
]
37-
38-
class Timing(ctypes.Structure):
39-
_fields_ = [
40-
("clockTick0", uint32_T),
41-
("clockTickH0", uint32_T),
42-
]
43-
class tag_RTM_dllModel_T(ctypes.Structure):
44-
45-
_fields_ = [
46-
("errorStatus", ctypes.c_char_p),
47-
("Timing", Timing),
48-
]
49-
```
50-
51-
52-
```python
53-
import os
54-
dll_path = os.path.abspath('dllModel_win64.dll')
55-
dll = ctypes.windll.LoadLibrary(dll_path)
56-
```
57-
58-
59-
```python
60-
# Block parameters (default storage)
61-
dllModel_P = P_dllModel_T.in_dll(dll, 'dllModel_P')
62-
# Block signals (default storage)
63-
dllModel_B = B_dllModel_T.in_dll(dll, 'dllModel_B')
64-
# External inputs (root inport signals with default storage)
65-
dllModel_U = ExtU_dllModel_T.in_dll(dll, 'dllModel_U')
66-
# External outputs (root outports fed by signals with default storage)
67-
dllModel_Y = ExtY_dllModel_T.in_dll(dll, 'dllModel_Y')
68-
```
69-
70-
71-
```python
72-
"""
73-
* Exported Global Signals
74-
*
75-
* Note: Exported global signals are block signals with an exported global
76-
* storage class designation. Code generation will declare the memory for
77-
* these signals and export their symbols.
78-
"""
79-
SignalIn = real32_T.in_dll(dll, 'SignalIn')
80-
SimulationSignal2 = real_T.in_dll(dll, 'SimulationSignal2')
81-
SignalOut = real32_T.in_dll(dll, 'SignalOut')
82-
"""
83-
* Exported Global Parameters
84-
*
85-
* Note: Exported global parameters are tunable parameters with an exported
86-
* global storage class designation. Code generation will declare the memory for
87-
* these parameters and exports their symbols.
88-
"""
89-
K = real32_T.in_dll(dll, 'K')
90-
91-
# Model entry point functions
92-
dllModel_initialize = dll.dllModel_initialize
93-
dllModel_step = dll.dllModel_step
94-
dllModel_terminate = dll.dllModel_terminate
95-
96-
# Real-time Model object
97-
dllModel_M = ctypes.POINTER(tag_RTM_dllModel_T).in_dll(dll, 'dllModel_M')
98-
```
99-
100-
# Running The Model.
101-
102-
Before running the model you will need to run the model init function.
103-
104-
105-
```python
106-
dllModel_initialize();
107-
```
108-
109-
Take an initial step into the model, function returns the current step number.
110-
111-
112-
```python
113-
dllModel_step()
114-
```
115-
116-
117-
118-
119-
1
120-
121-
122-
123-
Inspect the simulation time, both in the Block signal structure and in the global variable.
124-
125-
126-
```python
127-
[dllModel_B.SimulationSignal1, SimulationSignal2]
128-
```
129-
130-
131-
132-
133-
[0.0, c_double(0.0)]
134-
135-
136-
137-
Take another step and inspect the simulation time again.
138-
139-
0.1s matches the discrete step size specified in the model.
140-
141-
![](dllModel_solver.png)
142-
143-
144-
145-
```python
146-
dllModel_step()
147-
[dllModel_B.SimulationSignal1, SimulationSignal2]
148-
```
149-
1+
### Example 1: [dllModel.ipynb](https://nbviewer.jupyter.org/github/dapperfu/python_SimulinkDLL/blob/master/Example1/dllModel.ipynb)
1502

151-
152-
153-
[0.30000000000000004, c_double(0.30000000000000004)]
154-
155-
156-
157-
### Manipulating Signals
158-
159-
& Reading Outputs
3+
For demonstrating minimal dll functionality and the steps required to run a model in Python.
1604

1615
![](dllModel.png)
1626

163-
164-
```python
165-
SignalIn.value=float(2)
166-
SignalOut
167-
```
168-
169-
170-
171-
172-
c_float(2.0)
173-
174-
175-
176-
177-
```python
178-
dllModel_step()
179-
SignalOut
180-
```
181-
182-
183-
184-
185-
c_float(2.0)
186-
187-
188-
189-
190-
```python
191-
[dllModel_B.SignalOut2, dllModel_B.SignalOut3, SignalOut]
192-
```
193-
194-
195-
196-
197-
[2, 4.0, c_float(2.0)]
198-
199-
200-
201-
202-
```python
203-
dllModel_U.SignalIin2=1
204-
```
205-
206-
207-
```python
208-
dllModel_step()
209-
[dllModel_B.SignalOut2, dllModel_B.SignalOut3, SignalOut]
210-
```
211-
212-
213-
214-
215-
[2, 4.0, c_float(2.0)]
216-
217-
218-
219-
220-
```python
221-
dllModel_M.contents.Timing.clockTick0
222-
```
223-
224-
225-
226-
227-
6
228-
229-
230-
231-
232-
```python
233-
step = dllModel_step()
234-
assert dllModel_M.contents.Timing.clockTick0==step
235-
```

0 commit comments

Comments
 (0)