KEYENCE KV COM + Delphi で使う 2019/02/23

 ・2019/02/23 データ変換関数 DBValueConverterEx のサンプルを追加。
 ・2019/02/21 コンポーネントインストール時のエラー回避の間違いを修正。KV Nano のサンプルを追加。
 ・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;

function _GetServer(out ppUnkServer: IUnknown): HResult;
に変更

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

end;
を同様に GetServer を _GetServer に変更します。

画面右上の「プロジェクトマネージャー」で、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;
// ******************************
// DM0 読み込み
// 2019/02/23 追加
// ******************************
// データ変換関数 DBValueConverterEx を使ってダブルワード変換

procedure TForm1.Button1Click(Sender: TObject);
var
  valueL, valueH : long;
  plValue : integer;
begin
  with DBCommManager1 do begin
    Peer := 'USB';
    KVSimulator := True; // KV シミュレータモード
    try
      Connect;
      if Active then begin
        // ビットデバイスをON
        WriteDevice(DKV5000_MR, '0', 1);

        // ±32Bit整数を下位、上位に変換
        DBValueConverterEx1.SignedToWValue(StrToIntDef(Edit1.Text, 0), valueL, valueH);
        // 下位
        Edit3.Text := IntToStr(valueL);
        // 上位
        Edit4.Text := IntToStr(valueH);

        WriteDevice(DKV5000_DM, '0', valueL);
        WriteDevice(DKV5000_DM, '1', valueH);

        // 下位
        valueL := ReadDevice(DKV5000_DM, '0');
        // 上位
        valueH := ReadDevice(DKV5000_DM, '1');

        // 下位、上位を±32Bit整数に変換
        DBValueConverterEx1.WValueToSigned(valueL, valueH, plValue);
        Edit2.Text := IntToStr(plValue);
      end;
    except
      ShowMessage('通信エラー');
    end;
  end;
end;

// ******************************
// KV Nano の接続する
// 2019/02/20 追加
// ******************************
procedure TForm4.Button1Click(Sender: TObject);
begin
  DBCommManager1.Peer := 'USB';
  DBCommManager1.PLC := DATABUILDERAXLibEx_TLB.DBPLC_DKVNano;
  try
    // 接続
    DBCommManager1.Connect;
    if DBCommManager1.Active then begin
      // 出力 500 だけを ON (デバイス指定は1ビット単位 下位 2桁は '00'~'15')
      DBCommManager1.WriteDevice(DKVNano_RLY_B, '500', 1);

      // 出力 500 から 5 ビット ON(デバイス指定は16ビット単位 下位 2桁は '00')
      DBCommManager1.WriteDevice(DKVNano_RLY_W, '500', 31);
      Sleep(500);
      // 出力 500 から 16 ビット OFF(デバイス指定は16ビット単位 下位 2桁は '00')
      DBCommManager1.WriteDevice(DKVNano_RLY_W, '500', $0);
      // 切断
      DBCommManager1.Disconnect;
    end;
  except
    ShowMessage('Error');
  end;
end;