Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Will RTU over TCP be included? #21

Open
HerrPausL opened this issue Jan 31, 2022 · 5 comments
Open

Will RTU over TCP be included? #21

HerrPausL opened this issue Jan 31, 2022 · 5 comments

Comments

@HerrPausL
Copy link

Hello, is there any Plan to include RTU over TCP?
See: https://www.simplymodbus.ca/TCP.htm
Or stephane/libmodbus#445

Best Regards,
Bernd

@TurkeyMan
Copy link

I just came here intending to log this bug. I use ethernet serial servers, so I need RTU over TCP, which isn't an option here it seems...?

@HerrPausL
Copy link
Author

Hi, please give me a little bit time to check my source - i was abel to use RTU over TCP :-)

@HerrPausL
Copy link
Author

This is my code which is working fine :-)

      private void btnConnect_Click(object sender, EventArgs e)
        {
            if (radioButtonRTU.Checked)
            {
                //_uart = new SerialPort(PortName, Baud, Parity, DataBits, StopBits);
                _uart = new SerialPort(PortName, 115200, Parity.None, 8, StopBits.One);
                _uart.Open();
                _portClient = _uart.GetClient();
                _driver = new ModbusClient(new ModbusRtuCodec()) { Address = SlaveId };
                _driver.OutgoingData += DriverOutgoingData;
                _driver.IncommingData += DriverIncommingData;
            }
            if (radioButtonRTUTCP.Checked)
            {
                try
                {
                    _socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                    _socket.SetSocketOption(SocketOptionLevel.Tcp, SocketOptionName.NoDelay, true);
                    _socket.SendTimeout = 2000;
                    _socket.ReceiveTimeout = 2000;
                    _socket.Connect(new IPEndPoint(IPAddress, 502));
                    _portClient = _socket.GetClient();
                    _driver = new ModbusClient(new ModbusRtuCodec()) { Address = SlaveId };
                    _driver.OutgoingData += DriverOutgoingData;
                    _driver.IncommingData += DriverIncommingData;
                    AppendLog(String.Format("Connected using RTUoverTCP to {0}", _socket.RemoteEndPoint));
                    ConnectionState = 1;
                }
                catch (Exception ex)
                {
                    ConnectionState = 0;
                    AppendLog(ex.ToString());
                }
            }

            if (ConnectionState > 0)
            {
                btnConnect.Enabled = false;
                btnDisconnect.Enabled = true;

                ReadCoil();
                ReadInput();
            }
        }

@TurkeyMan
Copy link

Maybe make a PR and get it in the next release?

@georgekue
Copy link

@HerrPausL Ran over the same problem. Any chance you submit this as a PR, as suggested by @TurkeyMan?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants