2024-12-21 01:46:10 | 我爱编程网
最近我在参与一个与PLC工控相关的项目。项目背景是,一家茶叶工厂已经构建了自动化的工控系统,并且有朋友为茶园监控和天气环境提供了web页面展示,但工控设备的数据展示尚未实现。
目标是获取工控设备数据,这些数据通过在局域网内运行的modbus tcp协议获取。将数据存入数据库,随后,web界面只需按时间顺序从数据库中获取数据即可。
为了访问对方的计算机,我需要对方的授权。因此,我演示了使用modbus的调试工具和后续的PHP代码请求示例。
所需工具包括:
Modbus Slave:用于模拟从机端的软件,作为服务端,PHP作为客户端获取数据。
Modbus Poll:用于测试和调试Modbus从设备的主机仿真器,这里也当作客户端使用。
MThings:一个国产免费软件,既可模拟主机设备又可模拟从机设备。
获取详细信息,可以扫描二维码,输入“modbus模拟”获取地址。
工具操作示例:
建立TCP/IP连接:
从机参数说明:
查看发送和接收数据明细:
注意事项:
通过TCP获取从机数据:
连接失败时的面板提示:
PHP代码演示:
下载modbus类库包:
编写“03 Read Holding Registers”函数示例代码。
环境要求。
readMultipleRegisters说明:
请求异常情况:
返回数组处理:
返回数组与从机数据块地址的对应方式。
获取设备数据块实际数据:
我爱编程网(https://www.52biancheng.com)小编还为大家带来在php环境中,从oracle中获取数据如何提取具体值?的相关内容。
连接 <? if ($conn=Ora_Logon("user@TNSNAME","password")) { echo "SUCCESS ! Connected to database\n"; }else {echo "Failed :-( Could not connect to database\n";} Ora_Logoff($conn); phpinfo(); ?> 以上代码使用TNSNAME(在你的tnsnames.ora文件中指明)定义的Oracle数据库名称、用户名称和密码连接数据库。在成功连接的基础上,ora_logon函数返回一个非零的连接ID并储存在变量$conn中。 查询 假设与数据库已经连接就绪,下面我们就来实际的应用对数据库的查询。下面的代码演示了一个连接并查询的典型例子: function printoraerr($in_cur) { // 检查Oracle是否出错 // 如果存在错误则显示 // 当指针被激活时每次请求Oracle后调用该函数 if(ora_errorcode($in_cur)) echo "Oracle code - ".ora_error($in_cur)."\n"; return; } if (!($conn=ora_logon("user@TNSNAME","password"))) {echo "Connection to database failed\n"; exit; } echo "Connected as connection - $conn \n"; echo "Opening cursor ... \n"; $cursor=ora_open($conn); printoraerr($cursor); echo "Opened cursor - $cursor \n"; $qry="select user,sysdate from dual"; echo "Parsing the query $qry ... \n"; ora_parse($cursor,$qry,0); printoraerr($cursor); echo "Query parsed \n"; echo "Executing cursor ... \n"; ora_exec($cursor); printoraerr($cursor); echo "Executed cursor \n"; echo "Fetching cursor ... \n"; while(ora_fetch($cursor)) { $user=ora_getcolumn($cursor,0); printoraerr($cursor); $sysdate=ora_getcolumn($cursor,1); printoraerr($cursor); echo " row = $user, $sysdate \n"; } echo "Fetched all records \n"; echo "Closing cursor ... \n"; ora_close($cursor); echo "Closed cursor \n"; echo "Logging off from oracle... \n"; ora_logoff($conn); echo "Logged off from oracle \n"; ?> 显示结果 以下代码演示了怎样查询数据库并将结果输出: function printoraerr($in_cur, $conn) { // 检查Oracle是否出错 // 如果存在错误则显示 // 当指针被激活时每次请求Oracle后调用该函数 // If it encountered an error, we exit immediately if(ora_errorcode($in_cur)) {echo "Oracle code - ".ora_error($in_cur)." n"; ora_logoff($conn); exit; } return; } function exequery($w_qry,$conn) { $cursor=ora_open($conn); printoraerr($cursor,$conn); ora_parse($cursor,$w_qry,0); printoraerr($cursor,$conn); ora_exec($cursor); printoraerr($cursor,$conn); $numrows=0; $w_numcols=ora_numcols($cursor); // 显示头部 echo " \n"; for ($i=0;$i<$w_numcols;$i++) { $align=(ora_columntype($cursor,$i)=="NUMBER")?"RIGHT":"LEFT"; echo "\t ".ora_columnname($cursor,$i)." \n"; } echo " \n"; while(ora_fetch($cursor)) { echo " \n"; for ($i=0;$i<$w_numcols;$i++) { $align=(ora_columntype($cursor,$i)=="NUMBER")?"RIGHT":"LEFT"; if(ora_columntype($cursor,$i)=="LONG") echo " ". ora_getcolumn($cursor,$i)." \n"; else echo " ".ora_getcolumn($cursor,$i)." \n"; printoraerr($cursor,$conn); } $numrows++; echo " \n"; } if ($numrows==0) echo " Query returned no records \n"; else { echo " \n"; echo " Count \n"; echo " $numrows \n"; echo " \n"; } echo " \n"; ora_close($cursor); return; } // 主程序 if(!($conn=ora_logon("user@SID","password"))) { echo "Error: Cannot connect to database\n"; exit; } $qry="SELECT deptno \"Dept\" ,empno \"Emp\" ,empnm \"Name\" ,salary \"Salary\" FROM employee ORDER BY 1,2"; exequery($qry); ora_logoff($conn); ?> 基于HTTP的Oracle登录 将以下代码加在PHP页面代码之前以确认Oracle登录。注意你必须正确设定$ SID。 if(!isset($PHP_AUTH_USER)) { Header("WWW-authenticate: basic realm=\"$SID\""); Header("HTTP/1.0 401 Unauthorized"); $title="Login Instructions"; echo " You are not authorized to enter the site \n"; exit; } else { if (!($conn=ora_logon("$PHP_AUTH_USER@$SID",$PHP_AUTH_PW))) {Header("WWW-authenticate: basic realm=\"$SID\""); Header("HTTP/1.0 401 Unauthorized"); $title="Login Instructions"; echo " You are not authorised to enter the site \n"; exit; }} ?> 以上,就是我爱编程网小编给大家带来的在php环境中,从oracle中获取数据如何提取具体值?全部内容,希望对大家有所帮助!更多相关文章关注我爱编程网:www.52biancheng.comphp中如何读取环境变量PHP中的环境变量可以通过$_SERVER获取$_SERVER是一个包含服务器端相关信息的PHP全局环境变量,在PHP4.1.0之前的版本使用$HTTP_SERVER_VARS。下面是详细的说明及用法:$_SERVER['PHP_SELF']当前正在执行脚本的文件名,与documentroot相关。在FORM表单中,如执行文件是本身,你可以在ACTI
php中如何在数组中随机抽取n个数据的值array_rand()在你想从数组中取出一个或多个随机的单元时相当有用。它接受input作为输入数组和一个可选的参数num_req,指明了你想取出多少个单元-如果没有指定,默认为1。如果你只取出一个,array_rand()返回一个随机单元的键名,否则就返回一个包含随机键名的数组。这样你就可以随机从数组中取出键名和值。主要是用array_
PHP中header用法小结本文实例总结了PHP中header用法。分享给大家供大家参考,具体如下:PHP中header()函数的作用是给客户端发送头信息。什么是头信息?这里只作简单解释,详细的自己看http协议。在HTTP协议中,服务器端的回答(response)内容包括两部分:头信息(header)和体内容,这里的头信息不是HTML中的<head
php方法中如何获取闭包的值?亲,你好,很高兴为你解答该问题首先,你的这个写法是有问题的哦!~class A { public function aa() { // 函数体为空,所以外面不会有任何输出,即使设置变量来接受该方法,也不会有任何返回 // 所以你肯定拿不到123
urlPHPURL地址获取函数代码端口等推荐在PHP中,获取URL地址是一个基础但重要的操作,涉及到当前脚本的路径、域名、端口等信息。以下是一些用于获取不同URL信息的代码示例。首先,获取当前脚本网址(只包含路径)的代码如下:phpfunctionGetCurUrl(){if(!empty($_SERVER["REQUEST_URI"])){$scrtName=$_S
php如何获取网址中的参数比如有一个网址为域名/goods.php?u=59&id=24#pinglun我想得到这个id值可以用正则,也可以用php函数解析到数组中用正则可以这样preg_match('/id=(\d+)/',$_SERVER["REQUEST_URI"],$m);//$_SERVER这个表示当前网址urlprint_r
如何正确理解PHP获取显示数据库数据函数1、PHP获取显示数据库数据函数之mysql_result()mixedmysql_result(resourceresult_set,introw[,mixedfield])从result_set的指定row中获取一个field的数据.简单但是效率低.举例:$link1=@mysql_connect("server1","webu
php表单怎样提交到当前页面,并用$_POST获取其值?示例如下:<?php//如果post提交,则进入ifif($_POST){ print_r($_POST);}?><!DOCTYPE HTML><html lang="zh-CN"><head><meta charset="utf-8" /><title>
2025-02-01 20:24:39
2025-02-12 03:21:37
2025-02-10 15:19:48
2025-01-28 17:58:32
2024-11-22 05:08:01
2024-09-10 08:50:00