Программа для работы со стендом ТРД-2, Среда Builder C++ 6.0

 
1 2 3

kirya

втянувшийся

Программа должна быть максимально простой в использовании, никаких баз данных. Среда Builder C++ 6.0
Описание стенда здесь Стенд ТРД-2


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

Вот в чем у меня пока проблема:
предположим что у меня 1000 записей, т.е. 1000 текстовых файлов с данными по двигателям. Теперь я хочу отобразить все эти записи в виде таблицы в которой будут столбцы: номер, дата, физ.параметры и т.п. Я ищу в этой таблице интересующие меня двигатели, ставлю напротив них галочки, нажимаю ОК и по выбранным двигателям стоятся тяговые характеристики, в одной координатной плоскости. Также чтобы в этой таблице я мог найти нужные двигатели, там должна быть возможность для сортировки.
Какой объект может такое?
Я раньше делал нечто подобное с DBGrid и DBNavigator, но они работали с базой данных, а мне нужно с текстовыми файлами.
www.kirov-rockets.ru  6.06.0
Это сообщение редактировалось 03.06.2011 в 22:34

uagg

опытный

>Программа должна быть максимально простой в использовании, никаких баз данных
Программа будет максимально простой как раз при использовании БД :).

>Я раньше делал нечто подобное с DBGrid и DBNavigator, но они работали с базой данных, а мне нужно с текстовыми файлами.
Предварительно выбирай данные во временный текстовый файл csv формата (или xml) и вяжись к нему через DBGrid и DBNavigator
 7.07.0

kirya

втянувшийся

uagg> Программа будет максимально простой как раз при использовании БД :).

Согласен. Предполдожим я буду использовать БД. Получается я один раз ее создам, положу в каталог с программой и буду с ней работать, добавлять данные, удалять, просматривать и т.п.? На другом компе мне не придеться как-то регистрировать эту БД, если я перенесу прогу? Мне нужно чтобы было просто работать с программой, без всяких инсталяций, скопировал прогу вместе с БД и работаешь. В идеале я буду иметь только 2 файла: БД и саму прогу.
Можете кинуть ссылку на ресурс где все начинается сначала: создается БД и т.д... Я сам конечно поищу, но вруг имеется что-то очень хорошее, буду благодарен.
www.kirov-rockets.ru  6.06.0
+
-
edit
 

Balancer

администратор
★★★★★
kirya> предположим что у меня 1000 записей, т.е. 1000 текстовых файлов с данными по двигателям.

Это уже БД нужна. См. в сторону sqlite. Не знаю, есть ли такое в сабже :)
 
+
-
edit
 

Balancer

администратор
★★★★★
kirya> На другом компе мне не придеться как-то регистрировать эту БД, если я перенесу прогу?

sqlite-база - это отдельный автономный файл. С которым можно работать хоть из консольных скриптов. А сам sqlite - это линкуемая к любому проекту библиотека.

Кстати, народ, вроде, вполне компилирует sqlite под Билдером 6. Первый попавшийся линк: Developer Shed - Home
 

uagg

опытный

Не нужно мучиться даже с SQLlite.

Для небольших задач без вопросов пойдет mdb файл в качестве хранилища (ограничения - объем хранимых данных до 2 Гб, длина таблиц не более 100 млн. записей [более просто в 2 Гб не влезут]. Но можно разделить данные и по нескольким файлам, сосредоточив в одном из них т.н. линки). А в качестве sql-процессора к ним - MSJET engine.

В файле может быть множество таблиц (>200 - точно. В принципе, на настольной машине в небольшом приложении больше и не видел.)

Инсталляции, разумеется, это никакой не требует, т.к. MSJET входит в MDAC2.5 (что характерно для 2000), или 2.8 (что характерно для хр). И безусловно этот набор устанавливается при инсталляции любого офиса, старше 2000.

Конечно, MDAC перед использованием программы лучше установить... Но не обязательно. Т.к. 2.5 и 2.8 не имеют с т.з. такой простой задачи никаких различий.
Собственно, чтобы не морочиться с отслеживанием версии MDAC можно просто ограничиться поздним связыванием переменных, соответствующих объектам JET Engine, и всё будет замечательно работать.

