文字列結合はアスキーコードをデータレジスタへ格納している場合に非常に効果的です。
アスキーコードとは、PCで判断している数値 0x30 = 0, 0x31 = 1のことです。
PLCのデータレジスタでは0x30 = 48, 0x31 = 49となってしまいますので、文字列転送命令$MOVを使用することによって、PCで1と判断してくれる数値0x31をデータレジスタに自動的に送ってくれる命令となります。
このようにPCとPLCで数値の扱いが異なるため、シリアル通信を行う際は文字列転送$MOV命令を使用するのですが、制御コードというものも必要になり、制御コードは先頭と後ろに文字列を入れる必要があります。
固定長なら良いのですが、可変長の場合、ワードレジスタの8~16ビットに制御コードを入れなくてはならないこともあり、可変長を判断して制御コードをワードレジスタの8~16ビットに転送するというのは難しいプログラムを作成する必要があります。
この作業を減らしてくれるのが文字列結合命令である$+です。
文字列結合命令を使用することによって、可変長のデータでも制御コードを後ろに付属することが可能であり、可変長を気にせず制御コードを簡単に付け加えることができます。
今回はGX Works3の文字列結合$+(P)命令について紹介します。
広告
文字列結合 $+命令
文字列結合 $+命令
Point.文字列結合を行うことでシリアル通信のアスキーデータを生成することができる
アスキーデータはシリアル通信を行う上で非常に重要であり、コマンドを送る前と後に制御コードと呼ばれるヘッダ、デリミタを付属して相手機器へ情報を送る必要があります。
制御コードはSTX = 0x02で、本来STXでアスキーコードを文字列転送命令$MOVでデータレジスタへ送ると0x535458となってしまうため、[ MOV H2 D** ]でアスキーコードに対応した16進数でデータを格納します。
そして、1文字あたり1バイト、1バイト=8ビットのため、文字数が奇数の場合、ワードレジスタの半分以降にその制御コードを入れなければいけなくなります。
つまり、1~8ビットに文字があてはまるのに対して制御コードをワードレジスタの8~16ビットに転送しなければならなくなります。
これが固定長なら良いのですが、固定長ではなく可変する場合、それを判断するプログラムを作成する方が大変な作業となります。
そのようなことにならないように文字列結合命令$+を行うことで簡単に文字列+制御コードを加えることが可能となるわけです。
アスキーデータはデータ転送命令$MOVは下記過去記事で紹介しておりますので参考にして下さい。
文字列結合 $+命令エラーコード
文字列結合を行ったシリアル通信プログラムの参考例を下記記事にて紹介しております。
www.niwakafa.com
文字列結合 $+命令オペランド3個の場合
Point.基本的にはオペランド3個を使用した方がわかりやすい
文字列結合 $+命令機能
Point.文字列結合$+命令がどのようなものか把握する
まとめ
・文字列結合を行うことでシリアル通信のアスキーデータを生成することができる
・基本的にはオペランド3個を使用した方がわかりやすい
・文字列結合$+命令がどのようなものか把握する