> 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」命令を覚えてね。