Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/251.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/159.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php ';实时';使用canvasjs绘制图形_Php_C++_Mariadb_Canvasjs - Fatal编程技术网

Php ';实时';使用canvasjs绘制图形

Php ';实时';使用canvasjs绘制图形,php,c++,mariadb,canvasjs,Php,C++,Mariadb,Canvasjs,我正在尝试使用canvasjs制作一个近乎“实时”的图形。 我使用Raspberry Pi测量数据并将其发送到外部虚拟服务器的数据库 通过RPI,我发送n(从1到无穷大的计数)、napatie(电压、SPI的值)、cas(时间)。这相当慢,因为我每秒只发送1000个样本。只需写入.txt文件而不发送到数据库,我每秒就能获得大约30k个样本。 来自RPI的代码: #include <wiringPi.h> #include <stdio.h> #include <st

我正在尝试使用canvasjs制作一个近乎“实时”的图形。 我使用Raspberry Pi测量数据并将其发送到外部虚拟服务器的数据库

通过RPI,我发送n(从1到无穷大的计数)、napatie(电压、SPI的值)、cas(时间)。这相当慢,因为我每秒只发送1000个样本。只需写入.txt文件而不发送到数据库,我每秒就能获得大约30k个样本。 来自RPI的代码:

#include <wiringPi.h>
#include <stdio.h>
#include <string.h>
#include <wiringPiSPI.h>
#include <iostream>
#include <stdint.h>
#include <stdlib.h>
#include <mariadb/mysql.h>
#include <string>
#include <ctime>
#include <date.h>
using namespace std;

