したらばTOP ■掲示板に戻る■ 全部 1-100 最新50 | |

■■■20レス以内で済むF-BASICの質問はこちらへ■■■

633598:2015/10/29(木) 03:43:08
>>630
>プログラムで取ってしまえば問題ないのですが、このNULLが少し気になります。

 00(NULL)についてですが、いくつか可能性を挙げてみると、

・RTSをONにすると送ってくる。(なにかの対策のための動作?)
・RTSの変化に応じて送ってくる。(制御線を使わないので、代替の応答としている。)
・測定データ送信時の先触れとして送っている。(データ受信取りこぼしを防ぐため?)
・PC側から送信したコマンドを受領した意味で応答している。
・なにかのタイミングで定期的に送っている。(制御線を使わないので、生存証明。)

 おそらくGW-BASICなどでは内部の処理で、受け取った00(NULL)を捨てているので、
表にあらわれないのではないかと推測します。

 対策として次の個所(TEST2_SETSTATEの中)にプログラムを追加してください。
#'**ここで設定を変更する**
#F=DCB.FBITFIELDS '*bit毎設定必要
#'----fRtsControl----
##(省略)#

$$←←←ここに挿入$$
DCB.FBITFIELDS=F '設定

$$
'----fNull----
M=fnULL '設定値
F=F or M 'ビット設定
print "fNull書換";" (NULL BYTES 受信を破棄する)"
$$

 つぎにデータ受信本体プログラムのこの行を変更。
(変更前)if not eof(1) then print "Error:受信バッファが空でない!"
(変更後)if not eof(1) then R$(0)=input$(LOF(1),#1):R$(0)="" '最初のNULL受信破棄

 つぎにclose命令の後にこの1行を追加。
#close
TEST1_SETSTATE_NULLCHAR CM$ 'COMポートのfNull設定解除する

 最後に、以下のプログラムを追加します。(TEST2_SETSTATE〜end subの後ろ、var CM$, R$(4-1)の前)

declare sub TEST1_SETSTATE_NULLCHAR(FDSCRP$, byval SW%= 0)
sub TEST1_SETSTATE_NULLCHAR(FDSCRP$, byval SW%)
var RES as long, DCB as T_DCB
var HFILE as long
var F as long, M as long
var DEVNAME$

if SW%<0 then SW%=0
if SW%> 1 then SW%=1
select case ucase$(left$(FDSCRP$,5))
case "COM0:"
DEVNAME$="COM1"
case "COM1:"
DEVNAME$="COM2"
case "COM2:"
DEVNAME$="COM3"
case "COM3:"
DEVNAME$="COM4"
case "COM4:"
DEVNAME$="COM5"
case else
error 55 :exit sub
end select

HFILE=INVALID_HANDLE_VALUE
HFILE = CREATEFILE(DEVNAME$, (GENERIC_READ or GENERIC_WRITE), 0, NULL, OPEN_EXISTING, 0, NULL)
if HFILE= INVALID_HANDLE_VALUE then print "Error:open失敗":exit sub

RES=GetCommState(hfile, DCB)
if res=0 then
print "Error:GetCommState"
RES=CLOSEHANDLE(HFILE)
else
if DCB.DCBLENGTH<>len(T_DCB) then print "!!DCBlength(hex)=";DCB.DCBLENGTH

'**ここで設定を変更する**
F=DCB.FBITFIELDS '*bit毎設定必要
'----fNull----
F=F and (not fnULL) 'ビット消去
M=fnULL
M=M * clng(SW%) '設定値
F=F or M 'ビット設定

if DCB.FBITFIELDS <> F then
print "fBitFields(16進数)変更前=";hex$(DCB.FBITFIELDS)
DCB.FBITFIELDS=F '設定
print "fBitFields(16進数)変更後=";hex$(DCB.FBITFIELDS)

'設定を更新する
RES=SetCommState(hfile, DCB)
if res=0 then
print "Error:SetCommState"
endif
endif
RES=CLOSEHANDLE(HFILE)
endif
end sub


新着レスの表示


名前: E-mail(省略可)

※書き込む際の注意事項はこちら

※画像アップローダーはこちら

(画像を表示できるのは「画像リンクのサムネイル表示」がオンの掲示板に限ります)

掲示板管理者へ連絡 無料レンタル掲示板