# TwoPoint

## `TwoPoint` (FB)

FUNCTION\_BLOCK TwoPoint

### Short description

> Linear conversion of a numerical input value using a characteristic curve defined by two points.

### Representation

<figure><img src="/files/0cbb7f7b8caa9ba142075a9c56641dfc9c2c0a8b" alt=""><figcaption></figcaption></figure>

### Interfaces

#### Inputs

| Name     | Data type | Value range | Initial value | Function           |
| -------- | --------- | ----------- | ------------- | ------------------ |
| *rIn\_X* | REAL      |             | 0             | Analog value input |

#### Outputs

| Name      | Data type | Value range | Initial value | Function                                                                                                                       |
| --------- | --------- | ----------- | ------------- | ------------------------------------------------------------------------------------------------------------------------------ |
| *rOut\_Y* | REAL      |             |               | Analog value output                                                                                                            |
| *xErr*    | BOOL      |             |               | <p>\* <strong>FALSE:</strong><br>Conversion error-free<br>\* <strong>TRUE:</strong><br>Error during the conversion process</p> |

#### Setpoints / parameters

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

### Function description

#### Analog value output *rOut\_Y*

The analog value output *rOut\_Y* is determined by 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 *rOut\_Y* 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 *rOut\_Y* is of data type REAL. With an inappropriate 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 *rOut\_Y* can generally be enabled and disabled with this setpoint / parameter.

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

#### Values of the limits **iMinMaxOffset**

The limits of the analog value output are only active if the setpoint / parameter **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:

* *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 |
| ----------- | --------------- | ------ | ------- |
| Input       | `rIn_X`         | `REAL` | 0       |
| Output      | `rOut_Y`        | `REAL` |         |
| Output      | `xErr`          | `BOOL` |         |
| Input Const | `iMinMaxOffset` | `INT`  | 0       |
| Input Const | `xMinMaxLimit`  | `BOOL` | FALSE   |
| Input Const | `rY2`           | `REAL` | 100     |
| Input Const | `rX2`           | `REAL` | 100     |
| Input Const | `rY1`           | `REAL` | 0       |
| Input Const | `rX1`           | `REAL` | 0       |


---

# 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/functionblocks/numeric/twopoint.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.
