в этой цитате модуль = программный модуль в конфигурации ввода-вывода ПЛК или slave-устройство ввода-вывода ?
Объект технически не сложный, но ответственность велика и я решил формализовать обращения к элементам структур, об этом далее.
в посте http://www.owen.ru/forum/showpost.ph...8&postcount=15 Валенок описал интересный формальный способ, использовать на манер препроцессорных директив символьные метки для обращения к элементам структур. При таком подходе получается компактно, но
возможны скрытые ошибки, о которых я написал по этой ссылке.
Если структурировать все данные явно, то можно возложить проверки такого рода на компилятор. Объем обмена значительно увеличится (увеличение около 10 раз), но для Ethernet это не критично.
Именовать переменные в области ввода вывода и создавать ошибки нет желания, поэтому там будет noname-балласт.
Заказчик попросил еще и ручную симуляцию статусов устройств с панели и это еще немного увеличило область обмена.
Данные структурируются таким способом: Агрегат.Механизм_или_датчик.Статусы_и_команды
Чтобы не иметь проблем с выравниванием (вопрос о нём в конце поста), минимальный элемент в структуре взят 16 битовым.
В результате одна задвижка, для работы с которой было бы достаточно 6 бит (закрыта, открыта, закрыть, открыть, симулировать статус открытия, закрытия) в при обмене в сегменте сети ПЛК-панель (Ethernet) превратилась в 48 бит
При обмене в сегменте ПЛК-slave (Овен-модули ввода и вывода, RS-485 mbus RTU) это будут всего 3 бита открыть/закрыть, закрыта, открыта.
Конечно умеет, ПЛК Овен ситывает данные с модулей ввода вывода Овен.
Но ради удобства решил формировать в ПЛК карту памяти в виде структуры, складывать в нее состояния устройств, команды ПЛК, команды панели, уставки и др. В зависимости от режима работы некоторыми переменными работать при помощи масок. Так легче.
Очень похоже на ситуацию, когда "пассажир и его портфель" едут на грузовике, но это не затратно.
выход - формировать балласт вручную из 4-байтных. (capzap справедливо "прищучил" меня - в "owen_plc_config..." модули называются каналами)
до SysLibCom еще не дошел, я в начале пути.
на форуме пишут про проблемы с этой библиотекой, а проблемы заказчику не нужны.
такое умение есть у "писателя" на С и asm.
В этот раз наверное проще скопировать дамп памяти в область обмена и пользоваться модулем mb TCP slave. Памяти не жалко.
Напишите что-нибудь на C и умение придет к Вам.
Косвенная адресация всегда опаснее, чем прямая, так как компилятор не может формально проверить ее. Очень даже правильно советуете. Можно по ошибке с указателями уйти в чужую область памяти и "натворить дел". Именно из-за этого я не стал применять способ описанный Валенком. Возможные ошибки не очевидны, и трудно выявляемы.
Кстати, можно ли из-за неправильного обращения по указателю нарушить оперативную память кода ПЛК Овен или она безопасно отделена?
Спасибо, может быть заменить в проекте все ПЛК 100 на 110-ые из-за съемных колодок и выигрыша производительности (или в 110 тот же ARM9?).
От этих контроллеров потребуется в основном хороший быстрый сетевой обмен. Логическая программа не сложная.
Вопросы:
1. Есть мнение (capzap) , что переписывая пословно по указателям около 400 байт в область обмена, возможно не вписаться в длительностью цикла ПЛК. Опасение реальное?
2. Может ли компилятор, редактор связей или динамический диспетчер памяти разместить элементы структуры не подряд вплотную друг за другом, а кусками в разных местах?
3. Тот же вопрос для массива 16 битных, есть ли гарантия на отсутствие "щелей"?
4. В структуре осуществляется выравнивание по адресам, подобное области ввода-вывода?