掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
CommX・WindowsXPで通信不可 (ID:10741)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
takeさん こん**は 電子天秤の連続送出モードでは1秒間に4−8回程度の垂れ流し状態のg数データを受信することになります。 データフォーマットは P1D1D2D3D4D5D6D7U1U2S1S2CRLF デリミタ(CRLF)を含めて14文字でデータブロックが構成されている。 P1: +か−(マイナス) D1−D7: _または数字(0−9) _はスペース U1U2: _ G S1S2: _ (データ安定の意) と言う構成になっています。 具体的に、123.45gの計量を行った場合、データは「+_123.45_G_SCRLF」という14バイトの文字列となっている。 また0.0gの時のデータは「+____0.0_G_SCRLF」となる。 14バイトのg数データを2ブロック分(14*2=28バイト)をまとめて1回で受信すれば、受信データの先頭で+を受信できなくとも、受信文字列の中に有効なg数データが入っているはずである。 この28バイトの受信文字列からLF(復帰コード#10)の場所を基に有効g数データを切り出す事で連続送出モードに対応しています。 通信部分のソースは下記の通りです。 /電子天秤からのシリアル信号受信処理ブロック/ procedure TFrmMain.CommX1Receive(Sender: TObject; ReceiveSize:Integer); var buf : PChar; weightbuf : string; weightbufA : string; weight : string; weight_B : string; weight_CK : string; wflg_A: string; wflg_H : Currency; wflg_I : Integer; i : Integer; j : Integer; k : Integer; begin buf:=AllocMem(28); try CommX1.ReceiveBlock(buf,28); for i := 0 to 27 do begin weightbufA := weightbufA + Buf[i]; end; finally FreeMem(Buf, 28); end; j := Pos(#10,weightbufA); //有効g数の切り出し #10=LFの場所を得る if j<14 then begin //#10が13以下 weightbuf := copy(weightbufA,j+1,14); end else begin //#10が14 weightbuf := copy(weightbufA,j-13,14); end; //切り出し後のg数データのチェック weight_CK := copy(weightbuf,13,2) ; if (weight_CK <> #13#10) then begin EXIT; //入力エラー時パス end; wflg_A := copy(weightbuf,1,1); //+- weight_B := copy(trim(weightbuf),2,7); //+__***.* g数 文字列 wflg_I := 0; //+の時用に初期化 weightbufA := ''; wflg_H := StrToCurr(weight_B); // g数 絶対値 if wflg_A = '-' then begin //- if wflg_H > 0.09 then begin //マイナス0.1g以上で記録 ブレ対策 wflg_I :=-1; end else begin wflg_I :=0; end; end else begin //+ if wflg_H > 0 then begin wflg_I := 1; end else begin wflg_I := 0; end; end; case wflg_I of 1: begin if MstDsp.Visible then begin //薬品選択時 weight := copy(trim(weight_B),1,5); D_Weight.Value := StrToFloat(weight); wflg_B.Value := StrToFloat(weight); 上記ソースでWindowsXpの一部機種で受信ができないという不具合が発生しています。ポート関係のエラー表示もなく、WindowsXp付属のハイパーターミナルでは正常に受信しております。 またWindowXp搭載の他のPCで正常稼働しているモノも多々あり、原因が全くわかりません。
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.