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

Тема: 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

    По умолчанию

    А теперь приведите конкретный пример, как должен работать поиск.
    Пусть 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

    По умолчанию

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

  6. #3756

    По умолчанию

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

  7. #3757

    По умолчанию

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

  8. #3758

    По умолчанию

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

  9. #3759

    По умолчанию

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

  10. #3760

    По умолчанию

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

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

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

Похожие темы

  1. Панели оператора СП3xx. Вопросы и ответы
    от Мурат Ахриев в разделе СП3хх, СП270
    Ответов: 4209
    Последнее сообщение: 26.08.2026, 16:07
  2. Ответов: 863
    Последнее сообщение: 02.03.2026, 17:13
  3. ИПП120. Вопросы и ответы
    от Р.Александр в разделе Программируемые реле
    Ответов: 273
    Последнее сообщение: 08.09.2025, 13:21
  4. Индикатор ИП120 , вопросы- ответы
    от rovki в разделе Программируемые реле
    Ответов: 56
    Последнее сообщение: 03.11.2017, 15:58
  5. Панели оператора СП270. Вопросы и ответы
    от Давидюк в разделе СП3хх, СП270
    Ответов: 930
    Последнее сообщение: 15.05.2017, 17:12

Ваши права

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