|
|
2014/2/13(Thu) 00:11:05|NO.59918
「コンパイル+実行」後に実行結果が表示してすぐまた消えてしまうのですが、
この現象に心当たりある方はいらっしゃいませんか?
|
|
2014/2/13(Thu) 00:52:00|NO.59919
NO.59908 の追加質問で、HPIを導入して実行したのであれば、下記のいずれか。
スクリプトを見てみないとわからないけど、エラーの表示もなく終了しているなら、
1.スクリプト上で、End 命令を実行している。
2.HSP が確保していないメモリにアクセスしている。
3.DLL側がメモリアクセスに違反している。
4.プログラムを終了しなさいという指令を受けている。
のどれか。詳しく原因を知りたい場合は、スクリプトを載せるようにしようね。
|
|
2014/2/13(Thu) 18:28:47|NO.59923
; UDPで XBee-Wifi の amt-cnf port(3054)に送信
; "pcbnet2.as"プラグイン必須
#include "pcbnet2.as" ;プラグインをインクルード
title "UDPでリモートATコマンド送信" ;ダイアログのタイトルバーに表示する文字列
;送信ビットの一覧
;bit0 01 02 03 04 05 06 07 08 09 10 11 12
;0x42,0x42,0x00,0x00,0x00,0x00,0x02,0x00,0x01,0x02,0xXX,0xXX,0xXX
; ATコマンド↑ ↑ ↑変更値
;ATコマンドデーター
;スリープモード サイクルでON S=53 M=4D 値=34(4) 設定値2分ウエークアップ→3分スリープ
; OFF S=53 M=4D 値=30(0)(ハングするので試用しない)
;ソフトリセットでOFFにする F=46 R=52 値=使用しない
; I/O D3(初期値=デジタル出力L) D=44 3=33 値H=35(5)
; I/O D4(初期値=デジタル入力) D=44 3=34 値H=35(5)
;
onexit *bye ;閉じるボタンをクリックした時のジャンプ先
port = 3054 ;送信ポート3054に送信(9750ポートはだめ、XBeeのUARTに送るだけになるので)
host = "xxx.xxx.xxx.xxx" ;送信先IPアドレス
; 変数名がAPIになっているが当初APIで送信実験をしていた名残だ、ATコマンドなので”AT”にすべきかも
ddim APIp,255 ;送信用バッファ 実数型配列変数を作成(送信バイト数だけで良いが、とりあえず最大に設定)
;送信データーを各変数にセット
poke APIp,0,$42 ;任意の値で良い
poke APIp,1,$42 ;任意の値で良い
poke APIp,2,$00 ;0x4242と先頭2バイトとのXorのMSB値、この場合0x00
poke APIp,3,$00 ;0x4242と先頭2バイトとのXorのMSB値、この場合0x00
poke APIp,4,$00 ;予約で0x00
poke APIp,5,$00 ;予約で0x00
poke APIp,6,$02 ;リモートコマンド(リクエストする値)
poke APIp,7,$00 ;未使用(送信しても無視)
poke APIp,8,$01 ;フレームID(いつも0x00)
poke APIp,9,$02 ;値を変更する(0x02の場合すぐに書き込む)
; ここまではいつも同じ
; ここから下の値でポートをコントロールする
poke APIp,10,$44 ;D (変更するポートの先頭文字をASCCIで 44) S=53 W=57 ソフトリセット=FR
poke APIp,11,$33 ;3 (変更するポートの番号をASCCIで33) M=4D R=52 F=46
; ソフトリセットの場合は下の値は送信不要
poke APIp,12,$05 ;変更したい値(04の場合 Degital Low) Sleep ON=04 OFF=0
;ソフトリセット”FR ”の場合非送信
;送信データーセットここまで
;UDPポートを開く
udpsock soc ; 特にポートは指定しない(socはポートが使用可能か調べる)
if stat : dialog "ソケットの初期化に失敗しました。",1 : end ;ポートが使用不可なら終わる。
udpsendto soc,host,port ;送信先は最初に "host"変数と"port"変数 で指定済みの値が入る
;データー送信
;udpput s,soc ; "udpput"の場合は変数 s 内値を文字列で送信する
udpsend APIp,0,13,soc ;実数型配列変数の先頭から13バイトをバイナリで UDP送信する
;データー送信ここまで
;ソケットを閉じて終了
*bye
mes "終了"
udpclose soc
end
これなんですが、いかがでしょうか?
| |
|
2014/2/13(Thu) 18:34:00|NO.59924
コンパイルのみだと
#HSP script preprocessor ver3.32 / onion software 1997-2013(c)
#Use file [hspdef.as]
#HSP code generator ver3.32 / onion software 1997-2013(c)
#未初期化の変数があります(soc)
#Code size (382) String data size (239) param size (160)
#Vars (4) Labels (2) Modules (5) Libs (16) Plugins (0)
#No error detected. (total 1427 bytes)
こんな結果レポートがでてきます。
|
|
2014/2/13(Thu) 19:16:16|NO.59925
データ送信の後stopを置いてないからでは?
そのまま終了処理に突っ込んでる気がします
|
|
2014/2/13(Thu) 19:33:34|NO.59926
ですね。そのまま自身で END している。
|
|
2014/2/13(Thu) 19:44:25|NO.59927
";データ送信ここまで"の上にstopを記述すれば大丈夫ですか?
|
|
2014/2/13(Thu) 19:48:27|NO.59928
stop記述して、実行結果がちゃんと出てきたのですが、真っ白です。buttonか何かと関連づけ
なきゃだめですか?
|
|
2014/2/13(Thu) 19:50:23|NO.59929
titleだけですね。出てきてるの。
|
|
2014/2/13(Thu) 20:08:03|NO.59930
…そもそもこのスクリプトがどういう働きをするのかわかっているのでしょうか?
XBee-Wifiなんて相当マニアックなんですが…(電子工作関係の人ではメジャーですが)
|
|
2014/2/13(Thu) 20:42:01|NO.59931
何となくしか分かりません。ただ、無線でxbee wifiのi/oポートの値を変えてみたくて、ネット
でUDP送信プログラムをある方からダウンロードさせて頂きました。どうすれば実際に動くソフト
になるのでしょうか?教えて頂けませんか?
|
|
2014/2/13(Thu) 20:44:55|NO.59933
このスクリプトにGUIの追加ってできるのですか?
|
|
2014/2/13(Thu) 22:35:38|NO.59934
>タイトルだけですね。表示されるの。
そうですね。
画面上にタイトルを表示する命令しか書かれていませんから当然です。
メッセージ等を表示させたい場合は mes などを使います。
>GUIの追加
できますよ。送信ボタンを追加した簡単な例をあげておきます(動作チェックはしてませんが。)
ポートが使用不可の場合の処理を付け加えたり、ポートに設定する値を変えられるようにすれば、より実用的になりますね。
スクリプトを改造するのはわりと簡単ですから、ヘルプとにらめっこしながら自分好みにカスタマイズしてみるのも一興です。
楽しい電子工作を!
#include "pcbnet2.as"
title "UDPでリモートATコマンド送信"
onexit *bye
port = 3054
host = "xxx.xxx.xxx.xxx" ;送信先IPアドレス
ddim APIp,255
poke APIp,0,$42
poke APIp,1,$42
poke APIp,2,$00
poke APIp,3,$00
poke APIp,4,$00
poke APIp,5,$00
poke APIp,6,$02 ;リモートコマンド(リクエストする値)
poke APIp,7,$00 ;未使用
poke APIp,8,$01 ;フレームID(いつも0x00)
poke APIp,9,$02 ;値を変更する(0x02の場合すぐに書き込む)
; ここから下の値でポートをコントロールする
poke APIp,10,$44 ;D (変更するポートの先頭文字をASCCIで 44) S=53 W=57 ソフトリセット=FR
poke APIp,11,$33 ;3 (変更するポートの番号をASCCIで33) M=4D R=52 F=46
; ソフトリセットの場合は下の値は送信不要
poke APIp,12,$05 ;変更したい値(04の場合 Degital Low) Sleep ON=04 OFF=0
;ソフトリセット”FR ”の場合非送信
;送信データーセットここまで
button gosub "送信",*send
stop
*send
;UDPポートを開く
udpsock soc ;ポートが使用可能か調べる
if stat : dialog "ソケットの初期化に失敗しました。",1 : end ;ポートが使用不可なら終わる。
;ポートが使用可能
mes "データを送信します。"
udpsendto soc,host,port ;送信先は最初に "host"変数と"port"変数 で指定済みの値が入る
;データー送信
;udpput s,soc ; "udpput"の場合は変数 s 内値を文字列で送信する
udpsend APIp,0,13,soc ;実数型配列変数の先頭から13バイトをバイナリで UDP送信する
mes "データを送信しました。"
;データー送信ここまで
return
*bye
;ソケットを閉じて終了
mes "終了"
udpclose soc
end
| |
|
2014/2/13(Thu) 23:16:19|NO.59935
うわっ⁈まじありがとうございます!めっちゃ助かりました!
^_^
|
|
2014/2/13(Thu) 23:42:20|NO.59936
皆さんありがとうございました!
|
|
2014/2/14(Fri) 23:26:02|NO.59960
解決しました。すいません。
|
|