PDA

Просмотр полной версии : Ограничение памяти для обмена по RS-485



ivydy
20.06.2018, 10:10
Прошу помочь новичку. Имеем ПР-200. Катастрофически не хватает тех 64 регистров памяти, которые доступны для обмена по протоколу RS-485. Как можно обойти данное ограничение. Может существует какой-нибудь хитрый алгоритм для передачи большого объема информации в данной ситуации. Заранее спасибо.

melky
20.06.2018, 11:07
Все битовые значения загонять в один регистр.
вместо float использовать целочисленные значения используя множители например.

Все это придется указывать в документации и обрабатывать в Scada системе.

Ревака Юрий
20.06.2018, 11:19
Прошу помочь новичку. Имеем ПР-200. Катастрофически не хватает тех 64 регистров памяти, которые доступны для обмена по протоколу RS-485. Как можно обойти данное ограничение. Может существует какой-нибудь хитрый алгоритм для передачи большого объема информации в данной ситуации. Заранее спасибо.

Что у Вас там передается, может ПЛК нужен?

Алексеев
20.06.2018, 11:20
Прошу помочь новичку. Имеем ПР-200. Катастрофически не хватает тех 64 регистров памяти, которые доступны для обмена по протоколу RS-485. Как можно обойти данное ограничение. Может существует какой-нибудь хитрый алгоритм для передачи большого объема информации в данной ситуации. Заранее спасибо.

А Я бы передавал пакетами допустим 62 регистра пакет 64 номер пакета ПР200 SLAVE . Получаю запрос какой пакет сформировать и формирую .
И опять получаю какой и формирую . Да еще нужно подтверждение о сформированности пакета регистр 63. Задача не стояла. Обхожусь 64 регистрами .

Сергей0308
20.06.2018, 11:24
Если быстродействие не критично, можно увеличить количество передаваемых параметров в 128 раз, передавая последовательно, один байт использовать для передачи данных, другой для синхронизации, много раз об этом говорил, даже программы приводил, надеюсь, смысл понятен?!
http://www.owen.ru/forum/showthread.php?t=23807&page=5

ivydy
20.06.2018, 14:52
Нужен именно ПР200

ivydy
20.06.2018, 14:55
А Я бы передавал пакетами допустим 62 регистра пакет 64 номер пакета ПР200 SLAVE . Получаю запрос какой пакет сформировать и формирую .
И опять получаю какой и формирую . Да еще нужно подтверждение о сформированности пакета регистр 63. Задача не стояла. Обхожусь 64 регистрами .

А есть примеры сего действия? Обмен по RS485 осуществляется со сторонней панелью

ivydy
20.06.2018, 15:27
Если быстродействие не критично, можно увеличить количество передаваемых параметров в 128 раз, передавая последовательно, один байт использовать для передачи данных, другой для синхронизации, много раз об этом говорил, даже программы приводил, надеюсь, смысл понятен?!
http://www.owen.ru/forum/showthread.php?t=23807&page=5

