0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Polardb數(shù)據(jù)庫(kù)模擬控制智能家居測(cè)試案例

電子設(shè)計(jì) ? 2018-11-06 09:54 ? 次閱讀

Polardb 是阿里云研發(fā)的一種關(guān)系型數(shù)據(jù)庫(kù),與mysql完全兼容,而性能又是其6倍,具有高吞吐,低延遲等特性; 本測(cè)試通過模擬控制智能家居開關(guān)的終端場(chǎng)景,來體驗(yàn)polardb的性能;

本測(cè)試通過模擬控制智能家居開關(guān)的終端場(chǎng)景,來體驗(yàn)polardb的性能;

1、環(huán)境搭建

1.1 polardb配置

首先需要購(gòu)買polardb,按照處理器和內(nèi)存的性能不同,價(jià)格也不同,最低的配置為2核4G的polar.mysql.x2.medium規(guī)格,包月價(jià)格560RMB;

購(gòu)買以后,就可以通過連接https://polardb.console.aliyun.com/,進(jìn)入polardb控制臺(tái)進(jìn)行相關(guān)的配置;選擇一個(gè)地域節(jié)點(diǎn)[如華東1],創(chuàng)建一個(gè)實(shí)例,然后選擇一個(gè)集群列表,創(chuàng)建一個(gè)集群。創(chuàng)建好后,可以看到數(shù)據(jù)庫(kù)類型為POLARDB (MySQL 5.6),付費(fèi)類型和到期時(shí)間分別為包月和一個(gè)月的長(zhǎng)度;在創(chuàng)建時(shí)配置好初始賬號(hào)和密碼就可以使用了;在集群頁(yè)面,鼠標(biāo)點(diǎn)擊右側(cè)的管理連接,進(jìn)入集群信息頁(yè)面,可以看到公網(wǎng)聯(lián)接的地址,是用戶賬號(hào)名開始的連接,后面是mysql常用的端口號(hào)3306,記錄下這個(gè)后面連接用的到;

集群連接地址 (公網(wǎng)) : mypolardb.mysql.polardb.rds.aliyuncs.com:3306 ,這里我的賬號(hào)配置為mypolardb,所以這里以mypolardb開頭;

在上面的白名單列表 中,點(diǎn)擊后面的筆狀修改按鈕,將我們用來連接數(shù)據(jù)庫(kù)的ecs 服務(wù)器地址添加到里面;這里我的服務(wù)器地址為47.94.219.162.

1.2 ECS服務(wù)器配置:

由于需要在web頁(yè)面上進(jìn)行結(jié)果測(cè)試,先安裝nginx服務(wù)器,使用以下命令行進(jìn)行安裝:

sudo apt-get install nginx

安裝好后,在瀏覽器中輸入 ECS的地址[這里測(cè)試的是:47.94.219.162],可以看到nginx的歡迎界面,表示安裝成功;

由于后面需要用php腳本程序開發(fā),所以還需要安裝php,在console窗口輸入以下命令安裝:

sudo apt-get install php*

安裝好后,輸入下面的命令修改nginx的配置:

sudo vi /etc/nginx/sites-available/default

將文件中的下面四段打開:

location ~ \.php$ {

include snippets/fastcgi-php.conf;

fastcgi_pass unix:/run/php/php7.0-fpm.sock;

}

保存退出,然后重啟nginx:

service nginx restart

進(jìn)入/var/www/html目錄,創(chuàng)建一個(gè)php文件,測(cè)試是否php安裝成功:

vi phpinfo.php

《?php phpinfo(); 》

在瀏覽器訪問這個(gè)文件,如果可以看到相關(guān)的php信息,則表明php安裝成功;

進(jìn)入域名控制臺(tái),選擇要解析的域名,點(diǎn)擊解析連接,添加一條A記錄,主機(jī)記錄起一個(gè)容易記住的名字,比如:polardb,記錄值選擇ECS的ip地址,比如:47.94.219.162,然后創(chuàng)建完成后,等待5分鐘,在瀏覽器訪問一下新的域名,比如polardb.xunyun17.xyz,如果同樣能看到nginx 的歡迎界面,表示域名解析成功;

