Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- from functools import partial
- # pip3 install pint
- # https://pint.readthedocs.io/en/stable/
- from pint import UnitRegistry
- reg = UnitRegistry()
- def scale(value, /, *, min_value, max_value, min_unit, max_unit):
- """
- value := positional only argument for input
- keyword only
- min_value := minimum input of value
- max_value := maximum input of value
- min_unit := minimum value of scaled unit
- max_unit := maximum value of scaled unit
- :return: scaled unit
- """
- v_range = max_value - min_value
- u_range = max_unit - min_unit
- norm = (value - min_value) / v_range
- return norm * u_range + min_unit
- normal_10V = {
- "min_value": 0 * reg.V,
- "max_value": 10 * reg.V,
- }
- current_4_20 = {
- "min_value": 4 * reg.mA,
- "max_value": 20 * reg.mA,
- }
- sensor_1_data = {
- **normal_10V,
- "min_unit": 10 * reg.cm,
- "max_unit": 100 * reg.cm,
- }
- sensor_2_data = {
- **normal_10V,
- "min_unit": 10 * reg.mm,
- "max_unit": 100 * reg.mm,
- }
- sensor_3_data = {
- **current_4_20,
- "min_unit": 0 * reg.bar,
- "max_unit": 100 * reg.bar,
- }
- input_voltage = 5 * reg.V
- input_current = 14 * reg.mA
- input_current_max = current_4_20["max_value"]
- sensor_1 = partial(scale, **sensor_1_data)
- sensor_2 = partial(scale, **sensor_2_data)
- pressure_sensor = partial(scale, **sensor_3_data)
- distance_1 = sensor_1(input_voltage)
- distance_2 = sensor_2(input_voltage)
- pressure = pressure_sensor(input_current)
- print("Input voltage:", input_voltage)
- print("sensor 1:", distance_1)
- print("sensor 2:", distance_2)
- print()
- print("Input current:", input_current)
- print("pressure sensor:", pressure)
- print()
- print("Input current:", input_current_max)
- print("pressure sensor:", pressure_sensor(input_current_max))
Add Comment
Please, Sign In to add comment