
最近、DLMS / COSEMプロトコルは、国内生産の計量デバイス(電気エネルギー、熱、水、ガスのメーター)で積極的に使用されています。 マイクロコントローラーの製造を専門とするほぼすべての企業は、このプロトコルをサポートするメーターのコストと開発時間を削減するために使用できる認定DLMS / COSEMスタックを持っています。 この記事では、Texas Instruments MSP430マイクロコントローラーのDLMS / COSEMスタックに焦点を当てます。
TI DLMS / COSEMスタックには、次の機能があります。
- すべてのCOSEMインターフェイスクラスがサポートされています。
- 3つのレベルの関連付けがサポートされています:オープンアクセス(セキュリティなし)、低セキュリティ(低セキュリティ)、および高セキュリティ(高セキュリティ)。 高レベルの機密モードでの計量デバイスへのアクセスは、AES128アルゴリズムに基づく4ステップ認証を使用して実行されます。
- LN(ロングネーム)アドレッシングのみがサポートされています。
- 1、2、4バイトのアドレス指定がサポートされています。
- サービスGET、SET、GET WITH BLOCK、SET WITH BLOCK、ACTION、およびProfile Genericクラスのオブジェクトの選択アクセスがサポートされています。
- スタックストレージに必要なメモリサイズは24 kBです。
- 必要なRAMサイズは1.8kBです。
スタックを「タッチ」するには、次のものが必要です。
- IAR Embedded Workbench for MSP430開発環境
- DLMS / COSEMクライアント、 Guruxから無料のオープンソースDLMSDirectorを入手してください。
- 評価ボードEVM430-F6779;
- デバッガ/プログラマMSP-FET430UIF。
ダウンロードして解凍する
DLMS / COSEMスタックは(
http://www.ti.com/tool/dlmsobj-eval )から入手できます。ダウンロードするにはTIアカウントが必要です。 スタック自体は
DLMS-4.0.6-windows-installerと呼ばれるディストリビューションにパッケージ化
されています。 インストール後、スタックファイルが配置されているzipフォルダー「DLMS_Object」はインストールフォルダーに配置されます。
ライブラリは次のファイルで構成されています。
- iec62056_demo.c :このファイルでは、マイクロコントローラーとHDLCステートマシンの周辺全体が初期化されます。
- uart_comms.c :UARTモジュールの構成ファイル。
- iec62056_link.r43 :HDLCおよびMACレイヤーがこのファイルに実装されています。
- server_msgs.r43 :このファイルは、COSEMアプリケーション層を実装します。
- config.c :メイン構成ファイル。 このファイルでは、オブジェクトリストのパラメーターを削除または追加できます。
- app_server_msgs.c :メモリからデータを抽出してDLMSライブラリに提供する関数がこのファイルに書き込まれます。
- config.h :config.cのマクロと関数プロトタイプ。
- cosem.h :COSEMアプリケーション層で使用されるすべての定数の定義。
- iec_62056_link.h :HDLCレベルのマクロと関数プロトタイプ。
これらのファイルはすべて、dlms_obj.ewwというプロジェクトに既にコンパイルされています。
プロジェクトの開始
このパートでは、デモプロジェクトを起動し、COSEMオブジェクトがどのように表されるかを確認します。 これを行うには、MSP430のIARで
dlms_obj.ewwファイルを開き、必要なマイクロコントローラー(この場合はMSP430F67791)を選択します。

プロジェクトを組み立て、コントローラーをプログラムします。 DLMSDirectorプログラムを開き、次のパラメーターを使用して新しいデバイスを追加します。

[OK]ボタンをクリックします。 次に、「デバイス」ツリーでデバイスを選択し、「接続」ボタンをクリックすると、次のエラーが表示されます。

これは簡単に
修正できます
。dlms_obj.ewwプロジェクトの
uart_comms.cファイルを開くと、132行目でUARTの構成時に「typo」が作成されたことがわかります。

正しい行は次のとおりです。
P3SEL0 |=(BIT0|BIT1);
修正後、メーターとの通信が正常に確立され、その結果、「読み取り」ボタンが使用可能になり、ステータス行に「準備完了」が表示されます。

メーターから情報をダウンロードするには、[読み取り]ボタンをクリックします。 このプロセスは高速ではないため、少し待つ必要があります。 その結果、COSEMオブジェクトからツリーを取得します。

このスタックのパブリックドメインでは、デフォルトで5つのオブジェクトが表示されます:
- 0.0.1.0.0.255-現在の時刻をメーターで表示します。
- 0.0.40.0.0.255-現在の関連付けに関する情報を表示します。
- 0.0.40.0.1.255-関連付け番号1に関する情報を表示します。
- 0.0.41.0.0.255-いわゆるSAP割り当てを表示します。
- 0.0.42.0.0.255-デバイスの論理名、実際には-カウンターのシリアル番号を表示します。
たとえば、メーターの現在時刻に関する情報は次のように表示されます。

時刻を見つけるだけでなく、タイムゾーン、時計のソース、夏時間への移行日時、およびその逆に関する情報も取得できます。また、高セキュリティモードでは、これらのパラメーターを設定できます。
低プライバシーモードでメーターにアクセスするには、次の設定を使用する必要があります(デフォルトのパスワードは00000000です)。

このモードでは、さらに多くのCOSEMオブジェクトを使用できます。

新しいCOSEMオブジェクトの追加
新しいオブジェクトを追加するには、
dlms_obj.ewwプロジェクトの
config.cファイルを開き、構造を見つけます。
const struct object_desc_s object_list[]
次の行を追加します:
{ASSOC_PC_MR_US, CLASS_ID_DATA, 0, { 0, 0, 96, 1, 0, 255}, 2, Obj_Meter_Sr_No, 0, NULL}
どこで:
- ASSOC_PC_MR_US-オブジェクトの可視性を決定します。この場合、オブジェクトはオープンアクセスモード、低セキュリティレベルのアクセスモード、および高セキュリティレベルのアクセスモードの両方で表示されます。
- CLASS_ID_DATA-インターフェイスクラス識別子。この場合、オブジェクトはDataクラスに属します。
- 0-クラスバージョン(0);
- {0、0、96、1、0、255}-オブジェクトの論理名。
- 2-属性の数(2);
- Obj_Meter_Sr_No-属性のリストへのポインター。
- 0-メソッドの数(0);
- NULL-メソッドのリストへのポインター(メソッドなし)。
次に、同じファイルに属性のリストを持つ構造を作成します。
static const struct attribute_desc_s Obj_Meter_Sr_No[] = { {1, ACCESS_PCR__MRR__USR_, TAG_OCTET_STRING, (void *) object_list[11].instance_id, NULL}, {2, ACCESS_PCR__MRR__USR_, TAG_OCTET_STRING, (void *) Meter_Sr_No, NULL}, };
どこで:
- 最初のパラメーターは属性番号です。
- 2番目のパラメーターはアクセス権です。
- 3番目のパラメーターは属性データ型です。
- 4番目のパラメーターは、データへのポインターです。
- 5番目のパラメーターはコールバック関数です。 この関数は、EEPROMメモリなどからデータを取得する必要があるときに呼び出されます。 詳細は、ユーザーマニュアルから入手できます。
私たちの場合、オブジェクトにはコールバック関数がなく、バイト文字列がデータ型として使用されます。
Meter_Sr_Noは、次の構造を指します。
const uint8_t Meter_Sr_No[] = { 8, 'A','B','C','D','1','2','3','4' };
これが、新しい機能を作成するためのすべての手順です。 結果:

おわりに
この記事では、MSP430ファミリのマイクロコントローラ用のDLMS / COSEMライブラリの完全な説明は提供しません。プロトコルの主要なポイントを強調せずにこれを行うのは難しいからです。 ただし、このような説明が必要な場合は、TIのWebサイト(
http://www.ti.com/tool/dlmsobj-eval )からダウンロードすることで、説明に慣れることができます。