Страница 1 из 2 12 ПоследняяПоследняя
Показано с 1 по 10 из 14

Тема: NModbus (C#) и ПЛК160: TCP-сокет закрывается через 11-12 секунд бездействия

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

    По умолчанию NModbus (C#) и ПЛК160: TCP-сокет закрывается через 11-12 секунд бездействия

    Здравствуйте!

    Есть библиотека NModbus - реализация протокола для использования в CLR. Я намерен использовать её для связи ПК и ПЛК160. В принципе, она работает, но по неведомой мне причине если в течение 12 секунд не передавать данные, а потом попытаться это сделать, то вылетает исключение "The operation is not allowed on non-connected sockets". Если же поддерживать активность - периодически передавать или принимать Modbus-данные - всё работает нормально. На ПЛК настроен стандартный Modbus TCP Slave.

    Подскажите пожалуйста, где вероятнее всего разрывается соединения при "длительном" простое - на ПЛК или в этой библиотеке?

    Здорово упрощённый, но воспроизводящий ошибку код:

    Код:
    static void Main(string[] args)
    {
    	var client = new TcpClient("192.168.0.18", 502);
    	var master = ModbusIpMaster.CreateIp(client);
    	client.Client.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.KeepAlive, true);
    	while (true)
    	{
    		master.WriteSingleRegister(0, 0);
    		Console.ReadKey(); // Ждём 12 секунд и получаем ошибку в очередном цикле
    	}
    }
    Спасибо.
    Последний раз редактировалось Yegor; 01.12.2011 в 13:00. Причина: добавил код

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

    По умолчанию

    установку соединения выводите в отдельную функцию и при появлении исключения конектитесь поновой

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

    По умолчанию

    Спасибо, capzap, я попробую.

    Кстати, уже думал об этом, но мне такое решение показалось не очень красивым. И, между прочим, попробовал вообще без NModbus, то есть просто передать данные через сокет - та же история.

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

    По умолчанию

    Если не хотите проблем с соединениями, переходите на UDP

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

    По умолчанию

    По-моему, ПЛК160 не умеет по Modbus в UDP. Или вы про сетевые переменные? Если да, то существует ли способ читать и записывать их на ПК?

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

    По умолчанию

    В ПЛК там работы на день, чтоб модбасТСР запустить через UDP, на ПК сложнее, незнаю как NModbus я использую библиотеку jamod на Яве, там все неоходимое есть. Раз Вы умеете передавать байты непосредственно в сокет, то проблем у Вас и со стороны ПК не будет

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

    По умолчанию

    TCP-вариант вроде стабильно работает если опрашивать постоянно (а это обычное дело для modbus). Так что ни с чем пока заморачиваться больше не стал. Но совет capzap буду иметь в виду, спасибо.

  8. #8

    По умолчанию

    Цитата Сообщение от capzap Посмотреть сообщение
    В ПЛК там работы на день, чтоб модбасТСР запустить через UDP, на ПК сложнее, незнаю как NModbus я использую библиотеку jamod на Яве, там все неоходимое есть. Раз Вы умеете передавать байты непосредственно в сокет, то проблем у Вас и со стороны ПК не будет
    Заинтересовался jamod, не подскажете с чего начинать и куда капать, если не сложно не могли бы поделится небольшим примером как это выглядит на страничке. Какие есть плюсы минусы с работой jamod.

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

    По умолчанию

    http://jamod.sourceforge.net/kb/howto_index.html
    про страничку не понял, что имеется ввиду, для томката что ли

    плюсыминусы, даже не знаю неудобства возникают, при использовании последовательных портов, она заточена под comm.jar а oracle больше её не поддерживает, так что она осталась 32-х разрядной, вряд ли это можно назвать сложностями для 64битных ОС, для других драйверов типа rxtx пришлось несколько классов переписывать

    с UDP там где то привязка к конкретному порту вроде, уже не помню, переписать класс пришлось для какой то компиленной визуализации
    Последний раз редактировалось capzap; 16.08.2015 в 09:05.
    Bad programmers worry about the code. Good programmers worry about data structures and their relationships

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

  10. #10

    По умолчанию

    Идея такова пишем страничку html, сохраняем ее на ПК, пользователь открывает ее начинает работать скрипт ява,jamod открывает сокет и ведется опрос ПЛК по ТСР далее закрывается сокет. Вы не пробовали такой вариант. Я это имел ввиду.

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

Похожие темы

  1. ПЛК160: Binary corrupted!
    от morcat в разделе ПЛК1хх
    Ответов: 12
    Последнее сообщение: 04.04.2012, 14:08
  2. Связь 2х плк160 через ethernet
    от Menaks в разделе ПЛК1хх
    Ответов: 9
    Последнее сообщение: 12.10.2011, 14:27
  3. пид регулятор на плк160
    от smokin в разделе ПЛК1хх
    Ответов: 1
    Последнее сообщение: 20.09.2011, 15:49
  4. ПЛК160
    от CEkip в разделе ПЛК1хх
    Ответов: 3
    Последнее сообщение: 07.02.2011, 11:34
  5. Файл не закрывается :(
    от Валенок в разделе ПЛК1хх
    Ответов: 3
    Последнее сообщение: 21.01.2009, 12:05

Ваши права

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