Вход

Просмотр полной версии : Передача данных СП310 на ПР200



Ivanvn
10.01.2024, 17:55
Здравствуйте! Нужна помощь. Есть ПР200 (слейв) и СП310 (мастер).
С СП310 в ПР200 иногда нужно передавать (или считывать из ПР200) параметры (50 целочисленных переменных). Скорость передачи большой роли не играет и не хочется забивать этими параметрами все сетевые переменные (так как они используются для других целей). Может кто-то организовывал последовательную передачу многих целочисленных переменных через одну сетевую переменную.
Я вижу как-то так, но как реализовать в программе не могу сообразить, может кто какие мысли, а может и макрос подкинет?
72846

https://ibb.co/7gXxm9X

МихаилГл
10.01.2024, 18:24
Создай ещё одну переменную, типа мультиплексор, которая будет решать, в какую переменную писать в слэйве.

kondor3000
10.01.2024, 18:28
Здравствуйте! Нужна помощь. Есть ПР200 (слейв) и СП310 (мастер).
С СП310 в ПР200 иногда нужно передавать (или считывать из ПР200) параметры (50 целочисленных переменных). Скорость передачи большой роли не играет и не хочется забивать этими параметрами все сетевые переменные (так как они используются для других целей). Может кто-то организовывал последовательную передачу многих целочисленных переменных через одну сетевую переменную.
Я вижу как-то так, но как реализовать в программе не могу сообразить, может кто какие мысли, а может и макрос подкинет?

В панели можно сделать типа рецепты и отправлять данные по номеру рецепта. Рецепт может содержать один параметр (ваш случай) или несколько. В ПР данные будут в одном регистре. Для отправки из ПР можно сделать макрос типа MUX, по номеру в регистр кладётся нужная переменная. Пример на 8 шт. можно расширить сколько надо.
Подобные вещи уже были, передавали 15 параметров на 200 деталей на 10 этапов.

Всего 2000 рецептов https://owen.ru/forum/showthread.php?t=35842&page=4

Вот ещё пример последовательной передачи https://owen.ru/forum/showthread.php?t=36417

Sergej_
10.01.2024, 18:28
Каков диапазон передаваемых переменных? Сколько бит из 16 занимают? Сейчас поищу макрос. Отправлю

МихаилГл
10.01.2024, 18:37
Каков диапазон передаваемых переменных? Сколько бит из 16 занимают? Сейчас поищу макрос. Отправлю

Он же сказал, 50 целочисленных и хочет задействовать всего 1 сетевую...
Он не про упаковку бит в слово...

Sergej_
10.01.2024, 18:44
Здравствуйте! Нужна помощь. Есть ПР200 (слейв) и СП310 (мастер).
С СП310 в ПР200 иногда нужно передавать (или считывать из ПР200)

]

Что то не желает прикрепляться, через файлообменник, под свои нужды доделаете. Сейчас до 13 переменных 12-и разрядных. Можно легко до 16 расширить , не снижая разрядность данных, если их разрядность можно уменьшить, то количество увеличить. Это для передачи из ПР. Для передачи из панели надо свой макрос писать для панели. https://transfiles.ru/ft3i8

Sergej_
10.01.2024, 18:46
Он же сказал, 50 целочисленных и хочет задействовать всего 1 сетевую...
Он не про упаковку бит в слово...

Это понятно , что речь про последовательно. Не одну, а не все 50 вроде как.

МихаилГл
10.01.2024, 18:48
Это понятно , что речь про последовательно. Не одну, а не все 50 вроде как.

Вложение гляньте...

Поэтому я и предложил использовать ещё 1, для отправки, и 1 для получения, в которых будет условный адрес этой переменной. А на стороне пр или плк это надо расшифровать.

Sergej_
10.01.2024, 18:55
Вложение гляньте...

Поэтому я и предложил использовать ещё 1, для отправки, и 1 для получения, в которых будет условный адрес этой переменной. А на стороне пр или плк это надо расшифровать.

Я делал так номер переменной сдвигал влево на 12 разрядов, а с 0 по 11 бит данные. И все одной переменной, это конечно частный случай, все зависит от разрядности данных.

