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

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

  1. #11

    По умолчанию

    Цитата Сообщение от capzap Посмотреть сообщение
    http://oscat.de/downloadmanager/view...u-english.html вот на англицком, а исходники на ST так они в любой стране одинаковы, на них языковые барьеры не действуют
    Спасибо, Тобиас оказался программно-плодовитым, список функций занимает 16 листов. Буду потихоньку читать.
    А что скажете, почему не удается записать биты и указатели на ячейки приходят короткие (40,41)?

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

    По умолчанию

    BITADR тоже для не стоит применять. В КДС откройте справка - содержание, в поиске наберите BITADR. Само описание функции и прочтите про ошибку №4031
    С помощью неё ни чего присваивать не получиться, да и само смещение надо дополнительно разбирать

    ЗЫ оскат это сообщество программистов пишущих открытый исходный код, так что одного человека нечего благодарить
    Последний раз редактировалось capzap; 03.09.2012 в 21:20.

  3. #13

    По умолчанию

    Цитата Сообщение от capzap Посмотреть сообщение
    BITADR тоже для не стоит применять. В КДС откройте справка - содержание, в поиске наберите BITADR. Само описание функции и прочтите про ошибку №4031
    С помощью неё ни чего присваивать не получиться, да и само смещение надо дополнительно разбирать

    ЗЫ оскат это сообщество программистов пишущих открытый исходный код, так что одного человека нечего благодарить
    спасибо.
    если переписывать в память обмена модбас не единый массив, а например две независимые структуры, предполагаю , что между структурами может быть "щель" из адресного пространства, используемого для других целей.
    компилятор и редактор связей не обязаны размещать отдельные переменные вплотную.
    да и собственно структуру не обязан размещать единым блоком?

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

    По умолчанию

    Цитата Сообщение от Загнетов Посмотреть сообщение
    спасибо.
    если переписывать в память обмена модбас не единый массив, а например две независимые структуры, предполагаю , что между структурами может быть "щель" из адресного пространства, используемого для других целей.
    компилятор и редактор связей не обязаны размещать отдельные переменные вплотную.
    да и собственно структуру не обязан размещать единым блоком?
    ну так ведь и в области слейва можно несколько каналов поименовать, чтоб сделать два указателя соответствующие каждой структуре

  5. #15

    По умолчанию

    Цитата Сообщение от capzap Посмотреть сообщение
    ну так ведь и в области слейва можно несколько каналов поименовать, чтоб сделать два указателя соответствующие каждой структуре
    Это удобно в каждом канале начинать заполнение с начала области сетевого обмена. Такая конфигурация ? (скриншот)
    И мастер будет воспринимать их как 2 разных slave устройства на одной линии?
    А внутри структуры отсутствие щелей между компонентами (исключая выравнивание, если оно там есть) гарантировано?
    Изображения Изображения
    • Тип файла: jpg 2_.jpg (15.1 Кб, Просмотров: 26)

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

    По умолчанию

    Цитата Сообщение от Загнетов Посмотреть сообщение
    Это удобно в каждом канале начинать заполнение с начала области сетевого обмена. Такая конфигурация ? (скриншот)
    И мастер будет воспринимать их как 2 разных slave устройства на одной линии?
    А внутри структуры отсутствие щелей между компонентами (исключая выравнивание, если оно там есть) гарантировано?
    я говорил про каналы, а не слейвы. Внутри структуры нет щелей, методы выравнивания в ней не действуют, ставте пустышки

  7. #17

    По умолчанию

    Цитата Сообщение от capzap Посмотреть сообщение
    я говорил про каналы, а не слейвы. Внутри структуры нет щелей, методы выравнивания в ней не действуют, ставте пустышки
    как канал именуется в конфигурации ресурсов?
    Последний раз редактировалось Загнетов; 04.09.2012 в 09:21.

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

    По умолчанию

    Егор про тип указателя правильно сказал :
    v : тип
    pv : pointer to тип

    v:=pv^;
    pv^:=v;
    И syslibmem не нужен, и скорость таже (в отдельных случаях даже быстрее)

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

    не увлекайтесь SysLibMem, при частом её использовании, ПЛК "лажает"
    Ну тут бы я поспорил Лажает только при косяках пользователя. Но незачем ее неподелу трогать. И, по чесноку, у syslibmem есть (или была ) махонькая ошибка при юзании кучи. И еще бывают траблы c P : pointer to dword/real не выровненым под кварту.

    при ошибке в работе с указателями
    Причем лучше сразу попасть в недоступную память - чтоб сразу перезагрузка и разобраться. CheckPointer на стадии отладки может помочь.

    Кстати по Bitaddr можно добраться до бита - там типа сегментов в ПК. Но нужен сегмент. А битадр - это смещение этого бита в сегменте. А вот с сегментами разбираться нет желания. Причем в каждом ПОУ разные сегменты судя по всему, у i/o конфигурации тоже.

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

    По умолчанию

    Цитата Сообщение от Валенок Посмотреть сообщение
    Кстати по Bitaddr можно добраться до бита - там типа сегментов в ПК. Но нужен сегмент. А битадр - это смещение этого бита в сегменте. А вот с сегментами разбираться нет желания. Причем в каждом ПОУ разные сегменты судя по всему, у i/o конфигурации тоже.
    битадр даете указатель очень похожий на указатели в симатике, если прочитать еще можно по быстрому, то записать куда сложнее, чем городить целое поу, лучше пойти другими методами, вроде маски и т.д.

    по поводу SysLibMem, я вроде на веб-сервере попался, когда клеил строчки, при частом использовании результат был не тот, что записывал, экспериментировать долго не стал, перешел на CONCAT и поблема исчезла

    по поводу структур, в общем случае щелей нет, но если вставлять були между другими типами, то конечно будут и много чего можно еще придумать, чтоб появилась не стыковка

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

    По умолчанию

    Склейка строчек специфична. Может где случайно SIZEOF вставили вместо LEN[+1]. Или нолик забыли поставить или наоборот лишний в строку в центре воткнули. Или забыли что просто string - это 81 байт.

    STRUCT T
    W : WORD;
    RR : REAL;
    END_STRUCT

    Проверьте в онлайне

    p : pointer to real;
    v : T;

    p := adr( T.W ) + sizeof(t.w); (*казалось бы правильно чтоб добраться до T.RR*)

Страница 2 из 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

Ваши права

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