《倉儲物聯(lián)網(wǎng)系統(tǒng)》設(shè)計說明書_第1頁
《倉儲物聯(lián)網(wǎng)系統(tǒng)》設(shè)計說明書_第2頁
《倉儲物聯(lián)網(wǎng)系統(tǒng)》設(shè)計說明書_第3頁
《倉儲物聯(lián)網(wǎng)系統(tǒng)》設(shè)計說明書_第4頁
《倉儲物聯(lián)網(wǎng)系統(tǒng)》設(shè)計說明書_第5頁
已閱讀5頁,還剩102頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

物聯(lián)網(wǎng)倉庫管理系統(tǒng)

詳細設(shè)計說明書

,口g登錄

◎O00

1

專業(yè)始于專注度過叁藤入式學(xué)院《3G學(xué)院

本t口涌干;元用々?華311s見線下;?,<;-1T.?,?

第一章項目簡介.........................................3

第二章系統(tǒng)概述.........................................5

第三章前端數(shù)據(jù)中心(A8)總體設(shè)計..........................5

第一節(jié):系統(tǒng)框圖,線程間關(guān)系............................5

第二節(jié):主進程模塊.....................................7

第三節(jié):數(shù)據(jù)庫模塊....................................10

第四節(jié):數(shù)據(jù)接收模塊..................................19

第五節(jié):數(shù)據(jù)處理模塊..................................22

第六節(jié):處理客戶請求模塊(設(shè)備控制)....................33

第七節(jié):紅外(按鍵模擬)模塊............................38

第八節(jié):蜂鳴器模塊....................................39

第九節(jié):LED模塊......................................40

第十節(jié):攝像頭模塊....................................41

第H-一節(jié):SMS模塊.....................................42

第十二節(jié):共享內(nèi)存刷新模塊............................54

第十三節(jié):WIFI模塊....................................58

第十四節(jié):QT進程......................................59

第十五節(jié):CGI進程.....................................72

第十六節(jié):控制M0命令發(fā)送模塊.........................89

第四章數(shù)據(jù)采集端(M0)總體設(shè)計...........................91

第一章項目簡介

1.項目背景

隨著社會經(jīng)濟的迅速發(fā)展和科學(xué)技術(shù)的全面進步,計算機事業(yè)的飛速發(fā)展,

以計算機與通信技術(shù)為基礎(chǔ)的信息系統(tǒng)正處于蓬勃發(fā)展的時期。隨著經(jīng)濟文化水

平的顯著提高,人們對于生活質(zhì)量及工作環(huán)境的要求也越來越高。與此同時為了

管理大量的物品,倉庫也大量的出現(xiàn),倉庫的管理問題也就提上了日程。隨著倉

庫大量的增加,其管理難度也越來越大,如何優(yōu)化倉庫的日常管理也就成為了

一個大眾化的課題。

傳統(tǒng)的倉庫管理,一般依賴于一個非自動化的、以紙張文件為基礎(chǔ)的系統(tǒng)來

記錄、追蹤進出的貨物,完全由人工實施倉庫內(nèi)部的管理,因此倉庫管理的效率

極其低下。對此,我們利用基于ZIGBEE無線射頻技術(shù)的倉庫智能管理系統(tǒng),

該系統(tǒng)能夠增強庫房作業(yè)的準確性和快捷性、減少整個倉庫物資出入庫中由于管

理不到位造成的非法出入庫、誤置、偷竊和庫存、出貨錯誤等損失,并最大限度

地減少儲存成本、保障倉庫物資的安全。

2.需求分析

傳統(tǒng)的倉庫管理,一般依賴于一個非自動化的、以紙張文件為基礎(chǔ)的系統(tǒng)來

記錄、追蹤進出的貨物,完全由人工實施倉庫內(nèi)部的管理,因此倉庫管理的效率

極其低下,所能管理的倉庫規(guī)模也很小。

隨著計算機的應(yīng)用普及,目前大多數(shù)企業(yè)的倉庫管理數(shù)據(jù)資料已開始采用計

算機數(shù)據(jù)系統(tǒng)管理,但數(shù)據(jù)還是采用先紙張記錄、再手工輸入計算機的方式進行

采集和統(tǒng)計整理。這不僅造成大量的人力資源浪費,而且由于人為的因素,數(shù)據(jù)

錄入速度慢、準確率低。

隨著倉庫智能化的不斷發(fā)展,倉庫管理的物資種類,數(shù)量在不斷增加、出入

庫頻率劇增,倉庫管理作業(yè)也已十分復(fù)雜和多樣化,傳統(tǒng)的人工倉庫作業(yè)模式和

