KEYENCE KV COM+ LB Delphi XE5 で使う 2015/02/04 サンプルコードを追加しました。

KV-COM+ は、キーエンスの PLC とパソコンをリンクするツールです。(メーカーサイトは、こちらです。)
開発環境の欄に、 Delphi はありませんが、ActiveX なので、コンポーネントとして登録するか、タイプライブラリの取り込みを行うと、
Delphi からでも使えるようになります。

試してみたところ、DBTriggerManager, DBDeviceManagerの接続対象に DBCommManager が登録できないため、
DBCommManager 単体の使用になるようです。
データ変換関数 DBValueConverterEx は、使用可能です。

開発、動作確認環境:Delphi XE5 professional / Windows 8.1 (64ビット)

■ツールパレットに ”ActiveX” カテゴリが無いときは、カテゴリ名を追加します。

[ファイル]-[新規作成]-[VCLフォームアプリケーション-Delphi]で、空のフォームを作成します。

適当な名前のフォーム名で、フォームが作成されます。

画面右下の[ツールパレット]でマウスを右クリックすると、ポップアップメニューが表示されます。

[新規カテゴリの追加]をクリックします。

新規カテゴリの名前に ”ActiveX” を入力し、[OK]ボタンをクリックすると、カテゴリが追加されます。

ActiveX コンポーネントのインストール

[コンポーネント]-[コンポーネントのインポート]をクリックします。

ActiveXコントロールの取り込み」をチェックします。

登録済のActiveXコントロールの一覧から、
Keyence DataBulder Ax 3.0 Type library をアクティブにします。
説明欄をアクティブにし、キーボードで”K”を入力すると、素早く見つかります。


パレットページ名を “ActiveX”に、
「コンポーネントラッパーを生成する」にチェックを付け、[次へ]ボタンをクリックします。

新規パッケージへのインストールをチェックし、[次へ]ボタンをクリックします。

パッケージ名、説明を入力し、[完了]ボタンをクリックします。

確認ダイアログが表示されるので、[はい]ボタンをクリックします。

コンパイルエラーが表示されます。

GetServer の引数が無いのエラーです。

4177
function GetServer(out ppUnkServer: IUnknown): HResult;
をコメントアウト

6755行から4行
function TDBLink.GetServer(out ppUnkServer: IUnknown): HResult;
begin
 Result := DefaultInterface.GetServer(ppUnkServer);

end;
をコメントアウトします。


画面右上の「プロジェクトマネージャー」で、KVCOMLB.bplを右クリックします。

ポップアップメニューから、「コンパイル」を選択すると、コンパイルが始まります。

画面右上の「プロジェクトマネージャー」で、KVCOMLB.bplを右クリックし、
ポップアップメニューから「インストール」を選択します。

インストールが成功すると、ダイアログが表示されます。

 画面右下の「ツールパレット」の「ActiveX」に、「DBCommManager」等が追加されていることを確認してください。

KV COM+ LB を試してみる

「ツールパレット」の「ActiveX」の「DBCommManager」をダブルクリックするか、フォームにドラッグ&ドロップすると、
フォーム上にコンポーネントが追加されます。

同じようにして、フォーム上に「ツールパレット」の「standard」の「TButton」を追加します。

フォーム上の [Button1] をダブルクリックし、コードを追加して下さい。

実行する前に、プロジェクトマネージャーの「Project1.exe」をアクティブにしておいて下さい。

実行すると、フォームが表示されます。

[Button1]をクリックすると、DBCommManagerのプロパティー設定ダイアログが表示されます。

■KV-COM+ LB を使ってみる

ツールパレットの ActiveX から、TDBCommManager と TDBValueConverterEx をフォームに配置します。



ボタンをクリックし、下記のコードを追加します。
KV Stusio で KV シミュレータを使うときは、KVSimulator := True; にし、予め、KV シミュレータを起動しておきます。
この時、PLC のプログラムは何もなくても構いません。



実行画面



KV Studio の一括モニタ画面で変更されていることを確認します。



サンプルコード
// ******************************
// EM428 書き込み
// ******************************
// データ変換関数 DBValueConverterEx を使わずにダブルワード変換

procedure TForm1.Button2Click(Sender: TObject);
// Power(べき乗)のために uses節に math が必要
var
  plValue : Long;
begin
  with DBCommManager1 do begin
    Peer := 'USB';
    '' KVシミュレータを使う
    KVSimulator := True;
    try
      Connect;
      if Active then begin
        // 10進32ビット整数として書き込み
        plValue := StrToIntDef(Edit4.Text, 0);
        WriteDevice(DKV5000_EM, '428', plValue and $FFFF);
        WriteDevice(DKV5000_EM, '429', plValue div Trunc(Power(2, 16)));
      end;
      Disconnect;
    except
      ;
    end;
  end;
end;

// ******************************
// EM426 読み込み
// ******************************
// データ変換関数 DBValueConverterEx を使わずにダブルワード変換

procedure TForm1.Button3Click(Sender: TObject);
// Power(べき乗)のために uses節に math が必要
var
  valueL, valueH : Long;
  plValue : Long;
begin
  with DBCommManager1 do begin
    Peer := 'USB';
    '' KVシミュレータを使う
    KVSimulator := True;
    try
      Connect;
      if Active then begin
        valueL := ReadDevice(DKV5000_EM, '426');
        valueH := ReadDevice(DKV5000_EM, '427');
        // 10進32ビット整数として読み出し
        plValue := Trunc(valueH * Power(2, 16)) + valueL;
        Edit4.Text := plValue.ToString();
      end;
      Disconnect;
    except
      ;
    end;
  end;
end;