Страница 1 из 3 123 ПоследняяПоследняя
Показано с 1 по 10 из 23

Тема: ПЛК отвергает запрос на подключение.

  1. #1

    По умолчанию ПЛК отвергает запрос на подключение.

    Использую пример на базе этой библиотеки:
    http://www.codeproject.com/Tips/16260/Modbus-TCP-class

    ПЛК110-32. Конфиг такой:


    Код, осуществляющий подключение:
    Код:
            public void connect(string ip, ushort port)
            {
                try
                {
                    IPAddress _ip;
                    if (IPAddress.TryParse(ip, out _ip) == false)
                    {
                        IPHostEntry hst = Dns.GetHostEntry(ip);
                        ip = hst.AddressList[0].ToString();
                    }
                    // ----------------------------------------------------------------
                    // Connect asynchronous client
                    tcpAsyCl = new Socket(IPAddress.Parse(ip).AddressFamily, SocketType.Stream, ProtocolType.Tcp);
                    tcpAsyCl.Connect(new IPEndPoint(IPAddress.Parse(ip), port));
                    tcpAsyCl.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.SendTimeout, _timeout);
                    tcpAsyCl.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReceiveTimeout, _timeout);
                    tcpAsyCl.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.NoDelay, 1);
                    // ----------------------------------------------------------------
                    // Connect synchronous client
                    tcpSynCl = new Socket(IPAddress.Parse(ip).AddressFamily, SocketType.Stream, ProtocolType.Tcp);
                    tcpSynCl.Connect(new IPEndPoint(IPAddress.Parse(ip), port));
                    tcpSynCl.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.SendTimeout, _timeout);
                    tcpSynCl.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReceiveTimeout, _timeout);
                    tcpSynCl.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.NoDelay, 1);
                    _connected = true;
                }
                catch (System.IO.IOException error)
                {
                    _connected = false;
                    throw (error);
                }
            }
    ip == "192.168.0.101"
    port == 502
    _timeout == 500

    при исполнении выскакивает исключение на попытке установить синхронное соединение. Тут:
    Код:
    tcpSynCl = new Socket(IPAddress.Parse(ip).AddressFamily, SocketType.Stream, ProtocolType.Tcp);
    Предупреждая дополнительные распросы, контролер сконфигурирован правильно. По указанному ip пингуется, TCP-подключение из CDS устанавливается, видимых причин для неправильной работы нет.

    Вопрос: В чем может быть причина? В реализации библиотеки? Или в самом контролере?

  2. #2

  3. #3
    Пользователь Аватар для capzap
    Регистрация
    25.02.2011
    Адрес
    Киров
    Сообщений
    10,243

    По умолчанию

    Цитата Сообщение от Barabus Посмотреть сообщение
    при исполнении выскакивает исключение на попытке установить синхронное соединение

    Вопрос: В чем может быть причина? В реализации библиотеки? Или в самом контролере?
    Дело в контроллере, один сокет - одно соединение
    Bad programmers worry about the code. Good programmers worry about data structures and their relationships

    среди успешных людей я не встречала нытиков
    Барбара Коркоран

  4. #4

    По умолчанию

    Спасибо большое, примеры по ссылке великолепные. Буду изучать библиотеку NModbus.

  5. #5

    По умолчанию

    NModbus конечно хороша, но слишком уж велика. Оставил ее пока в сторонке. Продолжил разбираться с ModbusTCP.

    capzap прав, в библиотеке допущена ошибка при проектировании, выражающаяся в попытке установить два соединения на один порт. Пример, поставляющийся с библиотекой, использует асинхронное соединение. Убрав код синхронного соединения я таки установил связь с ПЛК и успешно осуществил чтение с регистра и запись в оный.

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

  6. #6
    Пользователь
    Регистрация
    13.10.2011
    Адрес
    Златоуст
    Сообщений
    1,021

    По умолчанию

    NModbus конечно хороша, но слишком уж велика.
    оч смешно
    Код:
    static void Main(string[] args)
    {
        using (var master = ModbusIpMaster.CreateIp(new TcpClient("10.0.6.10", 502)))
        {
            var reg0 = master.ReadHoldingRegisters(1, 0, 1)[0];
        }
    }
    Причём добавление в проект вообще в три щелчка делается:

    nmodbus.png

    Последнюю строку — в бесконечный цикл, и работать будет вечно. Уже в бою испытано. А вы какую-то сырую поделку нашли. Кстати ПЛК разрывает соединение через 12 секунд отсутствия активности на сокете, если что.
    Последний раз редактировалось Yegor; 12.12.2015 в 12:07.

  7. #7

    По умолчанию

    Цитата Сообщение от Yegor Посмотреть сообщение
    оч смешно
    Действительно смешно. Особенно если принять во внимание то, что я имел ввиду величину самой библиотеки, которую мне еще нужно адаптировать под мобильную платформу.

    А ModbusTCP — всего один класс.

    Цитата Сообщение от Yegor Посмотреть сообщение
    Кстати ПЛК разрывает соединение через 12 секунд отсутствия активности на сокете, если что.
    А тут спасибо. Я это учту.
    Последний раз редактировалось Barabus; 12.12.2015 в 16:45.

  8. #8
    Пользователь
    Регистрация
    13.10.2011
    Адрес
    Златоуст
    Сообщений
    1,021

    По умолчанию

    величину самой библиотеки
    75 КБ?
    А ModbusTCP — всего один класс.
    Один непротестированный класс, который нарушает каждую букву SOLID. Серьёзно, блин, у чувака там пародия на dispose без интерфейса в финализаторе. Он на сишарпе только начал писать по-видимому. Там даже есть "if (OnOff == true)" — так только новички пишут. Такой код за километр в серьёзных проектах обходить надо.

  9. #9

    По умолчанию

    Цитата Сообщение от Yegor Посмотреть сообщение
    75 КБ?
    Туева хуча файлов. Попробуйте ка подключить всю эту радость к проекту Unity, чтобы оно работало под Andoid и iOS.

    Цитата Сообщение от Yegor Посмотреть сообщение
    Такой код за километр в серьёзных проектах обходить надо.
    Ничего, я уже многое поправил под себя. Под виндой работает безупречно. Теперь надо все это заставить работать под Andoid и iOS. Вот тут затыка. Официально System.Net.Sockets поддерживается в Unity 4 Pro и в Unity 5 Personal и Pro. По факту же ни черта не работает. Придется все переделывать под Transport Layer API, а с ним свои заморочки.

    Проблема. Но к ПЛК никакого отношения уже не имеющая.

  10. #10

    По умолчанию

    Цитата Сообщение от krollcbas Посмотреть сообщение
    Barabus, я был не прав в том, что не распознал сразу глубины Ваших разработок.
    Вы можете приоткрыть тайну над целью подобной разработки?
    Все просто, мне нужно управлять ПЛК с мобильных устройств.

Страница 1 из 3 123 ПоследняяПоследняя

Похожие темы

  1. ПЛК 110-30-М. Запрос HTTP. Библиотека SysLibSockets.lib.
    от Андрей Шатохин в разделе ПЛК1хх
    Ответов: 11
    Последнее сообщение: 22.01.2021, 00:11
  2. Выполнить запрос HTTP_GET
    от Андрей Шатохин в разделе Сетевые технологии
    Ответов: 3
    Последнее сообщение: 02.11.2016, 10:10
  3. ПЛК100 HTTP-запрос методом GET
    от Михаил Ч. в разделе ПЛК1хх
    Ответов: 5
    Последнее сообщение: 26.08.2014, 10:19
  4. Помогите прописать запрос с ПЛК по Modbus на QEM-модуль RS2-5.73
    от Vania в разделе Помощь Разработчикам
    Ответов: 0
    Последнее сообщение: 28.04.2010, 13:04
  5. Запрос ТРМ-201
    от hilih в разделе Помощь Разработчикам
    Ответов: 1
    Последнее сообщение: 13.04.2009, 12:10

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •