# Send Modbus custom request with TCP Socket

**URL:** <https://forum.inductiveautomation.com/t/send-modbus-custom-request-with-tcp-socket/99788>\
**Category:** Ignition\
**Tags:** perspective\
**Created:** [December 13, 2024, 9:28am UTC](https://forum.inductiveautomation.com/t/send-modbus-custom-request-with-tcp-socket/99788 "2024-12-13T09:28:04Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![David\_Gomez\_Alarcon](https://avatars.discourse-cdn.com/v4/letter/d/7ea924/32.png) [@David\_Gomez\_Alarcon](https://forum.inductiveautomation.com/u/David_Gomez_Alarcon)\
**Post date:** [December 13, 2024, 9:28am UTC](https://forum.inductiveautomation.com/t/send-modbus-custom-request-with-tcp-socket/99788/1 "2024-12-13T09:28:04Z")

</div>

Hello, I have a solar inverter that have a custom protocol (VABUS of Bonfiglioli) and I need to send a custom request for read de power of the inverter with bytes in TCP. I don't want testing with a real inverter so i'm using ModRSIM that is a Modbus TCP Server simulator and i want to read a holding register with a script for test how send bytes to a TCP Server.

In python i have a script that works fine:

```python
*import socket*
*import time*

*def trama_modbus():*

* asdu = bytearray()*
*#2 bytes para el transaction id*
* asdu.append(0x00)*
* asdu.append(0x01)*
*#protocolo id, como es modbus esto es 00*
* asdu.append(0x00)*
* asdu.append(0x00)*
*#va tener una longitud de 6 registros*
* asdu.append(0x00)*
* asdu.append(0x06)*
*#el slave id es el 1*
* asdu.append(0x01)*
*#como vamos a leer holding es la fc 3*
* asdu.append(0x03)*
*#el primer registro a leer es el 3*
* asdu.append(0x00)*
* asdu.append(0x03)*
*#el numero de registros que se pide en bloque es 1*
* asdu.append(0x00)*
* asdu.append(0x01)*
* return asdu*

*# Press the green button in the gutter to run the script.*
*if __name__ == ' __main__':*

* HOST = '127.0.0.1' # IP del servidor*
* PORT = 507 # Puerto de escucha del servidor*

* data = trama_modbus()*
* print(data)*
* s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)*
* s.connect((HOST, PORT))*
* s.send(data)*
* time.sleep(1)*

* resultado = s.recv(1024)*
* print(resultado.hex())*
* s.close()*

```

But I want do this in Ignition and I don't know how do it:

 ![image](https://us1.discourse-cdn.com/inductiveautomation/original/3X/8/a/8a226c8355baf357ceb505f7042b686710bf3614.png)

I think that the problem is the creation of the message but i don't know how create the message. I'm using Ignition perspective but im testing this in Script Console of designer.

---

<div class="post-metadata">

**Author:** ![Kevin.Herron](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/kevin.herron/32/7259_2.png) [@Kevin.Herron](https://forum.inductiveautomation.com/u/Kevin.Herron)\
**Post date:** [December 13, 2024, 1:17pm UTC](https://forum.inductiveautomation.com/t/send-modbus-custom-request-with-tcp-socket/99788/2 "2024-12-13T13:17:51Z")

</div>

What doesn't work with your Ignition script?

---

<div class="post-metadata">

**Author:** ![David\_Gomez\_Alarcon](https://avatars.discourse-cdn.com/v4/letter/d/7ea924/32.png) [@David\_Gomez\_Alarcon](https://forum.inductiveautomation.com/u/David_Gomez_Alarcon)\
**Post date:** [December 16, 2024, 8:42am UTC](https://forum.inductiveautomation.com/t/send-modbus-custom-request-with-tcp-socket/99788/3 "2024-12-16T08:42:43Z")

</div>

Sorry, I thought it wasn't working but I tried to write a value with FC = 6 and it works correctly, the problem is that I can't print the result correctly, which comes in ASCII characters.

 ![image](https://us1.discourse-cdn.com/inductiveautomation/original/3X/9/6/9688951880f20bc4724c2562d1cc74d1c982d9ef.png)

I know that is ascii characters but i dont know how to print the result, in python i can print with print(resultado.hex()) but here in ignition i don't know

---

<div class="post-metadata">

**Author:** ![Transistor](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/transistor/32/3380_2.png) [@Transistor](https://forum.inductiveautomation.com/u/Transistor)\
**Post date:** [December 16, 2024, 8:44am UTC](https://forum.inductiveautomation.com/t/send-modbus-custom-request-with-tcp-socket/99788/4 "2024-12-16T08:44:41Z")

</div>

Please see [Wiki - how to post code on this forum](https://forum.inductiveautomation.com/t/wiki-how-to-post-code-on-this-forum/77831).

---

<div class="post-metadata">

**Author:** ![David\_Gomez\_Alarcon](https://avatars.discourse-cdn.com/v4/letter/d/7ea924/32.png) [@David\_Gomez\_Alarcon](https://forum.inductiveautomation.com/u/David_Gomez_Alarcon)\
**Post date:** [December 16, 2024, 9:02am UTC](https://forum.inductiveautomation.com/t/send-modbus-custom-request-with-tcp-socket/99788/5 "2024-12-16T09:02:20Z")

</div>

Sorry,I put it in an image so that the result of the script could be seen.

this is the code:

```python
import socket
import time

def trama_modbus():

    asdu = bytearray()
#2 bytes para el transaction id
    asdu.append(0x00)
    asdu.append(0x01)
#protocolo id, como es modbus esto es 00
    asdu.append(0x00)
    asdu.append(0x00)
#va tener una longitud de 6 registros
    asdu.append(0x00)
    asdu.append(0x06)
#el slave id es el 1
    asdu.append(0x01)
#como vamos a leer holding es la fc 3
    asdu.append(0x03)
#el primer registro a leer es el 3
    asdu.append(0x00)
    asdu.append(0x03)
#el numero de registros que se pide en bloque es 1
    asdu.append(0x00)
    asdu.append(0x01)
    return asdu

# Press the green button in the gutter to run the script.
if __name__ == ' __main__':

    HOST = '127.0.0.1' # IP del servidor
    PORT = 507 # Puerto de escucha del servidor

    data = trama_modbus()

    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.connect((HOST, PORT))
    s.send(data)
    time.sleep(1)

    resultado = s.recv(1024)
    for i in resultado:
    	print(i)
    s.close()

```

---

<div class="post-metadata">

**Author:** ![David\_Gomez\_Alarcon](https://avatars.discourse-cdn.com/v4/letter/d/7ea924/32.png) [@David\_Gomez\_Alarcon](https://forum.inductiveautomation.com/u/David_Gomez_Alarcon)\
**Post date:** [December 16, 2024, 11:29am UTC](https://forum.inductiveautomation.com/t/send-modbus-custom-request-with-tcp-socket/99788/6 "2024-12-16T11:29:01Z")

</div>

Problem solved, I use ord(i) in the loop and works.

Thanks!
