Этот вариант может не проканать. Мне не подошел, номер меняется достаточно часто, и задается ПР , задействованы все сетевые. Передаваемые иногда путались. И это на столе. Где нет помех и прочих возможных проблем со связью.
Вид для печати
Ну да, тут ещё придётся бит разрешения на чтение ввести, типа кнопку "считать регистр" ввести, иначе несогласованность может выйти, но это решаемо.
Когда все в одной как то попроще и надежнее, в принципе 10 разрядов вполне хватает для передачи условных температур и т.п. Если у ТС этого диапазона хватает, то 6 разрядов для номера остается. Все 50 можно надежно передать.
Несколько лет назад я предлагал передавать одним регистром до 128 переменных, в смысле, регистр делится на два байта, в одном из байтов передаём данные во втором служебную информацию(значение 0-255), чтобы потом собрать исходные данные из двух байт данных разных посылок. Можно и 32 битные переменные пересылать, только их будет в 2 раза меньше, до 64(включительно) и собирать их придётся из 4 байт данных разных посылок! Короче, всё очень просто, но идея старая! Да, чуть не забыл, предварительно данные надо подготовить, в смысле, разбить на байты и каждый байт данных будет передаваться отдельной посылкой! Надеюсь понятно расписал свою идею?!
Здравствуйте. Решил организовать последовательную запись переменных с панели СП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 шт.