Страница 2 из 2 ПерваяПервая 12
Показано с 11 по 16 из 16

Тема: Упаковка переменных BOOL, INT, REAL в Modbus String

  1. #11

    По умолчанию

    Цитата Сообщение от Валенок Посмотреть сообщение
    + "проект/очистить все" перед каждой загрузкой. Если не поможет - ищите ошибку в 22й строке
    С указателями всегда и везде - нормуль. Только руки портят. И вообще - какой-то сложный способ упаковки.
    Чистить не пробовал.
    Паковать сразу INT - не получиться из-за возможного смещения адреса (уже описана проблема), поэтому упаковка по байтно.

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

    По умолчанию

    Сами себе сложности создаете. Стринг в umd расположен как нужно (адрес кратен 4).
    На кой вам еще где-то стринги ? А сами данные в стринге выровнять сложно ? И причем тут стринг вообще. Забудьте. Нет стринга, есть буфер с нужного адреса



    Код:
    fb my
    var_input
      k : real;
      i : int;
      b : byte;
      x : byte;  //неявная
      .......
    end;  
    ----
    ;
    ----
    
    
    var
      p : pointer to my;
       k : real;
      i : int;
      b : byte;
      m : my;
    ----
    p := adr(строка_прям_в_umd);
    p^(i:=i,k:=k,b:=b);    //упаковали&положили
    
    m := p^;  //куда-то переложили все
    j := p^.j; //взяли часть
    ..
    
    
    Общий случай (где могут гулять адреса)
    
    var
       k : real;
      i : int;
      b : byte;
      m : my;
    ----
    m(i:=i,k:=k,b:=b);  //упаковали
    sysmemcpy(..., adr(m),sizeof(m)); //переложили хоть куда
    
    
    sysmemcpy(adr(m),adr(...),sizeof(m)); //переложили хоть откуда
    j := m.j; //взяли часть
    Заставьте машину думать по максимуму. А вам - только структуру/фб грамотно описать - и все
    Последний раз редактировалось Валенок; 20.04.2015 в 15:54.

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

    По умолчанию

    Цитата Сообщение от Дмитрий Артюховский Посмотреть сообщение
    т.е. как фишка ляжет -50 на 50 .
    Фишки всегда кладутся как нужно если понимать как их класть ))

  4. #14

    По умолчанию

    Цитата Сообщение от Валенок Посмотреть сообщение
    Фишки всегда кладутся как нужно если понимать как их класть ))
    Я для себя - объявил массив из DWORDов ( чтобы он "правильно" в память лег ) и лазаю в него уже любыми указателями, правильно разместив переменные ))) это если "разогнать" код нужно, а для понимания лучше через обычные переменные, сильно время на отладке экономится!

  5. #15
    Пользователь
    Регистрация
    19.11.2011
    Адрес
    г. Белгород
    Сообщений
    357

    По умолчанию

    Цитата Сообщение от Дмитрий Артюховский Посмотреть сообщение
    (*читаем из строки переменные разных типов*)
    ptr2 := ADR(str1); (*ставим указатель на нашу стоку*)
    j:=ptr2^; (*читаем переменную типа INT*)
    ptr3 := ptr2 + 2; (*смещаем указатель на 2 байта*)

    j := ptr2^;
    вот здесь "собака" - если str1 начинается с четного адреса - будет работать, если с нечетного - ватчдог! т.е. как фишка ляжет -50 на 50 ))) поработал код, добавили переменную и абзац! Егор правду глаголет! проверил сам.
    С Егором согласен, у меня были проблемы когда структуру через указатели юзал, в симуляторе работало, а вот в реальном железе были проблемы. После выравнивания проблемы закончились.

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

    По умолчанию

    ни кто разве не замечал в оскат бибке, что присвоив последний раз указатель, он смещается еще раз, может в этом "собака порылась"
    Bad programmers worry about the code. Good programmers worry about data structures and their relationships

    среди успешных людей я не встречала нытиков
    Барбара Коркоран

Страница 2 из 2 ПерваяПервая 12

Похожие темы

  1. Ответов: 20
    Последнее сообщение: 03.05.2015, 16:01
  2. Упаковка переменных ПЛК
    от ramilgim в разделе ПЛК1хх
    Ответов: 3
    Последнее сообщение: 28.04.2013, 22:06
  3. Переменная REAL ведет себя как Int при вычислениях
    от lomtik в разделе Сетевые технологии
    Ответов: 9
    Последнее сообщение: 16.01.2013, 12:50
  4. преобразование Real>string кракозябры
    от K580BB55A в разделе ПЛК1хх
    Ответов: 1
    Последнее сообщение: 09.11.2010, 17:07

Ваши права

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