Форум программистов, компьютерный форум, киберфорум
Lisp
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.57/14: Рейтинг темы: голосов - 14, средняя оценка - 4.57
1075 / 968 / 113
Регистрация: 04.11.2012
Сообщений: 1,013

Датчик температуры на HomeLisp

06.02.2015, 21:35. Показов 3237. Ответов 40
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Вступление.
Есть термопара, которая подключается к компьютеру. Данные снимаются каждые несколько секунд и дописываются в файл BM1707.dat
То есть постоянно дописывается новая строчка, например:
[06.02.2015 18:02:50]> 30000003C3077628=22,500000 450000035752F728=28,000000
где
[06.02.2015 18:02:50]> - дата и время
30000003C3077628=22,500000 - имя и температура одного датчика
450000035752F728=28,000000 - имя и температура второго датчика

Скорее всего датчиков будет три, но пока что два.

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

Окно будет выглядеть так:
Слева будет область для графика, ось x - дата и время, ось y - температура.
Под ним два поля ввода диапазона, может сделать выпадающим списком!?

Справа будут три колонки, которые можно прокрутить бегунком.
1-я колонка -> дата и время
2-я колонка -> температура первого датчика
3-я колонка -> температура второго датчика

4-ю колонку для третьего датчика я потом сам добавлю.

Пример:
Дата и время | №1 | №2 |
--------------------------------------
06.02.2015 18:02:47 | 22,5 | 28,5 |
--------------------------------------
06.02.2015 18:00:44 | 22,5 | 28,0 |


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

При выборе диапазона, график тоже должен увеличиваться либо уменьшаться в своей области для визуального представления. Один датчик - красная линия, второй - синяя.

Максимальное разрешение экрана 1024х768, так что окно должно уместиться, но и не быть микроскопическим.

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

PS. А если справа не удастся сделать список с данными, то возможно придётся Excel использовать.
1
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
06.02.2015, 21:35
Ответы с готовыми решениями:

3D редактор в HomeLisp
Возникла необходимость написания программы генерирующей G-code по разным стратегиям (дело в том, что дешёвые конструкторы имеют люфт, а ПО...

Картинки в HomeLisp
1) Как программно получить значения ширины и высоты некоторого рисунка формата bmp? 2) Как программно извлечь прямоугольную область...

Приложение HomeLisp
Мой первый калькулятор на HomeLisp. До совершенства конечно не довел, но если последовательно клацать, то можно пользоваться. Есть...

40
1075 / 968 / 113
Регистрация: 04.11.2012
Сообщений: 1,013
06.02.2015, 21:38  [ТС]
Забыл картинку прикрепить.
Миниатюры
Датчик температуры на HomeLisp  
2
1075 / 968 / 113
Регистрация: 04.11.2012
Сообщений: 1,013
07.02.2015, 10:53  [ТС]
Давненько я ничего не постил, кажется файл не прикрепился. Название: BM1707.dat
Кликните здесь для просмотра всего текста

