Страница 376 из 858 ПерваяПервая ... 276326366374375376377378386426476 ... ПоследняяПоследняя
Показано с 3,751 по 3,760 из 8571

Тема: CODESYS V3.5. Вопросы и ответы

  1. #3751

    По умолчанию

    Цитата Сообщение от Евгений Кислов Посмотреть сообщение
    Опишите задачу на конкретном примере с конкретными значениями переменных.
    Вот структура:
    TYPE StTestKoKs: //Структура данных
    STRUCT
    //Входные данные
    TestNomer: WORD; //Номер тестирования
    TestDT: WSTRING(16); //Дата и время тестирования
    TipKoKs: WSTRING(25); //Тип КО/КС

    Razmer: WSTRING(5); //Размер
    Model: WSTRING(50); //Модель
    ZavodNomer: WSTRING(50); //Заводской номер
    ZavodIzgotovitel: WSTRING(50); //Завод изготовитель
    IzgotShtucera: WSTRING(50); //Изготовитель штуцера
    ShlamoUlovitel: WSTRING(10); //Шламоуловитель
    DlinnaShlamovoiTruby: WSTRING(10); //Длинна шламовой трубы
    PropuskShlamoulovitely: WSTRING(10); //Пропускная способность шламоуловителя

    Vladelec: WSTRING(50); //Владелец (Собственник)
    Zakazchik: WSTRING(50); //Заказчик
    Operator: WSTRING(50); //Оператор
    //Статус испытаний
    SEtap1: WSTRING(25); //Давление 1 этап
    SEtap2: WSTRING(25); //Давление 2 этап
    SEtap3: WSTRING(25); //Давление 3 этап
    SEtap4: WSTRING(25); //Давление 4 этап
    SEtap5: WSTRING(25); //Давление 5 этап
    SEtap6: WSTRING(25); //Давление 6 этап
    //Время испытаний
    TimeEtap1: BYTE; //Время 1 этап
    TimeEtap2: BYTE; //Время 2 этап
    TimeEtap3: BYTE; //Время 3 этап
    TimeEtap4: BYTE; //Время 4 этап
    TimeEtap5: BYTE; //Время 5 этап
    TimeEtap6: BYTE; //Время 6 этап
    //Данные и результаты тестирования
    PFact: ARRAY [0..599] OF WORD; //Давление фактическое
    PUstavka: ARRAY [0..599] OF WORD; //Давление эталон
    Resultat: WSTRING(25); //Результат тестирования (годен/негоден)
    GlubinaArray: REAL; //Глубина массива графика
    END_STRUCT
    END_TYPE
    этот массив структуры сохраняю в бинарный фаил, в этом бинарном файле нужно выполнить поиск по номеру испытуемого клапана
    ZavodNomer: WSTRING(50); //Заводской номер
    все записи которые есть те номера их
    TestNomer: WORD; //Номер тестирования
    вывести значения в массив подряд везде где номер клапана совпал со строкой поиска, по номеру в массиве уже буду вытаскиваеть нужное тестирование в протокол данных

    по номеру тестирования я обращаюсь к файлу и выгружаю нужный мне диапазон данных.

    в принцепи номер тестирования и номер клапана могу вытащить в отдельный массив для поиска в нем, но нужно сделать както эффективно так как записей может быть больше 100 000
    Последний раз редактировалось Игорь Владимирович; 07.02.2022 в 13:10.

  2. #3752
    Супер Модератор Аватар для Евгений Кислов
    Регистрация
    27.01.2015
    Адрес
    Москва
    Сообщений
    13,640

    По умолчанию

    А теперь приведите конкретный пример, как должен работать поиск.
    Пусть TestNomer = 123, ZavodNomer = "abcdef", и что дальше надо сделать-то?

  3. #3753

    По умолчанию

    так как записей может быть больше 100 000
    Когда-то ОЧЕНЬ давно на Visual Basic я писал свой MP3-плеер, как аналог Foobar2000. Там у меня была база ID3-тэгов и статистики прослушивания песен.
    База представляла собой массив структур в бинарном файле. Записей тоже было дофига - под 50 000. И поиск нужной был очень затруднён, конечно же.
    Я решил это созданием индекса по хэшу пути и имени MP3-файла (а тут это будет номер клапана и какая-нибудь хэш-функция от него - наприсер CRC32 от строки, занимает 4 байта - я им и пользовался). Индексом был отдельный файл, в котором были блоки по 512 из массивов структур с указанием на данные.
    Короче, на моём примере было так:
    1. Описание одного объекта - структура STRUCT фиксированной длины (у меня 1024 байт вышло).
    2. Ключ (ID) записи - функция CRC32 от полного пути файла (тут может быть CRC32 от серийника клапана). Это значение занимает 4 байта.
    3. Описание индекса - это STRUCT длиной 8 байт из двух полей: ID (ключ) и смещение в файле данных на начало этого блока (куда надо перейти операцией Seek и сразу читать данные).
    Грубо:
    Код:
    STRUCT IndexRecord
        dwID   : DWORD;
        dwPos  : DWORD;
    END_STRUCT
    4. Чтобы можно было быстрее читать индексы, они хранились в файле как вложенные STRUCT из индексных (где ID и Смещение):
    Код:
    STRUCT IndexData
        dwCount   : DWORD;  (* Сколько штук записей заполнено *)
        dwEmpty   : DWORD; (* Чтобы и этот заголовок занимал 8 байт *)
        arrIdx    : ARRAY [1..63] OF IndexRecord;
    END_STRUCT
    Общая длина структуры IndexData была равна 512 байт, соответственно (512 - 8 (заголовок)) / 8 (длина IndexRecord) = 63 штуки.

    Мой алгоритм при чтении быстренько читал индексы в память и потом рылся в них поиском по массиву IDшек. А зная IDшку он знал на какой байт файла данных встать, чтобы прочитать STRUCT оттуда.
    Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живёте. © Steve McConnell
    Мой рабочий блог со статьями про щиты и автоматику ОВЕН - Cs-Cs.Net | Почта: Info@Cs-Cs.Net | Канал в ТГ @CsCsNetLab

  4. #3754

    По умолчанию

    Цитата Сообщение от Евгений Кислов Посмотреть сообщение
    А теперь приведите конкретный пример, как должен работать поиск.
    Пусть TestNomer = 123, ZavodNomer = "abcdef", и что дальше надо сделать-то?
    уже придумал как реализовать,
    1 вопрос остаётся,
    1 раз фаил открыл, выставил позицию, прочитал, фаил закрыл.
    аможно 1 раз открыл, выставил позицию, прочитал, изменил позицию и прочитал? те незакрывая и открывая постоянно фаил читать разные значения?

  5. #3755
    Супер Модератор Аватар для Евгений Кислов
    Регистрация
    27.01.2015
    Адрес
    Москва
    Сообщений
    13,640

    По умолчанию

    Цитата Сообщение от Игорь Владимирович Посмотреть сообщение
    уже придумал как реализовать,
    1 вопрос остаётся,
    1 раз фаил открыл, выставил позицию, прочитал, фаил закрыл.
    аможно 1 раз открыл, выставил позицию, прочитал, изменил позицию и прочитал? те незакрывая и открывая постоянно фаил читать разные значения?
    Да, так можно сделать.

  6. #3756

    По умолчанию

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

  7. #3757

    По умолчанию

    а есть готовый фб, для конвертации Dword в элементы времени?
    Хочу по модбас получать 2 регистра Unix времени и перебрасывать его на rtc модуль для записи
    Codesys 2.3/Codesys 3.5.

  8. #3758
    Супер Модератор Аватар для Евгений Кислов
    Регистрация
    27.01.2015
    Адрес
    Москва
    Сообщений
    13,640

    По умолчанию

    Цитата Сообщение от Mr Helper Посмотреть сообщение
    а есть готовый фб, для конвертации Dword в элементы времени?
    Хочу по модбас получать 2 регистра Unix времени и перебрасывать его на rtc модуль для записи
    Дмитрий, ну вы могли бы напрямую у коллег спросить.)
    https://owen.ru/forum/showthread.php...l=1#post351122

  9. #3759

    По умолчанию

    Элемент "Индикатор выполнения", можно ли его повернуть, чтобы он стал вертикальным, а не горизонтальным?

  10. #3760
    Супер Модератор Аватар для Евгений Кислов
    Регистрация
    27.01.2015
    Адрес
    Москва
    Сообщений
    13,640

    По умолчанию

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

    2022-02-09_11-16-43.png

Страница 376 из 858 ПерваяПервая ... 276326366374375376377378386426476 ... ПоследняяПоследняя

Похожие темы

  1. Панели оператора СП3xx. Вопросы и ответы
    от Мурат Ахриев в разделе Панели оператора (HMI)
    Ответов: 4054
    Последнее сообщение: Вчера, 13:03
  2. Панели оператора ИП320. Вопросы и ответы
    от automat в разделе Панели оператора (HMI)
    Ответов: 849
    Последнее сообщение: 16.11.2025, 08:58
  3. ИПП120. Вопросы и ответы
    от Р.Александр в разделе Программируемые реле
    Ответов: 273
    Последнее сообщение: 08.09.2025, 13:21
  4. Индикатор ИП120 , вопросы- ответы
    от rovki в разделе Программируемые реле
    Ответов: 56
    Последнее сообщение: 03.11.2017, 15:58
  5. Панели оператора СП270. Вопросы и ответы
    от Давидюк в разделе Панели оператора (HMI)
    Ответов: 930
    Последнее сообщение: 15.05.2017, 17:12

Ваши права

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