(Т.е. не объявлять в программе, к примеру, переменную, тут же создавая его конструктором, и, соответственно, предварительно установив статические линки на нужную библиотеку, а создать нетипизированный указатель, соответственно подсунув ему объект с помощью CreateObject с символическим именем (типа ADODB.Connection). Типа пускай сам разбирается, какой версии ADODB.Connection у него там).

Всё замечательно работает. Опробовано.

И именно так - скопировал 2 файлика, и понеслось.
 7.07.0
Это сообщение редактировалось 01.11.2008 в 12:26

uagg

опытный

PS: Разумеется, примеров работы с MSJET из VB/VBS/VBA/VB.NET/C# и С++ - в MSDE - шквал. Любого уровня детализации.
 7.07.0
+
-
edit
 

avmich

координатор

Может смущать то, что это 1) закрытое решение 2) работающее на определённых версиях платформы Микрософта. В то время как решения с открытым кодом в крайнем случае можно портировать.
 3.0.33.0.3

uagg

опытный

avmich>Может смущать то, что это 1) закрытое решение 2) работающее на определённых версиях платформы Микрософта. В то время как решения с открытым кодом в крайнем случае можно портировать.
ЛОЛ. Программа на Builder C++ 6.0 - сама по себе 1) закрытое решение 2) работающее на определённых версиях платформы Микрософта. Т.к. наверняка используются специфические контролы и библиотеки.

Кстати, для сведения. Программка, написанная мной в 1994 году на VB3 (sic!) сейчас нормально перекочевала на Висту и работает как работала. :)
 7.07.0
+
-
edit
 

Vyacheslav

опытный

uagg>> Программа будет максимально простой как раз при использовании БД :).
kirya> Согласен. Предполдожим я буду использовать БД. Получается я один раз ее создам, положу в каталог с программой и буду с ней работать, добавлять данные, удалять, просматривать и т.п.? На другом компе мне не придеться как-то регистрировать эту БД, если я перенесу прогу? Мне нужно чтобы было просто работать с программой, без всяких инсталяций, скопировал прогу вместе с БД и работаешь. В идеале я буду иметь только 2 файла: БД и саму прогу.
kirya> Можете кинуть ссылку на ресурс где все начинается сначала: создается БД и т.д... Я сам конечно поищу, но вруг имеется что-то очень хорошее, буду благодарен.
Вобще-то есть такая замечательная вещь как TClientDataSet, которая в частности позволяет хранить информацияю в файлах, но работать с этой информацией как с таблицами
 2.0.0.182.0.0.18
US Mishka #21.12.2008 00:06  @Vyacheslav#16.12.2008 21:53
+
-
edit
 

Mishka

модератор
★★★
Vyacheslav> Вобще-то есть такая замечательная вещь как TClientDataSet, которая в частности позволяет хранить информацияю в файлах, но работать с этой информацией как с таблицами

Дык, можно и организовать и через дравйвера типа ODBC — там можно источник указать как файл. Только медленно очень.
 3.0.53.0.5

kirya

втянувшийся

Пока разбирался,паял и собирал столько времени прошло...

Решил использовать MS Access\ADO, т.к. пока все получается. Буду работать штатно с БД, а необходимые двигатели (удачные конструкции) экспортировать в текстовые файлы.
Бумаю буду использовать однотабличную БД. Вот здесь посоветуйте. Каждая запись(двигатель) будет иметь данные со стенда (1024 значение типа int). Мне в каждой записи придется заполнять 1024 полей или можно как-то проще и эфективнее.
Просто сама мысль создавать руками 1024 поля меня пугает.
www.kirov-rockets.ru  2.0.0.122.0.0.12

GOGI

координатор
★★★★
kirya>Мне в каждой записи придется заполнять 1024 полей или можно как-то проще и эфективнее.
поле memo и процедура экспорта числового массива в текст и импорта из него.
1  

kirya

втянувшийся

kirya>>Мне в каждой записи придется заполнять 1024 полей или можно как-то проще и эфективнее.
GOGI> поле memo и процедура экспорта числового массива в текст и импорта из него.

