![]() |
|
#16
|
|||
|
|||
![]() Здравствуйте всем!
Намудохался я с этим девайсом,однако уже работает,слава те Господи. Вот результаты моих экспериментов: Код:
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Memo1: TMemo; Button1: TButton; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; OpenInterf, OpenContr: DWORD; //будут использоваться для открытия и регистрации r: word; // для чтения из порта v:real;// для перевода в вольты implementation uses Isabox_h; {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); var i: Integer; begin ibcClearControllerList(); ibcClearInterfaceList(); OpenInterf := ibcOpenInterface(0,115200,0); // девайс на COM0,а NULL = 0. OpenContr := ibcOpenController(OpenInterf, $0,$300,$30F); ibcControl(false); // без этого вообще все виснет ibcControl(true); // собираю шину,как советует руководство ibcWritePort($308,$10); // включаю АЦП for i := 0 to 4 do // даю пять холостых циклов чтения "для притирки" АЦП :) begin ibcWritePort($30C,$80);// управляющее слово.Однополярный режим ibcReadPortW($30C,r);// читаю,что ж там оно напреобразовало end; for i := 0 to 50 do // и наблюдаю реакцию порта на мои действия begin ibcWritePort($30C,$80);// если не буду повторять,данные чтения меняться не будут ibcReadPortW($30C,r); v:=(r/65536)*10.24; //здесь непонятно работает формула memo1.Lines.Add(floattostr(v)); sleep(1000); end; end; end. Замечания. 1.Там в руководстве есть совет,как предварительно настраивать таймер и приведены три команды с управляющими словами.Реально здесь ничего они не дают.Что с ними,что без них.Правда,девайс работал в режиме прямого диалога с компом.Другие режимы просто не пробовал пока. 2.Формула расчета напряжения,приведеная в руководстве или содержит ошибку,или я ее неверно понял. Для униполярного режима приведено v:=(данные/65536)*5.12 Для биполярного v:=(данные/65536)*10.24-5.12 На практике по их формуле получается,что батарейка,подключенная к каналу 0 показывает 0.65 вольта (когда у нее реально 1.3).Той же странностью страдает и IsaBox Administrator.Выставил однополярный режим,база 5.12в и показал мне ровно половину.Почему так,пока не врубился. И последнее.Здесь я из-за незнания вынужден употреблять цикл с задержкой sleep(1000).В Паскале есть repeat ... until keypressed В Делфи,однако,такая штуковина не работает.Чем ее заменить? Спасибо. |
#17
|
||||
|
||||
![]() попробуй для задержки использовать такую функцию
Код:
procedure MsgSleep(milliseconds: Cardinal); var endTime: Cardinal; begin endTime := milliseconds + GetTickCount(); while endTime > GetTickCount() do begin Application.ProcessMessages(); sleep(20); end; end; Будут конкретные вопросы по программированию обращайся. С этим девайсом не работал. За то когда сам с другим мучился так там даже в dll была нестыковка с описанием. |
#18
|
|||
|
|||
![]() Спасибо всем,кто помог разобраться с этой заморочкой.
Со связи не ухожу.пишу для себя некую медицинскую программу. Естественно.вопросы еще будут. До встречи на форуме. |