したらばTOP ■掲示板に戻る■ 全部 1-100 最新50 | |

■■■20レス以内で済むF-BASICの質問はこちらへ■■■

702名無しさん:2016/04/03(日) 00:16:16
>周波数ホッピングとか軍採用技術が使われているので速度低下ですむかと。
拡散スペクトラムですね。その昔は、話しに聞いているだけでした。身近なところではGPSが一番最初でしたか。CDMAより早かったと思います。

>com1からcom4ポートはBIOS設定の関連もあると思います。
>オンボードのポートが1つで(Fax)モデムカード等がないなら、
>com2, 4ポートが使えるかも。
うーん、この辺り不は不明です。

さきほど、同じプログラムをWindows10(64bit)で動作させましたが、他のポートでも問題なく動いています。このノートPCはbluetoothが標準装備されているので、純正ドライバーによる仮想comポートによる通信が安定しているみたいです。3rdパーティのドライバーとの相性がよくないのかも知れません。本を取り寄せて、bluetoothのお勉強をしなくては。

703名無しさん:2016/04/09(土) 17:17:33
友人関係全部切った結果
http://bit.ly/1Sepcun

704名無しさん:2016/04/11(月) 00:29:31
本当に出会える出会い系ランキング
http://bit.ly/1OgYRt7

705名無しさん:2016/04/11(月) 09:16:26
>688

CHK_TIME%=((time mod 60)+2) mod 60 'リミットをおよそ2秒後に設定
do while lof(1) < 90
if (time mod 60) = CHK_TIME% then print "**受信エラー**" :exit do
loop
if lof(1) < 90 then GPGGA$=input$(lof(1), #1) else GPGGA$=input$(90, #1)

if right$(GPGGA$,1)=chr$(13) then GPGGA$=left$(GPGGA$, len(GPGGA$) - 1)


いつもお世話になります。
せっかくなんで、このコードの意味を解説していただけると勉強になります。
恥ずかしながら、自分なりに読んでみました。

*ここから始まり

CHK_TIME%=((time mod 60)+2) mod 60 'リミットをおよそ2秒後に設定
*現在の通算秒数を分に換算して、そのあまり秒に2秒を足してを待機する上限時間を求める。最後の(mod 60)の意味がよくわかりません。

do while lof(1) < 90
if (time mod 60) = CHK_TIME% then print "**受信エラー**" :exit do
loop

受信バッファが90バイトに達するまで読み込む。
もし、その間に上限時間を超えたらdoープを抜ける

if lof(1) < 90 then GPGGA$=input$(lof(1), #1) else GPGGA$=input$(90, #1)
もし、受信バッファが90バイトに達していなければGPGGA$に入っているだけ代入する。
そうでなければ、、受信バッファから90バイトをGPGGA$に代入する

if right$(GPGGA$,1)=chr$(13) then GPGGA$=left$(GPGGA$, len(GPGGA$) - 1)
GPGGA$の行末コードを削除する

よろしくお願いします。

706688:2016/04/12(火) 02:57:29
問題の有るコードではあるのですが――。疑問点に回答します。

>>705
>最後の(mod 60)の意味がよくわかりません。

これは通算秒数から剰余計算で秒部分(0〜59秒)を取り出した後、
現在時刻が58〜59秒だった場合、2を加算して2秒後を求めただけだと60秒以上になるため。
ラウンドアップへの対処。

>受信バッファが90バイトに達するまで読み込む。

処理1件分のデータが受信バッファにたまるまで『あえて読まずに』待つ。
2秒程度の時間切れ条件判断はもしもの場合の保険。

>もし、受信バッファが90バイトに達していなければGPGGA$に入っているだけ代入する。

補足説明すると、受信データが90バイト固定長以外のデータが受信された場合や途中までしか
送られてこなかったような場合など、とりあえず処理継続することを優先する意図があります。

本来はIF文で場合分けする必要はない(GPGGA$=input$(lof(1), #1)のみですむ)のですが、
問題原因がデータの形式にあった場合などのための対処への意図を含めた結果です。


実際にデータを読み込む処理をしているこの2行についてですが、

>if lof(1) < 90 then GPGGA$=input$(lof(1), #1) else GPGGA$=input$(90, #1)
>
>if right$(GPGGA$,1)=chr$(13) then GPGGA$=left$(GPGGA$, len(GPGGA$) - 1)
>GPGGA$の行末コードを削除する

90バイトそろっているのであれば、
ごく普通にLINE INPUT#1,GPGGA$ ひとつで済ませてもよいとは思いますが、
問題を確実に回避することを優先して、LINE INPUT# を使わないという選択肢をとりました。

707名無しさん:2016/04/12(火) 09:11:22

丁寧な解説、ありがとうございます。

(mod 60)の意味、そうだったんですね。
理解できました。

シリアル通信がbluetoothなどで仮想化されたり、計測器もコントローラーとセンサー部分が無線モデムを使ったシリアル通信をしていると、パケットの衝突などが起きて、データが一定時間流れてこない状況が時たま発生します。伝統的な実物のシリアルケーブルならLINE INPUT#で苦なく読めたデータもこのように工夫しないといけないのですね。教えていただいてとても勉強になりました。今後ともよろしくお願いします。

708688:2016/04/13(水) 02:44:42
>>707
>計測器もコントローラーとセンサー部分が無線モデムを使ったシリアル通信をしていると、
>パケットの衝突などが起きて、データが一定時間流れてこない状況が時たま発生します。

なるほど、昨今そういった状況になっているのですね。

 ただ、「(ある/一定)時間流れてこない」といった状況でLINE INPUT# が使えない
わけではないはずです。COMポートに対してのLINE INPUT#は、改行コードが流れてくるまで、
「F-BASIC内部でいろいろ処理しながら」待ち続けるのが仕様です。
(ただしopen命令でタイムアウト指定をしない場合)
改行コードが文字化けしない限りは問題ないはずなのです。

問題の発生要因は、RS/CSなどの制御線の制御タイミングが関わっていると見るのが妥当です。

シリアル通信プロファイル(SPP)による通信のエミュレートや、計測器側の動作も含め、
相性問題もあるかもしれません。

709名無しさん:2016/04/13(水) 17:40:05

>なるほど、昨今そういった状況になっているのですね。
PCからはシリアルポートがなくなりつつありますが、周辺機器ではまだまだ現役ですからね。

>シリアル通信プロファイル(SPP)による通信のエミュレートや、
>計測器側の動作も含め、相性問題もあるかもしれません。
SPPの品質はスタックの出来次第らしいです。東芝やモトローラーのが評判いいです。もう東芝は外販していないみたいですが、bluetooth付のdynabookは安定していると聞いています。またもうディスコンになった東芝のusbドングルもプレミアがついて驚くほどの高値です。

710名無しさん:2016/04/15(金) 16:54:56
本当に出会える出会い系ランキング
http://bit.ly/1OgYRt7

711名無しさん:2016/04/20(水) 15:28:30
本当に出会える出会い系ランキング
http://bit.ly/1OgYRt7

712名無し:2017/02/24(金) 23:18:46
何方か教えて下さい、長く使用してなかったのですが、思い付きでfbasicをWidows7に入れてみたら結構動くのが解って、
今いろいろ試して楽しんでいます、使ったことの無い Choosefont(****,0,0) 命令の書き方が解りません。
**** の部分にはガイドでは「フォント」と書いてありますが、何方か詳しく教えて頂けませんか、フォント名の変更に
苦労してます。

713名無しさん:2017/02/27(月) 05:38:49
CHOOSEFONTの 「フォント」にはFONT構造体型の変数を指定します。
フォント選択ダイアログで選択されたフォントの情報がFONT構造体に格納されます。

#include "WINDOWS.BI" '-- FONT構造体の定義が読み込まれます。
var FFONT as FONT '---- 変数名FFONTの「FONT構造体」を宣言

 ヘルプ「プログラミングガイド」の [ダイアログボックス] - [コモンダイアログボックス]の
頁の[フォント選択ダイアログボックス]の説明にプログラム例があります。

SETFONT命令などでフォントの設定をしてから描画命令を実行します。

FONT構造体型の内容です(※ヘルプのどこかの頁には誤記があったような気が)。
type FONT

size as single 'フォントサイズ
bold as integer 'ボールド(太字)指定の有無
italic as integer 'イタリック(斜体)指定の有無
underline as integer 'アンダーライン(下線)指定の有無
strikeout as integer '消し線指定の有無
ffname as string * 32 'フォント名

end type

 なお、このFONT構造体はF-BASIC専用です。Windows APIのFONT構造体等とは違いますので、
F-BASICの組込命令を使用せずにフォント選択ダイアログを呼び出したり、
Windows APIでフォント操作をする場合には適用できません。

714名無し:2017/03/10(金) 21:50:57
ご指導有難う御座いました、不在にしてたので遅くなりました。「プログラミングガイド」に
少し記載がありました。いろいろ試してみます。今でもXPで使用してる古いソフトをリニュウアル
してみようと思っています。また解らないことがあったら投稿します。有難う御座いました。

715keinin55:2017/11/21(火) 08:48:57
F-BASICのBinにあるエラー解析ツールFBANZ63.EXEについてご教授ください。
プログラムでエラーが発生した時、解析ツールのレジストリー読込みで表示されるエラー状況の中に
APIエラーという項目がありますが、この値はどこを参照しているのでしょうか
レジストリーの場所?が解れば教えてください。

716名無しさん:2017/11/22(水) 08:13:29
>715 keinin55 様
FBANZ63.EXEのメニュー[レジリストリ(R) - 読み込み(R)]で表示される内容の参照元は
レジストリ“HKCU\Software\FUJITSU\F-BASIC V6.3\RUNTIME\ERROR”キーらしい。

APIERR [DWORD値] - たぶん「APIエラー」の参照元
CODE [DWORD値] - たぶん「エラーコード」のコード値(F-BASICのERR関数の値)
FUNC [DWORD値] - たぶん「内部関数名」を示すコード値、おそらく3Bytes長範囲値
INFO [DWORD値] - たぶん「補足情報値」おそらく1Byte長範囲値

おそらくはFUNC+INFOとランタイムバージョンとで、F-BASICランタイム内部でエラー
トラップした個所が推定できる。

717k5:2018/09/06(木) 17:35:13
こんにちは

相変わらず頑張ってF-BASICを使っています。

今回はWindows10で動くバッチファイルの中でforループから抜け出す判断をF-BASICで作ったプログラムで行おうと思っています。たとれば、このようなバッチファイルの中でhoge.exeというプログラムをF-BASICで作った場合、コマンドの実行結果としての戻り値(終了コード)を出すような関数はF-BASICに用意されていますでしょうか。

setlocal enabledelayedexpansion
for %%f in (*.txt) do (
call hoge.exe %%f
if !ERRORLEVEL! == 1 @echo %%f:ダメです。>> log.log
if !ERRORLEVEL! == 0 @echo %%f:OKです。>> log.log
)
endlocal

https://qiita.com/OutOfServiceExeption/items/031f9b55f35489624a3b

718k5:2018/09/06(木) 17:55:30
すいません、自己解決しました。

endを使えばでいいんですね。

echo off

setlocal enabledelayedexpansion
for /l %%a in (1, 1, 10) do (
call print_env.exe
if !ERRORLEVEL! == 1 @echo 1です。
if !ERRORLEVEL! == 0 @echo 0です。
)
endlocal

print_env.bas

print "hello"
end 1

719k5:2021/02/16(火) 08:36:51
こんにちは、まだF-BASICで頑張っています。

テキストファイルをシーケンシャルモードでopenして何行か読んだ後に、また少し戻って読み直すのって出来ましたでしょうか。

例えば、

open "test.txt" for input as #1

input #1,line1$
input #1,line2$
input #1,line3$
input #1,line4$
input #1,line5$

とした後に、また3行目のline3$を読みたい場合、現在のファイルポイントから3行前に戻るという命令はなかったでしょうか。

720名無しさん:2021/02/21(日) 04:17:41
いくつか方法はあると思いますが、
1.バイナリモードでオープンすればseek命令/関数が使えますが、FREADで読みこむことになります。
2.open for inputを同時に複数オープンしておき、読込処理行数をカウントしながら読み、
戻る必要がある分についてはもう一方のオープンしたほうで遅れて読み進めることで代替。
3.戻る可能性のある行数分の配列変数を用意しておき、配列に格納しながら読み進めることで代替。


新着レスの表示


名前: E-mail(省略可)

※書き込む際の注意事項はこちら

※画像アップローダーはこちら

(画像を表示できるのは「画像リンクのサムネイル表示」がオンの掲示板に限ります)

掲示板管理者へ連絡 無料レンタル掲示板