[掲示板へもどる]
一括表示

[No.535] 測定値 投稿者:シフト  投稿日:2012/02/14(Tue) 14:58
[関連記事

今度は、測定値を数値変換できなくて困っています。

VALやDABIN、HEXなど試しましたが上手くできません。

データはD0〜D3に受信されます。
D0:2020(SP、SP)
D1:2D20(- 、20)
D2:2E34(. 、34)
D3:2039(SP、39)

受信桁数が多いとD0のスペースに数値が入ります。

スペースや使用出来ない文字が含まれているとエラーになってしまい
数値変換できないのですが、便利な命令語はないものでしょうか?

よろしくお願いします。


[No.536] Re: 測定値 投稿者:管理人  投稿日:2012/02/14(Tue) 18:21
[関連記事

> 今度は、測定値を数値変換できなくて困っています。
> データはD0〜D3に受信されます。
> D0:2020(SP、SP)
> D1:2D20(- 、20)
> D2:2E34(. 、34)
> D3:2039(SP、39)

こんばんは

> 受信桁数が多いとD0のスペースに数値が入ります。

ここの部分を補足して下さい。
受信桁数が多い時にどのようなデータになりますか?

D0:312D(31、 -)
D1:3332(33、32)
D2:2E34(. 、34)
D3:2039(SP、39)

「−1234.9」のような表現?
受信データと本当はこの数字の比較がわかると助かります。

> D0:2020(SP、SP)
> D1:2D20(- 、20)
> D2:2E34(. 、34)
> D3:2039(SP、39)
は「−4.9」という受信データですか?

受信データのフォーマットを書いてもらえると助かります。


[No.537] Re: 測定値 投稿者:シフト  投稿日:2012/02/14(Tue) 19:01
[関連記事

こんばんは。
いつもありがとうございます。

D0:2020(SP、SP)←(20、20)
D1:2D20(- 、20)
D2:2E34(. 、34)
D3:2039(SP、39)
↑は、-4.9です。

> D0:312D(31、 -)
> D1:3332(33、32)
> D2:2E34(. 、34)
> D3:2039(SP、39)

> 「−1234.9」のような表現?
このようになります。


> 受信データのフォーマットを書いてもらえると助かります。

D10:スペース ,STX
D11:測定値,スペース
D12:測定値,測定値
D13:測定値,測定値
D14:スペース ,測定値

先頭はSTX,スペース(2002)を受信してスペースが入り、
D11の後半からD14の前半までに測定値が受信されます。
(最初の説明では、STXとスペースを省いてました)

この続き(D15〜)にもにも判定結果やBCCチェックサムが受信されています。

宜しくお願いします。


[No.538] Re: 測定値 投稿者:管理人  投稿日:2012/02/14(Tue) 22:31
[関連記事

> D0:2020(SP、SP)←(20、20)
> D1:2D20(- 、20)
> D2:2E34(. 、34)
> D3:2039(SP、39)
> ↑は、-4.9です。

補足どうもです。
ようやく理解できました。

今回の場合は命令語「VAL」を使います。
この命令の条件は
1.符号は先頭下位に正の場合は「20H」負の場合は「2DH」
2.符号と最初の”0”以外の数字までの「20H」と「30H」は無視してくれる
3.データの終わりは「00H」で設定する。

この条件に合うようにデータを分離・合成します。
今のデータだと1つのデータメモリ「D」に2つの文字があります。
判断しやすいように1文字ずつに分解する必要があります。

分離するには「WTOB」という命令を使用します。

D10:スペース ,STX
D11:測定値,スペース
D12:測定値,測定値
D13:測定値,測定値
D14:スペース ,測定値

SM400
-||----------------[WTOB D11 D100 K4]- D11〜D14までの上位・下位をD100〜バイト単位に分離

結果
D100:0020 スペース
D101:0020 測定値
D102:0020 測定値
D103:002D 測定値
D104:0034 測定値
D105:002E 測定値
D106:0039 測定値
D107:0020 スペース
となります。(データメモリは倍になります)

これで比較命令を使用して「マイナス」があるか探せます。
※別の命令でも探せますが理解しやすい形で説明します。

-[= H2D D101]-+--------------------------(M0)- マイナス符号有り
-[= H2D D102]-+
-[= H2D D103]-+
-[= H2D D104]-+
-[= H2D D105]-+  ※測定値の最後にマイナスが来ることはないと思うのでD105まで判定する

SM400
-||------------------------------[FMOV H0   D110 K7]- 最後が「00H」となるようにデータ転送先をクリアしておく

 M0
-||--+--[= H2D D101]-------------[BMOV D101 D110 K6]-
     +--[= H2D D102]-------------[BMOV D102 D110 K5]-
     +--[= H2D D103]-------------[BMOV D103 D110 K4]-
     +--[= H2D D104]-------------[BMOV D104 D110 K3]-
     +--[= H2D D105]-------------[BMOV D105 D110 K2]-
 M0
-|/|-----------------------------[BMOV D101 D110 K6]-

※小数点が必ず入りBIN値が1ワードで収まる場合「VAL」命令使用
SM400
-||--+---------------------------[BTOW D110 D120 K7]- バイト→ワードに戻す
     +--------------------------[VAL D120 D130 D140]-  
D130:全桁数
D131:小数部桁数
D140:小数点を無視した整数値

※BIN値が1ワードで収まらない場合「DVAL」命令使用
SM400
-||--+---------------------------[BTOW D110 D120 K7]- バイト→ワードに戻す
     +-------------------------[DVAL D120 D130 D140]- 
D130:全桁数
D131:小数部桁数
D140,D141:小数点を無視した整数値

測定値データの桁数が固定なので少し回路を簡略化しています。
測定値データにより桁数が変動するような場合はもう少し「桁数」がいくつなのか認識する回路が必要になります。


受信データがBCCも含めOKだったとして
上記をまとめると・・・

SM400
-||------------------------------[WTOB D11 D100 K4]- D11〜D14までの上位・下位をD100〜バイト単位に分離

-[= H2D D101]-+--------------------------------(M0)- マイナス符号有り
-[= H2D D102]-+
-[= H2D D103]-+
-[= H2D D104]-+
-[= H2D D105]-+  ※測定値の最後にマイナスが来ることはないと思うのでD105まで判定する

SM400
-||------------------------------[FMOV H0   D110 K7]- 最後が「00H」となるようにデータ転送先をクリアしておく

 M0
-||--+--[= H2D D101]-------------[BMOV D101 D110 K6]- マイナス含め測定値転送
     +--[= H2D D102]-------------[BMOV D102 D110 K5]- マイナス含め測定値転送
     +--[= H2D D103]-------------[BMOV D103 D110 K4]- マイナス含め測定値転送
     +--[= H2D D104]-------------[BMOV D104 D110 K3]- マイナス含め測定値転送
     +--[= H2D D105]-------------[BMOV D105 D110 K2]- マイナス含め測定値転送

 M0
-|/|-----------------------------[BMOV D101 D110 K6]- 測定値部分全部転送

SM400
-||--+---------------------------[BTOW D110 D120 K7]- バイト→ワードに戻す
     +--------------------------[VAL D120 D130 D140]-  「VAL」 or 「DVAL」

ちょっと横着な回路ですがこんな感じでVAL(DVAL)命令を使用してBINに変換出来るはず。

シミュレーションまではしていないので確認はお願いします。

もしかしたら違っている所もあるかもしれないので考え方を理解、確認して下さい。

あと通信時はよくアスキー1文字(1バイト=8bit)扱いにするので「WTOB」、「BTOW」命令を覚えてね。


[No.539] Re: 測定値 投稿者:シフト  投稿日:2012/02/15(Wed) 21:22
[関連記事

ありがとうございます。

出来ました^^

「WTOB、BTOW」命令ですね。よく勉強します。
この仕事が終わったら、命令語マニュアルをよく読んで
シミュレータで勉強します。
(今は、余裕がないので・・・)

本当に色々とありがとうございます。


[No.540] Re: 測定値 投稿者:管理人  投稿日:2012/02/16(Thu) 00:05
[関連記事

> ありがとうございます。
>
> 出来ました^^
>
> 「WTOB、BTOW」命令ですね。よく勉強します。
> この仕事が終わったら、命令語マニュアルをよく読んで
> シミュレータで勉強します。

取説には例も載っているのでわかりやすいと思います。
※たまに誤記があったりして「何で?!」と泥沼にはまっていくことがありますが
 新しい取説では直っていたりするので出来る限り新しい取説をダウンロードして見ることをオススメします。

> (今は、余裕がないので・・・)

まぁ、周りは無理を強要してくるかもしれませんが
体が資本ですから無理しないで体を休めて下さいね。

前にも書きましたが回路で悩んでいる時、
・布団に入り寝るまでの時間
・朝起きて布団の中でうだうだしている時間
が「こうすれば出来るんでは?」とかアイデアが浮かびます。(正しいかどうかは別として)
「はぁ〜現場から離れてやっと寝ることが出来る」という一時的なプレッシャーからの解放で
頭が余分な事考えないで済むからいいアイデアが浮かぶんだと思います。

1日徹夜で何とかなる物件なら無理もしますが、
ロングランなら「寝る(一時的にプレッシャーからの解放する時間)」という事も効率の上で重要だと思いますよ。

> 本当に色々とありがとうございます。

お役に立てたようで何よりです。