數(shù)據(jù)采集方式已難以滿足倉庫管理的快速、準確要求,嚴重影響了倉庫的管理。

目前ZIGBEE技術(shù)正在為倉庫管理帶來一場巨大的變革,以識別距離遠,

快速,不易損壞,容量大等條碼無法比擬的優(yōu)勢,簡化繁雜的工作流程,有效改

善供應(yīng)鏈的效率和透明度。基于物聯(lián)網(wǎng)的智能戰(zhàn)備倉庫管理系統(tǒng)是在現(xiàn)有倉庫管

理和車輛管理中引入ZIGBEE技術(shù),對倉庫到貨檢驗、入庫、出庫、調(diào)撥、移

庫移位、庫存盤點等各個作業(yè)環(huán)節(jié)的數(shù)據(jù)進行自動化的數(shù)據(jù)采集,保證倉庫管理

各個環(huán)節(jié)數(shù)據(jù)輸入的速度和準確性,確保管理人員及時準確地掌握庫存的真實數(shù)

據(jù),合理保持和控制倉庫庫存。通過科學(xué)的編碼,還可方便地對物品的批次、保

質(zhì)期等進行管理。利用系統(tǒng)的庫位管理功能,更可以及時掌握所有庫存物資當前

所在位置,有利于提高倉庫管理的工作效率。

3.術(shù)語定義

Linux:Linux是一種自由和開放源碼的類Unix操作系統(tǒng)。目前存在著許多

不同的Linux,但它們都使用了Linux內(nèi)核。Linux口J安裝在各種計算機硬件設(shè)備

中,從手機、平板電腦、路由器和視頻游戲控制臺,到臺式計算機、大型機和超

級計算機。

RFID:射頻識別即RFID(RadioFrequencyIDentification)技術(shù),又稱

電子標簽、無線射頻識別,是一種通信技術(shù),可通過無線電訊號識別特定目標并

讀寫相關(guān)數(shù)據(jù),而無需識別系統(tǒng)與特定目標之間建立機械或光學(xué)接觸。

ZIGBEE:Zigbee是基于IEEE802.15.4標準的低功耗個域網(wǎng)協(xié)議。根據(jù)這個

協(xié)議規(guī)定的技術(shù)是一種短距離、低功耗的無線通信技術(shù)。這一名稱來源于蜜蜂的

八字舞,由于蜜蜂(bee)是靠飛翔和“嗡嗡”(zig)地抖動翅膀的“舞蹈”來與同

伴傳遞花粉所在方位信息,也就是說蜜蜂依靠這樣的方式構(gòu)成了群體中的通信網(wǎng)

絡(luò)。其特點是近距離、低復(fù)雜度、自組織、低功耗、低數(shù)據(jù)速率、低成本。主要

適合用于自動控制和遠程控制領(lǐng)域,可以嵌入各種設(shè)備。簡而言之,ZigBee就

是一種便宜的,低功耗的近距離無線組網(wǎng)通訊技術(shù)。

A8:ARMCortex-A8處理器是第一款基于ARMv7架構(gòu)的應(yīng)用處理器,并且是

有史以來ARM開發(fā)的性能最高、最具功率效率的處理器。

MO:Cortex-MO處理器,是市場上現(xiàn)有的最小、能耗最低、最節(jié)能的ARM處

理器。

WIFI:Wi-Fi是一種可以將個人電腦、手持設(shè)備(如PDA、手機)等終端以

無線方式互相連接的技術(shù)。Wi-Fi是一個無線網(wǎng)路通信技術(shù)的品牌,由Wi-Fi聯(lián)

盟(Wi-FiAlliance)所持有。目的是改善基于IEEE802.11標準的無線網(wǎng)路產(chǎn)品

之間的互通性。

第二章系統(tǒng)概述

本系統(tǒng)是基于PC,A8及M0等設(shè)備,依托在各項互聯(lián)網(wǎng),物聯(lián)網(wǎng),傳感器等

技術(shù)的基礎(chǔ)上編寫,以實現(xiàn)食品物聯(lián)網(wǎng)倉儲系統(tǒng),使用戶更方便的管理倉庫內(nèi)的

所有信息及其特殊情況。

本系統(tǒng)主要分為三大模塊:核心服務(wù)器端(PC)、前端數(shù)據(jù)中心(A8)和遠程監(jiān)控終

端(MO)o

第三章前端數(shù)據(jù)中心(A8)總體設(shè)計

第一節(jié):系統(tǒng)框架,線程間關(guān)系

1.系統(tǒng)框架:

a.通過M0進行實時采集環(huán)境參數(shù),例如溫度、濕度、光感數(shù)據(jù),進行物

品刷卡;

