Страница 1 из 3 123 ПоследняяПоследняя
Показано с 1 по 10 из 27

Тема: Как записать по адресу указателя?

  1. #1

    По умолчанию Как записать по адресу указателя?

    1) синтаксис ST lkz "прочитать по адресу указателя " понятен:
    destination := pointer^;

    а как записать в ячейку по этому же адресу?
    pointer^ := source; ??????????????


    2) удастся ли одним оператором записать по адресу всё содержимое структуры (порядка 400 байт ради сетевого обмена).
    Может capzap или Валенок тоже что-то подскажут, они высказывали интересные мысли в смежной теме
    http://www.owen.ru/forum/showthread.php?t=10252&page=2
    Последний раз редактировалось Загнетов; 03.09.2012 в 17:41.

  2. #2
    Пользователь Аватар для capzap
    Регистрация
    25.02.2011
    Адрес
    Киров
    Сообщений
    10,248

    По умолчанию

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

  3. #3

    По умолчанию

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

    я хотел спросить и про синтаксис команды записи по указателю (вопрос №1)
    как написать pointer^ := source; ?

  4. #4
    Пользователь Аватар для capzap
    Регистрация
    25.02.2011
    Адрес
    Киров
    Сообщений
    10,248

    По умолчанию

    давно бы уже написали тестилку да проверили, а так что можно сказать, вроде все верно, только надо бы знать какие типы у переменных pointer и source, в конкретно в Вашем случае, тогда и можно дать утвердительный ответ

  5. #5

    По умолчанию

    Цитата Сообщение от capzap Посмотреть сообщение
    давно бы уже написали тестилку да проверили, а так что можно сказать, вроде все верно, только надо бы знать какие типы у переменных pointer и source, в конкретно в Вашем случае, тогда и можно дать утвердительный ответ
    вроде пишет по указателю.
    а почему нужно использовать библиотеку, или ST не умеет отрабатывать присваивание составного типа (всей сттруктуры)?


    и еще - при ошибке в работе с указателями - можно повредить оперативную память контроллера, или она не доступна таким способом?

  6. #6
    Пользователь Аватар для capzap
    Регистрация
    25.02.2011
    Адрес
    Киров
    Сообщений
    10,248

    По умолчанию

    Цитата Сообщение от Загнетов Посмотреть сообщение
    а почему нужно использовать библиотеку
    не использовать, а ознакомиться с примерами, как должен писаться код для ПЛК

  7. #7
    Пользователь
    Регистрация
    13.10.2011
    Адрес
    Златоуст
    Сообщений
    1,021

    По умолчанию

    Есть стандартная библиотека SysLibMem, содержащая функции для выделения, освобождения, копирования и заполнения памяти.
    а как записать в ячейку по этому же адресу?
    pointer^ := source; ??????????????
    Да, таков синтаксис разыменования указателя. Если тип указателя соответствует типу source, то прямо так и присваивайте. Если тип не соответствует, но вы уверены, что размер подходящий, то пользуйтесь функциями библиотеки SysLibMem.

  8. #8
    Пользователь Аватар для capzap
    Регистрация
    25.02.2011
    Адрес
    Киров
    Сообщений
    10,248

    По умолчанию

    не увлекайтесь SysLibMem, при частом её использовании, ПЛК "лажает" в совершенно не ожиданных местах, хорошо если это проявиться во время отладки, а если на производстве...

  9. #9

    По умолчанию

    Цитата Сообщение от capzap Посмотреть сообщение
    не использовать, а ознакомиться с примерами, как должен писаться код для ПЛК
    я бы ознакомился http://oscat.de/ , но на немецком языке понять не могу, а на других европейских они не пишут.

    Цитата Сообщение от Yegor Посмотреть сообщение
    Есть стандартная библиотека SysLibMem, содержащая функции для выделения, освобождения, копирования и заполнения памяти.Да, таков синтаксис разыменования указателя. Если тип указателя соответствует типу source, то прямо так и присваивайте. Если тип не соответствует, но вы уверены, что размер подходящий, то пользуйтесь функциями библиотеки SysLibMem.
    Да, проверил, так работает, кода тип source 16 битный. Попробовал записать по указателям на биты, но не получается и причина непонятна.
    Вернее значения записываются в иное место , далее в программе из этого места успешно считывается.

    Сравнил адреса указателей на 16 битную переменную и на ее отдельные биты - совсем разные значения, 202b3750 и 40, 41 (файл "исполнение").
    Изображения Изображения
    Последний раз редактировалось Загнетов; 03.09.2012 в 21:01.

  10. #10
    Пользователь Аватар для capzap
    Регистрация
    25.02.2011
    Адрес
    Киров
    Сообщений
    10,248

    По умолчанию

    http://oscat.de/downloadmanager/view...u-english.html вот на англицком, а исходники на ST так они в любой стране одинаковы, на них языковые барьеры не действуют

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

Похожие темы

  1. не записать с ИП-320 в ПЛК-110
    от DennisSV в разделе Панели оператора (HMI)
    Ответов: 9
    Последнее сообщение: 09.10.2013, 23:06
  2. Ответов: 3
    Последнее сообщение: 11.07.2012, 14:56
  3. как записать в память
    от Anton_Minsk в разделе ПЛК1хх
    Ответов: 7
    Последнее сообщение: 02.12.2008, 14:19
  4. Глюк при записи по адресу
    от superqwerty в разделе Трёп (Курилка)
    Ответов: 8
    Последнее сообщение: 15.09.2008, 10:07
  5. КАК записать уставку в ТРМ 138
    от незарегистрированный в разделе Помощь Разработчикам
    Ответов: 7
    Последнее сообщение: 10.05.2007, 18:51

Ваши права

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