Form1で定周期(10ms)で通信を行っていて、コマンドイベントでForm2へ移動すると、「デバイスが開かれていません」というエラーが発生します。通信中にFormを移動する際には、何か操作が必要なのでしょうか?
また、Form2から下のエラー行に到達するまでに、Form1のLoadも実行しています。
宜しくお願い致します。
Private Sub Timer1_Timer() <- Form1へ記述
MSComm1.PortOpen = True
Call Write_sci
MSComm1.PortOpen = False <- この行にエラーが発生
End Sub
Write_sciで送受信を行っています。受信待ちに DoEvents() を記述しています。
こんにちは
>Form1で定周期(10ms)で通信を行っていて・・・・・
Errとは別なきがしますが処理は十分まにあってますか?
Private Sub Timer1_Timer() <- Form1へ記述
Call Write_sci
End Sub
sub Write_sci()
Form1.MSComm1.PortOpen = True
'今までの Write_sciでの処理
Form1.MSComm1.PortOpen = False
End Sub
こちらの方法でもErrになりますか
こんにちは
>Form1で定周期(10ms)で通信を行っていて・・・・・
Errとは別なきがしますが処理は十分まにあってますか?
Private Sub Timer1_Timer() <- Form1へ記述
Call Write_sci
End Sub
sub Write_sci()
Form1.MSComm1.PortOpen = True
'今までの Write_sciでの処理
Form1.MSComm1.PortOpen = False
End Sub
こちらの方法でもErrになりますか
すいません重複してしまいました
ご提案の方法を試してみましたが、変わりませんでした。DoEventでFormを移動させてはダメなのでしょうか?
周期の件は、調べてみるとTimerでは精度がかなり悪いそうですね。もう少し余裕を持った周期にします。
ん〜 そうですか〜
>ご提案の方法を試してみましたが、変わりませんでした。DoEventでFormを移動させてはダメなのでしょうか?
試してはいませんけど Formの切替かもしれませんね
私の場合は、ポートを一度オープンしたらアプリ終了まで閉じないように
してます。
私もFormを切替たことありましたが問題なしでしたよ
Private Sub Form_Load()
Call Port開く
End sub
Sub Port開く()
With Form1
If .MSComm1.PortOpen = False Then
.MSComm1.Settings = "9600,n,8,1"
.MSComm1.CommPort = 1
.MSComm1.InputLen = 0 '全文字
.MSComm1.InputMode = comInputModeBinary
.MSComm1.InBufferSize = 2048
.MSComm1.RTSEnable = False 'Sendライン
.MSComm1.DTREnable = False '受信可能?
.MSComm1.Handshaking = 2 ' 2
.MSComm1.NullDiscard = False 'しない
.MSComm1.PortOpen = True '1開く
End If
End With
End Sub
こんな感じだったんですが参考になるでしょうか
2日ほど出張ですがまたここへきてみます。
フォームの移動は、ポートが閉じている間行うようにすれば、エラーは発生しなくなりました。
とりあえずは、これでなんとかします。
こんばんは
およっ 解決ですか?
すいません お役にたてず
ツイート | ![]() |