RCB-1でポジション設定するには?


R  2008-08-11 23:23:30  No: 145070

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なら動くので、機器には問題ないと思われます。


  2008-08-12 12:45:31  No: 145071

その機械を知っている人がレアだと思いますが
エスパー回答でよければ

期待値と動きは本当に正しいですか?

具体的なコードとの事ですが、見た限り具体的ではありません。
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


R  2008-08-13 09:19:57  No: 145072

解答どうもありがとうございます。

>>具体的なコードとの事ですが、見た限り具体的ではありません。

たしかにおっしゃる通りです。
各チャンネルとsumの値は合っていると思います。
動かない角度以外は正確に動かすことができるからです。

RS-232C ラインモニタというのは使ってみたいですが、
いまの環境では用意することができそうにないです・・・

初心者まるだしの質問に親切に答えていただき、ありがとうございました。
いろいろと試してみようと思います。


  2008-08-13 18:47:26  No: 145073

RS-232C ラインモニタ色々(PC版)
http://download.goo.ne.jp/software/category/win/hardware/comm/

一台(本体のみ)で監視できるタイプもあるようです。(動作未確認)
http://www.vector.co.jp/soft/win95/prog/se210167.html


  2008-08-14 10:01:41  No: 145074

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なりでの制御をお勧めします。


R  2008-08-14 10:42:23  No: 145075

おぉ、なにやら深いですね・・・

一度、APIについて勉強してみます。

解答どうもありがとうございました。


オショウ  2008-08-14 18:07:20  No: 145076

VB.NETを御使いだと・・・
2002/2003 ならば、APIでしょう
2005/2008 ならば、SerialPortクラスで実装
.NETでMSComm使うのは、見えない問題が大きいかと。

頑張って下さい!

以上。


R  2008-08-19 00:13:02  No: 145077

createfile  API  を使って試してみました。

困っていることがあるので、すみませんが質問させてください。
http://members.at.infoseek.co.jp/spectrum123/vb/vb_3/vb_3.htm
上記のページを参考にしているのですが、データの送信関数の定義のところで、VB6でゆうところのas anyに対応する記述がわからずに困っております。
stringやlongやbyteなど試してみたのですがエラーになります。

VB6での動作確認はできました。


  2008-08-19 08:29:45  No: 145078

>VB6での動作確認はできました。
動きましたでしょうか?

こんなのがありました。
http://madia.world.coocan.jp/cgi-bin/VBBBS/wwwlng.cgi?print+200607/06070048.txt
もしかしてIntPtrでは?


R  2008-08-19 11:39:36  No: 145079

はい、VB6では動くことを確認できました。(それでも動かない角度はかわらず動かないままです・・・)

IntPtrでも試してみましたが、エラーになります。


我龍院  2008-08-19 17:13:56  No: 145080

そちらを見ないでこちらを見てください。
>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


R  2008-08-27 23:57:36  No: 145081

お世話になっております。

皆様の助言のおかげでAPIを使って、ポートを開く、
データ送信はできるようになりました。有り難うございました。

しかしやはり動かないポジションは動かないままです。

いろいろ試してみたいと思います。


※返信する前に利用規約をご確認ください。




  


  このエントリーをはてなブックマークに追加