int main(){

using namespace date;
using namespace std::Chrono;

time_t raw time;
  struct tm * timeinfo;
  char buffer [80];

//CONNECT TO DB

MYSQL *conn;

  if ((conn = mysql_init(NULL)) == NULL)
  {
    fprintf(stderr, "Could not init DB\n");
    return EXIT_FAILURE;
  }
  if (mysql_real_connect(conn, "IP", "name", "pass", "dbname", 0, NULL, 0) == NULL)
  {
    fprintf(stderr, "DB Connection Error\n");
    return EXIT_FAILURE;
  }

//READ FROM SPI
wiringPiSPISetup(0,2000000);
int i=1;
wiringPiSetup();
std::time_t now = std::time(0);

while (1){
uint8_t spiData [2] ;
wiringPiSPIDataRW (0, spiData, 2) ;
int MSB_1 = spiData[1];
MSB_1 = MSB_1 >> 1;
int MSB_0 = spiData[0] & 0b00011111;
MSB_0 = MSB_0 << 7;
int a = MSB_1 + MSB_0;
float b = ((5.0 *(float)a)/ 4096.0);

time (&rawtime);
timeinfo = localtime (&rawtime);
strftime (buffer, 80,"%Y-%m-%d %H:%M:%S",timeinfo);

//INSERT TO DB
string query = "INSERT INTO tabulka (n, napatie,cas) VALUES ("+to_string(i)+","+to_string(b)+",'"+buffer+"')";

i++;

if ( mysql_query(conn, query.c_str()) !=0)
 {
  fprintf(stderr, "Query Failure\n");
  return EXIT_FAILURE;
 }
delayMicroseconds(10);
}
mysql_close(conn);
return 0;
}
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
使用名称空间std;
int main(){
使用名称空间日期;
使用名称空间std::Chrono;
时间是原始时间;
结构tm*时间信息;
字符缓冲区[80];
//连接到数据库
MYSQL*康涅狄格州;
if((conn=mysql_init(NULL))==NULL)
{
fprintf(stderr,“无法初始化DB\n”);
返回退出失败;
}
if(mysql\u real\u connect(conn,“IP”,“name”,“pass”,“dbname”,0,NULL,0)=NULL)
{
fprintf(stderr,“数据库连接错误\n”);
返回退出失败;
}
//从SPI读取
接线PIS设置(02000000);
int i=1;
wiringPiSetup();
std::time\u t now=std::time(0);
而(1){
uint8_t spiData[2];
wiringPiSPIDataRW(0,spiData,2);
int MSB_1=spiData[1];
MSB_1=MSB_1>>1;
int MSB_0=spiData[0]&0b00011111;

MSB_0=MSB_0更改代码以收集10个值,生成批插入(
insert…values(…),(…),…(…);
),然后发出该查询。这可能会将容量从每秒1K行增加到5K行

事件
是否与插入脚本竞争?也就是说,它们是否接触同一个表?相反,让脚本执行
删除
并附加
限制1000

如果您可以容忍批处理10个值的延迟,请尝试100;这将运行得更快。还可以调整
限制

DELETE
可以每隔10
delaymicross(10);
替换一次。这增加了另一个调整

更多理由:

  • 由于开销和事务原子性,一次插入100行的速度大约是一次插入1行的速度的10倍(超过100行会导致“收益递减”)
  • DELETE
    删除不同数量的行。当它删除大量行时,它对
    插入
    选择
    的影响更大,可能导致数据中出现明显的空白
  • 10秒的延迟比人类的感知速度快得多,以至于如此低的延迟似乎是不合理的
  • 再次,对于人类,考虑将图表冻结在+/-10单位,从而使用户更容易将一页与下一页进行比较。
  • 并发送实际时间,以便X轴正确分布,而不是均匀分布。这样,您可以看到间隙,或许可以发现它们遵循的模式

完成大部分工作,然后回来进行更多的评论和调整。

更改代码以收集10个值,构建批插入(
插入…值(…)、(…)、(…)、(…);
),然后发出该查询。这可能会将您的容量从每秒1K行增加到5K行

事件
是否与插入脚本竞争?也就是说,它们是否接触同一个表?相反,让脚本执行
删除
并附加
限制1000

如果您可以容忍批处理10个值的延迟,请尝试100;这将运行得更快。还可以调整
限制

DELETE
可以每隔10
delaymicross(10);
替换一次。这增加了另一个调整

更多理由:

  • 由于开销和事务原子性,一次插入100行的速度大约是一次插入1行的速度的10倍(超过100行会导致“收益递减”)
  • DELETE
    删除不同数量的行。当它删除大量行时,它对
    插入
    选择
    的影响更大,可能导致数据中出现明显的空白
  • 10秒的延迟比人类的感知速度快得多,以至于如此低的延迟似乎是不合理的
  • 再次,对于人类,考虑将图表冻结在+/-10单位,从而使用户更容易将一页与下一页进行比较。
  • 并发送实际时间,以便X轴正确分布,而不是均匀分布。这样,您可以看到间隙,或许可以发现它们遵循的模式

完成大部分工作,然后回来进行更多的评论和调整。

请阅读感谢您让我知道。我检查了配置文件并将“显示错误”设置为“关闭”。此外,我还注释了我尝试手动显示连接错误的部分。请阅读感谢您让我知道。我检查了配置文件并将“显示错误”设置为“关闭”我还注释掉了我试图手动显示连接错误的部分。
<?php

//CONNECT TO DB AND READ
$dataPoints = array();

$conn = mysqli_connect('127.0.0.1', 'name', 'pass', 'dbname');
if ($conn->connect_error) {
        die("Connection error: " . $conn->connect_error);
}

$result = $conn->query("select n, napatie from hodnoty.tabulka");

if ($result->num_rows > 0) {
        while ($row = $result->fetch_assoc()) {
            //$dataPoints[] = $row;
            array_push($dataPoints, array("x"=> $row['n'], "y"=> $row['napatie']));


    }
}


//MAKE GRAPH

?>
<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="refresh" content="1" >
<script>
window.onload = function() {

var dataPoints = <?php echo json_encode($dataPoints, JSON_NUMERIC_CHECK); ?>;
var dataLength = 1000; 
var chart = new CanvasJS.Chart("chartContainer", {
    theme: "light2",
    title: {
        text: "NAPATIE NA VSTUPE DO RPI"
    },
    axisX:{
        title: "n [/-]"
    },
    axisY:{
        includeZero: false,
        suffix: "U [V]"
    },
    data: [{
        type: "line",
        yValueFormatString: "#,##0.0#",
        toolTipContent: "{y} Mbps",
        dataPoints: dataPoints 
    }]
});

    if (dataPoints.length > dataLength) {       // i think this dont work
        dataPoints.shift();
    }



chart.render();

}
</script>
</head>
<body>
<div id="chartContainer" style="height: 370px; width: 100%;"></div>
<script src="https://canvasjs.com/assets/script/canvasjs.min.js"></script>
</body>
</html>