b.再通過ZigBee把采集到的環(huán)境參數(shù)或物品信息發(fā)送給A8;

c.由A8的M0線程負責(zé)接收環(huán)境參數(shù)或物品信息,激活數(shù)據(jù)庫線程對數(shù)

據(jù)庫進行相應(yīng)的處理,然后如果是環(huán)境參數(shù)則對環(huán)境參數(shù)進行判斷處理進行

報警。

&用攝像頭采集圖片,存儲到A8上。

e.構(gòu)建嵌入式web服務(wù)器,使用戶通過網(wǎng)絡(luò)利用pc機進行監(jiān)控。

f.在web頁面上設(shè)置控制按鈕,監(jiān)控設(shè)備識別用戶指令并進行相應(yīng)動作

g.A8通過GPRS短信息功能向用戶報警。

2.線程間關(guān)系:

pthread_client_request():處理消息隊列里請求的線程.

pthread_refresh():更新共享內(nèi)存里的實時數(shù)據(jù).

pthread_sqlite():數(shù)據(jù)庫線程.

plhread_transfer():接收M0數(shù)據(jù)線程.

pthread_analysis():MO數(shù)據(jù)分析線程.

pthread_uart_cmd():MO控制命令發(fā)送線程.

pthread_sms():短信.模塊控缶ij線程.

pthread_buzzer():A8蜂鳴器捽制線程.

pthread_infrared():紅外(按鍵模擬)監(jiān)測線程

plhread_led():A8LED模塊線程.

pthread_camera():攝像頭模塊控制線程.

第二節(jié):數(shù)據(jù)描述

1.結(jié)構(gòu)體描述

結(jié)構(gòu)體名成員類型成員名功能描述

unsignedchargoods_type物品類型

storage_goods_info

unsignedintgoods_count物品數(shù)量

storage_status倉庫開關(guān)狀態(tài)

led_status倉庫LED狀態(tài)

unsignedcharbuzzer_status倉庫Buzzer狀態(tài)

fan_status倉庫風(fēng)扇狀態(tài)

seg_status倉庫數(shù)碼管狀態(tài)

X

signedchary倉庫采集端三軸狀態(tài)

z

charsamplingTime[20]采集數(shù)據(jù)的時間

temperature倉庫當前溫度

temperatureMAX倉庫溫度上限

storagejnfo

temperatureMIN倉庫溫度下限

humidity倉庫當前濕度

humidityMAX倉庫濕度上限

humidityMIN倉庫濕度下限

float

illumination倉庫當前光照

illuminationMAX倉庫光照上限

illuminationMIN倉庫光照下限

battery倉庫采集端電池電壓

adc倉庫ADC采集電壓

adcMIN倉庫電池電壓最小值

storage_goods^infogoods_info[GOODS_NUM]采集貨物信息

storage_no[STORAGE_NU

envjnfo_clien_addrstoragejnfo所以倉庫實時信息

M]

inttable_select_mask

env_operation_mask

storage_no

table_operation_mask

goods^operatiori-mask

type消息隊列里的消息類型

long

msgmsgtype區(qū)別消息的類型

unsignedchartext[QUEU^MSG_LEN]消息正文長度

2、全局變量描述

類型變量名

cond_sqlite數(shù)據(jù)庫線程被喚醒條件變量

cond_analysis數(shù)據(jù)分析線程被喚醒條件變量

cond_uart_cmdM0控制命令發(fā)送線程被喚醒條件變量

cond_client_request處理消息隊列里請求的線程被喚醒條件變量

condjnfrared紅外(按鍵模擬)監(jiān)測線程被喚醒條件變量

pthread_cond_t

cond_buzzerA8蜂鳴器控制線程被喚醒條件變量

condjedA8LED模塊線程被喚醒條件變量

cond_camera攝像頭模塊控制線程被喚醒條件變量

cond_sms短信模塊控制線程被喚醒條件變量

cond_refresh更新共享內(nèi)存里的實時數(shù)據(jù)被喚醒條件變量

mutex_slinklist數(shù)據(jù)庫緩存互斥鎖

mutex_sqlite數(shù)據(jù)庫線程互斥鎖

mutex_analysis數(shù)據(jù)分析線程互斥鎖

mutex_uart_cmdM0控制命令發(fā)送線程互斥鎖

mutex_client_request處理消息隊列里請求的線程互斥鎖

pthread_mutex_tmutexjnfrared紅外(按鍵模擬)監(jiān)測線程互斥鎖

mutex_buzzerA8蜂鳴器控制線程互斥鎖

mutexjedA8LED模塊線程互斥鎖

mutex_camera攝像頭模塊控制線程互斥鎖

