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

VB2005でDelay(Wait)タイマーを作るには

1こじら:2010/03/15(月) 22:29:04
こんばんは。RS232Cではお世話になりました。おかげ様で送受信
できるようになりました。ありがとうございました。
 次に起こった問題なんですが、現在のRS232Cの通信はTX,RX端子のみ
でおこなっているので、PCからの送信時、相手のバッファオーバーフロー
が分かりません。
 しかし、バッファサイズは分かっているので、それを見越した
送信データ数とWaitタイマーで現在はしのいでみようと考えて
います。しかし、VB6の時のようにタイマーがうまく動きません。
Form_Load
Timer1.Interval = 1000
Timer1.Enable = False
:
:
Loadのエンド

Dim Acount as integer
Dim TimerCount as integer

:
送信処理
ACount = 2

For i as integer=0 To X
送信関数(data(i)) 'data配列に送信したいデータを設定
TimerCount = 0
Timer1.Enable =True
Do while Acount>TimerCount
(空)
Loop

Timer1.Enable =False

Next



Private Sub Timer_Tick 〜
 TimerCount = TimerCount+1
end Sub


というようにしているのですが、Do While文で帰ってこなくなります
処理がないことがだめなのかと、この文の中に仮演算 a=a+TimerCountとしても
かえってこなくなりました。
ちなみに、VB6の時につかっていたプログラムで動いていたのですが
正しい書き方かどうか知らず動いたので使っていました。

ネットとかで調べると、VB2005などではマルチタスク処理にすべき
とありましたが、Waitをどのように改造すればよいのでしょうか。

題目とことなるのですが、ICのレジスタアクセスを行うのに
Classプロパティを使用すると良い(質問14)と以前アドバイス頂いた
のですが、例えば512アドレス(レジスタ)あれば、512個のプロパティー
を作る必要があるのでしょうか?

1つのプロパティーを何とか512個のインスタンス化処理みたいな
ことでうまくできないでしょうか。
 プロパティーの中身を替えた時など、全てのプロパティー記述
を直すのが一苦労なので、なにかうまい方法あれば教えていただけ
ないでしょうか

よろしくお願いします

11igoten:2010/03/25(木) 17:13:51
問題はFormUARTで新しいForm1のインスタンスを作って
それに受信データーを書き込んでしまってるんですね。
Form1からFormUARTに自分のインスタンスを渡す必要が
有ります。
下のコードの感じになるんですが、デリゲートはFormUART
側に有った方がいいですね。

Public Class Form1
Dim UART1 As FormUART

'FormUARTから呼ばれる
Public Sub AddText(ByVal strGetText As String)
TextBox1.Text = TextBox1.Text + strGetText
End Sub

Private Sub Form1_Load(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles MyBase.Load
UART1 = New FormUART()
UART1.Visible = True
UART1.SetForm(Me) 'Form1のインスタンスを渡す
End Sub
End Class


Public Class FormUART
Dim F1 As Form1
Delegate Sub dlgAddText(ByVal GetText As String)
Public Sub AddText(ByVal strText As String)
F1.AddText(strText)
End Sub

Private Sub SerialPort1_DataReceived(ByVal sender As System.Object, _
ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived
Dim inStr As String = SerialPort1.ReadChar()
Me.Invoke(New dlgAddText(AddressOf Me.AddText), _
New Object() {inStr})
End Sub
Public Sub SetForm(ByVal f As Form1)
F1 = f
End Sub

Private Sub FormUART_Load(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles MyBase.Load
SerialPort1.Close()
SerialPort1.Open()
End Sub
End Class

12こじら:2010/03/26(金) 00:46:43
ありがとうございます

Form1をFormUART内でoFORM1インスタンス化し、
Me.Invokeとしている箇所を oForm1.Invoke〜
そして
Form1クラスで 
 Private Sub Form1_Load 〜
  Dim UART1 as FORM1 = New FormUART(Me) 

なんてして渡したつもりにしていましたが、うまくできませんでした
教えて頂いた記述みるとなるほどと思うのですが、自分では
なかなか思いつかないです。

ありがとうございました。頂いたアドバイスでトライしてみます。
というインスタンスに

19inexpensive ugg boots:2013/09/28(土) 09:25:35
Hello to every single one, it’s truly a fastidious for me to go to see this site, it contains useful Information.
inexpensive ugg boots http://bestoflakejames.com/inexpensive-ugg-boots.html


新着レスの表示


名前: E-mail(省略可)

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

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

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

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