| Цитата | unit Temperature1;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, iBTMEXPW, ExtCtrls, ComCtrls, Menus, StdCtrls, Grids, jpeg, TeEngine, Series, TeeProcs, Chart;
type TForm1 = class(TForm) MainMenu1: TMainMenu; Close1: TMenuItem; SaveAs1: TMenuItem; Save1: TMenuItem; Print1: TMenuItem; PageControl1: TPageControl; TabSheet1: TTabSheet; Button1: TButton; StringGrid2: TStringGrid; Chart2: TChart; Timer3: TTimer; procedure Button2Click(Sender: TObject); public { Public declarations } SHandle : longint; StateBuf : array[0..5120] of smallint; CRC8,CRC16 : Word; Done : boolean; end; Const LEVEL_SET = 1; LEVEL_STRONG_PULL_UP = $01; PRIMED_BYTE = 2; PRIMED_NONE = 0; LEVEL_NORMAL = $00;
var Form1: TForm1; rom,rom1,rom2 : array[0..8] of smallint; implementation
{$R *.dfm}
procedure TForm1.Timer3Timer(Sender: TObject) ; {$J+} const j : integer = 0; {$J-} var tsht,tsht1, i, l, tmp1 : smallint; cr,cpc, tmpf,tmp : Extended; rbuf : array[0..9] of smallint ; st : longint; a,b,c,d: real; str, str1: string; romstr: string; h,g: integer; CRCByte,flag,z1,z2,CRC3: Byte; PortNum,PortType:smallint;
begin TMRom(SHandle,@stateBuf,@rom2); if (($20 and $7F )= (rom2[0] and $7F)) then begin for i := 7 downto 0 do romstr := romstr + IntToHex(ROM2[i],2); Label9.caption := 'Serial ROM ID : ' + romstr; end; TMReadDefaultPort(@PortNum, @PortType); SHandle := TMExtendedStartSession(PortNum,PortType,NIL); If (TMAccess(Shandle,@StateBuf)= 1) then begin CRC16 :=0; ///// flag := TMTouchByte(SHandle,$55); CRCByte := flag; /////////55 CRC16 := TMCRC(1, @CRCByte,CRC16 , 1); /////// flag := TMTouchByte(SHandle,$08); /////////08 CRCByte := flag; CRC16 := TMCRC(1, @CRCByte, CRC16, 1); /////// flag := TMTouchByte(SHandle,$00); CRCByte := flag; /////00 CRC16 := TMCRC(1, @CRCByte, CRC16, 1); //////// flag := TMTouchByte(SHandle,$00); //////00 CRCByte := flag; CRC16 := TMCRC(1, @CRCByte, CRC16, 1); //////// flag := TMTouchByte(SHandle,$FF); CRCByte := flag; CRC16 := TMCRC(1, @CRCByte, CRC16, 1); //////////// flag := TMTouchByte(SHandle,$FF); CRCByte := flag; CRC16 := TMCRC(1, @CRCByte, CRC16, 1); //////////// flag := TMTouchByte(SHandle,$FF); CRCByte := flag; CRC16 := TMCRC(1, @CRCByte, CRC16, 1); //////// flag := TMTouchByte(SHandle,$01); //////01 CRCByte := flag; CRC16 := TMCRC(1, @CRCByte, CRC16, 1); /////// flag := TMTouchByte(SHandle,$FF); CRCByte := flag; CRC16 := TMCRC(1, @CRCByte, CRC16, 1); //////////// flag := TMTouchByte(SHandle,$FF); CRCByte := flag; CRC16 := TMCRC(1, @CRCByte, CRC16, 1); //////////// flag := TMTouchByte(SHandle,$FF); CRCByte := flag; CRC16 := TMCRC(1, @CRCByte, CRC16, 1); //////// flag := TMTouchByte(SHandle,$00); CRCByte := flag; ///////00 CRC16 := TMCRC(1, @CRCByte, CRC16, 1); /////// flag := TMTouchByte(SHandle,$FF); CRCByte := flag; CRC16 := TMCRC(1, @CRCByte, CRC16, 1); //////////// flag := TMTouchByte(SHandle,$FF); CRCByte := flag; CRC16 := TMCRC(1, @CRCByte, CRC16, 1); //////////// flag := TMTouchByte(SHandle,$FF); CRCByte := flag; CRC16 := TMCRC(1, @CRCByte, CRC16, 1); ////// flag := TMTouchByte(SHandle,$01); ///////01 CRCByte := flag; CRC16 := TMCRC(1, @CRCByte, CRC16, 1); ///// flag := TMTouchByte(SHandle,$FF); CRCByte := flag; CRC16 := TMCRC(1, @CRCByte, CRC16, 1); ///// flag := TMTouchByte(SHandle,$FF); CRCByte := flag; CRC16 := TMCRC(1, @CRCByte, CRC16, 1); ///// flag := TMTouchByte(SHandle,$FF); CRCByte := flag; CRC16 := TMCRC(1, @CRCByte, CRC16, 1);
/////// flag := TMTouchByte(SHandle,$00); ////////00 CRCByte := flag; CRC16 := TMCRC(1, @CRCByte, CRC16, 1); ///// flag := TMTouchByte(SHandle,$FF); CRCByte := flag; CRC16 := TMCRC(1, @CRCByte, CRC16, 1); ///// flag := TMTouchByte(SHandle,$FF); CRCByte := flag; CRC16 := TMCRC(1, @CRCByte, CRC16, 1); ///// flag := TMTouchByte(SHandle,$FF); CRCByte := flag; CRC16 := TMCRC(1, @CRCByte, CRC16, 1); ///// flag := TMTouchByte(SHandle,$01); /////////01 CRCByte := flag; CRC16 := TMCRC(1, @CRCByte, CRC16, 1); ///// flag := TMTouchByte(SHandle,$FF); CRCByte := flag; CRC16 := TMCRC(1, @CRCByte, CRC16, 1); ///// flag := TMTouchByte(SHandle,$FF); CRCByte := flag; CRC16 := TMCRC(1, @CRCByte, CRC16, 1); ///// flag := TMTouchByte(SHandle,$FF); CRCByte := flag; CRC16 := TMCRC(1, @CRCByte, CRC16, 1);
/////// flag := TMTouchByte(SHandle,$00); /////////00 CRCByte := flag; CRC16 := TMCRC(1, @CRCByte, CRC16, 1); ///// flag := TMTouchByte(SHandle,$FF); CRCByte := flag; CRC16 := TMCRC(1, @CRCByte, CRC16, 1); ///// flag := TMTouchByte(SHandle,$FF); CRCByte := flag; CRC16 := TMCRC(1, @CRCByte, CRC16, 1); ///// flag := TMTouchByte(SHandle,$FF); CRCByte := flag; CRC16 := TMCRC(1, @CRCByte, CRC16, 1); ///// flag := TMTouchByte(SHandle,$01); ///////01 CRCByte := flag; CRC16 := TMCRC(1, @CRCByte, CRC16, 1); ///// flag := TMTouchByte(SHandle,$FF); CRCByte := flag; CRC16 := TMCRC(1, @CRCByte, CRC16, 1); ///// flag := TMTouchByte(SHandle,$FF); CRCByte := flag; CRC16 := TMCRC(1, @CRCByte, CRC16, 1); ///// flag := TMTouchByte(SHandle,$FF); CRCByte := flag; CRC16 := TMCRC(1, @CRCByte, CRC16, 1); ///// flag := TMTouchByte(SHandle,$00); ////////00 CRCByte := flag; CRC16 := TMCRC(1, @CRCByte, CRC16, 1); /////// flag := TMTouchByte(SHandle,$FF); CRCByte := flag; CRC16 := TMCRC(1, @CRCByte, CRC16, 1); ///// flag := TMTouchByte(SHandle,$FF); CRCByte := flag; CRC16 := TMCRC(1, @CRCByte, CRC16, 1); ///// flag := TMTouchByte(SHandle,$FF); CRCByte := flag; CRC16 := TMCRC(1, @CRCByte, CRC16, 1); ////// flag := TMTouchByte(SHandle,$01); ///////01 CRCByte := flag; CRC16 := TMCRC(1, @CRCByte, CRC16, 1); ///// flag := TMTouchByte(SHandle,$FF); CRCByte := flag; CRC16 := TMCRC(1, @CRCByte, CRC16, 1);
///// flag := TMTouchByte(SHandle,$FF); CRCByte := flag; CRC16 := TMCRC(1, @CRCByte, CRC16, 1); ///// flag := TMTouchByte(SHandle,$FF); CRCByte := flag; CRC16 := TMCRC(1, @CRCByte, CRC16, 1); //////////// flag := TMTouchByte(SHandle,$AA); CRCByte := flag; CRC16 := TMCRC(1, @CRCByte, CRC16, 1); ////// flag := TMTouchByte(SHandle,$00); CRCByte := flag; CRC16 := TMCRC(1, @CRCByte, CRC16, 1); ////// flag := TMTouchByte(SHandle,$00); CRCByte := flag; CRC16 := TMCRC(1, @CRCByte, CRC16, 1); //////// CRC16:=0; flag := TMTouchByte(SHandle,$3C); CRCByte := flag; CRC16 := TMCRC(1, @CRCByte, CRC16, 1); ///// flag := TMTouchByte(SHandle,$0F); CRCByte := flag; CRC16 := TMCRC(1, @CRCByte, CRC16, 1); //////// flag := TMTouchByte(SHandle,$00); CRCByte := flag; CRC16 := TMCRC(1, @CRCByte, CRC16, 1); //////// flag:= TMTouchByte(SHandle,$FF); CRCByte := flag; CRC16 := TMCRC(1, @CRCByte, CRC16, 1); //////// flag:= TMTouchByte(SHandle,$FF); CRCByte := flag; CRC16 := TMCRC(1, @CRCByte, CRC16, 1); st := GetTickCount + 1000; g:=1 ; for i := 0 to 7 do begin rbuf[i]:= TMTouchByte(Shandle, $FF); CRCByte := Byte(rbuf[i]); { the byte to run through CRC8 routine } CRC16 := TMCRC(1, @CRCByte, CRC16, 1);
if ((i+1) mod 2 =0) then begin tsht:=rbuf[i]*256 or rbuf[i-1]; StringGrid2.Cells[g,j] :=FloatToStr(Tsht)+' '+FloatToStr(rbuf[i-1]); g:=g+1; end; end; flag:= TMTouchByte(Shandle, $FF); CRCByte := flag; { the byte to run through CRC8 routine } CRC16 := TMCRC(1, @CRCByte, CRC16, 1);
j:=j+1; TMEndSession(Shandle); Done := True;
end; end;
procedure TForm1.Button2Click(Sender: TObject);//// часовой интервал таймера
var b: integer; begin Timer3.Enabled := True; b:= StrToInt(Form1.Edit2.Text); Timer1.Interval:=b*1000; end;
end.
|
Код на делфи. СКС проверял лично подсчитывает верно, а вот когда пытаюсь получить через flag, то не совподает, тоже не знаю...хотя для работы CRC не важно...это как контроль настойки контролера...но может и по этому не получается снять данные. Если кто поможет, могу пообещать взаимную помощь. |