Просмотр полной версии : ПЛК отвергает запрос на подключение.
Использую пример на базе этой библиотеки:
http://www.codeproject.com/Tips/16260/Modbus-TCP-class
ПЛК110-32. Конфиг такой:
http://s8.hostingkartinok.com/uploads/images/2015/12/c0fd75b8abb5a6cb15af3f42dd67e0bc.png
Код, осуществляющий подключение:
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 устанавливается, видимых причин для неправильной работы нет.
Вопрос: В чем может быть причина? В реализации библиотеки? Или в самом контролере?
http://owen.ru/forum/showthread.php?t=20122
при исполнении выскакивает исключение на попытке установить синхронное соединение
Вопрос: В чем может быть причина? В реализации библиотеки? Или в самом контролере?
Дело в контроллере, один сокет - одно соединение
Спасибо большое, примеры по ссылке великолепные. Буду изучать библиотеку NModbus.
NModbus конечно хороша, но слишком уж велика. Оставил ее пока в сторонке. Продолжил разбираться с ModbusTCP.
capzap прав, в библиотеке допущена ошибка при проектировании, выражающаяся в попытке установить два соединения на один порт. Пример, поставляющийся с библиотекой, использует асинхронное соединение. Убрав код синхронного соединения я таки установил связь с ПЛК и успешно осуществил чтение с регистра и запись в оный.
Основной проблемой осталась периодическая потеря связи, что совсем не есть гуд. Конечно нет никакой сложности перехватывать исключение и восстанавливать связь, но для начала надо бы разобраться с причиной.
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];
}
}Причём добавление в проект вообще в три щелчка делается:
21277
Последнюю строку — в бесконечный цикл, и работать будет вечно. Уже в бою испытано. А вы какую-то сырую поделку нашли. Кстати ПЛК разрывает соединение через 12 секунд отсутствия активности на сокете, если что.
оч смешно
Действительно смешно. Особенно если принять во внимание то, что я имел ввиду величину самой библиотеки, которую мне еще нужно адаптировать под мобильную платформу.
А ModbusTCP — всего один класс.
Кстати ПЛК разрывает соединение через 12 секунд отсутствия активности на сокете, если что.
А тут спасибо. Я это учту.
величину самой библиотеки75 КБ?
А ModbusTCP — всего один класс.Один (https://en.wikipedia.org/wiki/God_object) непротестированный (https://github.com/NModbus4/NModbus4/tree/portable-3.0/NModbus4.UnitTests) класс, который нарушает каждую букву SOLID (https://ru.wikipedia.org/wiki/SOLID_(%D0%BE%D0%B1%D1%8A%D0%B5%D0%BA%D1%82%D0%BD% D0%BE-%D0%BE%D1%80%D0%B8%D0%B5%D0%BD%D1%82%D0%B8%D1%80%D 0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D0%BE%D0%B5_%D0%BF%D1 %80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%8 0%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5)). Серьёзно, блин, у чувака там пародия на dispose без интерфейса в финализаторе. Он на сишарпе только начал писать по-видимому. Там даже есть "if (OnOff == true)" — так только новички пишут. Такой код за километр в серьёзных проектах обходить надо.
75 КБ?
Туева хуча файлов. Попробуйте ка подключить всю эту радость к проекту Unity (unity3d.com), чтобы оно работало под Andoid и iOS.
Такой код за километр в серьёзных проектах обходить надо.
Ничего, я уже многое поправил под себя. Под виндой работает безупречно. Теперь надо все это заставить работать под Andoid и iOS. Вот тут затыка. Официально System.Net.Sockets поддерживается в Unity 4 Pro и в Unity 5 Personal и Pro. По факту же ни черта не работает. Придется все переделывать под Transport Layer API, а с ним свои заморочки.
Проблема. Но к ПЛК никакого отношения уже не имеющая.
Barabus, я был не прав в том, что не распознал сразу глубины Ваших разработок.
Вы можете приоткрыть тайну над целью подобной разработки?
Все просто, мне нужно управлять ПЛК с мобильных устройств.
Все просто, мне нужно управлять ПЛК с мобильных устройств.;)
В наших рядах пополнение :rolleyes:!?
;)
В наших рядах пополнение :rolleyes:!?
Угу. А вы какой движок/SDK используете для HMI?
Угу. А вы какой движок/SDK используете для HMI?
Самодельный :cool:-КаСкада ,если правильно понял вас ,так как не программист .
Самодельный :cool:-КаСкада
До-олгий путь. Это под каждую аппаратную платформу отдельное решение.
Взяли бы кроссплатформенный SDK. Unity советовать не буду, ибо вещь тяжеловесная и предназначена прежде всего для разработки игр. А вот Xamarin (https://xamarin.com/platform) или Marmalade (https://www.madewithmarmalade.com/) были бы в самый раз. Если с Unity ничего не получится, то я буду выбирать один из них.
Собственно, с Unity я разобрался. С сокетов переписал на потоки и все заработало.
Прошел еще один день открытий. Пора спать.
Хотелось бы сравнивать Вашу будущую разработку с такими брендами, как Iridium Mobile и THRONE
В эту сторону есть куда копать и что самое важное, есть спрос.
У Шнайдер Электрик программа программирования для пром. ПЛК называется Unity PRO XL (однофамильцы)
Ценички на эти продукты кусаются.
А как свое изделие закончу, непременно продемонстрирую. Планирую закончить программную часть и простенький аппаратный стенд к концу новогодних каникул. Теперь у меня есть для этого все необходимое.
Для тех, кто это покупает, цена - не аргумент.
Должно быть работоспособно и удобно в редактировании.
Не менее удобно, чем Codesys
Я разрабатываю не среду программирования, а решение для конечного пользователя. А для конечного пользователя цена еще как важна. 300 тыс. против 3 млн. - это существенно.
Собственно, новая проблема.
После холодного старта ПЛК отказывается устанавливать подключение. Стоит же сделать подключение/отключение (отладочный USB-порт) из CoDeSys, после этого проблем в работе не возникает.
В чем может быть причина?
Отбой. Надо просто немного с минуту подождать. Тогда все ОК.
Цена становится важна, когда в таких (как Вы указали) объемах.
Одна лицензия на один "мобильник" (Iridium Mobile) - 10000р
Про лицензионную политику THRONE - не скажу, так как там только в ближайших планах создать нативный драйвер для Modbus.
21302
А цена на оборудование, к которым они умеют работать? Цены КNX-контролеры начитаются где-то от $1500, если мне не изменяет память. Да с-ный выключатель или датчик движения стоят от $200. Итого себестоимость минимального проекта стремится к 500 т.р., а еще и себе в карман хочется что-то положить.
Решения на промышленных ПЛК выходят в разы дешевле. Свободу проектирования GUI же и сравнивать не стоит, на самописной системе возможности безграничны.
Собственно, не могу не согласиться с господином Yegorом. Выбранная мной библиотека Modbus-TCP-class — кусок г-на. Переписал уже практически полностью, убрал обработку исключений ибо сомневаюсь в корректности их работы. Постоянно срабатывала ложная тревога о потере подключения.
Сейчас гоняю около часа два подключения. Оба живы-здоровы. Похоже придется таки изучать протокол и все делать самому заново.
P.S.: Если кто знает годную библиотеку Modbus TCP Master полностью на шарпе и не сильно объемную, то дайте знать.
Собираетесь ли Вы на себе замыкать эксплуатацию объекта?
Конечно. Так и задумано.
Хотелось бы увидеть как будет выглядеть редактор.
К GUI я пока толком не приступал, все мучаюсь с сетью. Как будет что-то не очень страшное, сразу покажу.
Придется все переделывать под Transport Layer API, а с ним свои заморочки.В NModbus'е можно реализовать StreamResource и хоть через голубиную почту отправлять. Я так в PowerShell сообщения перенаправлял в консоль без всяких сокетов и портов.
В NModbus'е можно реализовать StreamResource и хоть через голубиную почту отправлять. Я так в PowerShell сообщения перенаправлял в консоль без всяких сокетов и портов.
У NModbus главная проблема в том, что он использует нативную библиотеку FTD2XX, которую as is на Android, iOS и Windows RT ну никак не запустить.
И даже если были бы их исходники на плюсах, то все равно никаких гарантий. Может там код на винду завязан. Да и переписывание отдельно под каждую платформу, связывание нативного кода с управляемым под Unity с последующим вылавливанием багов — это то еще развлечение.
Я уже выбрал другое решение. Тоже не фонтан с точки зрения красоты кода, но очень простое и главное — рабочее.
Powered by vBulletin® Version 4.2.3 Copyright © 2025 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot