VB.net XP の環境でRS-232cからRCB-1を制御しようとしています。
使用しているのは、近藤科学のロボットアームです。
コマンドリファレンスを見てみますと、ポジション設定には、
ポジション設定コマンド、ID設定、動作スピード、各チャンネルの角度と、
最後に「各値を加算した値のMSB1bit目を削った値がチェックサムになります」という値が必要なようです。
これを参考に動かしてみたのですが、どうしても動いてくれないポジションがあります。
たとえば、0〜33° 130〜159°の範囲が動きません。
送信するときの具体的なコードは、
MSComm1.Output = Chr(253) + Chr(0) + Chr(3) + Chr(90) + Chr(90) + Chr(90) + Chr(90) + Chr(90) + Chr(90) + Chr(ch7) + Chr(ch8) + Chr(ch9) + Chr(ch10) + Chr(ch11) + Chr(ch12) + sum
いろいろと試してみたのですがうまくいきませんでした。
この原因がわかる方がいらっしゃいましたら、どうか教えていただけませんでしょうか。
Herat to Heartなら動くので、機器には問題ないと思われます。
その機械を知っている人がレアだと思いますが
エスパー回答でよければ
期待値と動きは本当に正しいですか?
具体的なコードとの事ですが、見た限り具体的ではありません。
ch7〜ch12のコードは何ですか?
このコードのsum値はいくつになりますか?sum値が間違っていませんか?
>MSComm1.Output = Chr(253) + Chr(0) + Chr(3) + Chr(90) + Chr(90) +
>Chr(90) + Chr(90) + Chr(90) + Chr(90) + Chr(ch7) + Chr(ch8) + >Chr(ch9) + Chr(ch10) + Chr(ch11) + Chr(ch12) + sum
#こういうのは、コミュニケーションアナライザー(RS-232C ラインモニタ)
#があると効率が数倍上がります。(.net関係ありません)
#Herat to Heartが何か分かりませんが、モニタして自分のコマンドと
#何が違うのか比べればいいのです。
#専用機器やPCで出来るものがあるので検討してみては?
#マニュアルにコマンドはFD(ポジション設定)とあるのでせめてChr(&hFD)に
しましょうよ。#読む気がなくなります。
http://www.kondo-robot.com/pdf/RCB-1CommandVer1B.pdf
解答どうもありがとうございます。
>>具体的なコードとの事ですが、見た限り具体的ではありません。
たしかにおっしゃる通りです。
各チャンネルとsumの値は合っていると思います。
動かない角度以外は正確に動かすことができるからです。
RS-232C ラインモニタというのは使ってみたいですが、
いまの環境では用意することができそうにないです・・・
初心者まるだしの質問に親切に答えていただき、ありがとうございました。
いろいろと試してみようと思います。
RS-232C ラインモニタ色々(PC版)
http://download.goo.ne.jp/software/category/win/hardware/comm/
一台(本体のみ)で監視できるタイプもあるようです。(動作未確認)
http://www.vector.co.jp/soft/win95/prog/se210167.html
mscommコントロールはバイナリ送信が
かなりへたれです。
http://www.google.co.jp/search?hl=ja&rlz=1T4GFRC_jaJP204JP205&q=MSComm+%E3%83%90%E3%82%A4%E3%83%8A%E3%83%AA&lr=
CreateFile APIなりでの制御をお勧めします。
おぉ、なにやら深いですね・・・
一度、APIについて勉強してみます。
解答どうもありがとうございました。
VB.NETを御使いだと・・・
2002/2003 ならば、APIでしょう
2005/2008 ならば、SerialPortクラスで実装
.NETでMSComm使うのは、見えない問題が大きいかと。
頑張って下さい!
以上。
createfile API を使って試してみました。
困っていることがあるので、すみませんが質問させてください。
http://members.at.infoseek.co.jp/spectrum123/vb/vb_3/vb_3.htm
上記のページを参考にしているのですが、データの送信関数の定義のところで、VB6でゆうところのas anyに対応する記述がわからずに困っております。
stringやlongやbyteなど試してみたのですがエラーになります。
VB6での動作確認はできました。
>VB6での動作確認はできました。
動きましたでしょうか?
こんなのがありました。
http://madia.world.coocan.jp/cgi-bin/VBBBS/wwwlng.cgi?print+200607/06070048.txt
もしかしてIntPtrでは?
はい、VB6では動くことを確認できました。(それでも動かない角度はかわらず動かないままです・・・)
IntPtrでも試してみましたが、エラーになります。
そちらを見ないでこちらを見てください。
>http://support.microsoft.com/default.aspx?scid=kb;ja;823179
Public Declare Auto Function ReadFile Lib "kernel32.dll" ( _
ByVal hFile As IntPtr, _
ByVal lpBuffer As Byte(), _
ByVal nNumberOfBytesToRead As Int32, _
ByRef lpNumberOfBytesRead As Int32, _
ByVal lpOverlapped As IntPtr) As Boolean
DllImportを使い場合は
Imports System.Runtime.InteropServices
<DllImport("KERNEL32.DLL", _
EntryPoint:="ReadFile", _
SetLastError:=True, _
CharSet:=CharSet.Auto, _
ExactSpelling:=True, _
CallingConvention:=CallingConvention.StdCall)> _
Private Shared Function ReadFile( _
ByVal hFile As IntPtr, _
ByVal lpBuffer As Byte(), _
ByVal nNumberOfBytesToRead As Int32, _
ByRef lpNumberOfBytesRead As Int32, _
ByVal lpOverlapped As IntPtr _
) As Boolean
End Function
お世話になっております。
皆様の助言のおかげでAPIを使って、ポートを開く、
データ送信はできるようになりました。有り難うございました。
しかしやはり動かないポジションは動かないままです。
いろいろ試してみたいと思います。