mutex_sms短信模塊控制線程互斥鎖

mutex_refresh更新共享內(nèi)存里的實時數(shù)據(jù)互斥鎖

mutex_refresh_updata

mutex_global全局變量保護互斥鎖

mutexjinklist接收數(shù)據(jù)緩存互斥鎖

storage_RT[STORAGE_

storagejnfo各倉庫實時信息

NUM]

dev_sms_maskA8短信模塊操作掩碼

devjnfrared_maskA8按鍵模塊操作掩碼

dev_buzzer_maskA8蜂鳴器模塊操作掩碼

unsignedchar

dev_led_maskA8LED模塊操作掩碼

dev_camera_maskA8攝像頭模塊操作掩碼

dev_uart_maskA8串口發(fā)送命令掩碼

dev_infrared_fdA8按鍵模塊設(shè)備節(jié)點

dev_buzzer_fdA8蜂鳴器模塊設(shè)備節(jié)點

dev_led_fdA8LED模塊設(shè)備節(jié)點

dev_camerajdA8攝像頭模塊設(shè)備節(jié)點

dev_sms_fdA8短信模塊設(shè)備節(jié)點

intdev_uart_fdA8U轉(zhuǎn)串設(shè)備節(jié)點

msgid消息隊列ID

shmid共享內(nèi)存ID

semid信號燈集ID

storageNum

goodsKinds

env_info_clien_addrenvjnfo_clien_addr_s

all_info_RT各倉庫實時信息

第三節(jié):數(shù)據(jù)庫模塊

1、sqlite3介紹

(1)sqlite3基礎(chǔ)介紹

sqlite3提供的是一些C函數(shù)接口,你可以用這些函數(shù)操作數(shù)據(jù)庫。通過

使用這些接口,傳遞一些標準sql語句(以char*類型)給sqlite函數(shù),

sqlite就會為你操作數(shù)據(jù)庫。

sqlite3跟MS的access一樣是文件型數(shù)據(jù)庫。就是說,一個數(shù)據(jù)庫就是

一個文件,此數(shù)據(jù)庫里可以建立很多的表,可以建立索引、觸發(fā)器等等,但是,

它實際上得到的就是一個文件。備份這個文件就備份了整個數(shù)據(jù)庫。

sqlite3不需要任何數(shù)據(jù)庫引擎,這意味著如果你需要sqlite來保存一些

用戶數(shù)據(jù),甚至都不需要安裝數(shù)據(jù)庫。

(2)介紹數(shù)據(jù)庫基本操作——基本流程

?關(guān)鍵數(shù)據(jù)結(jié)構(gòu)

sqlite3里最常用到的是sqlite3*類型。從數(shù)據(jù)庫打開開始,sqlite3就

要為這個類型準備好內(nèi)存,直到數(shù)據(jù)庫關(guān)閉,整個過程都需要用到這個類型。當

數(shù)據(jù)庫打開時開始,這個類型的變量就代表了你要操作的數(shù)據(jù)庫。下面再詳細介

紹。

?打開數(shù)據(jù)庫

intsqlite3_open(文件名,sqlite3**);

作用:用這個函數(shù)開始數(shù)據(jù)庫操作。

文件名:數(shù)據(jù)庫文件名,比如:c:\\warehouse.db。

注意:文件名不需要一定存在,如果此文件不存在,sqlite會自動建立它。

如果它存在,就嘗試把它當數(shù)據(jù)庫文件來打開。

sqlite3**:參數(shù)即前面提到的關(guān)鍵數(shù)據(jù)結(jié)構(gòu)。這個結(jié)構(gòu)底層細節(jié)如何,

你不要關(guān)它。

函數(shù)返回值:表示操作是否正確,如果是SQLITE_OK則表示操作正常。反

之則不正常。

?關(guān)閉數(shù)據(jù)庫

intsqlite3_close(sqlite3*);

作用:用這個函數(shù)關(guān)閉數(shù)據(jù)庫操作。

?執(zhí)行sql語句

intsqlite3_exec(sqlite3*,constchar*sql,sqlite3_calIback,

void*,char**errmsg);

這就是執(zhí)行一條sql語句的函數(shù)。

第1個參數(shù):open函數(shù)得到的指針。是關(guān)鍵數(shù)據(jù)結(jié)構(gòu)。

第2個參數(shù):constchar*sql是條sql語句,以\0結(jié)尾。

第3個參數(shù):sqlite3_callback是回調(diào)函數(shù),當這條語句執(zhí)行之后,

sqlite3會去調(diào)用你提供的這個函數(shù)。

第4個參數(shù):void*是你所提供的指針,你可以傳遞任何一個指針參

