●転送ソフトの開発
制御プログラムは、PCのRS-232Cポート(COM ポート)から 9600bps、8bit、non parity、1 stop bit、フロー制御なしで送信されてきます。
制御プログラムの先頭は、「はじめロボット」を表す信号、16、0、が送信されます。ミュウロボ制御基板は、この信号を受け取ると転送のスタートと判断し、「おわりロボット」を表す信号、19、が来るまで制御プログラムとしてPICのEEPROMに保存します。EEPROMの書き込みには時間がかかる為、信号と信号の間には0.1秒程度の待ち時間が必要です。
これらの点を注意すればCOMポートを制御できるプログラム言語(CやVBなど)を使って転送ソフトを開発できます。
下は転送プログラムとその転送信号です。ミュウロボ命令Codeと合わせてご覧ください。
//ドリトルのプログラム
ロボ太=シリアルポート!作る。
ロボ太:転送命令=「!はじめロボット
0 前進
リミットスイッチ
10 後退
おわりロボット」。
ロボ太! ”com1"ひらけごま。
ロボ太!転送命令。
ロボ太!とじろごま。
|
//myurobo.exeのプログラム
前進,0
リミットスイッチ
後退,10
|
このプログラムの転送信号 16、0、2(前進)、0、112(リミットスイッチ)、8(後退)、10、19
●カスタムコントロールの組み込み
Visual Basicを使って転送ソフトを作る場合、2つのOCX(MSCOMM32.OCXとCOMDLG32.OCX)コントロールを組み込む必要があります。
MSCOMM32.OCXはCOMポート用のコミュニケーションコントロール。COMDLG32.OCXはファイル操作用のコモンダイヤログコントロールです。
プロジェクト->コンポーネントをクリックまたはツールバーで右クリックしてコンポーネントをクリック、下の2つにチェックを入れるとツールボックスに組み込まれます。

これをフォームに貼り付けます。(左がMSComm1、右がCommonDialog1)

●COMポートの設定と使い方
Form_LoadイベントにCOMポートの初期設定(9600bps、8bit、non parity、1 stop bit、フロー制御なし)を行いポートをオープンします。
Private Sub Form_Load()
MSComm1.CommPort = 1
MSComm1.Settings = "9600,N,8,1"
MSComm1.Handshaking = comNone
MSComm1.PortOpen = True
バイナリーデータをCOMポートに出力するためのプロシジャ。
※Chr()関数を使って出力することも可能ですが一部のコードがバケるので必ずbyte配列を使います。
'----------------------------
' RS-323C 1byte binary出力
'----------------------------
Sub sendrs(cd As Byte)
Dim com(0) As Byte
com(0) = cd
MSComm1.Output = com
End Sub
最初に「はじめロボット」を表す信号、16、0、を送信。最後に「おわりロボット」を表す信号、19、を送信。
信号と信号の間には0.1秒のウエイトを入れる。
'----------------------------
'転送ボタンを押した時の処理
'----------------------------
Private Sub Cmd_snd_Click()
sendrs 16
wait100
sendrs 0
wait100
'ここでミュウロボCode変換・データ出力の処理を行います。
'sendrs 2 '例:前進を1.5秒の場合
'wait100
'sendrs 15
wait100
sendrs 19
End Sub
'-------------------
' 0.1秒のウエイト
'-------------------
Sub wait100()
Dim t As Single
t = Timer + 0.1
Do While t > Timer
' wait
Loop
End Sub
リモート内のボタンはMouseDown・MouseUpイベントを使います。
前進ボタンの場合、押した時、2(前進)、離した時、0(停止)、が送信されます。
'----------------------------
'前進ボタンを押した時の処理
'----------------------------
Private Sub Cmd_fw_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
sendrs 2
End Sub
'----------------------------
'前進ボタンを離した時の処理
'----------------------------
Private Sub Cmd_fw_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
sendrs 0
End Sub
●コモンダイヤログボックス
CommonDialog1を使って転送プログラムの読込や保存を行います。

'----------------------------
'読込ボタンを押した時の処理
'----------------------------
Private Sub Cmd_open_Click()
Dim txt1 As String, txt2 As String
CommonDialog1.CancelError = False
CommonDialog1.Flags = cdlOFNHideReadOnly
CommonDialog1.Filter = "すべてのファイル (*.*)|*.*|" & "テキスト ファイル (*.txt)|*.txt|"
CommonDialog1.FilterIndex = 2
CommonDialog1.ShowOpen
If Len(CommonDialog1.FileName) > 0 Then
Open CommonDialog1.FileName For Input As #1
Line Input #1, txt1
Do While Not EOF(1)
txt1 = txt1 & vbCrLf
Line Input #1, txt2
txt1 = txt1 & txt2
Loop
Txt_edit.Text = txt1
Txt_edit.SelStart = Len(txt1)
Txt_edit.SetFocus
Close #1
End If
End Sub
'----------------------------
'保存ボタンを押した時の処理
'----------------------------
Private Sub Cmd_save_Click()
On Error GoTo saveexit
CommonDialog1.CancelError = True
CommonDialog1.Flags = cdlOFNOverwritePrompt
CommonDialog1.Filter = "すべてのファイル (*.*)|*.*|" & "テキスト ファイル (*.txt)|*.txt|"
CommonDialog1.FilterIndex = 2
CommonDialog1.ShowSave
If Len(CommonDialog1.FileName) > 0 Then
Open CommonDialog1.FileName For Output As #1
Print #1, Txt_edit.Text
Close #1
End If
saveexit:
End Sub