[06.02.2015 17:56:41]> 30000003C3077628=23,000000 450000035752F728=28,000000
[06.02.2015 17:56:44]> 30000003C3077628=23,000000 450000035752F728=28,000000
[06.02.2015 17:56:47]> 30000003C3077628=23,000000 450000035752F728=28,000000
[06.02.2015 17:56:50]> 30000003C3077628=23,000000 450000035752F728=28,000000
[06.02.2015 17:56:53]> 30000003C3077628=23,000000 450000035752F728=28,000000
[06.02.2015 17:56:56]> 30000003C3077628=23,000000 450000035752F728=28,000000
[06.02.2015 17:56:59]> 30000003C3077628=23,000000 450000035752F728=28,000000
[06.02.2015 17:57:02]> 30000003C3077628=23,000000 450000035752F728=28,000000
[06.02.2015 17:57:05]> 30000003C3077628=23,000000 450000035752F728=28,000000
[06.02.2015 17:57:08]> 30000003C3077628=23,000000 450000035752F728=28,000000
[06.02.2015 17:57:11]> 30000003C3077628=23,000000 450000035752F728=28,000000
[06.02.2015 17:57:14]> 30000003C3077628=23,000000 450000035752F728=28,000000
[06.02.2015 17:57:17]> 30000003C3077628=23,000000 450000035752F728=28,000000
[06.02.2015 17:57:20]> 30000003C3077628=23,000000 450000035752F728=28,000000
[06.02.2015 17:57:23]> 30000003C3077628=23,000000 450000035752F728=28,000000
[06.02.2015 17:57:26]> 30000003C3077628=23,000000 450000035752F728=28,000000
[06.02.2015 17:57:29]> 30000003C3077628=23,000000 450000035752F728=28,000000
[06.02.2015 17:57:32]> 30000003C3077628=23,000000 450000035752F728=28,000000
[06.02.2015 17:57:35]> 30000003C3077628=23,000000 450000035752F728=28,000000
[06.02.2015 17:57:38]> 30000003C3077628=23,000000 450000035752F728=28,000000
[06.02.2015 17:57:41]> 30000003C3077628=23,000000 450000035752F728=28,000000
[06.02.2015 17:57:44]> 30000003C3077628=23,000000 450000035752F728=28,000000
[06.02.2015 17:57:47]> 30000003C3077628=23,000000 450000035752F728=28,000000
[06.02.2015 17:57:50]> 30000003C3077628=23,000000 450000035752F728=28,000000
[06.02.2015 17:57:53]> 30000003C3077628=23,000000 450000035752F728=28,000000
[06.02.2015 17:57:56]> 30000003C3077628=23,000000 450000035752F728=28,000000
[06.02.2015 17:57:59]> 30000003C3077628=23,000000 450000035752F728=28,000000
[06.02.2015 17:58:02]> 30000003C3077628=23,000000 450000035752F728=28,000000
[06.02.2015 17:58:05]> 30000003C3077628=23,000000 450000035752F728=28,000000
[06.02.2015 17:58:08]> 30000003C3077628=23,000000 450000035752F728=28,000000
[06.02.2015 17:58:11]> 30000003C3077628=23,000000 450000035752F728=28,000000
[06.02.2015 17:58:14]> 30000003C3077628=23,000000 450000035752F728=28,000000
[06.02.2015 17:58:17]> 30000003C3077628=23,000000 450000035752F728=28,000000
[06.02.2015 17:58:20]> 30000003C3077628=23,000000 450000035752F728=28,000000
[06.02.2015 17:58:23]> 30000003C3077628=23,000000 450000035752F728=28,000000
[06.02.2015 17:58:26]> 30000003C3077628=23,000000 450000035752F728=28,000000
[06.02.2015 17:58:29]> 30000003C3077628=23,000000 450000035752F728=28,000000
[06.02.2015 17:58:32]> 30000003C3077628=23,000000 450000035752F728=28,000000
[06.02.2015 17:58:35]> 30000003C3077628=23,000000 450000035752F728=28,000000
[06.02.2015 17:58:38]> 30000003C3077628=23,000000 450000035752F728=28,000000
[06.02.2015 17:58:41]> 30000003C3077628=23,000000 450000035752F728=28,000000
[06.02.2015 17:58:44]> 30000003C3077628=23,000000 450000035752F728=28,000000
[06.02.2015 17:58:47]> 30000003C3077628=23,000000 450000035752F728=28,000000
[06.02.2015 17:58:50]> 30000003C3077628=23,000000 450000035752F728=28,000000
[06.02.2015 17:58:53]> 30000003C3077628=23,000000 450000035752F728=28,000000
[06.02.2015 17:58:56]> 30000003C3077628=23,000000 450000035752F728=28,000000
[06.02.2015 17:58:59]> 30000003C3077628=23,000000 450000035752F728=28,000000
[06.02.2015 17:59:02]> 30000003C3077628=23,000000 450000035752F728=28,000000
[06.02.2015 17:59:05]> 30000003C3077628=23,000000 450000035752F728=28,000000
[06.02.2015 17:59:08]> 30000003C3077628=23,000000 450000035752F728=28,000000
[06.02.2015 17:59:11]> 30000003C3077628=23,000000 450000035752F728=28,000000
[06.02.2015 17:59:14]> 30000003C3077628=23,000000 450000035752F728=28,000000
[06.02.2015 17:59:17]> 30000003C3077628=23,000000 450000035752F728=28,000000
[06.02.2015 17:59:20]> 30000003C3077628=23,000000 450000035752F728=28,000000
[06.02.2015 17:59:23]> 30000003C3077628=23,000000 450000035752F728=28,000000
[06.02.2015 17:59:26]> 30000003C3077628=23,000000 450000035752F728=28,000000
[06.02.2015 17:59:29]> 30000003C3077628=23,000000 450000035752F728=28,000000
[06.02.2015 17:59:32]> 30000003C3077628=23,000000 450000035752F728=28,000000
[06.02.2015 17:59:35]> 30000003C3077628=23,000000 450000035752F728=28,000000
[06.02.2015 17:59:38]> 30000003C3077628=23,000000 450000035752F728=28,000000
[06.02.2015 17:59:41]> 30000003C3077628=23,000000 450000035752F728=28,000000
[06.02.2015 17:59:44]> 30000003C3077628=23,000000 450000035752F728=28,000000
[06.02.2015 17:59:47]> 30000003C3077628=23,000000 450000035752F728=28,000000
[06.02.2015 17:59:50]> 30000003C3077628=23,000000 450000035752F728=28,000000
[06.02.2015 17:59:53]> 30000003C3077628=23,000000 450000035752F728=28,000000
[06.02.2015 17:59:56]> 30000003C3077628=23,000000 450000035752F728=28,000000
[06.02.2015 17:59:59]> 30000003C3077628=23,000000 450000035752F728=28,000000
[06.02.2015 18:00:02]> 30000003C3077628=23,000000 450000035752F728=28,000000
[06.02.2015 18:00:05]> 30000003C3077628=23,000000 450000035752F728=28,000000
[06.02.2015 18:00:08]> 30000003C3077628=23,000000 450000035752F728=28,000000
[06.02.2015 18:00:11]> 30000003C3077628=23,000000 450000035752F728=28,000000
[06.02.2015 18:00:14]> 30000003C3077628=23,000000 450000035752F728=28,000000
[06.02.2015 18:00:17]> 30000003C3077628=23,000000 450000035752F728=28,000000
[06.02.2015 18:00:20]> 30000003C3077628=23,000000 450000035752F728=28,000000
[06.02.2015 18:00:23]> 30000003C3077628=23,000000 450000035752F728=28,000000
[06.02.2015 18:00:26]> 30000003C3077628=23,000000 450000035752F728=28,000000
[06.02.2015 18:00:29]> 30000003C3077628=23,000000 450000035752F728=28,000000
[06.02.2015 18:00:32]> 30000003C3077628=23,000000 450000035752F728=28,000000
[06.02.2015 18:00:35]> 30000003C3077628=23,000000 450000035752F728=28,000000
[06.02.2015 18:00:38]> 30000003C3077628=23,000000 450000035752F728=28,000000
[06.02.2015 18:00:41]> 30000003C3077628=23,000000 450000035752F728=28,000000
[06.02.2015 18:00:44]> 30000003C3077628=23,000000 450000035752F728=28,000000
[06.02.2015 18:00:47]> 30000003C3077628=23,000000 450000035752F728=28,000000
[06.02.2015 18:00:50]> 30000003C3077628=23,000000 450000035752F728=28,000000
[06.02.2015 18:00:53]> 30000003C3077628=23,000000 450000035752F728=28,000000
[06.02.2015 18:00:56]> 30000003C3077628=23,000000 450000035752F728=28,000000
[06.02.2015 18:00:59]> 30000003C3077628=23,000000 450000035752F728=28,000000
[06.02.2015 18:01:02]> 30000003C3077628=23,000000 450000035752F728=28,000000
[06.02.2015 18:01:05]> 30000003C3077628=23,000000 450000035752F728=28,000000
[06.02.2015 18:01:08]> 30000003C3077628=23,000000 450000035752F728=28,500000
[06.02.2015 18:01:11]> 30000003C3077628=23,000000 450000035752F728=28,500000
[06.02.2015 18:01:14]> 30000003C3077628=23,000000 450000035752F728=28,500000
[06.02.2015 18:01:17]> 30000003C3077628=23,000000 450000035752F728=28,500000
[06.02.2015 18:01:20]> 30000003C3077628=23,000000 450000035752F728=28,500000
[06.02.2015 18:01:23]> 30000003C3077628=23,000000 450000035752F728=28,500000
[06.02.2015 18:01:26]> 30000003C3077628=23,000000 450000035752F728=28,500000
[06.02.2015 18:01:29]> 30000003C3077628=23,000000 450000035752F728=28,500000
[06.02.2015 18:01:32]> 30000003C3077628=23,000000 450000035752F728=28,000000
[06.02.2015 18:01:35]> 30000003C3077628=23,000000 450000035752F728=28,500000
[06.02.2015 18:01:38]> 30000003C3077628=22,500000 450000035752F728=28,000000
[06.02.2015 18:01:41]> 30000003C3077628=23,000000 450000035752F728=28,000000
[06.02.2015 18:01:44]> 30000003C3077628=22,500000 450000035752F728=28,000000
[06.02.2015 18:01:47]> 30000003C3077628=22,500000 450000035752F728=28,000000
[06.02.2015 18:01:50]> 30000003C3077628=23,000000 450000035752F728=28,000000
[06.02.2015 18:01:53]> 30000003C3077628=23,000000 450000035752F728=28,000000
[06.02.2015 18:01:56]> 30000003C3077628=23,000000 450000035752F728=28,000000
[06.02.2015 18:01:59]> 30000003C3077628=23,000000 450000035752F728=28,000000
[06.02.2015 18:02:02]> 30000003C3077628=22,500000 450000035752F728=28,000000
[06.02.2015 18:02:05]> 30000003C3077628=22,500000 450000035752F728=28,500000
[06.02.2015 18:02:08]> 30000003C3077628=22,500000 450000035752F728=28,000000
[06.02.2015 18:02:11]> 30000003C3077628=22,500000 450000035752F728=28,000000
[06.02.2015 18:02:14]> 30000003C3077628=23,000000 450000035752F728=28,000000
[06.02.2015 18:02:17]> 30000003C3077628=22,500000 450000035752F728=28,000000
[06.02.2015 18:02:20]> 30000003C3077628=22,500000 450000035752F728=28,000000
[06.02.2015 18:02:23]> 30000003C3077628=23,000000 450000035752F728=28,000000
[06.02.2015 18:02:26]> 30000003C3077628=22,500000 450000035752F728=28,000000
[06.02.2015 18:02:29]> 30000003C3077628=22,500000 450000035752F728=28,000000
[06.02.2015 18:02:32]> 30000003C3077628=22,500000 450000035752F728=28,000000
[06.02.2015 18:02:35]> 30000003C3077628=22,500000 450000035752F728=28,000000
[06.02.2015 18:02:38]> 30000003C3077628=22,500000 450000035752F728=28,000000
[06.02.2015 18:02:41]> 30000003C3077628=22,500000 450000035752F728=28,500000
[06.02.2015 18:02:44]> 30000003C3077628=23,000000 450000035752F728=28,000000
[06.02.2015 18:02:47]> 30000003C3077628=22,500000 450000035752F728=28,500000
[06.02.2015 18:02:50]> 30000003C3077628=22,500000 450000035752F728=28,000000