數(shù)到這里,這個參數(shù)最終會傳到回調(diào)函數(shù)里面,如果不需要傳遞指針給回調(diào)

函數(shù),可以填NULLo第5個參數(shù):char**errmsg是錯誤信息。注意

是指針的指針。

2、數(shù)據(jù)庫模塊流程圖及結(jié)構(gòu)圖

(1)sqlite線程流程圖

主程序開始運行之后,各任務(wù)線程開始運行,其中就包括的了數(shù)據(jù)庫的

pthread_sqlite0pthread__sqlite線程開始創(chuàng)建一個用于存儲對數(shù)據(jù)庫操作的

鏈表,鏈表創(chuàng)建之后進入while(1)循環(huán)。循環(huán)中,用pthread_cond_wait函

數(shù)語句進行睡眠等待,等待其他線程的喚醒函數(shù)pthread_cond_signal發(fā)來的信

號,喚醒之后再次進入一個while(1)的循環(huán)語句,在這個循環(huán)中,我們進行

對鏈表頭的判空工作。如果鏈表頭不為空,則讀取第一個節(jié)點的內(nèi)容,把借點中

的內(nèi)容解析出來,把解析出來的內(nèi)容作為參數(shù)傳到sqlite_task函數(shù)中,完成相

應(yīng)的數(shù)據(jù)庫操作并釋放節(jié)點空間,如此循環(huán);如果鏈表頭為空,則直接跳出while

(1)循環(huán),再回到外部循環(huán)的plhread_cond_wait函數(shù)進行睡眠等待,等待下

一次被其他線程喚醒。

Sqlite線程開始

創(chuàng)建臟衣頭

while(1)

。點為空釜件變量破唉型

斯槌衣頭

否為空

。點不為空

取出旋表的

listHead->nexcsq1ite_task()見

節(jié)點估息sqlista9k能構(gòu)圖

調(diào)用sqlitjtask()

對數(shù)據(jù)向i行操作

while1IJ

釋校日點空何

(2)sqlite_task()結(jié)構(gòu)圖

在上面的pthread_sqlite線程流程圖中,提到了sqlite_task函數(shù)。它用

來完成讀取節(jié)點信息之后的數(shù)據(jù)庫操作。對數(shù)據(jù)庫的操作主要是讀取

sqlite_operation結(jié)構(gòu)中成員變量來完成的。通過sqlite_operation中的

table_select_niask來判斷是對數(shù)據(jù)庫中的哪個表進行操作,然后再分別通過

env_operation_mask>tabie_operation_mask和goods_operationmask來判斷

對選擇的表進行什么具體的操作,例如,更新、查看和插入等等。

k-4-:

sqlitc_task()

X

