緑の中に

緑の中に
国立天文台

1/22/2020

Decimal Basic で採取しよう うまくいったぞ

Decimal Basic で採取しよう


自動で走行をStop出来ないTeraTermはあきらめました。

DecimalBasicで目的とすることが出来ました。現在、試行実験で1分間隔で採取しました。その都度、新規ファイルとして記録しました。

これなら行けそうです!!

 





###### うれしいな ####   ###### うれしいな ####  です
 
・HELPの一部です。このあたりを参考にCOMの設定など通信条件を合わせます。
ほか、ファイルや文字操作もHELPにあります。参考プログラムがHELPに載っています。



-------------------------------------  Decimal Basic HELP の一部抜粋 --------------
COMポート(シリアルポート)

1.通信条件の設定
 COMポート(シリアルポート)の通信条件の設定は,Windowsコントロールパネルの「システム」の「デバイスマネージャ」で行う(Windows NT4.0ではコントロールパネルの「シリアルポート」)。ボーレート,ビット数,パリティ,ストップビット長,フロー制御方式を通信相手と一致させる。
<Note> 通信相手がRTS/CTSを用いてフロー制御を行うとき,PC側はフロー制御を「ハードウェア」に設定する。

2.OPEN文
 COMポートを使う場合には次のような形のOPEN文を実行する。
例 OPEN #1: NAME "COM1"
 OPEN文の実行が終わると,受信が可能な状態になり,INPUT文を実行しなくてもバッファに受信されていく。OPEN文の実行前に受信したデータは破棄されるので,接続された機器からのデータの送信は,かならずOPEN文の実行後に行うこと。
<補足>
 ポート名に続けてコロンを書くと,Windowsのmodeコマンドと同様の書式で通信条件を書くことができる。
例1 OPEN #1:NAME "COM1: baud=9600 parity=N data=8 stop=1"
例2 OPEN #1:NAME "COM1: 9600,n,8,1,p"
例2の形式の場合,
 第1引数 ボーレート(baud rate)
 第2引数 パリティ n(なし),e(偶数),o(奇数)のいずれか
 第3引数 データビット長 通常,7または8
 第4引数 ストップビット長 1, 1.5, 2 のいずれか
 第5引数 x(xon/xoffを用いるフロー制御)
      p(ハードウェア ハンドシェイクによるフロー制御)
--------------------------------------------------------------------------------------

次の課題はタイムスケジューラへの書き込み設定です。
少し、この課題で悩むと思います。しかし、ご安心ください。
後日、投稿します。是非参考にしてください。

作業をしている途中で次のようなことを思案しました
・採取時刻の「分」を換算して「時」に入れる。ただし、「時」は少数表示もする。
この少数表示の「時」はグラフの描画で、精度上げることができる。また、分単位をも考慮したグラフ化となる。

・参考までに、国立天文台 野辺山宇宙電波観測所の装置は10分単位で採取しています。
 参考写真をご覧ください。
 写真後日

・私は、採取起動のごとに新規ファイルを作り(ただし、次の起動時には書き換えられて
しまいます。<Over Write>)。

そして、つぎの採取起動前に整形加工プログラムを実行します。このプログラムはCで書きました。ある時刻の代表値1個が必要なだけですので、この実現のためのプログラムです。

「ある時刻」をどのように決めるか。10分間隔、20分間隔、30分間隔、60分間隔 ?
これは、測定しようとする事象ごとに違うと思います。さきの、宇宙電波観測所の装置は
太陽からの電波の受信です。

私の場合、1秒変化のデータまで必要ありません。その理由で整形加工プログラムが必要となりました。不要部分を捨てます。代表値1個を確保します

追記モードの検討も必要です。これはあとで十分です。

1/19/2020

Run(プログラム走行)はするが、もう止められない! 

Run(プログラム走行)はするが、もう止められない! 


TeraTermを起動すると、起動し観測データを表示する。
起動のModeは、設定-- 各設定 を読み込んで端末画面を立て上げ観測データを次から次へと表示します。どうにも、止まらない!!

しかし、手動でしかStop・停止・終了が出来ません。
プログラムなどからのコマンド(命令)でStop・停止・終了を実現させたいのです。

本当に困っています。

マクロによる .ttlでも私は今のところ、不可能です。困りました。

1/12/2020

コンピュータプログラムのファイル名について

    File Name ファイル名はどのような名が良いか 

コンピュータプログラムのファイル名の命名に悩むことがあります。
何本も似たようなファイルを作る時がありますが、私の場合最後に番号を入れていきます。 
XXXは拡張子です。 FileName-100. XXX ,  FileName-101.XXX ,FileName-102.xxx
そして、ある程度まとまりのついたプログラムには FileName-120.xxx とかFileName-130.xxx と10番刻みにします。

さらに完成度の高くなったプログラムは,FileName-200.xxx ,FileName-300.xxxと100番刻みにしていきます。

FileName-uvw.xxx  を FileName_uvw.xxx とアンダーバーとするときもあります。
アンダバー「_」はキーボード操作において、右手でSHIFT+「ろ」を同時に押下することで入力ができ操作性に優れている面もあります。

さて、本題のFileName を」どうするか?
これは悩みます。
英語、日本語読みのローマ字を活用してプログラムの内容とイメージが一致するようにします。

次にエディターでそのァイルを開いたときに何が見え、表示されるかが重要です。
私の場合 ■-------■ , ■■--------- ■■ 強調します。
そこには、プログラムの概要、プログラムの進化の様子を自分なりの言葉で書きます。
そうしますと後で見たとき自分の記憶が呼び戻されます。

他人が見て分かりよいかは疑問です!  
あとで何回もプログラム中のコメント(注釈)は、適切な用語などに変更します。
自分で書いた個所を後で見たら意味が通らない? 何を言わんとしているのか? よくあります。

このあたりを修正していくと他人が見てもわかりよいプログラムとなるようです!!

やっぱり、英語は頻繁に使いますね。くやしいですが。

1/11/2020

文字型を数値化

文字型を数値化


 やっと、数値化できました。写真のdata_4 が整数型の数値です。
 16進数   printf("%x\n",data_3[0]);  -----   printf("%x\n",data_3[3]);
  34,37,39,34 の表示で1桁目に目的の数値としたい文字(4794) が現れました。
 16x3=48   この数を何とかする?

「シフトJISの1バイトコード(半角文字)のエリアマップ」をじっと見ながら試行錯誤しているうち理解出来ました。

 

 



1/09/2020

文字列より文字を抜き出し、数値型に変換

文字列より1文字を抜き出し、数値型に変換

-------------------------------------------------------------再検討メモ----
    以下のプログラムは不要と判明しました。
 もっとスマートにスッキリ数値化を行えることが分かりました。
 別ページに載せました。ご覧ください。
------------------------------------------------------------------------
  1. 文字列の中より必要個所の文字を取り出す方法です。
  2. 取り出した4文字を数値に変換し、4桁の数値とします。

 *マイコンが吐き出すデータが数値型なら苦労しません。マイコンは文字型で吐き出しています。
 Teratermのlogでたとえば「8745」という4文字データを受信したとします。
順次1文ずつ取り出し、数値に変換します。最後に千・百・十・一の重みづけをします。
これにより「8千7百4拾5」の大きさを持つ数値となります。

ご覧下さい。

C言語プログラムで2次加工する予定でいます。DecimalBASICでも可能であろうと思いますが、プログラムのメンテナンスから今はCでプログラムしています。









1/08/2020

プログラムで文字操作が


プログラムで文字操作が

上図  文字列中より1文字を表示するプログラムです 

 文字列の操作や文字列中の1文字抜き取り操作が必要になりました。
 Cでプログラムを試しています。
 
ポインタや配列も必要な感じです。基礎プログラムで試しながら、本題のプログラムへ引用する形式で行っています。



 
 

1/02/2020

2020年 おめでとうございます! これが私の今の課題です

2020年 おめでとうございます! 

このブロッグを見て下さりありがとうございます!

今年もよろしくお願い申し上げます。


 

上図の解説

■■マイコンでAD変換を行ったデータをRS232Cを通して、TeraTermで受信したlog(ログ teraterm.log なるテキスト)を[メモ帳],[BinEdit],[Cプログラムでの読み込み実行結果] および[Cプログラムの一部]を示しています。

■なぜこの写真を載せたか?
DecimalBASICでteraterm.log なるテキストを読み込むことが出来ません。
現在、この理由を調べる為です。


・TeratermのlogをCプログラムから読むことは出来る。
DecimalBASICからは読めない。 

・メモ帳で開いた写真の通り最初に1行空白があります。この空白を削除して、このteraterm.logを上書き(Over Write)したlog(ログ)としてならDecimalBASICでも読み込みます。

・Binary Editor(バイナリー エディター)を使用して、teraterm.logを開いて調べると、最初に 0D 0A  があります。

 これは、制御コードです。機能としてはCR  LF です。


キャリッジ〔タイプライターの〕
carriage〔用紙を保持しながら移動する部分。〕

carriage return〔【略】CR〕 キャリッジリターン  carriage:運び台、往復台
LF【 Line Feed 】  ラインフィード


意味につてです。タイプライターやプリンターをイメージします。
CRとはヘッドをそのままの行において行頭へ行く動作です。
LFとは行を1行送る動作です。
ヘッドを動作させず、用紙を動作させるとも理解できます。

なぜ、CR  LF なる制御コードが入るのか?
これは新規にファイルを起こした時に入ります。以降、このファイルにAppend(追記)した場合はそれ以降のタイムスタンプとしてデータが追加されていきます。




対策
・最初に、teraterm.log の最初に制御コード以外のダミーデータを入れておく。
 そして、teratermでApeendMode(追記)に設定してあれば、制御コードが入る心配はありません。とにかくファイルの先頭に制御コードが存在することが妨げとなっている様子です。


・制御コード 0D 0A の2バイトを削除する。削除した新たなlog(ログ)を保存しなおす。それも、自動的に行う必要がある。可能なのだろうか?

・DecimalBASICプログラム側のプログラムに問題があるかも?

 しばらく検討します  解決の希望はあるだろうか?




上図
文字集合について UTF-16 で保存しました


 

上図
漢字が化けて表示されます


■ 符号化文字集合の関連 
EUC-JPや、Shift_JIS、UTF-8、UTF-16などは文字符号化方式である。

 「メモ帳」の文字コードは、 ANSI、Unicode、Unicode big endian、
UTF-8 から保存形式が選択できるようになっています。

 ここで、ANSIで保存し直しCプログラムで読み込ませます。どうなるか?


 



上図 期待通りに再現できました 

 


 メモ帳の欄外 下に ANSI が見えます

アンシ【ANSI】[American National Standards Institute]

《American National Standards Institute》米国国家規格協会。

これなら、再現してくれます。