Skip to content

Commit cbe548d

Browse files
authored
feat: Introduce TRUNC_<INT>(<REAL>) functions (#1340)
This commit introduces the `TRUNC_<INT>(<REAL>)` library functions, which make use of your implicit truncation features.
1 parent e7859f6 commit cbe548d

File tree

3 files changed

+396
-0
lines changed

3 files changed

+396
-0
lines changed

libs/stdlib/iec61131-st/trunc_int.py

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
f = open("trunc_int.st", "w")
2+
3+
types_real = ["REAL", "LREAL"]
4+
types_int = ["SINT", "USINT", "INT", "UINT", "DINT", "UDINT", "LINT", "ULINT"]
5+
6+
generic = """
7+
(********************
8+
*
9+
* Converts a floating point number to {0}
10+
*
11+
********************)
12+
FUNCTION TRUNC_{0}<T: ANY_REAL> : {0}
13+
VAR_INPUT
14+
in : T;
15+
END_VAR
16+
END_FUNCTION
17+
"""
18+
19+
generic_impl = """
20+
(********************
21+
*
22+
* Converts {1} to {0}
23+
*
24+
********************)
25+
FUNCTION TRUNC_{0}__{1} : {0}
26+
VAR_INPUT
27+
in : {1};
28+
END_VAR
29+
30+
TRUNC_{0}__{1} := in;
31+
END_FUNCTION
32+
"""
33+
34+
for int in types_int:
35+
f.write(generic.format(int))
36+
f.write("\n")
37+
38+
for real in types_real:
39+
f.write(generic_impl.format(int, real))
40+
f.write("\n")

libs/stdlib/iec61131-st/trunc_int.st

Lines changed: 320 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,320 @@
1+
2+
(********************
3+
*
4+
* Converts a floating point number to SINT
5+
*
6+
********************)
7+
FUNCTION TRUNC_SINT<T: ANY_REAL> : SINT
8+
VAR_INPUT
9+
in : T;
10+
END_VAR
11+
END_FUNCTION
12+
13+
14+
(********************
15+
*
16+
* Converts REAL to SINT
17+
*
18+
********************)
19+
FUNCTION TRUNC_SINT__REAL : SINT
20+
VAR_INPUT
21+
in : REAL;
22+
END_VAR
23+
24+
TRUNC_SINT__REAL := in;
25+
END_FUNCTION
26+
27+
28+
(********************
29+
*
30+
* Converts LREAL to SINT
31+
*
32+
********************)
33+
FUNCTION TRUNC_SINT__LREAL : SINT
34+
VAR_INPUT
35+
in : LREAL;
36+
END_VAR
37+
38+
TRUNC_SINT__LREAL := in;
39+
END_FUNCTION
40+
41+
42+
(********************
43+
*
44+
* Converts a floating point number to USINT
45+
*
46+
********************)
47+
FUNCTION TRUNC_USINT<T: ANY_REAL> : USINT
48+
VAR_INPUT
49+
in : T;
50+
END_VAR
51+
END_FUNCTION
52+
53+
54+
(********************
55+
*
56+
* Converts REAL to USINT
57+
*
58+
********************)
59+
FUNCTION TRUNC_USINT__REAL : USINT
60+
VAR_INPUT
61+
in : REAL;
62+
END_VAR
63+
64+
TRUNC_USINT__REAL := in;
65+
END_FUNCTION
66+
67+
68+
(********************
69+
*
70+
* Converts LREAL to USINT
71+
*
72+
********************)
73+
FUNCTION TRUNC_USINT__LREAL : USINT
74+
VAR_INPUT
75+
in : LREAL;
76+
END_VAR
77+
78+
TRUNC_USINT__LREAL := in;
79+
END_FUNCTION
80+
81+
82+
(********************
83+
*
84+
* Converts a floating point number to INT
85+
*
86+
********************)
87+
FUNCTION TRUNC_INT<T: ANY_REAL> : INT
88+
VAR_INPUT
89+
in : T;
90+
END_VAR
91+
END_FUNCTION
92+
93+
94+
(********************
95+
*
96+
* Converts REAL to INT
97+
*
98+
********************)
99+
FUNCTION TRUNC_INT__REAL : INT
100+
VAR_INPUT
101+
in : REAL;
102+
END_VAR
103+
104+
TRUNC_INT__REAL := in;
105+
END_FUNCTION
106+
107+
108+
(********************
109+
*
110+
* Converts LREAL to INT
111+
*
112+
********************)
113+
FUNCTION TRUNC_INT__LREAL : INT
114+
VAR_INPUT
115+
in : LREAL;
116+
END_VAR
117+
118+
TRUNC_INT__LREAL := in;
119+
END_FUNCTION
120+
121+
122+
(********************
123+
*
124+
* Converts a floating point number to UINT
125+
*
126+
********************)
127+
FUNCTION TRUNC_UINT<T: ANY_REAL> : UINT
128+
VAR_INPUT
129+
in : T;
130+
END_VAR
131+
END_FUNCTION
132+
133+
134+
(********************
135+
*
136+
* Converts REAL to UINT
137+
*
138+
********************)
139+
FUNCTION TRUNC_UINT__REAL : UINT
140+
VAR_INPUT
141+
in : REAL;
142+
END_VAR
143+
144+
TRUNC_UINT__REAL := in;
145+
END_FUNCTION
146+
147+
148+
(********************
149+
*
150+
* Converts LREAL to UINT
151+
*
152+
********************)
153+
FUNCTION TRUNC_UINT__LREAL : UINT
154+
VAR_INPUT
155+
in : LREAL;
156+
END_VAR
157+
158+
TRUNC_UINT__LREAL := in;
159+
END_FUNCTION
160+
161+
162+
(********************
163+
*
164+
* Converts a floating point number to DINT
165+
*
166+
********************)
167+
FUNCTION TRUNC_DINT<T: ANY_REAL> : DINT
168+
VAR_INPUT
169+
in : T;
170+
END_VAR
171+
END_FUNCTION
172+
173+
174+
(********************
175+
*
176+
* Converts REAL to DINT
177+
*
178+
********************)
179+
FUNCTION TRUNC_DINT__REAL : DINT
180+
VAR_INPUT
181+
in : REAL;
182+
END_VAR
183+
184+
TRUNC_DINT__REAL := in;
185+
END_FUNCTION
186+
187+
188+
(********************
189+
*
190+
* Converts LREAL to DINT
191+
*
192+
********************)
193+
FUNCTION TRUNC_DINT__LREAL : DINT
194+
VAR_INPUT
195+
in : LREAL;
196+
END_VAR
197+
198+
TRUNC_DINT__LREAL := in;
199+
END_FUNCTION
200+
201+
202+
(********************
203+
*
204+
* Converts a floating point number to UDINT
205+
*
206+
********************)
207+
FUNCTION TRUNC_UDINT<T: ANY_REAL> : UDINT
208+
VAR_INPUT
209+
in : T;
210+
END_VAR
211+
END_FUNCTION
212+
213+
214+
(********************
215+
*
216+
* Converts REAL to UDINT
217+
*
218+
********************)
219+
FUNCTION TRUNC_UDINT__REAL : UDINT
220+
VAR_INPUT
221+
in : REAL;
222+
END_VAR
223+
224+
TRUNC_UDINT__REAL := in;
225+
END_FUNCTION
226+
227+
228+
(********************
229+
*
230+
* Converts LREAL to UDINT
231+
*
232+
********************)
233+
FUNCTION TRUNC_UDINT__LREAL : UDINT
234+
VAR_INPUT
235+
in : LREAL;
236+
END_VAR
237+
238+
TRUNC_UDINT__LREAL := in;
239+
END_FUNCTION
240+
241+
242+
(********************
243+
*
244+
* Converts a floating point number to LINT
245+
*
246+
********************)
247+
FUNCTION TRUNC_LINT<T: ANY_REAL> : LINT
248+
VAR_INPUT
249+
in : T;
250+
END_VAR
251+
END_FUNCTION
252+
253+
254+
(********************
255+
*
256+
* Converts REAL to LINT
257+
*
258+
********************)
259+
FUNCTION TRUNC_LINT__REAL : LINT
260+
VAR_INPUT
261+
in : REAL;
262+
END_VAR
263+
264+
TRUNC_LINT__REAL := in;
265+
END_FUNCTION
266+
267+
268+
(********************
269+
*
270+
* Converts LREAL to LINT
271+
*
272+
********************)
273+
FUNCTION TRUNC_LINT__LREAL : LINT
274+
VAR_INPUT
275+
in : LREAL;
276+
END_VAR
277+
278+
TRUNC_LINT__LREAL := in;
279+
END_FUNCTION
280+
281+
282+
(********************
283+
*
284+
* Converts a floating point number to ULINT
285+
*
286+
********************)
287+
FUNCTION TRUNC_ULINT<T: ANY_REAL> : ULINT
288+
VAR_INPUT
289+
in : T;
290+
END_VAR
291+
END_FUNCTION
292+
293+
294+
(********************
295+
*
296+
* Converts REAL to ULINT
297+
*
298+
********************)
299+
FUNCTION TRUNC_ULINT__REAL : ULINT
300+
VAR_INPUT
301+
in : REAL;
302+
END_VAR
303+
304+
TRUNC_ULINT__REAL := in;
305+
END_FUNCTION
306+
307+
308+
(********************
309+
*
310+
* Converts LREAL to ULINT
311+
*
312+
********************)
313+
FUNCTION TRUNC_ULINT__LREAL : ULINT
314+
VAR_INPUT
315+
in : LREAL;
316+
END_VAR
317+
318+
TRUNC_ULINT__LREAL := in;
319+
END_FUNCTION
320+

0 commit comments

Comments
 (0)