Цитата Сообщение от Ivanvn Посмотреть сообщение
Здравствуйте. Решил организовать последовательную запись переменных с панели СП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-битное число, тогда просто собираете число, где первый регистр - это номер переменной, а второй - данные и отправляете одной посылкой