2

OSI Piデータベースに接続しようとしていますが、以下のエラーが発生し続けます。VBコードを実行できるため、すべての権限が正しく設定されています。サーバーのバージョンを正しく読み取ります。

これが私のPHPです:

 <?php
 echo "I will connect to PI Server, read pisdk version and read server time";
 echo "<br>";
 $pisdkComObject = new COM("PISDK.PISDK") or die("Unable to instantiate PISDK object");
 echo "PI server version {$pisdkComObject->PISDKVersion}";
 $myServer = $pisdkComObject->Servers->Item("XXXX_SERVERNAME_XXXX");
 $myServer->Open();
 echo "<br>";
 echo "PI server time is {$myServer->ServerTime}";
 ?>

これが私の出力です:

PIサーバーバージョン1.3.6致命的なエラー:キャッチされない例外'com_exception'とメッセージ'ソース:pisdk.dll説明:サーバーでセッションを開くことができません。[-10728] PINET:送信エラー。E:\ XXXX.php:12スタックトレース:#0 E:XXXX.php(12):variant-> Open()#1 {main}が12行目のE:XXXX.phpにスローされました

4

1 に答える 1

1

別のアプローチは次のとおりです。前提条件は、PIOLEDBプロバイダーをインストールすることです。

次に、http: //adodb.org/dokuwiki/doku.phpにアクセスし、指示に従ってphp用のADODBライブラリをインストールします。そこにも図書館に関するいくつかの紹介情報があります。

次のステップは、UDLを生成し(拡張子が「.udl」の空白のテキストファイルを保存する)、それをダブルクリックして[データリンクのプロパティ]ダイアログボックスを開くことでした。[プロバイダー]タブで、[PIOLEDBプロバイダー]を選択します。[接続]タブで、[データソース]テキストボックスにpiサーバーの名前を入力します。サーバーに固有のログオン情報も設定する必要があります。この開発接続では、「使用する初期カタログ」として「piarchive」を使用しました。[接続のテスト]が成功したら、[OK]をクリックできます。

次に、UDLを右クリックして、メモ帳または任意のテキストエディタで開きます。接続文字列を選択してコピーします(つまり、「Provider = PIOLEDB.1;。..など)。

次は、CDT158タグの値の小さなテーブルと対応する配列を生成するために使用したコードです。私の開発バージョンでは、このコードをbodyタグの間に配置しました。

<?php
    include( "adodb / adodb.inc.php");
    $ connection = new COM( "ADODB.Connection")またはdie( "Cannot start ADO");

    // PI OLEDB(UDL)接続文字列。
    $ connection-> Open( "Provider = PIOLEDB.1; Initial Catalog = piarchive;
        Data Source = yourPIServerNameHere; Persist Security Info = False ");

    $ result_set = $ connection-> Execute( "
                SELECTタグ、時間、値
                picompから
                WHERE TIME> ='*-90m' AND tag ='cdt158'
                ");
    $ result_count = 0;
    $ labels = array();
    while(!$ result_set-> EOF)
    {print $ result_set->fields[0]。 ' | '。$result_set->fields[1]。' | '。$result_set->fields[2]。'<br/>';
        array_push($ labels、 "{$ result_set-> fields [1]}");
        $ result_count = $ result_count +1;
        $ result_set-> MoveNext();
    }

    echo "<br/>取得されたレコードの数は次のとおりです:"。$result_count。"<br /> <br />";

    エコー"<pre>";
        print_r($ labels); //これは生成された配列を表示します。
    エコー"</pre>";

    $ result_set-> Close(); //オプション
    $ connection-> Close(); //オプション
?>

于 2013-03-06T21:07:35.750 に答える