1024 поля еще и создать не получится, проверил, не более 255 :-)
Создал поле memo. В базу все отлично заносится, в поле мемо данные размещаются через "Enter", т.е. каждое новое число с новой строчки. В поле 2048 чисел.
Теперь как мне обращаться к этим данным, скажем присвоить элементу массива число из 31-ой строчки поля memo?
www.kirov-rockets.ru  6.06.0
Это сообщение редактировалось 14.05.2009 в 18:57

kirya

втянувшийся

GOGI> поле memo и процедура экспорта числового массива в текст и импорта из него.

И еще. Есть в БД поле memo. Как мне в него добавлять числа?
Сейчас у меня только так получается - кручу в цикле такие строчки.(в ListBox1 содержатся нужные числа)

Form1->ADOTable1->Fields->FieldByNumber(18)->AsString = ListBox1->Items->Text;
ListBox1->ItemIndex++;

Но это очень долго проходит.
www.kirov-rockets.ru  6.06.0

zyxman

опытный

kirya> Программа должна быть максимально простой в использовании, никаких баз данных. Среда Builder C++ 6.0

А я бы это сделал на Perl, точнее ActivePerl is Perl for Windows, Mac, Linux, AIX, HP-UX & Solaris | ActiveState
там есть и sqlite и очень удобно и легко реализуется работа с CSV, и вообще удобно парсить файлы.
Интерфейс можно конечно win32api, но я бы предпочел еще прикрутить apache и делать интерфейс на html в окошке браузера.
называть крепостное право рабством - это просто за пределами любой логики и здравого смысла (с) Fakir Если ничего не делать то точно ничего не будет, а если делать и искать, то что-то может получиться ;)  1.5.0.61.5.0.6

kirya

втянувшийся

zyxman> Интерфейс можно конечно win32api, но я бы предпочел еще прикрутить apache и делать интерфейс на html в окошке браузера.

Да, один мой знакомый также предложил. Но я уже почти все доделал, осталась тарировка. Честно говоря мне и этого хватает с лихвой, это не мой профиль, поэтому довольно сложно.
Я тут попытался на рнр гостевую книгу сделать, так проклял все на свете. Скачал готовую и все. А там попадается такое же слово - apache :-)
www.kirov-rockets.ru  6.06.0

zyxman

опытный

kirya> Честно говоря мне и этого хватает с лихвой, это не мой профиль, поэтому довольно сложно.

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

Но вообще на будущее, самые простые средства для всяческих рутинных задач это sh/csh и awk, а perl по своей сути включает и подмножество почти идентичное awk, плюс у perl есть огромная библиотека модулей из которых как из кубиков собирается система почти на любую возможную задачу The Comprehensive Perl Archive Network - www.cpan.org (у php тоже есть pear.php.org, но там другая идеология - там обычно готовые продукты вроде гостевых книг, но естественно каждый пишет под свои нужды и перепиливать бывает непросто).
называть крепостное право рабством - это просто за пределами любой логики и здравого смысла (с) Fakir Если ничего не делать то точно ничего не будет, а если делать и искать, то что-то может получиться ;)  1.5.0.61.5.0.6

kirya

втянувшийся

Стенд доделал, все работает нарадоваться не могу. Конечно все еще сыровато...
Есть вещь которая меня напрягает. Для работы с СОМ портом использую такой код
#include <windows.h>
#include <string.h>

. . .

DCB dcb;
COMMTIMEOUTS ct;
HANDLE port;
DWORD bc;

char *buf_out="Test string";
char *buf_in;

. . .

dcb.DCBlength=sizeof(DCB);
BuildCommDCB("baud=9600 parity=N data=8 stop=1",&dcb);
dcb.fNull=TRUE;

ct.ReadIntervalTimeout=10;
ct.ReadTotalTimeoutMultiplier=ct.ReadTotalTimeoutConstant=0;
ct.WriteTotalTimeoutMultiplier=ct.WriteTotalTimeoutConstant=0;

port=CreateFile("COM2",GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING,0,NULL);

SetCommState(port,dcb);
SetCommTimeouts(port,&ct);
PurgeComm(port,PURGE_TXCLEAR|PURGE_RXCLEAR);
SetupComm(port,256,256);

. . .

buf_in=(char*)HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,strlen(buf_out)+1);
WriteFile(port,buf_out,strlen(buf_out),&bc,NULL);
ReadFile(port,buf_in,strlen(buf_out),&bc,NULL);