МихаилГл
10.01.2024, 19:03
Я делал так номер переменной сдвигал влево на 12 разрядов, а с 0 по 11 бит данные. И все одной переменной, это конечно частный случай, все зависит от разрядности данных.

Ну как вариант тоже можно. Главное чтоб 12 бит хватило для диапазона значений.

Sergej_
10.01.2024, 19:09
Вложение гляньте...

Поэтому я и предложил использовать ещё 1, для отправки, и 1 для получения, в которых будет условный адрес этой переменной. А на стороне пр или плк это надо расшифровать.

Этот вариант может не проканать. Мне не подошел, номер меняется достаточно часто, и задается ПР , задействованы все сетевые. Передаваемые иногда путались. И это на столе. Где нет помех и прочих возможных проблем со связью.

МихаилГл
10.01.2024, 19:16
Ну да, тут ещё придётся бит разрешения на чтение ввести, типа кнопку "считать регистр" ввести, иначе несогласованность может выйти, но это решаемо.

Sergej_
10.01.2024, 19:27
Когда все в одной как то попроще и надежнее, в принципе 10 разрядов вполне хватает для передачи условных температур и т.п. Если у ТС этого диапазона хватает, то 6 разрядов для номера остается. Все 50 можно надежно передать.

Сергей0308
11.01.2024, 00:04
Несколько лет назад я предлагал передавать одним регистром до 128 переменных, в смысле, регистр делится на два байта, в одном из байтов передаём данные во втором служебную информацию(значение 0-255), чтобы потом собрать исходные данные из двух байт данных разных посылок. Можно и 32 битные переменные пересылать, только их будет в 2 раза меньше, до 64(включительно) и собирать их придётся из 4 байт данных разных посылок! Короче, всё очень просто, но идея старая! Да, чуть не забыл, предварительно данные надо подготовить, в смысле, разбить на байты и каждый байт данных будет передаваться отдельной посылкой! Надеюсь понятно расписал свою идею?!

Ivanvn
14.02.2024, 12:38
Здравствуйте. Решил организовать последовательную запись переменных с панели СП310 (мастер) в ПР200 (слейв) при помощи четырех регистров следующим образом:
- СП310 отправляет на ПР200 номер переменной (регистр 4х522) и данные (регистр 4х520)
- ПР200 считывает эти значения и записывает их в другие сетевые регистры, которые используются для проверки: номер переменной (регистр 4х523), данные (регистр 4х521). Помимо этого, полученные данные по средством демультиплексора записываются в необходимые переменные программы контроллера.
- СП310 считывает регистры, которые используются для проверки и производит их сравнения с отправленными (4х521 сравнивается с 4х520, а 4х523 сравнивается с 4х522). Если все Ок, то переходит к отправке следующих параметров. А если нет, то производит их перезапись пока при проверке они не совпадут.
На полноценную передачу одного параметра с его проверками в «домашних» условиях у меня уходит примерно 0,1 сек. (отправка номера – пауза 20мс (по умолчанию задержка отправки на СП310) – отправка данных – пауза 20 мс – считывание номера - пауза 20 мс – считывание данных пауза 20 мс).
Возникает ситуация что контроллер получил с СП310 номер переменой 4х522, а данные с 4х520, еще не пришли, так как пауза между запросами составляет 20 мс, а цикл программы - 5 мс. И на 15 мс данные в переменной на контроллере будут не те которые ми ожидаем. Программа за это время исполниться три раза как минимум, а могут быть моменты что в условиях помех или при других факторах передача по RS485 может подвиснуть, и программа будет работать с неправильными данными намного дольше.

Может вы сталкивались с данной проблемой и подскажите как лучше выйти из неё? Или все-таки нужно вводить переменную которая будет отправлять разрешение на запись в ПР200, и еще переменную которая будет свидетельствовать о успешной записи на ПР200 (будет передаваться на СП310)?

Ivanvn
14.02.2024, 13:55
https://s1.hostingkartinok.com/uploads/images/2024/02/3331ea897fc98a2772a62e32128f6ba5.png (https://hostingkartinok.com/show-image.php?id=3331ea897fc98a2772a62e32128f6ba5)

https://s1.hostingkartinok.com/uploads/images/2024/02/0ccbcf6dcadabdb98b1640ab0b3f5c99.png (https://hostingkartinok.com/show-image.php?id=0ccbcf6dcadabdb98b1640ab0b3f5c99)

https://s1.hostingkartinok.com/uploads/images/2024/02/24116713c401579f9e591a878c31c548.png (https://hostingkartinok.com/show-image.php?id=24116713c401579f9e591a878c31c548)

К предыдущему посту

kondor3000
14.02.2024, 15:08
Здравствуйте. Решил организовать последовательную запись переменных с панели СП310 (мастер) в ПР200 (слейв) при помощи четырех регистров следующим образом:
- СП310 отправляет на ПР200 номер переменной (регистр 4х522) и данные (регистр 4х520)


Почему вы работаете в древних версиях?
Как часто записываются данные в PFW регистры панели? Зачем такие проблемы с передачей? У вас регистров не хватает в ПР ?

Ivanvn
14.02.2024, 16:04
Данные записываться непостоянно - может раз в неделю. Скорость записи не так важна, как правильная передача без сбоев. Сетевых переменных в панели не хватает, раньше приходилось некоторые переменные объединять в один регистр и передавать. Но когда нужно было ввести новою переменною и все было занято, то опять .... процесс деления и уплотнения. А если буду передавать последовательно, то раз и навсегда от этой проблемы избавлюсь.

Проект который скинул - это версия для отладки передачи. По факту данных для передачи намного больше чем 32 шт.

kondor3000
14.02.2024, 16:07
Данные записываться непостоянно - может раз в неделю. Скорость записи не так важна, как правильная передача без сбоев. Сетевых переменных в панели не хватает, раньше приходилось некоторые переменные объединять в один регистр и передавать. Но когда нужно было ввести новою переменною и все было занято, то опять .... процесс деления и уплотнения. А если буду передавать последовательно, то раз и навсегда от этой проблемы избавлюсь.

Чем вас не устроила выложенная версия на 1 странице? Задали номер рецепта, например 1 и передали 2-4 параметра для этого рецепта?
При чём никаких макросов и проблем. Всё просто и всё работает как надо.

Dimensy
14.02.2024, 16:17
Здравствуйте. Решил организовать последовательную запись переменных с панели СП310 (мастер) в ПР200 (слейв) при помощи четырех регистров следующим образом:
- СП310 отправляет на ПР200 номер переменной (регистр 4х522) и данные (регистр 4х520)
- ПР200 считывает эти значения и записывает их в другие сетевые регистры, которые используются для проверки: номер переменной (регистр 4х523), данные (регистр 4х521). Помимо этого, полученные данные по средством демультиплексора записываются в необходимые переменные программы контроллера.
- СП310 считывает регистры, которые используются для проверки и производит их сравнения с отправленными (4х521 сравнивается с 4х520, а 4х523 сравнивается с 4х522). Если все Ок, то переходит к отправке следующих параметров. А если нет, то производит их перезапись пока при проверке они не совпадут.
На полноценную передачу одного параметра с его проверками в «домашних» условиях у меня уходит примерно 0,1 сек. (отправка номера – пауза 20мс (по умолчанию задержка отправки на СП310) – отправка данных – пауза 20 мс – считывание номера - пауза 20 мс – считывание данных пауза 20 мс).
Возникает ситуация что контроллер получил с СП310 номер переменой 4х522, а данные с 4х520, еще не пришли, так как пауза между запросами составляет 20 мс, а цикл программы - 5 мс. И на 15 мс данные в переменной на контроллере будут не те которые ми ожидаем. Программа за это время исполниться три раза как минимум, а могут быть моменты что в условиях помех или при других факторах передача по RS485 может подвиснуть, и программа будет работать с неправильными данными намного дольше.

Может вы сталкивались с данной проблемой и подскажите как лучше выйти из неё? Или все-таки нужно вводить переменную которая будет отправлять разрешение на запись в ПР200, и еще переменную которая будет свидетельствовать о успешной записи на ПР200 (будет передаваться на СП310)?

Я не пробовал, но возможно можно в ПРку передать целое 32-битное число, тогда просто собираете число, где первый регистр - это номер переменной, а второй - данные и отправляете одной посылкой