(able_sclect_mask-0tableselectmask-1(able_select_mask-2

表示選擇指乍sv表:衣示操作collectenv表表示操作goods表

??:?i:??:?

--T------1-------

tableoperation_mask_0table_operation_mask_0

env_operation_mask-0

表示向表插衣示操作去添加::

表示向env去標入數(shù)據(jù)collectenvgoods

入數(shù)糜貨物數(shù)量

tablc_sclcct_mask=I

envoperationmask_1表示通過而問從tableopcrationmask_1

&示從env表中取出衣示操作goods表減少::

collcct_cnv表

數(shù)據(jù)中取由數(shù)據(jù)貨物數(shù)量

—―----------紜----------

tableselectmask-2table_opcration_mask_2

表示從collect_env&表示操作goods我獲得

中取出實時密據(jù)制定倉庫某種貨物(;息

r-++?《

table_operation_mask_3

表小操作goods表獲得

+--1?制定倉庫所有貨物3息

3、數(shù)據(jù)庫模塊使用的相關(guān)結(jié)構(gòu)體

(1)結(jié)構(gòu)體一:所有倉庫的信息

structenv_info_c1ien_addr{

structstorageinfostorageno[STORAGENUM];

);

作用:用來保存所有倉庫的信息

storage_no[STORAGE_NUM]結(jié)構(gòu)體數(shù)組,分別代表不同的存庫信息。

(2)結(jié)構(gòu)體二:某個倉庫的所有信息

structstorage_info{

unsignedcharstorage_status;//0:open1:close

unsignedcharled_status;

unsignedcharbuzzer_status;

unsignedcharfan_status;

unsignedcharseg_status;

signedcharx;

signedchary;

signedcharz;

charsamplingTime[20];

floattemperature;

floattemperatureMIN;

floattemperatureMAX;

floathumidity;

floathumidityMIN;

floathumidityMAX;

floatillumination;

floatilluminationMIN;

floatilluminationMAX;

floatbattery;

floatadc;

floatadcMIN;

structstorage_goods_infogoods_info[GOODS_NUM];

);

作用:用來保存某一個倉庫的所有信息。

storagestatus

led_status上燈的開關(guān)狀態(tài)

buzzer_status蜂鳴器的開關(guān)狀態(tài)

fan_status風(fēng)扇的開關(guān)狀態(tài)

seg_status數(shù)碼管的狀態(tài)

X;三軸中X的數(shù)值

y;三軸中y的數(shù)值

z;三軸中z的數(shù)值

samplingTime[20];獲取倉庫環(huán)境信息的時間

temperature;倉庫中溫度的大小

temperatureMIN;倉庫中溫度的預(yù)警最小值

temperatureMAX;倉庫中溫度的預(yù)警最大值

humidity;倉庫中濕度的大小

humidityMIN;倉庫中濕度的預(yù)警最小值

humidityMAX;倉庫中濕度的預(yù)警最大值

illumination;倉庫中光照強度的大小

illuminationMIN;倉庫中光照強度的預(yù)警最小值

illuminationMAX;倉庫中光照強度的預(yù)警最大值

battery;剩余電池的百分比

adc;模數(shù)轉(zhuǎn)換的數(shù)值

adcMIN;模數(shù)轉(zhuǎn)換的預(yù)警最小值

goods_info[GOODS_NUM];結(jié)構(gòu)體數(shù)組,分別代表不同的貨物信息。

⑶結(jié)構(gòu)體三:某種貨物的信息

structstorage_goods_info{

unsignedchargoods_type;

unsignedintgoods_count;

);

作用:用來保存某種貨物的信息

goods_type貨物編號

goods_count貨物數(shù)量

⑷結(jié)構(gòu)體四:

structsqlite_operation{

inttabie_se1ect_mask;

intenv_operationmask;

inttabie_operation_mask;

intgoods_operationmask;

);

作用:用來保存數(shù)據(jù)庫操作信息

tabie_select_mask;標記對數(shù)據(jù)庫中的哪個表進行操作

env_operationmask;標記對數(shù)據(jù)庫中的env表進行什么操作

tableoperationmask;標記對數(shù)據(jù)庫中的collectenv表進行什么操作

goods_operationmask;標記對數(shù)據(jù)庫中的goods表進行什么操作

4、Sqlite3數(shù)據(jù)庫中數(shù)據(jù)的存儲形式

表一:倉庫環(huán)境表(environment)

temperatureMax溫度最大值當環(huán)境溫度大于最大值,需要發(fā)送報警信號

temperatureMin溫度最小值當環(huán)境溫度小于最小值,需要發(fā)送報警信號

humidityMax濕度最大值當環(huán)境濕度大于最大值,需要發(fā)送報警信號

humidityMin濕度最小值當環(huán)境濕度小于最小值,需要發(fā)送報警信號

illuminationMax光照強度最大值當環(huán)境光照強度大于最大值,需要發(fā)送報警信號

illuminationMin光照強度最小值當環(huán)境光照強度小于最小值,需要發(fā)送報警信號

telephoneNum手機號報警之后發(fā)短信給管理員

mode

Ifnocice

Interval

updatePeriod

username姓名倉庫管理者姓名

password密碼進入倉庫時的,需要密碼驗證

表二:倉庫環(huán)境溫度表(collect_env)

temperatureVal環(huán)境溫度值這個一個實時數(shù)據(jù),1秒采集一次

humidityVal環(huán)境濕度值這個一個實時數(shù)據(jù),1秒采集一次

illuminationVal環(huán)境光照強度值這個一個實時數(shù)據(jù),1秒采集一次

采集環(huán)境溫度的時候,保存采集時間,方便

envTime采集環(huán)境溫度的時間

管理者進行數(shù)據(jù)分析

表三:倉庫貨物表(goods)

goodsld貨物編號貨物編號,是貨物的唯一標識

goodsCount貨物數(shù)量倉庫中所有貨物的數(shù)量

goodsTime貨物入庫時間記錄貨物入庫的時間

5^pthread_sqlite.h文件詳解

(1)互斥鎖及條件變量部分

?externpthread_cond_tcond_sqlite;

解析:數(shù)據(jù)庫線程部分的條件變量,pthread_cond_wait之后,當其他線程使用相同

的條件變量才能喚醒數(shù)據(jù)庫線程。

程序?qū)嵗?/p>

pthreadmutexlock(&mutex_sqlite);

^)threadcondwait(Scondsqlite,&mutex_sqlite);

pthreadmutexunlock(&mutex_sqlite);

?externpthread_mutex_tmutex_sqlite;

解析:數(shù)據(jù)庫線程鎖,這個線程鎖是和條件變量一起配套使用的。這兩者在條件變量的

使用中缺一不可。

程序?qū)嵗?/p>

pthreadmutexlock(&mutex_sqlite);

^threadcondwait(Scondsqlite,&mutex_sqlite);

pthreadmutexunlock(&mutexsqlite);

?externpthrea_mutex_tmutex_slinklist;

解析:數(shù)據(jù)庫線程鎖,這個線程鎖是用來保護鏈表資源的。防止鏈表在同一時刻被多個

對象訪問。

程序?qū)嵗?/p>

while(1)

{|

pthreadmutexlock(Smutexslinklist);

if((but=sqliteGetLinknode(slinkHead))=NULL)

(一一

pthreadmutexunlock(&mutexslinklist);

break;

)

pthreadmutexunlock(&mutexslinklist);

sqlitetask(buf->datalink,buf->data,buf->storageNum,buf->goodsKinds);

free(buf);

buf=NULL;

)

(2)結(jié)構(gòu)體部分

?externstructenvinfoclienaddrenvinfoclienaddr_s;

解析:全局結(jié)構(gòu)體變量,pthread_analysis線程對數(shù)據(jù)庫進行查詢操作之后把查詢的

結(jié)果保存到該結(jié)構(gòu)體中,這樣pthread_analySis線程就可以讀取到數(shù)據(jù)庫中的數(shù)據(jù)了。

程序?qū)嵗?/p>

envinfoclien_addrs.storage_no[storage_num_t].temperature=callback_val[l];

envinfoclienaddrs.storageno[storagenumt].humidity=callbackval[2];

envinfoclien_addr_s.storage_no[storage_num_t].illumination=call.back_val[3];

strcpy(envinfoclienaddr_s.storageno[storagenumt].samplingTime,callbackstr);

?externstructenv_info_c1ien_addrall_info_RT;

解析:全局結(jié)構(gòu)體變量,plhread_analysis線程對數(shù)據(jù)庫進行查詢操作之后把查詢的

結(jié)果保存到該結(jié)構(gòu)體中,這樣pthread_analySis線程就可以讀取到數(shù)據(jù)庫中的數(shù)據(jù)了。

程序?qū)嵗?/p>

allinfo_RT.storageno[storagenumt].temperature=callback_val[l];

allinfo_RT.storage_no[storagenumt].humidity=callbackval[2];

allinfoRT.storageno[storagenumt].illumination=callbackval[3];

strcpy(allinfo_RT.storageno[storagenumt].sampling!ime,caUbackstr);

(3)函數(shù)接口部分(具體的函數(shù)參數(shù)信息見文檔《數(shù)據(jù)庫接口函數(shù)詳解》)

?intCreate_table(void);

解析:用于在數(shù)據(jù)庫中創(chuàng)建空表。在main函數(shù)開始執(zhí)行時,就要調(diào)用該函數(shù)創(chuàng)建好數(shù)

據(jù)庫表,以供后面的線程使用。

?intInit_table_env(void);

解析?:用于初始化env表的數(shù)據(jù)。在main函數(shù)開始執(zhí)行時,創(chuàng)建好數(shù)據(jù)庫表之后就對

調(diào)用該函數(shù)初始化env表。

?intupdateEnv(structenv_info_clien_addrenv_info_clien_addr_t,

intstorageNum_t);

解析:用于更新env表中的信息。

?intgetEnv(structenv_info_clien_addr*env_info_c1ien_addr_t,

intstorageNumt);

解析:用于得到env表中的信息。

?intinsertedlect_env(structenv_info_c1ien_addrenv_info_clien_addr_t,

intstorage_num);

解析:用于向collect_env中插入新的倉庫環(huán)境信息。

?intgetCollect_env(char[],intstorage_num_t);

解析:用于按指定時間獲得collect_env表中的倉庫環(huán)境信息。

?intgetCollectCurrentenv(intstoragenumt);

解析:用于獲得最新的collect_env表中的倉庫環(huán)境信息。

?intinsertGoods(structenv_info_c1ienaddrenv_info_c1ien_addr_t,

intstorageNumt,intgoodsKindst);

解析:用于向goods表總插入新的貨物信息。

?intdeletGoods(intstorageNum_t,intgoodsKinds_t);

解析:用于從goods表中刪除指定的貨物信息。

?intgetGoods(intstorageNum_t,intgoods_kinds_t);

解析:用于獲得goods表中指定的貨物信息。

?intviewGoods(intstorageNum_t,intgoodsKinds_t);

解析:用于查看goods表中是否有指定的貨物信息。

