# Siemens S7 Write

This function block is designed to write data to Siemens S7 PLC (Programmable Logic Controller) using the Snap7 library. It supports various data types and allows for dynamic interaction with the PLC.

## 📥 Inputs <a href="#inputs" id="inputs"></a>

`Enable` A boolean input to enable or disable the writing to the PLC.

`Data` The data to be written to the PLC, provided in a compatible format according to the selected data type.

`S7 Client` The connection details for the Siemens S7 PLC to which data will be written.

## 📤 Outputs <a href="#outputs" id="outputs"></a>

This function block does not produce any outputs.

## 🕹️ Controls <a href="#controls" id="controls"></a>

`DB Number` Input field to specify the Data Block number for the PLC write operation.

`DB Byte Address` Input field to specify the byte address within the Data Block.

`Bit Position` Input field to specify the bit position, which is applicable only for boolean values.

`DB Data Type` A dropdown menu that allows the selection of the data type being written (e.g., Boolean, Int, Real, etc.).

## 🎨 Features <a href="#features" id="features"></a>

`Connection Handling` The block automatically manages connections to the PLC, reconnecting if the connection is lost or if the address changes.

`Multi-threaded Writing` Utilizes a separate thread to handle writing operations, allowing for continuous data flow without blocking the main execution.

`Dynamic Data Type Support` Supports various data types, enabling flexible data handling.

## 📝 Usage Instructions <a href="#usage" id="usage"></a>

1. **Connect to S7 Client**: Input the necessary details to connect to the S7 PLC in the `S7 Client` input. This might include IP address, port, rack, and slot numbers.
2. **Set DB Number**: Input the event number in the `DB Number` field which indicates where to write data within the PLC.
3. **Specify Byte Address**: Enter the byte address in the `DB Byte Address` field to define where the data should be written.
4. **Select Data Type**: Choose the appropriate data type from the `DB Data Type` dropdown corresponding to the data you want to write.
5. **Input Data**: Provide the data to be written into the PLC in the `Data` input.
6. **Enable Write Operation**: Set the `Enable` input to `True` to activate the write operation. The block will handle the writing based on the provided configurations.

## 📊 Evaluation <a href="#evaluation" id="evaluation"></a>

During the execution of this block, the specified data will be written to the defined location on the PLC. If the connection to the PLC is lost or invalid, an error message will be logged.

## 💡 Tips and Tricks <a href="#tips-and-tricks" id="tips-and-tricks"></a>

<details>

<summary>Check Connection</summary>

To ensure that the write operation goes smoothly, verify that the S7 PLC is powered on and properly connected to the network.

</details>

<details>

<summary>Using Appropriate Data Types</summary>

Ensure that the data provided in the `Data` input matches the selected data type chosen from the `DB Data Type` dropdown. Invalid data types could lead to errors.

</details>

<details>

<summary>Dynamic Addressing</summary>

If you are frequently changing the PLC address, consider using the NodeLineEdit to easily input the connection parameters without needing to modify the code.

</details>

## 🛠️ Troubleshooting <a href="#troubleshooting" id="troubleshooting"></a>

<details>

<summary>Lost Connection Error</summary>

If you encounter a "Lost connection" error, check your network settings and ensure the PLC is reachable. Verify the IP address and port specified in the client parameters.

</details>

<details>

<summary>Unsupported Data Type Error</summary>

If you receive an error about unsupported data types, ensure that the type selected from the `DB Data Type` dropdown is valid for the target PLC registers.

</details>
