Страница 3 из 4 ПерваяПервая 1234 ПоследняяПоследняя
Показано с 21 по 30 из 39

Тема: ПЛК160 и тайм-ауты Modbus Slave TCP

Комбинированный просмотр

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1

    По умолчанию

    Цитата Сообщение от Валенок Посмотреть сообщение
    А у меня клиент может свободно и без единой ошибки опросить плк c tcp-слейвом 1000 раз в секунду. И что ?
    Ньюансов нет. Копайте своего клиента.
    Может поделитесь? Или подскажите на основе чего этот клиент.

  2. #2

    По умолчанию

    Цитата Сообщение от capzap Посмотреть сообщение
    как вариант это то что плк рвет соединение если его не опрашивают чаще чем 10 секунд
    Так я же по идеи открываю каждый раз новое соединение, просто так открытым оно не держится.

  3. #3

    По умолчанию

    Цитата Сообщение от capzap Посмотреть сообщение
    Возможно добавив логирование тоже можно чуть больше узнать о проблеме
    import logging
    from pymodbus.client.sync import ModbusTcpClient

    logging.basicConfig()
    log = logging.getLogger()
    log.setLevel(logging.DEBUG)
    ...
    ERRORymodbus.client.sync:Connection to (10.1.10.5, 502) failed: timed out


    Все что падает в лог при этом.

    WireShark говорит, что от контроллера приходит ответ на попытку установить соединение с кодом 4 и признаком Connection Reset
    Изображения Изображения

  4. #4

    По умолчанию

    Цитата Сообщение от gOsToFf Посмотреть сообщение
    ERRORymodbus.client.sync:Connection to (10.1.10.5, 502) failed: timed out


    Все что падает в лог при этом.

    WireShark говорит, что от контроллера приходит ответ на попытку установить соединение с кодом 4 и признаком Connection Reset
    Выложите ВЕСЬ лог, хотя бы за 2-3 минуты. То, что ПЛК возвращает Reset - означает что он не может принять входящее, к примеру к нему УЖЕ по этому порту подключились. И соединение не разорвано клиентом, а он открывает ещё одно. Типичное, кстати, поведение для библиотек на PC, они предполагают что число сокетов у сервера бесконечное, а разъединение соединения - дело ОС, а там таймаут 2 часа по умолчанию
    Тролль-наседка, добрый, нежный и ласковый

  5. #5

    По умолчанию

    Цитата Сообщение от capzap Посмотреть сообщение
    На гуглите, как настраивается таймаут, точно помню что на стековерфлоу это было
    проблемы нету, client.timeout ( ide сама подскажет, так же можно по пакету пошарить )

    По умолчанию стоит
    Timeout = 3

    Проверил 1 и 10, разницы нету никакой.

    Мне все же кажется, что косяк в контроллере, может что-то с чем-то конфликтовать или ресурсов не хватать?
    Как я и говорил, для модбаса вообще не используется никаких библиотек, в целом в у меня кроме стандартных ничего нету в коде.
    Последний раз редактировалось gOsToFf; 25.03.2020 в 15:00.

  6. #6

    По умолчанию

    Цитата Сообщение от capzap Посмотреть сообщение
    а пинг сколько показывает когда Вы из сети 172.27.1.0 стучитесь в плк с адресом 10.1.10.5 ?
    Из этой сети прям очень дофига на самом деле, потому что это через впн и очень далеко. Но проблема проявляется и с сервера, на котором крутится софт управляющий, а там меньше 1мс ( в основном )
    Изображения Изображения
    Последний раз редактировалось gOsToFf; 25.03.2020 в 15:57.

  7. #7

    По умолчанию

    Цитата Сообщение от capzap Посмотреть сообщение
    смутили не слова, а дела и поступки. Писали что на Го кодили, но ни чего не выложили, видимо не созрели для него, питоновский скрипт тоже написан новичком, не вникающим в детали, хотите чтоб поверил Вашим словам что с сетями у Вас все хорошо, фактов нет чтобы верить. Решили быкануть, варитесь сами в собственных проблемах
    Что мне выкладывать? Весь проект, который есть или что? Сколько людей пишет на питоне, тем более которые есть тут в работе с ПЛК. Зато скриптики на питоне всем понятны, вот и взял БАЗОВЫЙ скрипт, как и писал в том сообщения где выкладывал и все. Какие дела? Мне рассказать как сеть устроена? Как траффик гуляет, где какие правила или что? Адреса разные, и находятся физически ПЛК в разных местах. Клиент на ГО я использую уже в более 20 разных проектах и везде все хорошо, а вот ПЛК и тем более ОВЕН сам использую в первый раз, потому и пришел за советом. У меня было скорее предположение, что косяк в либо в ПЛК, либо в ньюансах кодинга.

    Я решил быкануть? Это вы делаете выводы, а не спрашиваете. Зачем убеждать человека ЗА меня, где есть косяк? Есть сомнение, можно спросить или подсказать.
    Давайте подумаем, знаете ли вы, что если есть коллизия IP адресов в одном броадкаст домене, то роутеры блокируют такие пакеты на N секунд на момент перестроения arp таблиц, а следовательно будут потери пакетов, чуть выше я вам скинул скриншот с выборкой за 12 часов, где нету пропадания пакетов от слова совсем.

  8. #8

    По умолчанию

    Цитата Сообщение от capzap Посмотреть сообщение
    то что я удаляю посты, не значит что я не спрашивал Вас ни о чем.
    Меня заинтересовало стойкое желание Валенка обвинить клиента в проблемах, я поменял его точку зрения, крайний раз он начал придерживаться термина верхний уровень, не конкретизируя что клиент. Когда я предложил в питоне добавлять всё же адрес слейва, в Вашем коде на Го почему SlaveId равен пяти а не единице?
    Когда проверка была на Python, была залита урезанная версия софта для на ПЛК для проверки если вдруг не хватает ресурсов. Там был slave1 в продуктиве 5. Проблема в том, что косяк соединения с ПЛК и тут не совсем это важно какой адрес слейва указан. Разница будет только в ответе. в одном случае придут данные, в другом будет ошибка некорректного пакета.
    И всегда в обоих случаях сыпятся таймауты так же. Предложение добавить адрес было логичным, я проверил и его на всякий случай, хотя мало верил в успех.
    В целом если уже говорить о моих ошибках, то там есть еще одна ошибка, а именно я пытался читать койлы с кодом 01, когда как мне нужны входные регистры. Опять же, ошибка будет в ответе, то есть я увижу ошибки протокола, а не таймаут.

    Цитата Сообщение от capzap Посмотреть сообщение
    По сетям я тоже задавал вопросы, получил от Вас какой то скрин, какого то пакета, где там написано что это 12 часов работы не разбираюсь видимо, да был еще вырезка пинга из 48 посылок. То что я в одном из постов решил что адрес контроллера начинается с 10, а ПК со 172, это мне пришло в голову потому что по умолчанию овеновские контроллеры с 10-ти идут. Но по дампу получается что источником отправки пакетав таком случае является плк а приемником ПК
    Я же приложил скриншот с заббикса где проходит пинг до ПЛК. Сеть большая и контроллеры правда находятся в сегменте с 10м адресом не стандартным.
    Если честно про дамп не совсем понял. Там есть первый пакет
    ПК с которого я веду тест отправляет запрос SYN на открытие TCP сессию на ПЛК Овен, в ответ получает пакет RST, соотвественно стандартная настройка стека TCP пытается сделать повтор еще 2 раза, но так же получает RST после чего вываливается ошибка.

    Цитата Сообщение от capzap Посмотреть сообщение
    Я задал вопрос и про сам плк, не пойму зачем тогда раззоряться что Вы хотите помощи если выкладываете какие то миниатюрные вырезки ни на что не влияющие, понимаю впервые сталкиваетесь с овеном, поэтому эти скрины не нужны, либо сделайте скрин полного экрана и в режиме онлайн, чтоб было видно что не в эмуляции и что действительно на то время в конфигурации именно то что в проекте. Напомню что залитая программа держиться в ОЗУ и при выключении питания стирается, если не сделать загрузочный проект. Дополнительно, не плохо бы зайти в ПЛК-браузер и выложить вывод команды PLCInfo

    Сделать скриншот, что это реально ПЛК не проблема. Во вложении. Я вообще изначально хотел выложить целиком скриншот, но форум сказал, что я пытаюсь вложить слишком большой файл, вот и приходится их подрезать.
    Изображения Изображения

  9. #9

    По умолчанию

    Цитата Сообщение от capzap Посмотреть сообщение
    откуда это понятно? Если в 31 посте скрины с другого плк и на него не жалуются, то я не вижу что за прога в данный момент в плк с адресом 10.1.10.5 и говорить что он не виноват не стал бы. Пинг говорит что до него можно достучаться, это ни как не объясняет наличие сервера модбас или какой то другой проблемы
    Жалусюь на оба, к сожалению косяк на обоих. Очень не хватает низкоуровнего дебага на ПЛК, чтобы разобрать проблему.
    Кстати, банальный telnet на 502 порт так же не всегда отрабатывает ( просто зависает на соединении ), а иногда отрабатывает очеень долго и реже моментально. Именно просто на коннект. Так что не думаю, что есть смысл разбирать софт, который его опрашивает. Есть смысл разбираться в софте ПЛК наверно.

  10. #10

    По умолчанию

    Выдержка из кода на GO если это реально так может помочь...

    Код:
    const (
    	modbusPollingTimeout     = 50 * time.Millisecond
    	modbusFailRetryCount     = 20
    	modbusHandlerTimeout     = 3 * time.Second
    	modbusHandlerIDLETimeout = 20 * time.Second
    	modbusPLCSlaveId         = 5
    )
    
    
    func NewTCPModbusHandler(ipAddress string) *modbus.TCPClientHandler {
    	var modbusHandler *modbus.TCPClientHandler
    	modbusHandler = modbus.NewTCPClientHandler(ipAddress)
    
    	errConnect := modbusHandler.Connect()
    	if errConnect != nil {
    		//fmt.Println("ErrConnectModbusHandler to ", ipAddress, ": ", errConnect)
    	}
    	defer modbusHandler.Close()
    
    	return modbusHandler
    }
    
    
    func ReadPLCConfiguration(segmentId int) PLCConfiguration {
    	myHandler := NewTCPModbusHandler("10." + strconv.Itoa(segmentId) + ".10.5:502")
    	myHandler.SlaveId = modbusPLCSlaveId
    	myHandler.Timeout = modbusHandlerTimeout
    	myHandler.IdleTimeout = modbusHandlerIDLETimeout
    	client := modbus.NewClient(myHandler)
    
    	var err error
    	var readParam []byte
    	count := 1
    
    	readParam, err = client.ReadInputRegisters(19, 15)
    	for i := 0; i <= modbusFailRetryCount; i++ {
    		if err != nil {
    			count++
    			time.Sleep(modbusPollingTimeout)
    			readParam, err = client.ReadInputRegisters(19, 15)
    		}
    	}
    
    	fmt.Println("PLCConfig requests after ", count, " retries.")
    
    	myHandler.Close()
    
    	plcConf := PLCConfig[segmentId-1]
    
    	if err == nil {
    		s := reflect.ValueOf(&plcConf).Elem()
    
    		for i := 0; i < s.NumField()-1; i++ {
    			f := s.Field(i)
    			var temp_byte []byte
    
    			startIndex := 0
    			if i > 0 {
    				startIndex = i * 2
    			}
    			endIndex := startIndex + 1
    			temp_byte = append(temp_byte, readParam[startIndex])
    			temp_byte = append(temp_byte, readParam[endIndex])
    			temp_value := binary.BigEndian.Uint16(temp_byte)
    			f.SetUint(uint64(temp_value))
    		}
    		plcConf.LastUpdated = time.Now()
    	}
    
    	return plcConf
    }

Страница 3 из 4 ПерваяПервая 1234 ПоследняяПоследняя

Похожие темы

  1. Ответов: 2
    Последнее сообщение: 04.06.2019, 16:55
  2. ПЛК160(Master)+МВВ+ПЛК160(slave), по Modbus RTU
    от NikolaevV в разделе ПЛК1хх
    Ответов: 10
    Последнее сообщение: 16.05.2019, 18:07
  3. ПЛК160(ModbusMaster)+СП307(Slave) = односторонняя связь
    от Stab в разделе Панели оператора (HMI)
    Ответов: 1
    Последнее сообщение: 14.10.2016, 06:24
  4. ПЛК160: Modbus TCP Master и Modbus TCP Slave одновременно.
    от Антон Костюченко в разделе ПЛК1хх
    Ответов: 10
    Последнее сообщение: 18.07.2016, 10:36
  5. Убийство флеш памяти ПЛК160 LectusOPC ModbusTCP-SLave
    от gtdd1962 в разделе OPC Серверы
    Ответов: 5
    Последнее сообщение: 14.01.2016, 14:17

Ваши права

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