PDA

Просмотр полной версии : Обрыв межсетевого обмена



IIeroniux
22.12.2014, 12:21
День добрый, уважаемая общественность!

Такой вопрос. Есть три ПЛК, работают в одной подсети используя межсетевой обмен по ethernet (UDP). Допустим с ПЛК1 и ПЛК2 передаем по два слова word на ПЛК3. Если из любого ПЛК выдернуть кабель ethernet, то на индикаторе останется последнее принятое значение. Как сделать индикацию о обрыве соединения?

Спасибо!

Филоненко Владислав
22.12.2014, 14:28
передавать постоянно счетчик секунд с каждого на каждый - если значение X секнд не меняется - обрыв

IIeroniux
23.12.2014, 08:08
Понятно. Грустно! Спасибо.

capzap
23.12.2014, 09:06
... Грустно! ...

Вы используете UDP
UDP предоставляет ненадёжный сервис, и датаграммы могут прийти не по порядку, дублироваться или вовсе исчезнуть без следа. UDP подразумевает, что проверка ошибок и исправление либо не нужны, либо должны исполняться в приложении. Чувствительные ко времени приложения часто используют UDP, так как предпочтительнее сбросить пакеты, чем ждать задержавшиеся пакеты, что может оказаться невозможным в системах реального времени. на нем даже без физического обрыва кабеля можно не дождаться данных

IIeroniux
24.12.2014, 12:10
Мне это известно, что протокол не гарантирует целостность доставки данных. Думал, есть штатная функция определения обрыва линии связи.
Стоит задача передавать раз в 10 секунд показания температуры с трех источников и отслеживать превышение сверх положенного.

lazy
24.12.2014, 13:33
Стоит задача передавать раз в 10 секунд показания температуры с трех источников и отслеживать превышение сверх положенного.
ну дык если через 10 секунд пакета нет (SysSockRecv возвращает 0 или -1 ) значит обрыв. )

жекон
24.12.2014, 22:18
День добрый, уважаемая общественность!

Такой вопрос. Есть три ПЛК, работают в одной подсети используя межсетевой обмен по ethernet (UDP). Допустим с ПЛК1 и ПЛК2 передаем по два слова word на ПЛК3. Если из любого ПЛК выдернуть кабель ethernet, то на индикаторе останется последнее принятое значение. Как сделать индикацию о обрыве соединения?

Спасибо!
А чем простой Модбас ТСП не устраивает?

Sergey666
24.12.2014, 22:27
Ну если на ТСП уже модбас слэйв висит , само собой появляется желание "разгрузить" , т.к UDP ресурсы памяти В.В не жрет.

жекон
24.12.2014, 22:54
Про то что слейв висит не слова не было

IIeroniux
25.12.2014, 13:42
А чем простой Модбас ТСП не устраивает?
Всё просто - не умею его готовить. Если в конфигурации ПЛК (codesys 2.3) вставить Modbus (slave), то можно вместо rs-485 выбрать tcp. А при добавлении Modbus (master) опции tcp нету, только modem, 232, 485.
У меня есть ПЛК-1 и ПЛК-2 (расстояние между ними 500 метров, локалка прокинута), к каждому по rs-485 подключены датчики. И необходимо показания с этих двух ПЛК завести на ПЛК-3 (локалка прокинута).
Вообще, что проще для меня - то и сделал.

Ребята, ещё вопрос. По организации связи через UDP, правильно ли я реализовал?

ПЛК-1 настроен в глобальных переменных PLC1 (идентификатор 1), и общие сетевые переменные А1 и А2, Word.
ПЛК-2 настроен в глобальных переменных PLC2 (идентификатор 2), и общие сетевые переменные А3 и А4, Word.
В настройках ПЛК-3 в глобальных переменных два списка, PLC1 (А1, А2) и PLC2 (А3, А4). У каждого соответствующий идентификатор.
Опрашивается нормально.

А когда был настроен единый список на все проекты с именем PLC (А1, А2 в ПЛК-1 и А3, А4 в ПЛК-2), в ПЛК-3 также PLC (А1, А2, А3, А4) но уже со всеми переменными - показания отображалась попеременно. А1, А2 - значения, А3, А4 - нули. Потом наоборот. И так каждую секунду. Т.е. одновременно все параметры А1... А4 не отображались. Переделал на отдельные списки PLC1, PLC2 и всё заработало. Это нормально?

melky
25.12.2014, 14:25
IIeroniux где-то petera картинку давал, что в явном виде Modbus Master нет. но на самом деле он есть (суслика видишь?)
Добавить в Modbus Master Universal Modbus Device и в его параметрах выбрать TCP, прописать IP адрес и порт

IIeroniux
25.12.2014, 16:09
Хм, т.е. если установить в параметрах UMD тип TCP, то будет игнорировать тип связи, указанный в Modbus (Master) - RS-485-1 [SLOT]?
А как в программе, у мастера ПЛК, вытащить из слейвов ПЛК показания? К примеру, когда связываешь между собой панель и ПЛК, то всё просто. Там можно явно указать адрес регистра, что в панели или выбрать переменную из списка modbus slave в ПЛК.
А когда связываешь два удаленных ПЛК?

melky
25.12.2014, 16:11
IIeroniux Ну вроде как да, будет игнорировать, но сам не проверял, просто вспомнил, что даже с картинкой выкладывали и именно с подобным вопросом о мастере TCP...
Так при связи наверное точно так же, прописывать регистры из слейва
Потом же вы добавляете Register Input Module и в нем прописываете регистр и режим чтения...

IIeroniux
25.12.2014, 16:17
Попробую, регистры естественно одинаковые должны быть, что бы все читалось. Пошел пробовать, спасибо:)

tantranah
30.01.2015, 21:53
Между прочим MODBus MASTER как раз позволяет оценивать доступность Slave. У него есть регистр (Last error) в котором если все нормально =0, если нет коннекта = 85. Правда если идет обращение к нескольким Слейвам, то при появлении в этом регистре "85" - нужно тут же посмотреть регистр (Last address), что бы понять какой Слейв отказал.

Валенок
31.01.2015, 01:23
tof нужен. Один раз - не пи..