我正在尝试连接到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',消息'来源:pisdk.dll说明:无法在服务器上打开会话。 [-10728] PINET:发送错误。'在E:\ XXXX.php:12堆栈跟踪:#0 E:XXXX.php(12):variant-&gt; Open()#1 {main}在第12行的E:XXXX.php中抛出
答案 0 :(得分:1)
这是另一种方法: 先决条件是安装PI OLEDB Provider。
然后转到http://adodb.org/dokuwiki/doku.php并按照指示为php安装ADODB库。这里也有一些关于图书馆的介绍性信息。
我的下一步是生成UDL(保存扩展名为'.udl'的空白文本文件),然后双击它以打开“数据链接属性”对话框。在“提供程序”选项卡下,选择“PI OLE DB提供程序”。在“连接”选项卡下,在“数据源”文本框中键入pi服务器的名称。您还需要为您的服务器配置唯一的登录信息。对于这种开发连接,我使用“piarchive”作为我的“初始目录”。 [测试连接]成功后,您可以单击[确定]。
然后右键单击您的UDL并使用记事本或任何文本编辑器打开。选择并复制连接字符串(即“Provider = PIOLEDB.1; ...等。)
接下来是我用来为CDT158标签和相应数组生成一个小值表的一些代码。在我的开发版本中,我将此代码放在body标签之间。
<?php include("adodb/adodb.inc.php"); $connection = new COM("ADODB.Connection") or die("Cannot start ADO"); // PI OLEDB (UDL) connection string. $connection->Open("Provider=PIOLEDB.1;Initial Catalog=piarchive; Data Source=yourPIServerNameHere;Persist Security Info=False"); $result_set = $connection->Execute(" SELECT tag, TIME, value FROM 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 />The number of records retrieved is: ".$result_count."<br /><br />"; echo "<pre>"; print_r($labels); // this displays the array generated. echo "</pre>"; $result_set->Close(); // optional $connection->Close(); // optional ?>