由于本智能家居場(chǎng)景使用mysql開發(fā)體驗(yàn),所以還需要在ubuntu里,安裝mysql,運(yùn)行下面的命令進(jìn)行安裝:

sudo apt install mysql-client

安裝完mysql后,建立一個(gè)shell腳本,測(cè)試是否可以連接到polardb上:

vi p.sh

mysql -h mypolardb.mysql.polardb.rds.aliyuncs.com --user=mypolardb --password=mypolardb

。/p.sh

如果運(yùn)行完腳本后,可以看到mysql的提示信息,和mysql大于號(hào)提示符,表示可以連接成功;

2、開發(fā)

首先搭建創(chuàng)建一個(gè)數(shù)據(jù)庫(kù)和一張表用來保存客廳和設(shè)備當(dāng)前信息:

。/p.sh

create database keting;

use keting;

CREATE TABLE status (devname VARCHAR(20), value int(4),changetime DATETIME);

insert into status(devname,value,changetime) values

(‘TV0001’,0,NOW()),

(‘LAMP01’,1,NOW()),

(‘CURN01’,1,NOW());

然后通過mysql的c語(yǔ)言api接口,編寫一段程序,來讀取status設(shè)備表中的設(shè)備狀態(tài):

////////////////////////////////////////query lamp device

sprintf(str_cmd,“select value from status where devname=‘LAMP01’”);

//printf(“\n%s\n.”,str_cmd);

no_res = 0;

if(mysql_query(conn, str_cmd))

{

printf(“《《《《《《《\n”);

exit(1);

}

res = mysql_use_result(conn);

if(no_res==0){

while((row = mysql_fetch_row(res)) != NULL)

{

// printf(“%s \n”, row[0]);

if(selno==17) printf(“%s”, row[0]);

else printf(“%s\t %s\t %s”, row[0],row[1],row[2]);

}

}

mysql_free_result(res);

sprintf(str_cmd,“select value from status where devname=‘CURN01’”);

//printf(“\n%s\n.”,str_cmd);

no_res = 0;

下一步,就是用php腳本調(diào)用這段代碼查詢?cè)O(shè)備狀態(tài),并且顯示在網(wǎng)頁(yè)上:查詢結(jié)果在

使用以下php代碼實(shí)現(xiàn):