HeapFree(GetProcessHeap(),0,buf_in);
CloseHandle(port);

В стенде стоит микруха PL2303, эмуляция СОМ порта. Так вот подключаю стенд к ПК, появляется СОМ5 порт, программа его определяет нормально, т.е. открывает порт.
Но при передаче на стенд приходит 128, хотя я 10 передаю...Закрываю свою прогу.
Затем запускаю программу COM Port Toolkit 3.8, открываю ей СОМ5 и закрываю. После э
того запускаю свою прогу и все заботает. Если стенд отключить от ПК, то все приходится заново начинать.
www.kirov-rockets.ru  6.06.0

kirya

втянувшийся

Для наглядности решил скрины прилепить
Прикреплённые файлы:
 
www.kirov-rockets.ru  6.06.0

kirya

втянувшийся

kirya> Для наглядности решил скрины прилепить
Прикреплённые файлы:
 
www.kirov-rockets.ru  6.06.0

Mishka

модератор
★★★
kirya> BuildCommDCB("baud=9600 parity=N data=8 stop=1",&dcb);
kirya> port=CreateFile("COM2",GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING,0,NULL);
kirya> В стенде стоит микруха PL2303, эмуляция СОМ порта. Так вот подключаю стенд к ПК, появляется СОМ5 порт, программа его определяет нормально, т.е. открывает порт.
kirya> Но при передаче на стенд приходит 128, хотя я 10 передаю...Закрываю свою прогу.

У тебя в проге СОМ2 — смотри строчку выше. Ну 128 чего? Первая строка наверху — параметры порта, что выставляет твоя прога — они соответствуют тому, что стенд ожидает.
 2.0.0.112.0.0.11
Это сообщение редактировалось 09.08.2009 в 22:10

kirya

втянувшийся

kirya>> BuildCommDCB("baud=9600 parity=N data=8 stop=1",&dcb);
kirya>> port=CreateFile("COM2",GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING,0,NULL);
kirya>> В стенде стоит микруха PL2303, эмуляция СОМ порта. Так вот подключаю стенд к ПК, появляется СОМ5 порт, программа его определяет нормально, т.е. открывает порт.
kirya>> Но при передаче на стенд приходит 128, хотя я 10 передаю...Закрываю свою прогу.
Mishka> У тебя в проге СОМ2 — смотри строчку выше. Ну 128 чего?

Да, все правильно. Там стоит то, что пользователь выбирает. Не в этом дело. Дело в том что моя прога не настраивает порт, не ставит скорость 9600. А ставиться видимо по умолчанию 4800. А стенд ждет скорость 9600, поэтому и приходит 128.
А когда я порт настрою сторонней программой а потом его закрою, то моя прога работает, поскольку скорость у порта уже выствлена.
www.kirov-rockets.ru  6.06.0

Mishka

модератор
★★★
kirya> Да, все правильно. Там стоит то, что пользователь выбирает.

Ы? Если устройство определено как 5, то зачем выбирать 2?

code text
  1. BuildCommDCB("baud=9600 parity=N data=8 stop=1",&dcb);
  2. dcb.fNull=TRUE;
  3. ...
  4. port=CreateFile("COM2",GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING,0,NULL);
  5. ...
  6. SetCommState(port,dcb);


kirya> Не в этом дело. Дело в том что моя прога не настраивает порт, не ставит скорость 9600. А ставиться видимо по умолчанию 4800. А стенд ждет скорость 9600, поэтому и приходит 128.

Я выделил строчкти, которые должны настраивать — проверяй коды возврата.

Так что такое 128?
 2.0.0.112.0.0.11

kirya

втянувшийся

Mishka> Я выделил строчкти, которые должны настраивать — проверяй коды возврата.

Во, это уже по делу. Буду искать откуда эти коды вытаскивать.

Mishka> Так что такое 128?

:-) Блин число это. Я отправляю на стнед байт - число 10(00001010) команда у меня такая, а стенд понимает 128 (10000000). Это из-за не верно выставленной скорости, как я писал.
www.kirov-rockets.ru  6.06.0
1 2 3

в начало страницы | новое
 
Поиск
Настройки
Твиттер сайта
Статистика
Рейтинг@Mail.ru