?intaddGoods(structenv_info_c1ien_addrenv_info_c1ien_addr_t,

intstorageNum_t,intgoodsKinds_t);

解析:用于貨物入倉時的goods表的更新。

?intreduceGoods(structenv_info_c1ien_addrenv_info_c1ien_addr_t,

intstorageNum_t,intgoodsKinds_t);

解析:用于貨物出倉時的goods表的更新。

?voidsqlite_task(structenv_info_clienaddrenv_info_c1ien_addr_t,

structsqlite_operationsq1ite_operation_t,

intstorageNum_t,intgoodsKinds_t);

解析?:用于專門執(zhí)行對sqlite3數(shù)據(jù)庫操作的函數(shù)接口,通過讀取函數(shù)參數(shù)來實現(xiàn)對

sqlite3數(shù)據(jù)庫中的具體表進行增、刪、改、查的操作。

第四節(jié):數(shù)據(jù)接收模塊

1.功能描述

接收M0通過Zigbee傳輸上來的消息,經(jīng)過接收端的Zigbee,再通過U轉(zhuǎn)串,此線程負責(zé)從串

□讀取消息,并交給數(shù)據(jù)處理模塊,并繼續(xù)接收消息

2.數(shù)據(jù)描述

類型名稱功能

intdev_uart_fd串口文件描述符

linklist1inkHead數(shù)據(jù)緩存鏈表頭

pthread_cond_tcond_analysis數(shù)據(jù)處理模塊喚醒條件變量

pthread_mutex_tmutex_linklist數(shù)據(jù)緩存保護互斥鎖

3.流程圖

睡眠

激活

4.詳細說明

本線程被創(chuàng)建后,先打開串口叮1;580這…設(shè)備節(jié)點,得到文件描述符

dev_uart_fd,通過調(diào)用serial_init(dev_uart_fd)來進行串口的初始化;之后線

程通過read串口進行睡眠,一旦有數(shù)據(jù),就從串口里讀取,并判斷包頭是否正確,

若正確則讀取數(shù)據(jù),加入數(shù)據(jù)鏈表緩存.

^include"linklist,h”

#include〃data_global.h〃

^defineLEN_ENV20

#defineLEN_RFTD4

externintdevuartfd;

externlinklist1inkllead;

externpthread_cond_tcond_analysis;

externpthread_mutex_tmutex_linklist;

voidserialinit(intfd)

(

structtermiosoptions;

tcgetattr(fd,&options);〃讀取終端參數(shù)

options,ccflag|=(CLOCALCREAD);〃忽略調(diào)制調(diào)解器線路狀態(tài),使用接收器

options.c_cflag&二?CSIZE;〃清目前字符長度

options.c_cflag&='CRTSCTS;〃不實用RTS/CTS流控制

options.c_cflagI=CS8;〃字符長度設(shè)置為8

options,ccflag&="CSTOPB;〃設(shè)置1個標志位

options.c_iflagI=IGNPAR;〃允許輸入奇偶校驗

options.c_iflag&="(ICRNL|IXON);〃回車不轉(zhuǎn)為換行,不允許輸入時對

XON/XOFF流進行控制

options.c_oflag=0;

options.c_lflag=0;

cfsetispeed(ftoptions,Bl15200);〃設(shè)置波特率為115200

cfsetospeed(&options,B115200);

tcsetattr(fd,TCSANOW,feoptions);〃設(shè)置終端參數(shù)

)

void*pthread_transfer(void*arg)

(

inti=0,len;

charflag=0,check;

1inkdatatypebuf;

linkHead=CreateEmptyLinklist();

if((dev_uart_fd=open(DEV_ZIGBEE,O_RDWR))<0)

perror("openttyUSBO");

exit(-1);

)

serial_init(dev_uart_fd);

printf(^pthreadtransferisok\n〃);

while(1)

(

memset(&buf,0,sizeof(linkdatatype));

read(dev_uart_fd,&check,1);

if(check=='s')

(

check=0;

read(dev_uart_fd,&check,1);

if(check=='t')

(

check=0;

read(dev_uart_fd,&check,1);

if(check==')

(

check=0;

read(dev_uart_fd,&check,1);

if(check=='e')

(

buf.msgtype='e';

usleep(l);

if((len=read(dev_uart_fd,buf.text,LEN_ENV))!=LEN_ENV)

(

for(i=len;i<LEN_ENV;i++)

(

read(dev_uart_fd,buf.text+i,1);

)

)

flag=1;

)

elseif(check='r')

(

buf.msg_type='r';

usleep(1);

if((len=read(dev_uart_fd,buf.text,LEN_RFID))!二

LEN_RFID)

for(i=len;i<LEN_RFID;i++)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論