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


HSPTV!掲示板


未解決 解決 停止 削除要請

2014
0213
ユウ「コンパイル+実行」後、実行結果がすぐ消えてしまう現象について15解決


ユウ

リンク

2014/2/13(Thu) 00:11:05|NO.59918

「コンパイル+実行」後に実行結果が表示してすぐまた消えてしまうのですが、
この現象に心当たりある方はいらっしゃいませんか?



この記事に返信する


MillkeyStars

リンク

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)

こんな結果レポートがでてきます。



kanahiron

リンク

2014/2/13(Thu) 19:16:16|NO.59925

データ送信の後stopを置いてないからでは?
そのまま終了処理に突っ込んでる気がします



MillkeyStars

リンク

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だけですね。出てきてるの。



kanahiron

リンク

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

解決しました。すいません。



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