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 server 版本 1.3.6 致命错误:未捕获异常 'com_exception' 并带有消息 'Source: 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

这是另一种方法:先决条件是安装 PI OLEDB Provider。

然后转到http://adodb.org/dokuwiki/doku.php并按照指示安装 php 的 ADODB 库。那里也有一些关于图书馆的介绍性信息。

我的下一步是生成一个 UDL(保存一个扩展名为“.udl”的空白文本文件),然后双击它打开“数据链接属性”对话框。在提供程序选项卡下,选择“PI OLE DB 提供程序”。在 Connection 选项卡下,在 Data Source 文本框中输入您的 pi 服务器的名称。您还需要为您的服务器配置唯一的登录信息。对于这个开发连接,我使用“piarchive”作为我的“初始目录使用”。[测试连接]成功后,您可以单击[确定]。

然后右键单击您的 UDL 并使用记事本或任何文本编辑器打开。选择并复制连接字符串(即“Provider=PIOLEDB.1;...等)。

接下来是我用来生成 CDT158 标记的小值表和相应数组的一些代码。在我的开发版本中,我将此代码放置在正文标记之间。

<?php
    包括(“adodb/adodb.inc.php”);
    $connection = new COM("ADODB.Connection") 或 die("无法启动 ADO");

    // PI OLEDB (UDL) 连接字符串。
    $connection->Open("Provider=PIOLEDB.1;初始目录=piarchive;
        数据源=yourPIServerNameHere;Persist Security Info=False");

    $result_set = $connection->执行("
                选择标签、时间、值
                来自 picomp
                WHERE TIME >= '*-90m' AND tag = 'cdt158'
                ");
    $result_count = 0;
    $标签=数组();
    而 (!$result_set->EOF)
    { 打印 $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($标签); // 这显示生成的数组。
    回声“</pre>”;

    $result_set->关闭();// 可选的
    $连接->关闭();// 可选的
?>

于 2013-03-06T21:07:35.750 回答