top of page

11. アンテナを使った通信

 アンテナやレーザーアンテナをプログラマブルブロックと組み合わせることで、遠隔のプログラマブルブロック中で動作しているプログラムに対し、データを送受信することができます。

8-1. アンテナブロックを使ったデータの送信

 データの送受信を行うために、まずプログラマブルブロックとアンテナを組み合わせます。アンテナのターミナル画面を開き、Assigned Programmable Block にプルダウンメニューから組み合わせるプログラマブルブロックを選びます。また、お互いに通信できるように適当な所有権を設定しておきます。

 下の例のように、プログラム中でアンテナブロックを取得し、TransmitMessage メソッドで string 型のデータを送信します。TransmitMessage メソッドは、データの送信が成功すると true を返します。

public void Main(string argument, UpdateType updateSource)

{

    var antenna = GridTerminalSystem.GetBlockWithName("Antenna 2") as IMyRadioAntenna;

    string msg = "TEST MESSAGE";

    bool result;

 

    result = antenna.TransmitMessage(msg, MyTransmitTarget.Default);

}

 MyTransmitTarget は以下のようなビットフラグなので、

public enum MyTransmitTarget

{

     None = 0,

     Owner = 1 << 0,      //自分

     Ally = 1 << 1,          //同陣営

     Neutral = 1 << 2,    //中立

     Enemy = 1 << 3,     //敵

     Everyone = Owner | Ally | Neutral | Enemy,

     Default = Owner | Ally,

}

 例えば Neutral と Ally のアンテナのみにデータを送信したい場合は、OR 演算子を使って次のように書くことができます。

result = antenna.TransmitMessage(msg, MyTransmitTarget.Ally | MyTransmitTarget.Neutral);

8-2. アンテナブロックを使ったデータの受信

 データを受信したアンテナは、受け取った文字列データをコマンドライン引数として、割り当ててあるプログラマブロック中のプログラムを呼び出します。以下の例のように、受信データは Main メソッドの argument により得られます。

public void Main(string argument, UpdateType updateSource)

{

     if (argument == "TEST MESSAGE"){

          //受信データが "TEST MESSAGE" なら実行される

     }

}

 アンテナには、自分以外の同陣営に所属するアンテナからのデータを無視するプロパティーと

bool IgnoreAlliedBroadcast { get; set; }

 中立または敵陣営に所属するアンテナからのデータを無視するプロパティーがあります。

bool IgnoreOtherBroadcast { get; set; }

8-3. Laser Antennaを使った通信データの受信

 アンテナブロックと異なり、レーザーアンテナ は 1 対 1 通信なので、通信を始める前に相手のレーザーアンテナの GPS 座標を設定して接続を確立する必要があります。

var LaserAnt = GridTerminalSystem.GetBlockWithName("Laser Antenna 1") as IMyLaserAntenna

LaserAnt.TargetGPS("TargetAntenna:GPS:    ");
LaserAnt.Connect();

レーザーアンテナは Connect() メソッドを実行すると通信相手の方向にヘッドを回転させた後、接続を試みるため、すぐに通信を開始できません。レーザーアンテナの状態は LaserAntennaSatatus 型の Status プロパティで確認できます。

MyLaserAntennaStatus st = LaserAnt.Status;

MyLaserAntennaStatus は以下の値を取る列挙型です。

接続を確立すれば TransmitMessage メソッドでメッセージを送信することが可能です。
 受信はアンテナブロックと同様に、接続先のレーザーアンテナに関連付けたプログラマブルブロック中で動作しているプログラムに、送信されたメッセージがコマンドライン引数として渡されます。また、アンテナブロックは1対1通信なので、アンテナブロックにあるような通信の対象を限定する設定はありません。

bottom of page