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

Тема: POINTER TO what?

Комбинированный просмотр

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1
    Пользователь Аватар для drvlas
    Регистрация
    30.09.2010
    Адрес
    Киев
    Сообщений
    700

    По умолчанию

    Цитата Сообщение от Игорь Петров Посмотреть сообщение
    Если подпрограмма получает указатель и не знает что это, то сообщить ей тип логично. Она может по CASE для возможных типов взять переменную правильно, если ей это надо.
    Да, я именно так и понял то, что советовал уважаемый Валенок. В функциях чтения и записи значения параметра (там, где доступ к нему идет по индексу) будет CASE на варианты
    Код:
    BYTE
    WORD
    DWORD
    STRING
    TIME
    DATE
    При этом в структуре PARSCRIPT, описывающей интимности каждого параметра, добавляется элемент

    Код:
    Typ: PARTYPE;
    В нем и будет указываться тип переменной для данного параметра. И достаточно функции доступа указать индекс параметра, чтобы она извлекла из глобального массива структур ту, что описывает наш параметр и по элементу .Type сориентироваться, как доступаться к параметру.

    Я вот думаю: если пойнтер указывает, сколько извлекать байт (и сколько записывать), то не будет ли достаточно иметь разные указатели только на те типы данных, которые различаются количеством байт?
    Тогда у нас будет:
    Код:
    BYTE
    WORD
    DWORD
    STRING
    - и все. А всякие там INT, UINT, DINT, TIME, DATE - отдыхают. И обращение к переменной типа TIME будут происходить так же, как к переменной DWORD. Выдернутся 4 байта, а потом программа сделает с ними чего надо - и они обратно запихнутся так же. Даже порядок сохранения байтов не имеет значения, ИМХО.
    Можно так?

    Спасибо за подсказки! Постараюсь это проверить и сообщить результат.
    Последний раз редактировалось drvlas; 03.12.2010 в 20:00.

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

    По умолчанию

    Последняя идея имхо не лучшая.
    Тип - это тип.

    i : int := -15000;
    w : word := 50000;

    if ( i or w ) < 0 then ?

    Лично я нехочу заморачиваться , как конкретно данный язык будет расширять данные, до longinta все расширит или i пихнет в word или w в int


    К тому же типы - это не только стандартные.

    Например TTemperatura.
    Свойства :
    1.вывод на экран : с одним знаком после запятой, с суффиксом '*С' или текстовое сообщение 'Обрыв датчика' .......
    2.время от последнего опроса.
    ....

    Если тип - ф.блок, обрабатывающий температуру и с кучей своих данных ( таймеров и др.. ) ?



    У вас жестко определенная структура PARSCRIPT
    А зачем жестко ? Кому-то нужен min-max, а кому-то нет….
    Ведь кол-во свойств и их самоё определяет сам тип.
    Да и данные у Вас хранятся отдельно от своих свойств.
    А вдруг владельцы данных захотят поменять некоторые свойства ?
    Со списком это было бы проще (имхо)

    И жаль, конечно, что в кдс-2 нет хотя бы типа-функции.

    PS
    А вдруг тип : pointer to pointer to ......
    Последний раз редактировалось Валенок; 03.12.2010 в 20:53.

  3. #3
    Пользователь Аватар для drvlas
    Регистрация
    30.09.2010
    Адрес
    Киев
    Сообщений
    700

    По умолчанию

    Цитата Сообщение от Валенок Посмотреть сообщение
    К тому же типы - это не только стандартные.

    Например TTemperatura.
    ...
    Со списком это было бы проще (имхо)
    Вот он, профессорский подход! Но я сейчас так мелко плаваю, что не готов решать задачу в таком общем виде. И список меня пугает.

    А решая все же только свою задачу, я говорю: да,
    Цитата Сообщение от Валенок Посмотреть сообщение
    У вас жестко определенная структура PARSCRIPT
    жесткая. В нее входит то, что мне в этом проекте нужно. Что, кстати, не мешает в другом проекте внести иную (тоже жесткую) структуру.

    Цитата Сообщение от Валенок Посмотреть сообщение
    Да и данные у Вас хранятся отдельно от своих свойств.
    А вдруг владельцы данных захотят поменять некоторые свойства?
    Те данные, которые у меня (с Вашей легкой руки) хранятся в коде, это всего лищь константы, описывающие структуру каждого параметра. Сами же параметры разбросаны как угодно, не являясь элементом никакого массива или структуры. Мне кажется удобным...

    Более того, порядок размещения описателей данных в массиве структур apsPar[]вообще не имеет значения, ибо я собираюсь доступаться к элементам массива поиском номера параметра - перебирая индекс, просматривать массив apsPar[] до совпадения с номером параметра в apsPar[i].Numb
    То есть я в любой фазе разработки могу выбросить пару строк или добавить, переставить строки как угодно - и проект не поломается. Я имею в виду строки
    Код:
    set(...);
    set(...);
    Сейчас играюсь с примером доступа по описанным принципам - уже мажется Чуть позже предоставлю пример на строгий суд Учителей. Зачет-то нужен

  4. #4
    Пользователь Аватар для drvlas
    Регистрация
    30.09.2010
    Адрес
    Киев
    Сообщений
    700

    По умолчанию

    Цитата Сообщение от drvlas Посмотреть сообщение
    Сейчас играюсь с примером доступа по описанным принципам
    Вот и работающий пример. Параметры - очень разные. от логических до даты. Указывая на все параметры пойнтером

    Код:
    POINTER TO DWORD
    я часто вытаскиваю кучу всякого мусора, но подчищаю его, как показал Учитель. В результате, если пройти всю программу, мы увидим, что все вспомогательные переменные получили правильные значения.

    Да, для записи без повреждения котельни нужно еще поработать. Там действительно придется полагаться на то, что самый младший байт лежит по адресу переменной, а остальные - по возрастающим адресам. Это не кашерно, но иного пути не вижу. Так что SetPar ждет своего часа...

    З.Ы. И как-то странно у меня складывается с ФБ. Пока не стал записывать
    Код:
    GetPar( by1:=5, X => dw);
    ничего не работало. Т.е. конструкции вида
    Код:
    dw := GetPar( by1:=5).X;
    ну не выполняются и все тут! Вижу нулевое значение вместо Х... Что за Х...
    Вложения Вложения

  5. #5
    Пользователь Аватар для rovki
    Регистрация
    03.01.2010
    Адрес
    Чехов
    Сообщений
    12,150

    По умолчанию

    почти не чего не понял,но как приятно послушать -это как хорошая песня на иностранном языке

  6. #6
    Пользователь Аватар для drvlas
    Регистрация
    30.09.2010
    Адрес
    Киев
    Сообщений
    700

    По умолчанию

    Каюсь, многословен... Тут ведь идет мучительный процесс научения меня, сухой остаток стараюсь выкладывать время от времени, но он все равно получается мокрый. Ну, думаю, что пример (скоро уже с SetPar) покажет все понятое.

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

    По умолчанию

    1 бит для BOOL..
    Байт

    Если пойнтер направить на некое битовое поле, в котором записать "1" не в младший разряд, то по GetPar выдернется, естественно, целый байт.
    Может где и есть железки адресующие непосредственно бит, но я не слыхал.

    А вот явное преобразование DWORD_TO_BOOL отсекает безжалостно все, кроме младшего бита
    Не отсекает, а сравнивает с нулем весь DWORD. Улавливаете ?
    Последний раз редактировалось Валенок; 04.12.2010 в 12:09.

  8. #8
    Пользователь Аватар для drvlas
    Регистрация
    30.09.2010
    Адрес
    Киев
    Сообщений
    700

    По умолчанию

    Цитата Сообщение от валенок Посмотреть сообщение
    не отсекает, а сравнивает с нулем весь Dword. улавливаете ?
    проверил в отдельном примере. да, весь бай (все слово). где-то раньше я напутал... ну, так и должно быть! почему я и удивился. спасибо!

  9. #9

    По умолчанию

    конвертируйте в DWord и добавляйте количество миллисекунд. потом обратно в дату.
    Часто задаваемые вопросы по кодесис
    1) Почему программа не работает - Следует выполнить "Онлайн ->Старт"
    2) Где скачать CoDeSys, таргеты, прошивки, библиотеки - http://www.owen.ru/catalog/codesys_v3/opisanie

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

Ваши права

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