| 
 
                    
                      
                        | Visual Basic Express Editironでコマンド方式サーボを動かしてみる(4)
 |  
 (3)へ (5)へ 
 6.コンプライアンスコンプライアンスマージンとスロープ、パンチは3つセットで調整した方がいいので、一気に作っちゃいます。と言っても設定方法はこれまでと大して変わらないわけですが。
 
  必要な入力欄はスロープCW、スロープCCW、マージンCW、マージンCCW、パンチの5つ。
 送信はまとめてやっちゃおうと思いますので、送信ボタンは1つだけ。少し大きめに広げてみました。
 
 Dim ShortPacket(20) As ByteDim 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) = &H18ShortPacket(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)
 
 これでコンプライアンスもいじれるようになりました。コンプライアンス関連はサーボごとに初期値が違いますので、テキストボックスの初期値設定する場合は十分ご注意ください。
 
 |