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