Практически постоянно возникает задача связаться с каким-либо устройством стороннего производителя. Одним из самых распространенных и поддерживаемых многими производителями является протокол связи Modbus. Однако, поискав в Сети, я не нашел (может, конечно, и плохо искал, но, скорее, никто не хочет делиться своими трудами) примеров реализации данного протокола на контроллере Omron. Так что, делюсь собственной наработкой в данной области.
Те, кто уже сталкивался с подобной задачей, знают, что полноценный протокол редко доступен в бюджетных контроллерах, а если остального функционала с головой хватает для решения задачи, то приходится напрячь программиста.
- Под полноценным протоколом я понимаю, что указал себе регистры да биты для обмена, мастера-подчиненных, настройки - и все само подцепилось, пошел обмен данных, данные актуальны, и что ни запишешь - само передается.
Перед данным шаблоном подпрограммы связи по Modbus мной было поставлено нескольких требований:
- программа должна занимать как можно меньше времени на свою работу;
- должна быть написана наиболее простым способом (для кроссплатформенности);
- иметь возможность легко наращивать или изменять функционал;
- быть легкой в понимании;
- не ограничивать в количестве передаваемых данных;
- по возможности исключать ошибки использующей её программы
Из первого и второго требований определен метод реализации. С учетом, что на контроллерах иногда отсутствует поддержка написания собственных функциональных блоков и всегда есть прерывания, то часть кода, отвечающая за отправку и обработку запроса, помещена в прерывание. А часть, формирующая сам запрос, написана в основном цикле сканирования. Кроме того, для ускорения используются инструкции JMP для пропуска кусков кода (если их не использовать, время на работу команд внутри все равно будет потрачено, даже если разрешающее их условие не будет выполнено). Третий и четвертый и пятый пункты приводят к модульности программы - она состоит из отдельных блоков, дописывая которые можно добиться необходимой работы, не переписывая остальные блоки. Шестой пункт выразился в минимальном количестве внешних переменных, связывающих основной код и шаблон.
- Позже статья будет дополнена более подробным описанием работы программы
Комментариев нет:
Отправить комментарий