# TwoPointFun

## `TwoPointFun` (FUN)

FUNCTION TwoPointFun : REAL

### Short description

> Linear conversion of a numeric input value using a characteristic curve defined by two points.\
> Typical application: scaling of raw process values

### Interfaces

#### Inputs

| Name            | Data type | Value range | Initial value | Function                                              |
| --------------- | --------- | ----------- | ------------- | ----------------------------------------------------- |
| *rIn\_X*        | REAL      |             |               | Analog value input                                    |
| *rX1*           | REAL      |             | 0             | Point 1 of the input range                            |
| *rY1*           | REAL      |             | 0             | Point 1 of the output characteristic curve            |
| *rX2*           | REAL      |             | 100           | Point 2 of the input range                            |
| *rY2*           | REAL      |             | 100           | Point 2 of the output characteristic curve            |
| *xMinMaxLimit*  | BOOL      |             |               | Enable / disable the limit at the analog value output |
| *iMinMaxOffset* | INTEGER   |             |               | Values of the limits at the analog value output       |

#### Outputs

| Name          | Data type | Value range | Initial value | Function                                                                                                                       |
| ------------- | --------- | ----------- | ------------- | ------------------------------------------------------------------------------------------------------------------------------ |
| *TwoPointFun* | REAL      |             |               | Linear conversion of a numerical input value                                                                                   |
| *xErr*        | BOOL      |             |               | <p>\* <strong>FALSE:</strong><br>Conversion error-free<br>\* <strong>TRUE:</strong><br>Error during the conversion process</p> |

### Function description

#### Analog value output

The analog value output is from the analog value input *rIn\_X* depending on the linear characteristic curve defined by the two points P1(*rX1*/*rY1*) and P2(*rX2*/*rY2*) is calculated.\
In the event of a conversion error (*xErr* = TRUE) the analog value output remains unchanged.

<figure><img src="/files/6275ca0bc4087a4dd9e0a4760599742bcc0fab22" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
**Formula**

rOut\_Y = (((rX1-rIn\_X)\*(rY2-rY1))/(rX1-rX2))+rY1\\

**Constraints**

The analog value output is of data type REAL. Through an unsuitable selection of the parameters *rX1*, *rX2*, *rY1* and *rY2* as well as the value of the analog value input *rIn\_X* it can lead to exceeding the limits of the data type.
{% endhint %}

#### Enable / disable limits *xMinMaxLimit*

The limits of the analog value output can generally be enabled and disabled with this input.

| *xMinMaxLimit* | Limits            | Notes                                        |
| -------------- | ----------------- | -------------------------------------------- |
| FALSE          | none              | Analog value output without absolute limits  |
| TRUE           | Y\_min and Y\_max | Limitation of the analog value output active |

#### Values of the limits *iMinMaxOffset*

The limits of the analog value output are only active if the input *xMinMaxLimit* is active (= TRUE).\
The limit values Y\_min and Y\_max are then calculated as follows:

{% hint style="info" %}
**Formulas**

Y\_min = rY1 - ((ABS(rY2-rY1))\*iMinMaxOffset)/100\
Y\_max = rY2 + ((ABS(rY2-rY1))\*iMinMaxOffset)/100
{% endhint %}

| *rY1* | *rY2* | *rY2* - *rY1* | *iMinMaxOffset* | *Y\_min* | *Y\_max* | Notes           |
| ----- | ----- | ------------- | --------------- | -------- | -------- | --------------- |
| 0     | 100   | 100           | 0               | 0        | 100      | Default limits  |
| 0     | 100   | 100           | 10              | -10      | 110      | Positive offset |
| 0     | 100   | 100           | -10             | 10       | 90       | Negative offset |

#### Digital output *xErr*

The digital output *xErr* signals an error during the conversion process. The following errors are considered:<br>

* *rX1* AND *rX2* = 0
* *rX1* = *rX2*
* *rY1* AND *rY2* = 0
* *rY1* = *rY2*

| Error during the conversion process | *xErr* | Notes                               |
| ----------------------------------- | ------ | ----------------------------------- |
| FALSE                               | FALSE  | Conversion error-free               |
| TRUE                                | TRUE   | Error during the conversion process |

Legend: X = any

### CODESYS

InOut:

| Scope  | Name            | Type   | Initial |
| ------ | --------------- | ------ | ------- |
| Return | `TwoPointFun`   | `REAL` |         |
| Input  | `rIn_X`         | `REAL` |         |
| Input  | `rX1`           | `REAL` | 0       |
| Input  | `rX2`           | `REAL` | 100     |
| Input  | `rY1`           | `REAL` | 0       |
| Input  | `rY2`           | `REAL` | 100     |
| Input  | `xMinMaxLimit`  | `BOOL` |         |
| Input  | `iMinMaxOffset` | `INT`  |         |
| Output | `xErr`          | `BOOL` |         |


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://support.powerio.com/hub/codesys-hvac/en/hvac-library/funktionen/twopointfun.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