Добавлено через 13 часов 10 минут
Доброе утро! Возникли первые сложности.
Значит копирую файл перед считыванием
Lisp
1
(sysCopy "e:\BM1707.dat" "e:\BM1707.txt")
Теперь гружу все в переменную, допустим
Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
(setq acc nil)
 
(defun read-file (fnam)
  (let ((fi (gensym 'fi)))
    (try
      (prog nil
        (filOpen fi fnam _INPUT)  
        (loop
           (push (filGetLine fi) acc)  ; write
           (when (filEof fi) (return t)))
        (filClose fi))
       except
         (prog nil
             (filCloseAll)
             (stop*)))
    'Ok))
 
(read-file "e:\BM1707.txt")
 
Внутри LET: 
==> ERRSTATE
Странно, вчера считывало, сегодня не хочет.
Версия 1.13.14
Я только заменил библиотеку и два файла
homelispide.exe
homelisp.stb
Может нужно снести все, и по новой?..

И еще один момент.
Файл будет дописываться каждые 2 секунды, это можно менять, например каждые 5 секунд.
Можно ли это синхронизировать с программой, и чтобы каждый раз считывалась только нижняя строчка, а не вся история каждый раз?
2
 Аватар для castorsky
1978 / 1082 / 87
Регистрация: 29.11.2013
Сообщений: 3,353
07.02.2015, 14:51
Цитата Сообщение от Lambdik Посмотреть сообщение
Странно, вчера считывало, сегодня не хочет.
"e:\BM1707.txt" -> "e:\\BM1707.txt" мейби
1
Заблокирован
07.02.2015, 15:14
Я всегда думал, что работа с железом осуществляется через порты, а не через файлы
1
1075 / 968 / 113
Регистрация: 04.11.2012
Сообщений: 1,013
07.02.2015, 15:29  [ТС]
Цитата Сообщение от castorsky Посмотреть сообщение
мейби
Работа в процессе
Цитата Сообщение от ur_naz Посмотреть сообщение
работа с железом осуществляется через порты, а не через файлы
Так и есть.
Дело в том, что для этого датчика есть программа, которая создаёт файл BM1707.dat и кидает туда построчно каждый определённый промежуток времени, что-то наподобие такой строки:
"[06.02.2015 18:02:05]> 30000003C3077628=22,500000 450000035752F728=28,500000 "

Я прикинул, что можно написать программу, которая будет это безобразие приводить к читабельному виду. Нужно построить масштабируемый график по выбранному диапазону. Кроме того, когда программа запущена, она будет постоянно считывать из файла новые строчки. Вот собственно и всё. Я думаю, что с такой задачей справится любой высокоуровневый язык, но мне кажется что HomeLisp тоже справится. А то мне бы успеть до понедельника.
0
Заблокирован
07.02.2015, 16:22
если нужно ну очень срочно, сделай кнопку "обновить" и не парься. Функция чтения файла должна возвращать список строк файла. Далее этот список можно передать в листбох и график, и никакие аккумуляторы тут не нужны. Насчет отслеживания, в реальном времени, я так думаю не получится, но можно сделать цикл со слипом, чтоб не грузить процессор.
1
 Аватар для castorsky
1978 / 1082 / 87
Регистрация: 29.11.2013
Сообщений: 3,353
07.02.2015, 16:38
Цитата Сообщение от ur_naz Посмотреть сообщение
Я всегда думал, что работа с железом осуществляется через порты, а не через файлы
Ну это как сказать. В unix системах всё файлы, любой девайс можно открыть функциями open/creat + read, что в итоге генерит прерывания. В windows тоже, например прочитать физические адреса диска через CreateFile("\\\\.\\PhysicalDriveN",...) + ReadFile, что тоже генерит прерывания. Но можно и сэкономить на спичках - писать на асме и прерывания генерить самостоятельно, только это никому на писюке не нужно.
1
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38194 / 21127 / 4309
Регистрация: 12.02.2012
Сообщений: 34,732
Записей в блоге: 14
07.02.2015, 20:35
Lambdik, у меня Ваш код работает. Удваивать бэкслэш не нужно. И совсем не обязательно давать файлу расширение ".txt". Можно открывать файл с расширением ".dat" в режиме _INPUT

Добавлено через 7 минут
Только нужно комментарий отделять двумя точками с запятой
1
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38194 / 21127 / 4309
Регистрация: 12.02.2012
Сообщений: 34,732
Записей в блоге: 14
07.02.2015, 21:19
Вот некое решение, берущее данные для построения графика из текстового файла:

Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
;;
;;  Программа отображения диалога _Dlg_
;;
 
(prog (win) 
 
      (try (dlgDestroy '_Dlg_) except Nil)
 
      (dlgCreate '_Dlg_ 369 130 "Графер" &H8000000F)
 
      (dlgAddControl '_Dlg_ '_BUT_1 _BUTTON 9 7 166 78 '("Tahoma" 8.25 1 0 0) "Выбрать файл")
      (dlgPutPicture '_BUT_1 12)
 
      (dlgAddControl '_Dlg_ '_BUT_2 _BUTTON 187 7 166 78 '("Tahoma" 8.25 1 0 0) "Закрыть")
      (dlgPutPicture '_BUT_2 36)
 
      ;;
      ;; Пролог загрузки диалога _DLG_
      ;;
 
      (Prog () 
       (setq win (gensym 'win))
       (grwCreate win 300 300 "График" _WHITE)
       (grwShow win)
      )
 
      ;; 
      ;; Построить график из списков X и Y в окне W
      ;;
       
      (defun drawGraph (X Y W)
         (let ((xmin (apply 'min X))
               (xmax (apply 'max X))
               (ymin (apply 'min Y))
               (ymax (apply 'max Y))
               (xp   (car x))
               (yp   (car y)))
              (grwCls w)
              (grwScale W xmin xmax ymin ymax)
              (iter (for xc in (cdr X))
                    (for yc in (cdr Y))
                    (grwLine W xp yp xc yc _RED)
                    (setq xp xc yp yc)))             
      )    
 
      ;;
      ;; Обработчик события CLICK для кнопки _BUT_1
      ;;
 
      (defun _BUT_1_Click  Nil 
       (let ((fname  (sysGetOpenName (sysHome) "Текстовые файлы|*.txt")))
          (if (null fname) nil
              (prog (fi xx yy stri tmp)
                (setq fi (gensym 'fi))
                (filOpen fi fname _INPUT)
                (loop
                  (when (filEOF fi) (return nil)) 
                  (setq stri (filGetLine fi))
                  (setq tmp (input (strCat "(" stri ")")))
                  (push (car tmp) xx)
                  (push (cadr tmp) yy))
                (filClose fi)
                (drawGraph xx yy win))))) 
      ;;
      ;;   Назначение процедуры-события _BUT_1_Click  контролу _BUT_1
      ;;
 
      (dlgSetEvent '_BUT_1 '_BUT_1_Click )
 
      ;;
      ;; Обработчик события CLICK для кнопки _BUT_2
      ;;
 
      (defun _BUT_2_Click  Nil 
        (grwDestroy win)  
        (dlgHide '_DLG_)
        (dlgDestroy '_DLG_)
      )
 
      ;;
      ;;   Назначение процедуры-события _BUT_2_Click  контролу _BUT_2
      ;;
 
      (dlgSetEvent '_BUT_2 '_BUT_2_Click )
 
      ;;
      ;;   Отображение диалога _Dlg_
      ;;
 
      (dlgShow '_Dlg_ 0 0)
)
Вот программа подготовки текстового файла:

Lisp
1
2
3
4
5
6
(defun make-data (fnam)
  (let ((fo (gensym 'fo)))
    (filOpen fo fnam _OUTPUT)
    (iter (for x from -1 to 1 by 0.01)
      (filPutLine fo (strCat (flo2str x) " " (flo2Str (sin (* 3 x))))))
    (filClose fo)))
Результат на картинке:
Миниатюры
Датчик температуры на HomeLisp  
2
1075 / 968 / 113
Регистрация: 04.11.2012
Сообщений: 1,013
07.02.2015, 21:36  [ТС]
Лучший ответ Сообщение было отмечено Catstail как решение

Решение

Catstail Спасибо! Пока что я успел сделать только это, с ошибками.
Всё будет ещё неизвестно как переделываться. Естественно никаких аккумуляторов не будет.
А график я на закуску оставил.
Кликните здесь для просмотра всего текста

Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
//  НАЧАЛО
//  Программа отображения диалога _Dlg_
//
(prog nil
(try (dlgDestroy '_Dlg_) except Nil)
(dlgCreate '_Dlg_ 850 700 "" &H8000000F)
(dlgAddControl '_Dlg_ '_CMB_1 _COMBO 20 500 170 27 '("MS Sans Serif" 8 0 0 0) &H80000012 &H80000009)
(dlgAddControl '_Dlg_ '_CMB_2 _COMBO 220 500 170 27 '("MS Sans Serif" 8 0 0 0) &H80000012 &H80000009)
(dlgAddControl '_Dlg_ '_CMB_3 _COMBO 20 600 170 27 '("MS Sans Serif" 8 0 0 0) &H80000012 &H80000009)
(dlgAddControl '_Dlg_ '_CMB_4 _COMBO 220 600 170 27 '("MS Sans Serif" 8 0 0 0) &H80000012 &H80000009)
(dlgAddControl '_Dlg_ '_LBL_1 _LABEL 420 100 90 25 '("Tahoma" 8,4 1 0 0) "Дата+Время" 0 &H80000012 &H8000000F)
(dlgAddControl '_Dlg_ '_LBL_2 _LABEL 520 100 124 25 '("Tahoma" 8,4 1 0 0) "№1" 0 &H80000012 &H8000000F)
(dlgAddControl '_Dlg_ '_LBL_3 _LABEL 660 100 119 25 '("Tahoma" 8,4 1 0 0) "№2" 0 &H80000012 &H8000000F)
(dlgAddControl '_Dlg_ '_LBL_4 _LABEL 150 460 120 20 '("Tahoma" 8,4 1 0 0) "Диапазон дней" 0 &H80000012 &H8000000F)
(dlgAddControl '_Dlg_ '_LST_1 _LIST 420 120 350 477 '("Tahoma" 8 1 0 0) &H80000008 &H80000005)
(dlgAddControl '_Dlg_ '_BUT_1 _BUTTON 420 20 200 50 '("Tahoma" 7,2 1 0 0) "Выбрать/Обновить  данные")
(dlgAddControl '_Dlg_ '_BUT_2 _BUTTON 650 20 100 50 '("Tahoma" 8,4 1 0 0) "Закрыть")
(dlgPutPicture '_BUT_2 36)
(dlgAddControl '_Dlg_ '_BUT_3 _BUTTON 125 550 150 30 '("Tahoma" 8,4 1 0 0) "Масштабирование")
//***************************************************************************************
 
// Вспомогательные функции для кнопки _BUT_1
// временный накопитель
(setq acc nil)
 
(defun read-file (fnam)
  (let ((fi (gensym 'fi)))
    (try
      (prog nil
        (filOpen fi fnam _INPUT)         // _TEXT_ARRAY 
        (loop                            // (filGetStrCount 'symbol)
           (when (filEof fi) (return t))
           (push (filGetLine fi) acc)    // write
        )
        (filClose fi))
       except
         (prog nil
             (filCloseAll)
             (stop*)))
    'Ok))
 
// Заполнить списки датами.
(defun Push-CMB (ls-data)
  (loop
    (unless ls-data (return t))
    (setq strdata (car ls-data)
          datatime (strMid strdata 2 10)
          ls-data (cdr ls-data))
    (dlgAddItem '_CMB_1 datatime)
    (dlgAddItem '_CMB_2 datatime)))
 
// > (Push-CMB acc)
 
      //
      // Обработчик события CLICK для кнопки _BUT_1
      //
 
      // Создать копию файла, считать данные.
      (defun _BUT_1_Click  Nil 
        (let* ((fdat (sysGetOpenName (sysHome) "Текст|*.dat" "Выбор файла"))
               (fnam (strCat (strMid fdat 1 9) ".txt")))
          (sysCopy fdat fnam)      // копирование файла перед считыванием
          (read-file fnam)         // считывание
          (Push-CMB acc)))
 
      (dlgSetEvent '_BUT_1 '_BUT_1_Click)
 
//-----------------------------------------------------------------------------
// Обработчик события CLICK для кнопки _BUT_3
 
(defun remove-if-not (fn lst)
  (cond
    ((null lst) nil)
    ((eq (funcall fn (car lst)) t) (cons (car lst) (remove-if-not fn (cdr lst))))
    (t (remove-if-not fn (cdr lst)))))
 
// Извлечь из накопителя дневной диапазон. В масштабе.
(defun _BUT_3_Click () 
  (let* ((cmbtext (car (getprop '_CMB_1 'text)))
         (datatime (remove-if-not  #'(lambda (x) (eq (strmid x 2 10) cmbtext)) acc)))
    (loop
      (unless datatime (return t))
      (setq strdata (strMid (car datatime) 2 19))
      (dlgAddItem '_CMB_3 strdata)
      (setq datatime (cdr datatime))
    )
  )
)
 
(dlgSetEvent '_BUT_3 '_BUT_3_Click)
//-----------------------------------------------------------------------------
// Обработчик события CLICK для вып. списка _CMB_3
// Вернуть диапазон от-до по 10 минут того дня.
(defun _CMB_3_Click ()
 
 
 
)
 
(dlgSetEvent '_CMB_3 '_CMB_3_Click)
//-----------------------------------------------------------------------------
//Обработчик события CLICK для кнопки _BUT_2.
(defun _BUT_2_Click () 
  (dlghide '_Dlg_)
  (dlgDestroy '_Dlg_)
  (gc))
 
(dlgSetEvent '_BUT_2 '_BUT_2_Click)
//----------------------------------------------------------------------------
// The Start of Dialogue.
(dlgShow '_Dlg_)
) // end prog
1
 Аватар для castorsky
1978 / 1082 / 87
Регистрация: 29.11.2013
Сообщений: 3,353
08.02.2015, 00:24
Цитата Сообщение от Catstail Посмотреть сообщение
Только нужно комментарий отделять двумя точками с запятой
т.е. так?
Lisp
1
2
3
4
5
;; это не комментарий
 
;;
;; это комментарий
;;
1
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38194 / 21127 / 4309
Регистрация: 12.02.2012
Сообщений: 34,732
Записей в блоге: 14
08.02.2015, 10:04
castorsky, я имел в виду вот что:

Lisp
1
2
3
 ;; Это в HomeLisp - комментарий
 // это тоже
 ;  а это - нет !
2
 Аватар для castorsky
1978 / 1082 / 87
Регистрация: 29.11.2013
Сообщений: 3,353
08.02.2015, 10:11
понятно
1
Эксперт функциональных языков программированияЭксперт Java
 Аватар для korvin_
4576 / 2775 / 491
Регистрация: 28.04.2012
Сообщений: 8,780
08.02.2015, 12:19
Цитата Сообщение от Catstail Посмотреть сообщение
; а это - нет !
А что это значит в HomeLisp?
1
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38194 / 21127 / 4309
Регистрация: 12.02.2012
Сообщений: 34,732
Записей в блоге: 14
08.02.2015, 13:06
korvin_, к сожалению, это просто атом... Надо бы поправить.
1
1075 / 968 / 113
Регистрация: 04.11.2012
Сообщений: 1,013
10.02.2015, 18:16  [ТС]
Добрый вечер! Оставлю некоторые заметки:
1). На официальном сайте нет последней версии HomeLisp.

2). Нет множественного выбора в listbox

3). Не работает функция dlgDelItem
EVFUN: Не найдена функция DLGDELITEM

4). Невозможно отобразить/закрепить графическое окно относительно диалогового.

5). Не нашел, как сделать многострочный комментарий.

Больше всего меня беспокоит пункт 2.
1
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38194 / 21127 / 4309
Регистрация: 12.02.2012
Сообщений: 34,732
Записей в блоге: 14
10.02.2015, 20:33
Lambdik, виноват! Буду исправляться.

По поводу п.2: функция dlgGetList для листбокса возвращает список отмеченных элементов. подробнее

По поводу закрепления окна претензия принимается. Закрепить нельзя, но позиционировать можно.

Многострочные комментарии не реализованы. Предложите, какими бы Вы хотели их видеть.

Добавлено через 7 минут
Куда делся dlgDelItem ума не приложу... "Отстегнулся". Пристегнул. Новые версии буду выкладывать на сайт проекта.
1
1075 / 968 / 113
Регистрация: 04.11.2012
Сообщений: 1,013
10.02.2015, 21:21  [ТС]
Catstail
/* Комментарии наверное
чтоб были как в php */

DLGGETLIST возвращает уже выбранные значения. Но я имею ввиду, чтобы пользователь мог выделять в списке сразу несколько строчек, shift+левая клавиша мыши. А не каждую по отдельности левым щелчком, или <пробелом> и стрелками.
0
 Аватар для castorsky
1978 / 1082 / 87
Регистрация: 29.11.2013
Сообщений: 3,353
10.02.2015, 22:05
Цитата Сообщение от Catstail Посмотреть сообщение
Многострочные комментарии не реализованы. Предложите, какими бы Вы хотели их видеть
Это Вы должны решать учитывая грамматику языка. Например, комментарий /*...*/ исключает возможность объявления функций/констант с именем /* если это сейчас возможно. Обычно выбирают первый символ служебный (в racket это символ #, а коммент #|...|#) с которого нельзя начинать никакие выражения, кроме определенных типов/видов выражений. Например, в Вашей реализации пара символов ;; уже имеет значение, на ее основе можно определить еще одно грамматическое правило
comment := ;; | expr | end-of-line.
multyline-comment := ;;- | expr | -;;.
Или, скажем brases в синтаксисе языка не используются, и если их нельзя использовать в именах, то можно задать мультистрочный коммент. Главное чтобы не возникло конфликта с уже существующей грамматикой.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
10.02.2015, 22:05
Помогаю со студенческими работами здесь

Рисуем в HomeLisp
Добрый вечер всем! Обращаюсь к вам с такой проблемой. Мы делаем последнюю лабараторную и там нам нужно нарисовать то что даст...

Факторизация на HomeLisp
Прошу указать на ошибки и указать, как их можно исправить. Разбираюсь с homelisp, нужно сделать факторизацию числа, то есть разбить на...

СМ Bosch wtb86211 oe/ 01, Определить датчик влажности и датчик температуры
Добрый день. СМ пытался сделать какой то мастер и исчез вместе с датчиком влажности и датчиком температуры. Подскажите пожалуйста какие...

Датчик температуры
Кто-нибудь может подсказать цифровой датчик температуры, с точностью 0.1 (хотя бы) в дипазоне в 35.5°С - 42.0°С

датчик температуры
ноутбук Toshiba satellite l655 мне кажется что датчики температуры слишком высокие или это нормально?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-text-sdl3-c. zip finish-text-sdl3-cpp. zip
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло. Но на выплатах по больничным это. . .
Контроль уникальности заводского номера
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере нетипового документа выдачи шин для спецтехники с табличной частью, разработанного в конфигурации КА2. Данные берутся из. . .
Хочу заставить корпорации вкладываться в здоровье сотрудников: делаю мат модель здравосохранения
anaschu 22.03.2026
e7EYtONaj8Y Z4Tv2zpXVVo https:/ / github. com/ shumilovas/ med2. git
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru