Страница 2 из 3 ПерваяПервая 123 ПоследняяПоследняя
Показано с 11 по 20 из 26

Тема: Почему бы Овену не сделать переменные 64 или 128 байт в модуле slave?

  1. #11

    По умолчанию

    Цитата Сообщение от Николаев Андрей Посмотреть сообщение
    To Загнетов:
    Давайте еще раз разберемся.
    Вам необходимо опрашивать 100-150 битных датчиков? При нормальном формировании области памяти опрашиваемого устройства\устройств это занимает от 4 до 5 регистров Мы в модулях ОБЯЗАТЕЛЬНО сделали маски входов и маски выходов, где одной посылкой значение 32 входов считывается....
    в этой цитате модуль = программный модуль в конфигурации ввода-вывода ПЛК или slave-устройство ввода-вывода ?


    Объект технически не сложный, но ответственность велика и я решил формализовать обращения к элементам структур, об этом далее.

    в посте http://www.owen.ru/forum/showpost.ph...8&postcount=15 Валенок описал интересный формальный способ, использовать на манер препроцессорных директив символьные метки для обращения к элементам структур. При таком подходе получается компактно, но
    возможны скрытые ошибки, о которых я написал по этой ссылке.

    Если структурировать все данные явно, то можно возложить проверки такого рода на компилятор. Объем обмена значительно увеличится (увеличение около 10 раз), но для Ethernet это не критично.
    Именовать переменные в области ввода вывода и создавать ошибки нет желания, поэтому там будет noname-балласт.

    Заказчик попросил еще и ручную симуляцию статусов устройств с панели и это еще немного увеличило область обмена.
    Данные структурируются таким способом: Агрегат.Механизм_или_датчик.Статусы_и_команды
    Чтобы не иметь проблем с выравниванием (вопрос о нём в конце поста), минимальный элемент в структуре взят 16 битовым.

    В результате одна задвижка, для работы с которой было бы достаточно 6 бит (закрыта, открыта, закрыть, открыть, симулировать статус открытия, закрытия) в при обмене в сегменте сети ПЛК-панель (Ethernet) превратилась в 48 бит

    При обмене в сегменте ПЛК-slave (Овен-модули ввода и вывода, RS-485 mbus RTU) это будут всего 3 бита открыть/закрыть, закрыта, открыта.

    Цитата Сообщение от Николаев Андрей Посмотреть сообщение
    To Загнетов:
    Или Вам необходимо формировать в ПЛК карту памяти, причем опрашивающее устройство не умеет читать произвольные регистры, а ему нужно выравнивать, добавляя заплатки?
    Просто до конца не понял.
    Конечно умеет, ПЛК Овен ситывает данные с модулей ввода вывода Овен.
    Но ради удобства решил формировать в ПЛК карту памяти в виде структуры, складывать в нее состояния устройств, команды ПЛК, команды панели, уставки и др. В зависимости от режима работы некоторыми переменными работать при помощи масок. Так легче.
    Очень похоже на ситуацию, когда "пассажир и его портфель" едут на грузовике, но это не затратно.

    Цитата Сообщение от Николаев Андрей Посмотреть сообщение
    А вот официальный ответ: пока что добавлять в конфигурацию модули 64 или 128 байт не планировали.
    выход - формировать балласт вручную из 4-байтных. (capzap справедливо "прищучил" меня - в "owen_plc_config..." модули называются каналами)

    Цитата Сообщение от Николаев Андрей Посмотреть сообщение
    Принципиально это возможно. Но задача такая становилась 1-2 раза. При более близком рассмотрении люди переходили на построение обмена через SysLibCom.
    до SysLibCom еще не дошел, я в начале пути.
    на форуме пишут про проблемы с этой библиотекой, а проблемы заказчику не нужны.

    Цитата Сообщение от Николаев Андрей Посмотреть сообщение
    И еще раз. Если Вы умеете формировать дамп памяти и работать с ним - рекомендую пользоваться библиотеками.
    такое умение есть у "писателя" на С и asm.

    Цитата Сообщение от Николаев Андрей Посмотреть сообщение
    В них Вы можете формировать какие угодно дампы по размеру. Плюс совершенно не используется память, ограниченная типом лицензии L или М. Согласитесь, это здорово.
    Конфигурация создается для людей, которые ничего не хотят знать про дампы и указатели.
    В этот раз наверное проще скопировать дамп памяти в область обмена и пользоваться модулем mb TCP slave. Памяти не жалко.

    Цитата Сообщение от Николаев Андрей Посмотреть сообщение
    Скажу крамольную мысль - не смотря на все годы, проведенные с CoDeSys я не умею пользоваться указателями, и всем начинающим на курсах ЗАПРЕЩАЛ с ними работать (рекомендовал не работать хотя бы первые 6-9 месяцев). Ибо это путь к нестабильной работе контроллера и сложному поиску ошибок. И пользуются такими инструментами в основном спецы, перешедшие с ПО верхнего уровня на ПЛК.
    Напишите что-нибудь на C и умение придет к Вам.
    Косвенная адресация всегда опаснее, чем прямая, так как компилятор не может формально проверить ее. Очень даже правильно советуете. Можно по ошибке с указателями уйти в чужую область памяти и "натворить дел". Именно из-за этого я не стал применять способ описанный Валенком. Возможные ошибки не очевидны, и трудно выявляемы.
    Кстати, можно ли из-за неправильного обращения по указателю нарушить оперативную память кода ПЛК Овен или она безопасно отделена?

    Цитата Сообщение от Николаев Андрей Посмотреть сообщение
    Открыт к обсуждению.
    Спасибо, может быть заменить в проекте все ПЛК 100 на 110-ые из-за съемных колодок и выигрыша производительности (или в 110 тот же ARM9?).
    От этих контроллеров потребуется в основном хороший быстрый сетевой обмен. Логическая программа не сложная.

    Вопросы:

    1. Есть мнение (capzap) , что переписывая пословно по указателям около 400 байт в область обмена, возможно не вписаться в длительностью цикла ПЛК. Опасение реальное?
    2. Может ли компилятор, редактор связей или динамический диспетчер памяти разместить элементы структуры не подряд вплотную друг за другом, а кусками в разных местах?
    3. Тот же вопрос для массива 16 битных, есть ли гарантия на отсутствие "щелей"?
    4. В структуре осуществляется выравнивание по адресам, подобное области ввода-вывода?
    Последний раз редактировалось Загнетов; 05.09.2012 в 13:03.

  2. #12

    По умолчанию

    Охох...
    В кратце.
    0. Модули - я имел в виду как раз модули МХ.
    1. С библиотекой SysLibCom проблем у заказчика не может быть. Я подозреваю писали про сложности для программиста. К тому же есть библиотека UNM. Есть библиотека ModBus.
    2. Мне по работе уже не нужно так плотно работать с программированием. Да и не сторонник я работы с сложными механизмами при программировании.
    3. ПЛК110 аналогичен ПЛК100, за исключением входов\выходов.
    4. При большом количестве обмена программа может не укладываться в отведенное время. По этому можно увеличить время цикла

  3. #13

    По умолчанию

    Цитата Сообщение от capzap Посмотреть сообщение
    чего за подстава, где я такое писал
    Цитата Сообщение от capzap Посмотреть сообщение
    400 байт можно попробовать через цикл, в теле которого будет присвоение и переход на следующий байт. Главное чтоб цикл ПЛК не "вывалился" в стоп.
    И не стесняйтесь заходить на сайт oscat.de, Германия это не только порно, но и бесплатная помощь по КДС в виде библиотек. Там много функций построены на указателях
    Это классический вариант, а можно и создать указатель на 400-байтную структуру из модбас слейва и также присвоить значение структуры
    про неклассический вариант "разыменование адреса структуры" я вроде уже писал.

  4. #14

    По умолчанию

    Цитата Сообщение от capzap Посмотреть сообщение
    ну бывает, просто неудачным примером решил подвести к структурам и другим пользовательским типам
    вы с Валенком на форуме дельные мысли пишите, и это интересно.

  5. #15
    Пользователь
    Регистрация
    23.09.2008
    Адрес
    Центророссийск
    Сообщений
    2,271

    По умолчанию

    формальный способ, использовать ..символьные метки для обращения к элементам структур.
    Ну во-первых при большом кол-ве разных наборов битов можно делать перечисления и префиксы имен. Для каждого набора - разные префиксы связанные с владельцем
    И не надо чужие имена использовать в других местах даже если у одного и того же числа - несколько имен.

    но возможны скрытые ошибки..
    Ответ простой - не делайте их. Возможно 220 подать на Di

    На форум неоднократно приходят люди с предложениями - а давайте все будем носить каску дома - ведь мне один раз наголову упала люстра :
    -вопросы синтаксиса - это в Codesys а не сюда
    -если вилкой можно выколоть глаз, это не значит что нельзя ей пользоваться.

    Можно по ошибке с указателями уйти в чужую область памяти и "натворить дел". Именно из-за этого я не стал применять способ
    Не умеете выявлять и исправлять ошибки с указателями - просто не используйте их. Кто заставляет ? Полно других инструментов.
    до SysLibCom еще не дошел,..на форуме пишут про проблемы с этой библиотекой
    Неа-а. Проблемы при использовании этой библиотеки. А бодяга с 73 в соседних ветках - это проблема не библиотеки.

    Есть мнение что переписывая пословно по указателям около 400 байт в область обмена, возможно не вписаться в длительностью цикла ПЛК. Опасение реальное?
    Нет конечно А зачем так сложно - "пословно по указателям" ?
    Любой перенос это время. Но даже если будите по 60К переносить туда-сюда - ватчдога не будет (если только не заставить), но могут быть другие проблемы

    Может ли компилятор, редактор связей или динамический диспетчер памяти разместить элементы структуры не подряд вплотную друг за другом, а кусками в разных местах?
    В очередной раз - все друг за другом но :
    Выравнивание рулит и всегда одинаково
    Явное выделение, например RETAIN, это конечно другая область
    Работа с кучей нигдене обязана выделять подряд и в плотную


    3. Тот же вопрос для массива 16 битных, есть ли гарантия на отсутствие "щелей"?
    Массив чего угодно - всегда друг за другом без щелей. Это признак набора данных организованого как "массив". Везде.

    4. В структуре осуществляется выравнивание по адресам, подобное области ввода-вывода?
    Выравнивание везде одно
    Последний раз редактировалось Валенок; 04.10.2012 в 19:01.

  6. #16

    По умолчанию

    Внутри структуры нет щелей ?

    Цитата Сообщение от Валенок Посмотреть сообщение
    К сожалению - есть. И struct ровняется под кварту в отличие от ФБ. И sizeof офлайн/онлайн - из-за этого могут отличаться. Но лично я тоже предпочитаю явное указание пустышек.
    следовательно, чтобы избежать выравнивания внутри структуры, нужно сделать все её компоненты 4-байтовыми?

  7. #17

    По умолчанию

    Цитата Сообщение от Валенок Посмотреть сообщение
    Ну во-первых при большом кол-ве разных наборов битов можно делать перечисления и префиксы имен. Для каждого набора - разные префиксы связанные с владельцем
    Пример :
    Есть маска аварий Alarm. Её биты :
    STRUCT ENUM_ALARM
    (
    AL_одно,
    AL_другое,
    AL_...
    );
    И все формируемые аварии так и делать
    Alarm.AL_одно := беда_с_одно;
    ..
    Такая же структурность в обращении остается. Даже бегло по диагонали видно - свои ли имена используются. И не надо чужие имена использовать в других местах даже если у одного и того же числа - несколько имен.
    Суть от того, что объявили перечисляемым типом не меняется. Проверка все равно возлагается на нас, а не на компилятор.

  8. #18

    По умолчанию

    Цитата Сообщение от capzap Посмотреть сообщение
    Если область ввода/вывода модбас подвержена выравниванию, то и структура должна повторять, тот кусок которому будете присваивать. У меня модбас всегда заполнен без провалов, от них избавляюсь еще на стадии проекта программы, соответственно и структура имеет такой же вид. Ни о каком другом расположении в памяти данных как байт за байтом я не встречал
    ну и так видео выкладываю, может какие вопросы исчезнут

    1. если в ПЛК100 структура набрана одинаковыми 16-бит или 32-бит элементами, выравнивания быть не должно

    2. можно ли вместо видео непонятного качества выложить несекретную часть файла- проекта?

  9. #19

    По умолчанию

    Цитата Сообщение от capzap Посмотреть сообщение
    Видео как видео, несмогли рассмотреть принцип?

    wind player прокручивает за долю секунды, а irfanview не имеет кнопки пауза :-(
    Там ничего принципиального не было. Единственное, что не сразу рассмотрел, это был режим отладки :-)
    Все равно спасибо за помощь.
    Последний раз редактировалось Загнетов; 05.09.2012 в 22:48.

  10. #20
    Пользователь
    Регистрация
    23.09.2008
    Адрес
    Центророссийск
    Сообщений
    2,271

    По умолчанию

    Проверка все равно возлагается на нас, а не на компилятор.
    Вы переживаете и тратите время, время - деньги, заплатите другому и он не будет парится над этим и проверка не будет возлагатся на Вас.


    следовательно, чтобы избежать выравнивания внутри структуры, нужно сделать все её компоненты 4-байтовыми?
    Необязательно. Не нужно - а можно. Зачем избегать неизбежного, надо просто использовать это.
    Последний раз редактировалось Валенок; 04.10.2012 в 19:02.

Страница 2 из 3 ПерваяПервая 123 ПоследняяПоследняя

Похожие темы

  1. плк63-пм01 потеря байт
    от Elka в разделе ПЛК63/73
    Ответов: 35
    Последнее сообщение: 06.11.2012, 15:26
  2. ПЛК(Slave) < СП270(Master) > ПЛК(Slave). Хождение по экранам при потере связи.
    от masterfloMaster в разделе Панели оператора (HMI)
    Ответов: 3
    Последнее сообщение: 12.04.2011, 18:41
  3. чтение массива байт
    от Febricio в разделе Сетевые технологии
    Ответов: 1
    Последнее сообщение: 29.07.2010, 12:06
  4. Modbus slave переменные
    от Дмитрий77 в разделе ПЛК1хх
    Ответов: 7
    Последнее сообщение: 30.04.2010, 16:26

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •