ID : 5075
変数の種類と使用上の注意
変数の分類
- 変数にはグローバル変数とローカル変数があります。
- ローカル変数の中にスタティック変数(Static属性のローカル変数)が含まれます。
- スタティック変数の中にパブリック変数(Public属性のローカル変数)が含まれます。
変数の種類 | ローカル変数 | グローバル変数 | ||
---|---|---|---|---|
Static属性 | ||||
Public属性 | ||||
ユーザが作成? | する | する | する | しない |
コントローラ電源OFFで消える? | - | 消えない | 消えない | 消えない |
別プログラムファイルからアクセス可? | - | - | アクセス可 | アクセス可 |
変数の種類と型
変数の名前 | ローカル変数 | スタティック変数 | パブリック変数 | グローバル変数 | ||
---|---|---|---|---|---|---|
変数型 | Integer | ○ | ○ | ○ |
○ | I |
Single | F | |||||
Double | D | |||||
Vector | V | |||||
Position | P | |||||
Joint | J | |||||
Trans | T | |||||
String | ○※1 | ○※1 | ○※1 | S | ||
Variant | × | × | × | |||
Object | × | × | × |
○※1:データサイズは最大255バイトです。
スタティック変数の生成、初期化、消滅
スタティック変数(パブリック変数含む)の生成、初期化、消滅は下記のようになります。
変数の生成
スタティック変数は、変数が追加されたプログラムファイルが最初にコンパイルされたときに生成(領域確保)されます。
変数の初期化
以下のような場合は、プログラムファイルのコンパイル時に、そのプログラムに含まれる全スタティック変数が初期化されます。
- スタティック変数のいずれかが追加、削除、変更された場合
ここで変更とは、.変数の名前、型、次元数、初期値のいずれかの変更が対象になります。インクルードしているファイルに定義されているスタティック変数も対象です。 - 変数を定義したプログラムファイルやフォルダの名前が変更された場合
初期化の注意
あるプログラムファイルの変数が初期化された場合、その変数を参照している別のプログラムファイルで不整合が起こることがあります。そのような状態を避けるには、以下のいずれかの方法で対処します。
- 変数を参照しているプログラムファイルを強制的に初期化します。スタティック変数のどれかに変更がないと初期化は行われないため、どれかを一時的に変更して強制的に初期化し、また元に戻す作業を行います。
- 変数を参照しているプログラムファイル内で、不整合を検出し値の書き換えを行うようにプログラミングします。
WINCAPSIIIのプログラム送信やUSBのプログラム読み込みを行った場合も不整合が発生する場合がありますのでご注意ください。
変数の消滅
プログラムファイルから変数の記述を削除したときは、そのプログラムファイルのコンパイル時に消滅します。プログラムファイルを削除したときは、他のプログラムファイルのコンパイル時に消滅します。
スタティック変数の用例
スタティック変数(パブリック変数含む)の特徴は電源をOFFしても値が保持されることとデータの独立性を確保できるというもので、これを利用すると以下の用例のような機能を実現できます。
用例1: プログラムが実行された回数を出力する
下記のプログラムを実行するたびにRunCountが1づつカウントアップします。
Pro1.pcs
Sub Main
Static RunCount as Integer = 0
PrintDbg "前回までの実行回数 = " & RunCount
' ... 実行処理
RunCount = RunCount+1
End Sub
用例2: ユーザー独自のデータ領域を準備し利用する
下記プログラムではDataBase.pcsでデータ領域を100個確保し、Pro1.pcsで値を設定しています。
DataBase.pcs
#define DB_MAX 100
Public Count As Integer = 0 'カウンタ
Public ProductID(DB_MAX) As Integer '品番
Public ProductName(DB_MAX) As String '品名
Public ProductPos(DB_MAX) As Position '位置
Sub Main
End Sub
Pro1.pcs
Sub Main
Dim n as integer
GetPublicValue n, "DataBase", "Count"
' 0, "N000", P(100, 120, 400)
SetPublicValue 0, "DataBase", "ProductID", n
SetPublicValue "N000", "DataBase", "ProductName", n
SetPublicValue P(100, 120, 400), "DataBase", "ProductPos", n
' 1, "N001", P(200, 220, 300)
SetPublicValue 1, "DataBase", "ProductID", n
SetPublicValue "N001", "DataBase", "ProductName", n
SetPublicValue P(200, 220, 300), "DataBase", "ProductPos", n
SetPublicValue n+1, "DataBase", "Count"
End Sub
ID : 5075