что-то как-то не совсем (

Алексеев
20.06.2018, 16:16
А есть примеры сего действия? Обмен по RS485 осуществляется с панелью Weintek

К сожалению с панелью не работал . И не знаю её возможности по программируемости . С пр200 и другим пр200 ( или другим ПЛК).
Допустим посылается запрос на 1 пакет и приходит ответ что первый пакет ( равенство запроса и ответа) . То данные записываются в переменные
первого пакета и т.д . Я вижу такой выход из положения. Это как идея , а реализации нету.

melky
20.06.2018, 16:20
С панелью, в которой нет скриптов таких фокусов не пройдет. Ну и если в верхнем уровне идет запрос по четким регистрам тоже такой фокус не пройдет.

Scream
20.06.2018, 16:41
С панелью, в которой нет скриптов таких фокусов не пройдет. Ну и если в верхнем уровне идет запрос по четким регистрам тоже такой фокус не пройдет.

Скрипты есть. С ними можно работать.

Например передавать по 51 регистру, первый регистр это множитель на 50 в скрипте, остальные 50 это данные.
Допустим все данные из ПР загнали в массив.

array[51] = getData.... 'ПР 200', 3x, 512, 51 ...

затем раскладываем эти данные по ячейкам с множителем из первого элемента массива.

for i = 0 to 50
SetData(array[i+1], ‚Local HMI‛, LW, array[0]*50 + i, 1)
next i

как то так в общих чертах.

Получается набиваете 50 регистров данными в ПР с 513 по 563, а потом ставите 512 = 1
панель переписывает 50 регистров к себе в память с 50 по 100
потом опять в ПР набираете данные с 513 по 563 и в 512 ставите 2
панель переписывает 50 регистров к себе в память с 100 по 150
и т.д. нужное кол-во раз, хоть 1000 переписывайте.
я бы еще из ПР передавал бит готовности по которому и запускал скрипт в панели, тогда вообще автомат с макс. скоростью.

про скрипты ftp://ftp.weintek.com/mt8000/eng/UserManual/UserManual_separate_chapter/Chapter_18_Macro_Reference.pdf

melky
20.06.2018, 16:59
Scream так я написал если скриптов нет. Ну вот попробуйте этот фокус с ИП320 ? или со Scada системой, где задается просто номер регистра и тип переменной ?

Алексеев
20.06.2018, 18:59
Скрипты есть. С ними можно работать.

Например передавать по 51 регистру, первый регистр это множитель на 50 в скрипте, остальные 50 это данные.
Допустим все данные из ПР загнали в массив.



А в ПР200 использовать функции SEL или FSEL (6 на каждую сетевую переменную при 300). Но только последний Макрос в схеме будет очень длинный ( представьте например 300 переменных) но Я думаю на высоту макроса
ограничения не накладываются. Но где то на форуме читал что сетевые переменные хранятся
в энерго-независимой памяти ( хотя в этом сомневаюсь ) поскольку нельзя в энерго- независимую
память записывать сколь угодно много раз (меняя значения) в отличии от энерго-зависимой.

Серёга Букашкин
20.06.2018, 22:20
А в ПР200 использовать функции SEL или FSEL (6 на каждую сетевую переменную при 300). Но только последний Макрос в схеме будет очень длинный ( представьте например 300 переменных)
Сомнительно что ПР200 отвечает столь длинными пакетами. 12 регистров, длиннее не отвечает. Если мастер ПЛК и может делать групповые запросы, то этот фокус возможен. А ПР200 не делает групповых запросов, поэтому в связке из ПР200 мультиплексирование обмена по RS-485 сделать нельзя.

Сергей0308
20.06.2018, 22:39
что-то как-то не совсем (

Примерно так: создаём в ПР200 64 переменных(32 битных) или 128(16 битных), разбиваем на байты, получается 256 байт, передаём(пишем) последовательно например в другое ПР200 с запоминанием в памяти, в каждом регистре два байта, один байт данных, другой служебный байт с номером от "0" до "255", для синхронизации, что бы потом переданные байты правильно собрать! Для ускорения процесса можно и читать записываемые регистры, как только совпадает с исходным, переходить к следующему, короче примерно как-то так, надеюсь, теперь стало немного понятней? Пример посмотрите, на всякий случай, там я для синхронизации один бит использую, может тогда что прояснится?!

37754

http://www.owen.ru/forum/showthread.php?t=23807&page=5

Scream
21.06.2018, 09:20
Scream так я написал если скриптов нет. Ну вот попробуйте этот фокус с ИП320 ? или со Scada системой, где задается просто номер регистра и тип переменной ?

Дак давно ТС написал что w...k у него. Только модераторы не пропускают, конкурент типо.

Scream
21.06.2018, 09:25
А в ПР200 использовать функции SEL или FSEL (6 на каждую сетевую переменную при 300). Но только последний Макрос в схеме будет очень длинный ( представьте например 300 переменных) но Я думаю на высоту макроса
ограничения не накладываются. Но где то на форуме читал что сетевые переменные хранятся
в энерго-независимой памяти ( хотя в этом сомневаюсь ) поскольку нельзя в энерго- независимую
память записывать сколь угодно много раз (меняя значения) в отличии от энерго-зависимой.

Как писать в ПР не знаю, туда не лезу и не хочу. Как писать на клиенте (slave) дело хозяйское, со стороны панели (master) всё достаточно просто и сомневаюсь более простых решениях чем это.
Если передавать не 51, то по 11. хоть по сколько, можно разбить на подзапросы и вертеть если хотеть.

ivydy
21.06.2018, 13:11
Как писать в ПР не знаю, туда не лезу и не хочу. Как писать на клиенте (slave) дело хозяйское, со стороны панели (master) всё достаточно просто и сомневаюсь более простых решениях чем это.
Если передавать не 51, то по 11. хоть по сколько, можно разбить на подзапросы и вертеть если хотеть.

Спасибо, буду разбираться, пытаться претворить в жизнь. А с какой скоростью лучше менять множитель в 512 ? Как считаете?
Если у кого-нибудь еще будут какие-нибудь идеи-выслушаю с радостью

Ревака Юрий
21.06.2018, 13:33
Спасибо, буду разбираться, пытаться претворить в жизнь. А с какой скоростью лучше менять множитель в 512 ? Как считаете?
Если у кого-нибудь еще будут какие-нибудь идеи-выслушаю с радостью

А можете рассказать о Вашей системе, что она делает, и сколько реально необходимо сетевых переменных, и вообще на сколько сложный алгоритм и какое время цикла в программе?

melky
21.06.2018, 13:47
ivydy используйте часть 512-ого регистра для приема команды смены пакетов данных и не надо часто менять и что-то там делать...
Считали все данные, записали в 512 значение с измененным битом, ПР знает, что надо поменять данные на новую партию и так по кругу.