Modbus Tcp для серебряного света - PullRequest
2 голосов
/ 03 апреля 2012

Оригинальный вопрос:

Я ищу библиотеку silverlight или пример, который показывает мне, как использовать платформу silverlight для подключения к устройству Modbus через tcp.

Я нашел несколько библиотек, использующих tcpClient from system.net.sockets.tcpclient, но это пространство имен недоступно в silverlight.Таким образом, библиотеки .net также не справятся с задачей

, просто для справочной информации я создаю приложение для Windows Phone, и я уже рассмотрел пример «использования сокетов в Windowsphone» на сайте msdn. (ссылка)


Редактировать 1:

После некоторого времени программирования я могу записать регистры хранения устройства Modbus, используя библиотеку System.net.socketsтолько.Проблема в том, что я получаю ответный байт от моего устройства Modbus.Кроме того, у меня была функция приема для чтения регистров на устройстве Modbus, которое также возвращает байты.

Я использовал для перехвата таких байтов (используя System.Net.Sockets.TcpClient:

    // Making a new netwerk stream named ns
    NetworkStream ns;

    // Function for receiving
    protected override int ReceiveByte()
    {
        // Check for byte, if byte, read it and put it in a byte array.
        if (ns.DataAvailable)
            return ns.ReadByte();

        // If there's no data left, return;
        else
            return -1;
    }

What I 'Я спрашиваю о следующих вещах: 1. Есть ли в System.net.Sockets функция, которая имеет ту же функциональность, что и Networkstream.Readbyte? 2. Если нет функции, способной сделать то же самое. Существуют ли другие, и если да,, есть примеры, или кто-то может начать меня?

Спасибо:)


1 Ответ

0 голосов
/ 03 апреля 2012

Вы должны использовать Socket напрямую, а не TcpClient. Код заканчивается немного более многословно, но не все так плохо. Если вы хотите использовать существующий набор кода Modbus, вы можете просто создать замену TcpClient с тем же интерфейсом, что и в версии FFx / CF.

EDIT

Это немного странно, так как вы несколько изменили вопрос при редактировании, перейдя от использования Modbus к получению байта с необработанным сокетом. Класс Socket предоставляет синхронный Receive и асинхронный BeginReceive метод.

Вы также можете создать NetworkStream из Socket с помощью одного из конструкторов NetworkStream.

...