UE村工房 本文へジャンプ

Visual Basic Express Editiron
コマンド方式サーボを動かしてみる(4)


(3)へ

(5)へ


6.コンプライアンス

コンプライアンスマージンとスロープ、パンチは3つセットで調整した方がいいので、一気に作っちゃいます。
と言っても設定方法はこれまでと大して変わらないわけですが。


必要な入力欄はスロープCW、スロープCCW、マージンCW、マージンCCW、パンチの5つ。
送信はまとめてやっちゃおうと思いますので、送信ボタンは1つだけ。少し大きめに広げてみました。


Dim ShortPacket(20) As Byte
Dim i, pID, sum As Integer
Dim pPunch As Integer

pID = CInt(TextBox1.Text)

ShortPacket(0) = &HFA
ShortPacket(1) = &HAF
ShortPacket(2) = pID
ShortPacket(3) = &H0
ShortPacket(4) = &H18
ShortPacket(5) = &H6

ShortPacket(6) = &H1

ShortPacket(7) = CInt(TextBox4.Text)
ShortPacket(8) = CInt(TextBox5.Text)
ShortPacket(9) = CInt(TextBox6.Text)
ShortPacket(10) = CInt(TextBox7.Text)


pPunch = CInt(TextBox8.Text)
ShortPacket(11) = pPunch And &HFF
ShortPacket(12) = Int(pPunch / 256) And &HFF


sum = ShortPacket(2)
For i = 3 To 12
sum = sum Xor ShortPacket(i)
Next

ShortPacket(13) = sum

Try
SerialPort1.Open()
Catch ex As Exception
MessageBox.Show("シリアルポートエラー")
End Try

If SerialPort1.IsOpen = True Then
SerialPort1.Write(ShortPacket, 0, 14)
SerialPort1.Close()
End If
End Sub

特別これまでと違うところはありません。


Dim pPunch As Integer

パンチだけは2バイトなので、1バイトずつに分けるように宣言しておきます。


ShortPacket(4) = &H18
ShortPacket(5) = &H6


メモリマップではコンプライアンスマージンがNo.24・25、スロープがNo.26・27、パンチがNo.28/29なので、No.24(18H)から6バイト分を送信します。


ShortPacket(7) = CInt(TextBox4.Text)
ShortPacket(8) = CInt(TextBox5.Text)
ShortPacket(9) = CInt(TextBox6.Text)
ShortPacket(10) = CInt(TextBox7.Text)

コンプライアンスマージンとスロープはそれぞれ1バイトなので、そのまま代入します。
CW、CCWの方向は各サーボの取扱説明書参考ということで。

なお何も対策をしていないので、入力値が255(FFH)を超えるとエラーが出てしまいます。


pPunch = CInt(TextBox8.Text)
ShortPacket(11) = pPunch And &HFF
ShortPacket(12) = Int(pPunch / 256) And &HFF

パンチは2バイトなので1バイトずつに分割します。
やり方は目標角度や移動時間のときと同じです。

あとはチェックサムの計算と送信バイト数に注意をすれば、特に問題はないでしょう。


SerialPort1.Write(ShortPacket, 0, 14)

これでコンプライアンスもいじれるようになりました。
コンプライアンス関連はサーボごとに初期値が違いますので、テキストボックスの初期値設定する場合は十分ご注意ください。