Страница 193 из 1044 ПерваяПервая ... 93143183191192193194195203243293693 ... ПоследняяПоследняя
Показано с 1,921 по 1,930 из 10436

Тема: ВОПРОС-ОТВЕТ (отвечаем на простые вопросы от новичков)

  1. #1921

    По умолчанию

    Цитата Сообщение от kolyan Посмотреть сообщение
    Для Valadar 71:
    _____________
    Ну, как-то так.
    Рисовать не старался)):
    я побежал за ящЫком в магаз)) Колян, куда ехать?)) СПАСИБО ОГРОМНЕЙШЕЕ!!!!!!!!!

  2. #1922

    По умолчанию

    Цитата Сообщение от Valadar71 Посмотреть сообщение
    я побежал за ящЫком в магаз)) Колян, куда ехать?)) СПАСИБО ОГРОМНЕЙШЕЕ!!!!!!!!!
    На здоровье!)))

  3. #1923

    По умолчанию

    Уважаемые коллеги! Попал в ситуацию. В общем есть устройство которое на запрос возвращает структуру вида:
    hours1:BYTE;
    minutes1:BYTE;
    value1:INT;
    rele1:BYTE;

    hours2:BYTE;
    minutes2:BYTE;
    value2:INT;
    rele2:BYTE;

    hours3:BYTE;
    minutes3:BYTE;
    value3:INT;
    rele3:BYTE;

    hours4:BYTE;
    minutes4:BYTE;
    value4:INT;
    rele4:BYTE;

    hours5:BYTE;
    minutes5:BYTE;
    value5:INT;
    rele5:BYTE;

    hours6:BYTE;
    minutes6:BYTE;
    value6:INT;
    rele6:BYTE;

    я создаю такую структуру (тип А) и делаю переменную A_var: A;
    Из устройства эти структура приходит просто в виде упорядоченного набора байт (массив). Т.е. та структура которую я указал только последовательно побайтно.
    Переписываю этот массив в переменную A_var посредством указателя pt:POINTER TO A:
    pt:=ADR(kadr[4]);
    A_var:=pt^;

    И в итоге некоторые байты переписываются с каким-то странным смещением на 1 байт, в общем некорректно. Вот сижу и не пойму то ли лыжи не едут, то ли у меня образованности не хватает. Если есть нюансы при работе с указателями подскажите плиз.
    Чтобы понять рекурсию нужно понять рекурсию

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

    По умолчанию

    Цитата Сообщение от S.A.D. Посмотреть сообщение
    Уважаемые коллеги! Попал в ситуацию. В общем есть устройство которое на запрос возвращает структуру вида:
    hours1:BYTE;
    minutes1:BYTE;
    value1:INT;
    rele1:BYTE;

    hours2:BYTE;
    minutes2:BYTE;
    value2:INT;
    rele2:BYTE;

    hours3:BYTE;
    minutes3:BYTE;
    value3:INT;
    rele3:BYTE;

    hours4:BYTE;
    minutes4:BYTE;
    value4:INT;
    rele4:BYTE;

    hours5:BYTE;
    minutes5:BYTE;
    value5:INT;
    rele5:BYTE;

    hours6:BYTE;
    minutes6:BYTE;
    value6:INT;
    rele6:BYTE;

    я создаю такую структуру (тип А) и делаю переменную A_var: A;
    Из устройства эти структура приходит просто в виде упорядоченного набора байт (массив). Т.е. та структура которую я указал только последовательно побайтно.
    Переписываю этот массив в переменную A_var посредством указателя pt:POINTER TO A:
    pt:=ADR(kadr[4]);
    A_var:=pt^;

    И в итоге некоторые байты переписываются с каким-то странным смещением на 1 байт, в общем некорректно. Вот сижу и не пойму то ли лыжи не едут, то ли у меня образованности не хватает. Если есть нюансы при работе с указателями подскажите плиз.
    вот и наберите в поиске: "указатель структура смещение", г-н Валенок подробно описывал происходящее помоему даже в этой теме

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

    По умолчанию

    Если я правильно понял - идут 6 пакетиков по 5 байт ?
    Или тот девайс - плк-слейв, а это его структура ?
    PS
    Мне привычней - т-щ ))

  6. #1926

    По умолчанию

    Цитата Сообщение от Валенок Посмотреть сообщение
    Если я правильно понял - идут 6 пакетиков по 5 байт ?
    Или тот девайс - плк-слейв, а это его структура ?
    PS
    Мне привычней - т-щ ))
    идет один пакет длиной 30 байт, который нужно просто переложить в соответствующую структуру. Тот девайс Слейв. Только не ПЛК, а регулятор с протоколом WAKE.

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

  7. #1927

    По умолчанию

    Цитата Сообщение от capzap Посмотреть сообщение
    вот и наберите в поиске: "указатель структура смещение", г-н Валенок подробно описывал происходящее помоему даже в этой теме
    по данным критериям поиска вывалилось только ваше сообщение
    Чтобы понять рекурсию нужно понять рекурсию

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

    По умолчанию

    Цитата Сообщение от S.A.D. Посмотреть сообщение
    по данным критериям поиска вывалилось только ваше сообщение
    и в правду, ну вобщем смысл в том же самом выравнивании

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

    По умолчанию

    Что делать ?
    1.STRUCT_A
    h,m : byte;
    val : int;
    rele : byte;

    VAR
    V : array [1..6] of STRUCT_A;
    M : array [1..6,1..5] of byte;

    2.Принять данные в M

    3.Переложить M в V
    for i := 1 to 6 do
    V[i].h := M[i,1];
    V[i].m := M[i,2];
    V[i].val := 256 * M[i,4] + M[i,3]; (* или 256 * M[i,3] + M[i,4] ?*)
    V[i].rele := M[i,5];
    end_for

    Кто виноват ? (кратко)
    1.просто выравнивание
    2.выравнивание структур особенно

  10. #1930

    По умолчанию

    Цитата Сообщение от Валенок Посмотреть сообщение
    Что делать ?
    1.STRUCT_A
    h,m : byte;
    val : int;
    rele : byte;

    VAR
    V : array [1..6] of STRUCT_A;
    M : array [1..6,1..5] of byte;

    2.Принять данные в M

    3.Переложить M в V
    for i := 1 to 6 do
    V[i].h := M[i,1];
    V[i].m := M[i,2];
    V[i].val := 256 * M[i,4] + M[i,3]; (* или 256 * M[i,3] + M[i,4] ?*)
    V[i].rele := M[i,5];
    end_for

    Кто виноват ? (кратко)
    1.просто выравнивание
    2.выравнивание структур особенно
    спасибо! Смысл ясен)) Получается, что при инициализации структуры контроллер отводит память под неё как ему за хочется, а если мы инициализируем массив, то тут уже отводится последовательное кол-во байт. Вобщем следовало бы догадаться. Однако получится ли заполнить массив V [0..6] за раз посредством указателя? Или снова вмешается выравнивание в структуре лежащей по адресу V[i]? Что-то мне кажеся что вмешается. В таком случае получается не многим проще, чем захардкодить это переложение.
    Чтобы понять рекурсию нужно понять рекурсию

Страница 193 из 1044 ПерваяПервая ... 93143183191192193194195203243293693 ... ПоследняяПоследняя

Метки этой темы

Ваши права

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