HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2008
0123
ShooRS232Cのアスキー文字15解決


Shoo

リンク

2008/1/23(Wed) 00:58:44|NO.13223

RS-232C(COMポート)へ、アスキー文字の送信を行うソフトを作りたいのです。
条件は、9600bps パリティなし 8Bit ストップビット1 です
ポートは開いているようなのですが…(comstatが”0”になるから)
実際に送信できてないようなのです。

ハイパーターミナルでは送信できるのですが、
HSPで行うには何か、コツがあるのでしょうか?

------------------------------------------------------------

#include "hspext.as" ;シリアル制御プログラムを使う。 title "Servo" ;タイトル表示 screen 0,640,480,,100,100 ;初期画面サイズ onexit goto *theend ;COM開放ミス危険回避 comopen 1,"baud=9600 parity=N data=8 stop=1" ;ポートの設定 if stat { print "COM1ポートが開けません。" } comstats=aaa ;COMポート監視結果を表示用変数  comstat comstats ;COMポート監視 mes comstats ;COM監視結果表示 0ならばポートが開いて動作できる? comput "G0,1" ;この文字列を送信したい wait 100 comput "P0,050,150";この文字列を送信したい wait 100 comput "R0,0180,1180";この文字列を送信したい *theend comclose end ;終わる。



この記事に返信する


GENKI

リンク

2008/1/23(Wed) 02:37:17|NO.13225

とりあえず
	comput "G0,1"
if stat = 0 { dialog "送信失敗" } else { dialog "送信成功\n" + stat + "バイト送信" }
として結果をチェック。

前にやったときに最後に改行入れないとうまくいかなかったような気がします。(昔作ったスクリ見るとなぜか改行が入っている。)
記憶違いか、場合によりけりなのかもしれませんが…。ダメかもしれませんが、とりあえず改行入れてみてはいかがでしょう?
comput "G0,1\n"




Shoo

リンク

2008/1/23(Wed) 03:30:10|NO.13226

改行を入れることで機器が作動しました。

が、しかし動作後エラーになってしまいます・・・
ハイパーターミナルではOKとかERRORとか出るのですが
こういったものも、受け取らないといけないのでしょうか?

ちなみにコレを動かそうとしています。
ftp://www.technobase.jp/pub/eclib/KEISEEDS/MANUAL/rbio5p.pdf
マウスの動き(XY)と連動して、これを動かしたいのですが…
こんなの可能でしょうか>?



f

リンク

2008/1/23(Wed) 08:14:18|NO.13227

その辺はメーカに聞いたほうが早いんでね?
HSPから入力も出力も出来るが、送受信する内容はHSPの問題じゃねえでそ。



f

リンク

2008/1/23(Wed) 14:12:39|NO.13230

マニュアルみたら終端コードは0x0dだな。
windowsの改行はは0x0d,0x0aだから、余分なデータも発信してるんじゃないか?

なので、改行入れるのではなくて、
	sdim cr,2
cr[0] = 13 cr[1] = 0 send = "G0,1" + cr comput send
とでもしてみたらどうよ?



f

リンク

2008/1/23(Wed) 17:41:14|NO.13232

スマン
今、HSPで走らせて見たらアレは駄目だった。
	sdim cr,2
poke cr , 0 , 13 poke cr , 1 , 0 send = "G0,1" + cr comput send
で、行ってくれ・・・。
ついCみたいに書いてしまってた。



Shoo

リンク

2008/1/23(Wed) 18:10:05|NO.13233

よくわからないがだめだった。
これはpokeで何をバッファしてるんですか?
CRってこれで代入できるのですか?



Megane

リンク

2008/1/23(Wed) 18:22:31|NO.13234

\nの代わりに\rだったか\sだったか
そんな感じのがあったような気がしますが…。



Shoo

リンク

2008/1/23(Wed) 18:31:50|NO.13235

すげえええええ!!!!!
\r ←コレつけただけでエラーが皆無に!!!
どんな意味なんだろう?キャリッジリターン?


ちなみに\sはエラーにならないものの無反応でした。

\r



f

リンク

2008/1/23(Wed) 19:03:43|NO.13236

直に書いたのでは駄目だったか・・・。
このpokeは、終端コードの0x0d(10進数の13)と、文字列の終端を指すヌル(0)を直に
データに書き込んだ物。

終端のコードが0x0dなので、文字列の最後にこの0x0d(10進数で13)を
付け加えようとしたのな。

理屈では行けそうに思ったが駄目なのか・・・。


機械の方は終端コードを受け取ったら実際に動作する仕様なのだろう。
\nで駄目だったのは0x0dの後に0x0aのコードが続いたからだな。
次のコマンドを送る邪魔になってたんだ。

\rで通ったのは0x0dだけ付加できたと言うことだろう。
お疲れさん。



f

リンク

2008/1/23(Wed) 19:08:05|NO.13237

	sdim crlf,3
poke crlf,0,13 poke crlf,1,10 poke crlf,2,0 st="ここで" + crlf + "改行" mes st
で改行させることが出来たので、いけると思ったんだがなあ(笑

「\r」で済むならそっちが早いか。
知識は大事だな・・・。



Shoo

リンク

2008/1/23(Wed) 19:34:50|NO.13239

ありがとうございました。
みなさん、知識の泉のようですね。



a

リンク

2008/1/23(Wed) 19:40:01|NO.13240

pokeで作ったのでも問題ないはずだよ。

sdim CR,2 poke CR, 0, 0x0D poke CR, 1, 0x00 // poke で作った場合 s1 = "A" + CR + "A" tmp = "" repeat strlen(s1) tmp += strf("0x%02X ", peek(s1,cnt)) loop mes tmp // \r 使った場合 s2 = "A\rA" tmp = "" repeat strlen(s2) tmp += strf("0x%02X ", peek(s2,cnt)) loop mes tmp if( s1 == s2 ) { mes "一致" } else { mes "不一致" }



Megane

リンク

2008/1/24(Thu) 10:36:38|NO.13252


sdim cr,2 poke cr , 0 , 13 poke cr , 1 , 0 send = "G0,1" + cr

うまくいきそうに見えますけどね。
うまくいかないとしたら、ヌル文字が邪魔をしているとか…うーん。



f

リンク

2008/1/24(Thu) 17:35:37|NO.13255

まあ、\rで済むならその方が早いんでね?



Shoo

リンク

2008/1/25(Fri) 00:05:21|NO.13260

解決しました。
ありがとうございました。\r



ONION software Copyright 1997-2023(c) All rights reserved.