if(!empty($_REQUEST[‘a(chǎn)rguments’])){

exec(‘。/mysqlv ’.$_REQUEST[‘a(chǎn)rguments’]。‘ LAMP03 1’,$result);

//print_r($result);

//echo $result[0][0]?!禸r》’;

//echo $result[0][1]?!禸r》’;

//echo $result[0][2];

if($result[0][0]==0) $s1 = ‘OFF’;

else $s1 = ‘ON’;

if($result[0][1]==0) $s2 = ‘OFF’;

else $s2 = ‘ON’;

if($result[0][2]==0) $s3 = ‘OFF’;

else $s3 = ‘ON’;

if($_REQUEST[‘a(chǎn)rguments’]==17) echo “《center》《table border=\”1\“》

《tr》

《th》電視《/th》

《th》燈《/th》

《th》窗簾《/th》

《/tr》

《tr》

《td》”.$s1.“《/td》

《td》”.$s2.“《/td》

《td》”.$s3.“《/td》

《/tr》

《/table》《/center》”;

打開瀏覽器運(yùn)行這個(gè)php腳本,點(diǎn)擊運(yùn)行按鈕,可以看到頁(yè)面會(huì)顯示一個(gè)設(shè)備狀態(tài)表格,包括電視,燈,窗簾是否有打開或關(guān)閉;

接下來,用c語(yǔ)言寫一個(gè)socket監(jiān)聽程序,用來監(jiān)聽后續(xù)遠(yuǎn)程設(shè)備對(duì)智能家居的更新請(qǐng)求,并實(shí)現(xiàn)狀態(tài)更新,代碼如下:

n = read(sock,buffer,255);

if (n 《 0) {

perror(“ERROR reading from socket”);

exit(1);

}

strncpy(devname,buffer,6);

devname[6]=0;

devval=buffer[6]-‘0’;

memset(cmdstr,0,256);

sprintf(cmdstr,“。/mysqlv 15 %s %i”,devname,devval);

printf(“%s.\n”,cmdstr);

system(cmdstr);

printf(“Here is the message: %s\n”,buffer);

n = write(sock,“I got your message”,18);

服務(wù)端監(jiān)聽程序編寫好以后,就可以開始寫模擬設(shè)備端的程序:

同樣使用c語(yǔ)言的socket函數(shù)進(jìn)行編寫,將命令行的數(shù)據(jù)發(fā)往服務(wù)器端:

/* Now connect to the server */

if (connect(sockfd, (struct sockaddr*)&serv_addr, sizeof(serv_addr)) 《 0) {

perror(“ERROR connecting”);

exit(1);

}

/* Now ask for a message from the user, this message

* will be read by server

*/

printf(“Please enter the message: ”);

bzero(buffer,256);

strcpy(buffer, argv[3]);

//fgets(buffer,255,stdin);

/* Send message to the server */

n = write(sockfd, buffer, strlen(buffer));

if (n 《 0) {

perror(“ERROR writing to socket”);

exit(1);

}

最后,還要修改我們的mysqlv.c的數(shù)據(jù)庫(kù)調(diào)用代碼,將命令行參數(shù)更改到數(shù)據(jù)庫(kù)中:

sprintf(str_cmd,“update status set value=%d where devname=\‘%s\’”,atoi(argc[3]),argc[2]);

3、測(cè)試

當(dāng)服務(wù)器和客戶端的程序都完成后,就可以進(jìn)行測(cè)試了;首先在服務(wù)器上,用以下命令行后臺(tái)運(yùn)行監(jiān)聽程序:

。/s&

然后在本地運(yùn)行模擬設(shè)備程序,例如我們要運(yùn)行將燈打開的命令,用下面的命令行:

。/c 47.94.219.162 8266 LAMP011

如果收到服務(wù)器的回顯消息,則表示發(fā)送成功;

打開瀏覽器,運(yùn)行php腳本,點(diǎn)擊運(yùn)行按鈕,可以看到頁(yè)面出現(xiàn)了最新設(shè)備狀態(tài)的表格信息;

結(jié)論與建議:可以看到這個(gè)polardb的新型數(shù)據(jù)庫(kù),還是和mysql兼容的,操作起來也比較方便;

如果能夠像其他阿里云的產(chǎn)品也提供相關(guān)的restful api接口,將會(huì)使開發(fā)變得更方便和快捷;

4、附錄和截圖

操作polardb 的mysqlv完整程序:

#include 《mysql/mysql.h》

#include 《stdio.h》

#include 《stdlib.h》

#include 《string.h》

int main(int argv,char**argc)

{

MYSQL *conn;

MYSQL_RES *res;

MYSQL_ROW row;

char server[] = “47.98.24.120”;

char user[] = “mypolardb”;

char password[] = “mypolardb”;

char database[] = “mysql”;

char str_cmd[250];

int no_res = 0;

int selno=0;

if(argv《2) {

printf(“mysqlv funcno.\n”);

return 0;

}

conn = mysql_init(NULL);

if(!mysql_real_connect(conn, server, user, password, database, 0, NULL, 0))

{

printf(“》》》》》》》\n”);

exit(1);

}

selno = atoi(argc[1]);

// printf(“selno:%d\n《br》”,selno);

switch(selno){

case 1:

strcpy(str_cmd,“select version()”);

break;

case 2:

strcpy(str_cmd,“select current_date”);

break;

case 3:

strcpy(str_cmd,“show databases”);

break;

case 4:

strcpy(str_cmd,“create database keting”);

no_res = 1;

break;

case 5:

strcpy(str_cmd,“drop database keting”);

no_res = 1;

break;

case 6:

strcpy(str_cmd,“create database woshi”);

no_res = 1;

break;

case 7:

strcpy(str_cmd,“drop database woshi”);

no_res = 1;

break;

case 8:

strcpy(str_cmd,“create database chufang”);

no_res = 1;

break;

case 9:

strcpy(str_cmd,“drop database chufang”);

no_res = 1;

break;

case 10:

strcpy(str_cmd,“use keting”);

no_res = 1;

break;

case 11:

strcpy(str_cmd,“use woshi”);

no_res = 1;

break;

case 12:

strcpy(str_cmd,“use chufang”);

no_res = 1;

break;

#if 0

case 13:

strcpy(str_cmd,“show tables”);

//no_res = 1;

break;

/*table operate for keting*/

case 14:

strcpy(str_cmd,“CREATE TABLE prop (devname VARCHAR(20), value int(4))”);

//no_res = 1;

break;n

#endif

case 15:

strcpy(str_cmd,“describe prop”);

//no_res = 1;

break;

case 16:

strcpy(str_cmd,“drop table if exists prop”);

//no_res = 1;

break;

}

if(selno==13){

strcpy(str_cmd,“use keting”);

if(mysql_query(conn, str_cmd))

{

printf(“《《《《《《《\n”);

exit(1);

}

strcpy(str_cmd,“show tables”);

no_res = 0;

}

if(selno==14){

strcpy(str_cmd,“use keting”);

if(mysql_query(conn, str_cmd))

{

printf(“《《《《《《《\n”);

exit(1);

}

strcpy(str_cmd,“select * from prop;”);

no_res = 0;

}

if(selno==15){

strcpy(str_cmd,“use keting”);

if(mysql_query(conn, str_cmd))

{

printf(“《《《《《《《\n”);

exit(1);

}

// sprintf(str_cmd,“insert into prop(devname,value,changetime) values (\‘%s\’,%i,NOW())”,argc[2],atoi(argc[3]));

sprintf(str_cmd,“update status set value=%d where devname=\‘%s\’”,atoi(argc[3]),argc[2]);

printf(“\n%s\n.”,str_cmd);

no_res = 1;

}

if(selno==16){

strcpy(str_cmd,“use keting”);

if(mysql_query(conn, str_cmd))

{

printf(“《《《《《《《\n”);

exit(1);

}

sprintf(str_cmd,“delete from prop where devname=‘my_dev’”);

printf(“\n%s\n.”,str_cmd);

no_res = 1;

}

if(selno==17){

strcpy(str_cmd,“use keting”);

if(mysql_query(conn, str_cmd))

{

printf(“《《《《《《《\n”);

exit(1);

}

////////////////////////////////////////query tv device

sprintf(str_cmd,“select value from status where devname=‘TV0001’”);

//printf(“\n%s\n.”,str_cmd);

no_res = 0;

if(mysql_query(conn, str_cmd))

{

printf(“《《《《《《《\n”);

exit(1);

}

res = mysql_use_result(conn);

if(no_res==0){

while((row = mysql_fetch_row(res)) != NULL)

{

// printf(“%s \n”, row[0]);

if(selno==17) printf(“%s”, row[0]);

else printf(“%s\t %s\t %s”, row[0],row[1],row[2]);

}

}

mysql_free_result(res);

////////////////////////////////////////query lamp device

sprintf(str_cmd,“select value from status where devname=‘LAMP01’”);

//printf(“\n%s\n.”,str_cmd);

no_res = 0;

if(mysql_query(conn, str_cmd))

{

printf(“《《《《《《《\n”);

exit(1);

}

res = mysql_use_result(conn);

if(no_res==0){

while((row = mysql_fetch_row(res)) != NULL)

{

// printf(“%s \n”, row[0]);

if(selno==17) printf(“%s”, row[0]);

else printf(“%s\t %s\t %s”, row[0],row[1],row[2]);

}

}

mysql_free_result(res);

sprintf(str_cmd,“select value from status where devname=‘CURN01’”);

//printf(“\n%s\n.”,str_cmd);

no_res = 0;

}

//printf(“finish! \n”);

if(mysql_query(conn, str_cmd))

{

printf(“《《《《《《《\n”);

exit(1);

}

res = mysql_use_result(conn);

if(no_res==0){

if(selno==14)

printf(“DEVICE VALUE TIMESTAMP《br》”);

while((row = mysql_fetch_row(res)) != NULL)

{

// printf(“%s”, row[0]);

if(selno==17) printf(“%s\t ”, row[0]);

else printf(“%s\t %s\t %s”, row[0],row[1],row[2]);

}

}

mysql_free_result(res);

mysql_close(conn);

/*

printf(“finish! \n”);

printf(“finish! 《br》”);

*/

return 0;

}

server.c服務(wù)器監(jiān)聽的完整程序:

#include 《stdio.h》

#include 《stdlib.h》

#include 《netdb.h》

#include 《netinet/in.h》

#include 《string.h》

void doprocessing (int sock);

int main( int argc, char *argv[] ) {

int sockfd, newsockfd, portno, clilen;

char buffer[256];

struct sockaddr_in serv_addr, cli_addr;

int n, pid;

/* First call to socket() function */

sockfd = socket(AF_INET, SOCK_STREAM, 0);

if (sockfd 《 0) {

perror(“ERROR opening socket”);

exit(1);

}

/* Initialize socket structure */

bzero((char *) &serv_addr, sizeof(serv_addr));

portno = 8266;//5001;

serv_addr.sin_family = AF_INET;

serv_addr.sin_addr.s_addr = INADDR_ANY;

serv_addr.sin_port = htons(portno);

/* Now bind the host address using bind() call.*/

if (bind(sockfd, (struct sockaddr *) &serv_addr, sizeof(serv_addr)) 《 0) {

perror(“ERROR on binding”);

exit(1);

}

/* Now start listening for the clients, here

* process will go in sleep mode and will wait

* for the incoming connection

*/

listen(sockfd,5);

clilen = sizeof(cli_addr);

while (1) {

newsockfd = accept(sockfd, (struct sockaddr *) &cli_addr, &clilen);

if (newsockfd 《 0) {

perror(“ERROR on accept”);

exit(1);

}

/* Create child process */

pid = fork();

if (pid 《 0) {

perror(“ERROR on fork”);

exit(1);

}

if (pid == 0) {

/* This is the client process */

close(sockfd);

doprocessing(newsockfd);

exit(0);

}

else {

close(newsockfd);

}

} /* end of while */

}

void doprocessing (int sock) {

int n;

char buffer[256];

char cmdstr[256];

char devname[10];

int devval=0;

bzero(buffer,256);

n = read(sock,buffer,255);

if (n 《 0) {

perror(“ERROR reading from socket”);

exit(1);

}

strncpy(devname,buffer,6);

devname[6]=0;

devval=buffer[6]-‘0’;

memset(cmdstr,0,256);

sprintf(cmdstr,“。/mysqlv 15 %s %i”,devname,devval);

printf(“%s.\n”,cmdstr);

system(cmdstr);

printf(“Here is the message: %s\n”,buffer);

n = write(sock,“I got your message”,18);

if (n 《 0) {

perror(“ERROR writing to socket”);

exit(1);

}

if(buffer[0]==‘z’) exit(1);

}

client.c客戶端模擬設(shè)備的完整程序:

#include 《stdio.h》

#include 《stdlib.h》

#include 《netdb.h》

#include 《netinet/in.h》

#include 《string.h》

int main(int argc, char *argv[]) {

int sockfd, portno, n;

struct sockaddr_in serv_addr;

struct hostent *server;

char buffer[256];

if (argc 《 3) {

fprintf(stderr,“usage %s hostname port devsw\n”, argv[0]);

exit(0);

}

portno = atoi(argv[2]);

/* Create a socket point */

sockfd = socket(AF_INET, SOCK_STREAM, 0);

if (sockfd 《 0) {

perror(“ERROR opening socket”);

exit(1);

}

server = gethostbyname(argv[1]);

if (server == NULL) {

fprintf(stderr,“ERROR, no such host\n”);

exit(0);

}

bzero((char *) &serv_addr, sizeof(serv_addr));

serv_addr.sin_family = AF_INET;

bcopy((char *)server-》h_addr, (char *)&serv_addr.sin_addr.s_addr, server-》h_length);

serv_addr.sin_port = htons(portno);

/* Now connect to the server */

if (connect(sockfd, (struct sockaddr*)&serv_addr, sizeof(serv_addr)) 《 0) {

perror(“ERROR connecting”);

exit(1);

}

/* Now ask for a message from the user, this message

* will be read by server

*/

printf(“Please enter the message: ”);

bzero(buffer,256);

strcpy(buffer, argv[3]);

//fgets(buffer,255,stdin);

/* Send message to the server */

n = write(sockfd, buffer, strlen(buffer));

if (n 《 0) {

perror(“ERROR writing to socket”);

exit(1);

}

/* Now read server response */

bzero(buffer,256);

n = read(sockfd, buffer, 255);

if (n 《 0) {

perror(“ERROR reading from socket”);

exit(1);

}

printf(“%s\n”,buffer);

return 0;

}

p.php腳本結(jié)果顯示的完整程序;

《html》

《head》

《title》小白的智能家居《/title》

《/head》

《body》

《?php

if(!empty($results)){

// echo $results;

}

?》

《center》小白的智能家居《/center》

《form method=“post” action=“”》

《select name=“arguments”》

《option value =“17” selected=“selected”》顯示客廳狀態(tài)《/option》

《/select》

《input type=“submit” name=“Submit” value=“運(yùn)行” /》

《/form》

《/body》

《/html》

《?php

if(!empty($_REQUEST[‘a(chǎn)rguments’])){

exec(‘。/mysqlv ’.$_REQUEST[‘a(chǎn)rguments’]。‘ LAMP03 1’,$result);

//print_r($result);

//echo $result[0][0]?!禸r》’;

//echo $result[0][1]?!禸r》’;

//echo $result[0][2];

if($result[0][0]==0) $s1 = ‘OFF’;

else $s1 = ‘ON’;

if($result[0][1]==0) $s2 = ‘OFF’;

else $s2 = ‘ON’;

if($result[0][2]==0) $s3 = ‘OFF’;

else $s3 = ‘ON’;

if($_REQUEST[‘a(chǎn)rguments’]==17) echo “《center》《table border=\”1\“》

《tr》

《th》電視《/th》

《th》燈《/th》

《th》窗簾《/th》

《/tr》

《tr》

《td》”.$s1.“《/td》

《td》”.$s2.“《/td》

《td》”.$s3.“《/td》

《/tr》

《/table》《/center》”;

}

?》

作者:云棲社區(qū) tech君

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 數(shù)據(jù)庫(kù)
    +關(guān)注

    關(guān)注

    7

    文章

    3826

    瀏覽量

    64509
  • 智能家居
    +關(guān)注

    關(guān)注

    1928

    文章

    9579

    瀏覽量

    185546
  • 阿里云
    +關(guān)注

    關(guān)注

    3

    文章

    967

    瀏覽量

    43117
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    數(shù)據(jù)庫(kù)是哪種數(shù)據(jù)庫(kù)類型?

    數(shù)據(jù)庫(kù)是一種部署在虛擬計(jì)算環(huán)境中的數(shù)據(jù)庫(kù),它融合了云計(jì)算的彈性和可擴(kuò)展性,為用戶提供高效、靈活的數(shù)據(jù)庫(kù)服務(wù)。云數(shù)據(jù)庫(kù)主要分為兩大類:關(guān)系型數(shù)據(jù)庫(kù)
    的頭像 發(fā)表于 01-07 10:22 ?82次閱讀

    基于語(yǔ)音識(shí)別技術(shù)的智能家居控制系統(tǒng)

    于語(yǔ)音識(shí)別的智能控制系統(tǒng)是智能家居的重要組成部分,相比傳統(tǒng)的遙控或觸控方式,基于語(yǔ)音識(shí)別控制智能家居系統(tǒng)通過人機(jī)語(yǔ)音交互的方式,實(shí)現(xiàn)對(duì)
    的頭像 發(fā)表于 11-19 17:25 ?590次閱讀
    基于語(yǔ)音識(shí)別技術(shù)的<b class='flag-5'>智能家居</b><b class='flag-5'>控制</b>系統(tǒng)

    PWM在智能家居系統(tǒng)中的應(yīng)用

    的數(shù)字輸出來控制模擬電路的技術(shù)。通過改變脈沖的寬度,PWM可以控制模擬信號(hào)的大小,從而實(shí)現(xiàn)對(duì)設(shè)備的精確控制。這種技術(shù)在電子領(lǐng)域有著廣泛的應(yīng)用
    的頭像 發(fā)表于 11-18 18:09 ?546次閱讀

    數(shù)據(jù)庫(kù)數(shù)據(jù)恢復(fù)—通過拼接數(shù)據(jù)庫(kù)碎片恢復(fù)SQLserver數(shù)據(jù)庫(kù)

    一個(gè)運(yùn)行在存儲(chǔ)上的SQLServer數(shù)據(jù)庫(kù),有1000多個(gè)文件,大小幾十TB。數(shù)據(jù)庫(kù)每10天生成一個(gè)NDF文件,每個(gè)NDF幾百GB大小。數(shù)據(jù)庫(kù)包含兩個(gè)LDF文件。 存儲(chǔ)損壞,數(shù)據(jù)庫(kù)
    的頭像 發(fā)表于 10-31 13:21 ?267次閱讀
    <b class='flag-5'>數(shù)據(jù)庫(kù)</b><b class='flag-5'>數(shù)據(jù)</b>恢復(fù)—通過拼接<b class='flag-5'>數(shù)據(jù)庫(kù)</b>碎片恢復(fù)SQLserver<b class='flag-5'>數(shù)據(jù)庫(kù)</b>

    數(shù)據(jù)庫(kù)數(shù)據(jù)恢復(fù)—SQL Server數(shù)據(jù)庫(kù)出現(xiàn)823錯(cuò)誤的數(shù)據(jù)恢復(fù)案例

    SQL Server數(shù)據(jù)庫(kù)故障: SQL Server附加數(shù)據(jù)庫(kù)出現(xiàn)錯(cuò)誤823,附加數(shù)據(jù)庫(kù)失敗。數(shù)據(jù)庫(kù)沒有備份,無(wú)法通過備份恢復(fù)數(shù)據(jù)庫(kù)。
    的頭像 發(fā)表于 09-20 11:46 ?373次閱讀
    <b class='flag-5'>數(shù)據(jù)庫(kù)</b><b class='flag-5'>數(shù)據(jù)</b>恢復(fù)—SQL Server<b class='flag-5'>數(shù)據(jù)庫(kù)</b>出現(xiàn)823錯(cuò)誤的<b class='flag-5'>數(shù)據(jù)</b>恢復(fù)案例

    智能家居控制系統(tǒng)如何設(shè)計(jì)

    智能家居控制系統(tǒng)設(shè)計(jì)是一個(gè)復(fù)雜而細(xì)致的過程,它涉及到多個(gè)方面的考慮,包括需求分析、設(shè)備選型、系統(tǒng)架構(gòu)設(shè)計(jì)、網(wǎng)絡(luò)安全、用戶交互以及后期維護(hù)等。以下是對(duì)智能家居控制系統(tǒng)設(shè)計(jì)的詳細(xì)闡述,旨
    的頭像 發(fā)表于 07-23 14:45 ?1604次閱讀

    智能家居控制方式有哪些

    智能家居控制方式多種多樣,這些方式不僅提升了家居生活的便捷性,還使得家居環(huán)境更加智能化和個(gè)性化。以下是
    的頭像 發(fā)表于 07-23 14:30 ?1453次閱讀

    阿里云與中興通訊達(dá)成開源數(shù)據(jù)庫(kù)合作

    近日,阿里云與中興通訊宣布達(dá)成開源數(shù)據(jù)庫(kù)領(lǐng)域的深度合作。中興通訊正式加入PolarDB開源社區(qū),并榮任首屆理事會(huì)成員單位,這一舉措標(biāo)志著兩大科技巨頭在數(shù)據(jù)庫(kù)領(lǐng)域的合作邁向新的高度。
    的頭像 發(fā)表于 05-17 10:47 ?587次閱讀

    阿里云與中興通訊達(dá)成開源數(shù)據(jù)庫(kù)合作,助推國(guó)產(chǎn)數(shù)據(jù)庫(kù)發(fā)展

    據(jù)悉,阿里云與中興通訊于5月16日公布了開源數(shù)據(jù)庫(kù)合作事宜。中興通訊正式宣布加入PolarDB開源社區(qū),并擔(dān)任首屆理事會(huì)成員單位。
    的頭像 發(fā)表于 05-16 16:34 ?482次閱讀

    ?通過Modbus讀寫數(shù)據(jù)庫(kù)中的數(shù)據(jù)

    用Modbus poll測(cè)試了,以下是智能網(wǎng)關(guān)的網(wǎng)絡(luò)參數(shù)和測(cè)試截圖: 通過智能網(wǎng)關(guān)的串口同樣可以讀寫數(shù)據(jù)庫(kù)。IGT-SER系列
    發(fā)表于 03-14 13:44

    智能家居控制方案功能與應(yīng)用

    智能家居時(shí)代的到來,讓我們的家居生活更加豐富多彩,不管是在客廳,書房還是廚房以及臥室,整個(gè)智能家居都能在智能手機(jī)、PAD、電腦進(jìn)行控制,實(shí)現(xiàn)
    的頭像 發(fā)表于 02-29 16:18 ?852次閱讀

    智能家居控制解決方案應(yīng)用

    隨著物聯(lián)網(wǎng)和人工智能技術(shù)的發(fā)展,各個(gè)具有特色智能終端通過系統(tǒng)集成,實(shí)現(xiàn)了互聯(lián)互通互控,智能家居逐漸開始走進(jìn)千家萬(wàn)戶。 智能家居控制系統(tǒng)解決方
    的頭像 發(fā)表于 02-19 17:46 ?702次閱讀

    數(shù)據(jù)庫(kù)數(shù)據(jù)恢復(fù)】Oracle數(shù)據(jù)庫(kù)ASM實(shí)例無(wú)法掛載的數(shù)據(jù)恢復(fù)案例

    oracle數(shù)據(jù)庫(kù)ASM磁盤組掉線,ASM實(shí)例不能掛載。數(shù)據(jù)庫(kù)管理員嘗試修復(fù)數(shù)據(jù)庫(kù),但是沒有成功。
    的頭像 發(fā)表于 02-01 17:39 ?537次閱讀
    【<b class='flag-5'>數(shù)據(jù)庫(kù)</b><b class='flag-5'>數(shù)據(jù)</b>恢復(fù)】Oracle<b class='flag-5'>數(shù)據(jù)庫(kù)</b>ASM實(shí)例無(wú)法掛載的<b class='flag-5'>數(shù)據(jù)</b>恢復(fù)案例

    Python智能家居系統(tǒng)代碼介紹

    與設(shè)備的控制、用戶界面設(shè)計(jì)以及擴(kuò)展性與可靠性等方面。 一、系統(tǒng)結(jié)構(gòu)與功能模塊 Python智能家居系統(tǒng)的整體結(jié)構(gòu)可以分為三個(gè)主要模塊:傳感器模塊、控制模塊和用戶界面模塊。 傳感器模塊:該模塊負(fù)責(zé)采集家庭環(huán)境中的各種傳感器
    的頭像 發(fā)表于 01-25 09:46 ?1395次閱讀

    IZYTRONIQ測(cè)試軟件介紹——管理測(cè)試設(shè)備數(shù)據(jù)庫(kù)

    一款完整的用于管理和記錄測(cè)試過程的數(shù)據(jù)庫(kù)軟件IZYTRONIQ
    的頭像 發(fā)表于 01-11 11:11 ?423次閱讀
    IZYTRONIQ<b class='flag-5'>測(cè)試</b>軟件介紹——管理<b class='flag-5'>測(cè)試</b>設(shè)備<b class='flag-5'>數(shù)據(jù)庫(kù)</b>