Стартовая страница › Форумы › Разработка и интеграция › Считать массив строк из файла ?
- В этой теме 40 ответов, 3 участника, последнее обновление 8 лет, 11 месяцев назад сделано
OldManSpb.
-
АвторЗаписи
-
03.08.2017 в 09:34 #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 кОм сопротивление да попробовать, бо моих мозгов уже не хватает найти причину такого поведения.
04.08.2017 в 21:07 #6913
MikhailМодераторТо есть файл как бы дублируется?
async await внутри себя прячет создание потока. Мне больше нравится создавать поток явно, потому что как-то более предсказуемо.
Вам бы самому прикупить ds18b20 и 4,7 кОм сопротивление да попробовать
К сожалению не успеваю всё попробовать самостоятельно, а наоборот стараюсь черпать опыт пользователей.
04.08.2017 в 21:44 #6918
manjey73УчастникНу как бы дублируются. Как выше писал файл данных датчика скорее всего является точкой его опроса. У меня получается что создается явный файл и переносится ответ датчика в него.
я весь код пришлю, там правда уже поудалял часть вариантов, так как нет смысла плодить одно и то же.
Тут сам прикол, что команда cat в Linux легко читает датчик, а моно тупит, хотя может и не моно а Коммуникатор вносит какую-то лепту. Вот с этим я уже не разберусь.06.08.2017 в 19:42 #6925
OldManSpbУчастникПоздно вклиниваюсь. Я работал с этим датчиком в линукс. Он опрвшиввется долго, и файл отдает только после опроса. Варианты вижу следующие
1. Опрашивать в отдельном потоке, читать данные асинхронно. Это я так понял уже обсуждалось
2. Простейший вариант — cat /sys/bus/——/— > temperature.txt и запихнуть это в цикл, потом читать этот файл. Это тоже получится асинхронно.
3. Написать на чистом с приложение modbus tcp, и забирать данные коммуникатором. Это по моему самый правильный вариант, отвечающий концепции системы и опрос датчика будет происходить только тогда когда его запрашивает скада. Идатчики можно будет читать по сети.06.08.2017 в 20:53 #6927
manjey73УчастникИ как тогда настраивать датчики в приложении на С с Modbus ? У них же совершенно разные номера.
По сути у меня вариант 2 только на каждый датчик свой файл06.08.2017 в 22:30 #6928
OldManSpbУчастникЧерез ини файл. Если датчиков несколько, с++ вам в помощь, а конфиг на xml. Программу сделать так чтобы можно было неограниченное количкство датчиков подключить, и у каждого свой tcp порт либо адрес modbus.
07.08.2017 в 09:28 #6929
manjey73УчастникС Modbus конечно будет красиво, но я не настолько программер, чтобы это сделать.
И тогда настраивать Коммуникатор на локальный адрес и порт Modbus как понимаю, каждый датчик это два регистра (float) и число может быть отрицательным.
Думал читать прямо из драйвера датчики, но толи NET медленный, толи еще что, хотя простые файлы то он читает…07.08.2017 в 11:17 #6930
OldManSpbУчастникЯ точно не знаю, но подозреваю что вы просто блокируете всю программу на время опроса датчика температуры.
07.08.2017 в 11:41 #6931
manjey73УчастникВот с этим я и предлагал разобраться Михаилу, так как сам уже не знаю что делать, я опробовал разные режимы StreamReader, FileStream и в том числе и пробовал делать в отдельном потоке.
Когда пробовал StreamReader в отдельном потоке (Thread), то получал ошибку «Нет файла», получается что кто-то не дожидается ответа датчика и так все крутится по кругу. Задержки пытался вводить, тоже не дало результата.Хотя возможно я делал что-то не так (не в том месте задержка, не так открываю поток и т.д.) С реальными файлами работает все нормально. Ну и один и тот же код может вести себя по разному на двух разных ПК (Raspberry), один возвращает ответы датчика, а второй нет или очень редко.
При этом все остальное продолжает работать, и опрос счетчика электроэнергии и платы Modbus и т.д.
-
Ответ изменён 8 лет, 11 месяцев назад пользователем
manjey73.
07.08.2017 в 12:00 #6938
MikhailМодераторподозреваю что вы просто блокируете всю программу на время опроса датчика температуры
Линия связи — это отдельный поток, поэтому можно заблокировать только линию связи.
На мой взгляд, стоит попробовать идею сливать данные в свой файл командами Linux, а потом его читать.07.08.2017 в 12:34 #6948
OldManSpbУчастникmanjey73 вобщем то так и делает. Просто это немного не по феншую.
-
Ответ изменён 8 лет, 11 месяцев назад пользователем
-
АвторЗаписи
- Для ответа в этой теме необходимо авторизоваться.