Считать массив строк из файла ?

Стартовая страница Форумы Разработка и интеграция Считать массив строк из файла ?

Просмотр 11 сообщений - с 31 по 41 (из 41 всего)
  • Автор
    Записи
  • #6894
    manjey73
    Участник

    Пробовал так же сделать и с async await, тоже глухо.
    На данный момент сделал костыль в виде скрипта, который запускается из crontab и каждые 20с опрашивает датчики и при помощи команды cat /sys/devices/w1_bus_master1/xx-xxxxxxxx(номер датчика)/w1_slave > /…/scada/ScadaComm/Log/xx-xxxxxxx(номер датчика) записывает данные в файлы (раз уж там tmpfs), а драйвером уже читаю эти файлы, все нормально пока.

    Парадокс такой, cat может считывать «файлы» датчиков, а целый mono со своим функционалом работе с файлами и потоками плющит…

    Вам бы самому прикупить ds18b20 и 4,7 кОм сопротивление да попробовать, бо моих мозгов уже не хватает найти причину такого поведения.

    #6913
    Mikhail
    Модератор

    То есть файл как бы дублируется?

    async await внутри себя прячет создание потока. Мне больше нравится создавать поток явно, потому что как-то более предсказуемо.

    Вам бы самому прикупить ds18b20 и 4,7 кОм сопротивление да попробовать

    К сожалению не успеваю всё попробовать самостоятельно, а наоборот стараюсь черпать опыт пользователей.

    #6918
    manjey73
    Участник

    Ну как бы дублируются. Как выше писал файл данных датчика скорее всего является точкой его опроса. У меня получается что создается явный файл и переносится ответ датчика в него.

    я весь код пришлю, там правда уже поудалял часть вариантов, так как нет смысла плодить одно и то же.
    Тут сам прикол, что команда cat в Linux легко читает датчик, а моно тупит, хотя может и не моно а Коммуникатор вносит какую-то лепту. Вот с этим я уже не разберусь.

    #6925
    OldManSpb
    Участник

    Поздно вклиниваюсь. Я работал с этим датчиком в линукс. Он опрвшиввется долго, и файл отдает только после опроса. Варианты вижу следующие
    1. Опрашивать в отдельном потоке, читать данные асинхронно. Это я так понял уже обсуждалось
    2. Простейший вариант — cat /sys/bus/——/— > temperature.txt и запихнуть это в цикл, потом читать этот файл. Это тоже получится асинхронно.
    3. Написать на чистом с приложение modbus tcp, и забирать данные коммуникатором. Это по моему самый правильный вариант, отвечающий концепции системы и опрос датчика будет происходить только тогда когда его запрашивает скада. Идатчики можно будет читать по сети.

    #6927
    manjey73
    Участник

    И как тогда настраивать датчики в приложении на С с Modbus ? У них же совершенно разные номера.
    По сути у меня вариант 2 только на каждый датчик свой файл

    #6928
    OldManSpb
    Участник

    Через ини файл. Если датчиков несколько, с++ вам в помощь, а конфиг на xml. Программу сделать так чтобы можно было неограниченное количкство датчиков подключить, и у каждого свой tcp порт либо адрес modbus.

    #6929
    manjey73
    Участник

    С Modbus конечно будет красиво, но я не настолько программер, чтобы это сделать.
    И тогда настраивать Коммуникатор на локальный адрес и порт Modbus как понимаю, каждый датчик это два регистра (float) и число может быть отрицательным.
    Думал читать прямо из драйвера датчики, но толи NET медленный, толи еще что, хотя простые файлы то он читает…

    #6930
    OldManSpb
    Участник

    Я точно не знаю, но подозреваю что вы просто блокируете всю программу на время опроса датчика температуры.

    #6931
    manjey73
    Участник

    Вот с этим я и предлагал разобраться Михаилу, так как сам уже не знаю что делать, я опробовал разные режимы StreamReader, FileStream и в том числе и пробовал делать в отдельном потоке.
    Когда пробовал StreamReader в отдельном потоке (Thread), то получал ошибку «Нет файла», получается что кто-то не дожидается ответа датчика и так все крутится по кругу. Задержки пытался вводить, тоже не дало результата.

    Хотя возможно я делал что-то не так (не в том месте задержка, не так открываю поток и т.д.) С реальными файлами работает все нормально. Ну и один и тот же код может вести себя по разному на двух разных ПК (Raspberry), один возвращает ответы датчика, а второй нет или очень редко.

    При этом все остальное продолжает работать, и опрос счетчика электроэнергии и платы Modbus и т.д.

    • Ответ изменён 8 лет, 11 месяцев назад пользователем manjey73.
    #6938
    Mikhail
    Модератор

    подозреваю что вы просто блокируете всю программу на время опроса датчика температуры

    Линия связи — это отдельный поток, поэтому можно заблокировать только линию связи.
    На мой взгляд, стоит попробовать идею сливать данные в свой файл командами Linux, а потом его читать.

    #6948
    OldManSpb
    Участник

    manjey73 вобщем то так и делает. Просто это немного не по феншую.

Просмотр 11 сообщений - с 31 по 41 (из 41 всего)
  • Для ответа в этой теме необходимо авторизоваться.