Qt物聯(lián)網(wǎng)管理平臺之實現(xiàn)告警短信轉(zhuǎn)發(fā)_第1頁
Qt物聯(lián)網(wǎng)管理平臺之實現(xiàn)告警短信轉(zhuǎn)發(fā)_第2頁
Qt物聯(lián)網(wǎng)管理平臺之實現(xiàn)告警短信轉(zhuǎn)發(fā)_第3頁
Qt物聯(lián)網(wǎng)管理平臺之實現(xiàn)告警短信轉(zhuǎn)發(fā)_第4頁
Qt物聯(lián)網(wǎng)管理平臺之實現(xiàn)告警短信轉(zhuǎn)發(fā)_第5頁
已閱讀5頁,還剩5頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第Qt物聯(lián)網(wǎng)管理平臺之實現(xiàn)告警短信轉(zhuǎn)發(fā)目錄一、前言二、功能特點四、效果圖五、相關(guān)代碼

一、前言

系統(tǒng)在運行過程中,會實時采集設(shè)備的數(shù)據(jù),當(dāng)采集到的數(shù)據(jù)發(fā)生報警后,可以將報警信息以短信的形式發(fā)送給指定的管理員(可以是多個),這樣管理員就算不在現(xiàn)場,也能第一時間知道哪里發(fā)生了報警,可以緊急趕往現(xiàn)場處置。很多時候軟件都是放在現(xiàn)場電腦上運行的,未必現(xiàn)場有人員一直盯著看,通過短信的形式,第一時間送達關(guān)鍵人員那里,及時響應(yīng),不錯過任何一次重大報警信息,可以在后臺設(shè)定過濾哪些設(shè)備產(chǎn)生的報警需要第一時間送達,還可以設(shè)置短信發(fā)送的間隔,多個接收者。

發(fā)送短信在聯(lián)網(wǎng)的環(huán)境中,可以通過各種互聯(lián)網(wǎng)短信服務(wù)廠商來接入,在不聯(lián)網(wǎng)的環(huán)境中,只有一個辦法那就是通過插卡的短信設(shè)備來發(fā)送,有標(biāo)準(zhǔn)的AT協(xié)議,基本上硬件都提供了串口接口,所以程序上其實就是串口通信,通過收發(fā)協(xié)議數(shù)據(jù)來解析,比如發(fā)送AT+CSCA命令表示查詢短信中心號碼,AT+CMGR=1表示讀取序號=1的短信內(nèi)容。為了能夠支持各個廠家的設(shè)備,特意封裝的通用的短信類,支持長短信發(fā)送,支持多個收件人,多線程發(fā)送。

二、功能特點

2.1軟件模塊

設(shè)備監(jiān)控模塊,包括數(shù)據(jù)監(jiān)控(表格形式展示)、設(shè)備面板(面板形式展示)、地圖監(jiān)控(地圖形式展示)、曲線監(jiān)控(曲線形式展示)。數(shù)據(jù)查詢模塊,包括報警記錄、運行記錄、操作記錄。系統(tǒng)設(shè)置模塊,包括基本設(shè)置、端口管理、控制器管理、探測器管理、報警聯(lián)動、類型設(shè)置等。其他設(shè)置模塊,包括用戶管理、地圖管理、位置調(diào)整、組態(tài)設(shè)計、設(shè)備調(diào)試等。

2.2基礎(chǔ)功能

設(shè)備數(shù)據(jù)采集,支持串口、網(wǎng)絡(luò),串口可設(shè)置串口號、波特率,網(wǎng)絡(luò)可設(shè)置IP地址、通訊端口。每個端口支持采集周期時間,默認(rèn)1秒鐘一個設(shè)備。支持設(shè)置通訊超時次數(shù),默認(rèn)3次。支持最大重連時間,用于重新讀取離線的設(shè)備??刂破餍畔ⅲ軌蛱砑涌刂破髅Q,選擇控制器地址、控制器型號,設(shè)置該控制器下面的探測器數(shù)量。探測器信息,能夠添加位號、探測器型號、氣體種類、氣體符號、高報值、低報值、緩沖值、清零值、是否啟用、報警聲音、背景地圖、存儲周期、數(shù)值換算小數(shù)點位數(shù)、報警延時時間、報警的類型(HH,LL,HL)等。類型管理可配置控制器型號、探測器型號、氣體種類、氣體符號等。地圖支持導(dǎo)入和刪除,所有的探測器在地圖上的位置可自由拖動保存。端口信息、控制器信息、探測器信息、類型信息、用戶信息等,都支持導(dǎo)入、導(dǎo)出、導(dǎo)出到excel、打印。運行記錄、報警記錄、操作記錄,都支持多條件組合查詢,比如時間段、控制器、探測器等,所有記錄支持導(dǎo)出到excel/pdf和打印。運行記錄、報警記錄、操作記錄都可刪除指定時間范圍內(nèi)的數(shù)據(jù)。系統(tǒng)設(shè)置可選擇對應(yīng)表最大保存記錄數(shù),自動清理早期數(shù)據(jù),留出足夠的空間存儲重要的數(shù)據(jù)。報警短信轉(zhuǎn)發(fā),支持多個接收手機號碼,可設(shè)定發(fā)送間隔,比如即時發(fā)送或者6個小時發(fā)送一次所有的報警信息,短信內(nèi)容過長,自動拆分多條短信。報警郵件轉(zhuǎn)發(fā),支持多個接收郵箱,可設(shè)定發(fā)送間隔,比如即時發(fā)送或者6個小時發(fā)送一次所有的報警信息,支持附件發(fā)送。設(shè)置軟件的中文標(biāo)題、英文標(biāo)題、logo路徑、版權(quán)所有等。開關(guān)設(shè)置開機運行、報警聲音、自動登錄、記住密碼等。報警聲音可設(shè)置播放次數(shù),界面風(fēng)格樣式提供18套皮膚文件選擇。用戶管理,包括用戶權(quán)限配置,不同用戶可以有不同模塊的權(quán)限。用戶登錄和用戶退出,可以記住密碼和自動登錄,超過三次報錯提示并關(guān)閉程序。四種監(jiān)控模式,設(shè)備面板監(jiān)控、地圖監(jiān)控、表格數(shù)據(jù)監(jiān)控、曲線數(shù)據(jù)監(jiān)控,可自由切換,四種模式下都實時展示采集到的數(shù)據(jù),報警閃爍等。報警繼電器聯(lián)動,一個位號可以跨串口聯(lián)動多個模塊和繼電器號,支持多對多。

2.3特色功能

通信協(xié)議支持modbus_com、modbus_tcp_rtu,后期拓展mqtt等協(xié)議。數(shù)據(jù)源除了真實的硬件設(shè)備采集,還可選數(shù)據(jù)庫采集,這樣用戶可以安排其他程序員比如java程序員將前端采集好的數(shù)據(jù)放到數(shù)據(jù)庫,本系統(tǒng)直接從數(shù)據(jù)庫采集即可。數(shù)據(jù)庫采集模式可以作為通用的系統(tǒng)使用,更適合多人多系統(tǒng)協(xié)作。智能跳過超時的設(shè)備,加快對在線設(shè)備的采集速度,當(dāng)設(shè)備數(shù)量很多的時候尤其有用。對智能跳過的超時的設(shè)備,在設(shè)定的重連時間自動采集一次,以便探測設(shè)備是否又重新上線。每個探測器可控是否啟用,不啟用則不會采集,也不會在界面顯示,相當(dāng)于運行階段臨時關(guān)閉。探測器可設(shè)置緩沖值和報警延時時間,在該值附近波動產(chǎn)生的報警,不計入報警,只有持續(xù)處于報警值且超過報警延時時間才算真正報警,這樣可以規(guī)避很多波動導(dǎo)致的誤報。探測器可設(shè)置存儲周期,按照設(shè)定的時間來存儲一條運行記錄,可以按照重要程度對重要性高的設(shè)定存儲周期短一些,不重要的設(shè)定大一些,這樣可以節(jié)省不少的存儲空間,也保證了重要的數(shù)據(jù)及時存儲。探測器可設(shè)置清零值,在一些高精度高靈敏的設(shè)備可能出廠的時候默認(rèn)值未必是0,需要設(shè)定清零值來表示初始值。探測器可設(shè)置小數(shù)點,用于計算后的真實數(shù)據(jù)控制小數(shù)點點位顯示,相當(dāng)于除以10、除以100、除以1000,這樣大部分的探測器數(shù)據(jù)直接通過小數(shù)點位設(shè)置控制真實換算后的值,極個別的需要特殊轉(zhuǎn)換的可以在通信協(xié)議中約定。探測器報警的類型支持多種,有些設(shè)備是高于某個值高報,低于某個值低報,而有些設(shè)備是在最小值最大值范圍內(nèi)是高報,低于最小值低報,高于最大值正常。這樣可以分情況處理,涵蓋各種報警類型。原創(chuàng)數(shù)據(jù)導(dǎo)入、導(dǎo)出、打印機制,跨平臺不依賴任何組件,瞬間導(dǎo)出數(shù)據(jù)。導(dǎo)出到excel的記錄支持所有excel、wps等表格文件版本,不依賴excel等軟件。高報顏色、低報顏色、正常顏色、默認(rèn)值顏色等,都可以自由設(shè)置。支持云端數(shù)據(jù)同步,將本地采集到的數(shù)據(jù)實時同步到云端。支持網(wǎng)絡(luò)轉(zhuǎn)發(fā)和網(wǎng)絡(luò)接收,網(wǎng)絡(luò)接收開啟后,軟件從udp接收數(shù)據(jù)進行解析。網(wǎng)絡(luò)轉(zhuǎn)發(fā)支持多個目標(biāo)IP,這樣就實現(xiàn)了本地采集的軟件,自由將數(shù)據(jù)轉(zhuǎn)到客戶端,隨時查看采集到的數(shù)據(jù)。自動記住用戶最后停留的界面以及其他配置信息,重啟后自動應(yīng)用。報警自動切換到對應(yīng)的地圖,探測器按鈕閃爍,表格數(shù)據(jù)對應(yīng)顏色顯示。雙擊探測器圖標(biāo),彈出對應(yīng)探測器詳細(xì)信息,可以根據(jù)需要定制回控操作。數(shù)據(jù)庫支持多種,包括sqlite、mysql、sqlserver、postgresql、oracle、人大金倉等。本地設(shè)備采集到的數(shù)據(jù)實時上傳到云端,以便手機APP或者web等其他方式提取。自帶設(shè)備模擬工具,支持不同型號的多個設(shè)備數(shù)據(jù)模擬,同時還帶數(shù)據(jù)庫數(shù)據(jù)模擬,以便在沒有設(shè)備的時候測試數(shù)據(jù)。標(biāo)準(zhǔn)modbus協(xié)議,各種控制器類型、探測器類型、種類、符號等全部自定義,非常靈活和強大,通信協(xié)議示例數(shù)據(jù)非常完整,通用各種modbus協(xié)議系統(tǒng),適用于各種應(yīng)用場景接入。同時集成了串口通信、網(wǎng)絡(luò)通信、數(shù)據(jù)庫通信、數(shù)據(jù)導(dǎo)入導(dǎo)出打印、通信協(xié)議解析、界面UI、全局換膚等眾多組件和知識點,非常適合新手入門和進階。支持xp、win7、win10、、win11、linux、mac、各種國產(chǎn)系統(tǒng)(UOS、中標(biāo)麒麟、銀河麒麟等)、嵌入式linux等系統(tǒng)。注釋完整,項目結(jié)構(gòu)清晰,超級詳細(xì)完整的使用開發(fā)手冊,精確到每個代碼文件的功能說明,不斷持續(xù)迭代版本。

國內(nèi)站點:/feiyangqingyun

國際站點:/feiyangqingyun

體驗地址:/s/1foas7ytSXh7gHOTDqDREjQ提取碼:axip文件名:bin_iotsystem.zip。

四、效果圖

五、相關(guān)代碼

voidSendMsgThread::readMsg()

isRead=false;

QStringdata=com-readAll();

data.replace("","");

data.replace("\r","");

data.replace("\n","");

if(data.length()=0){

return;

//從SIM卡上讀取短信回復(fù)"AT+CMGR=5+CMGR:"RECREAD","+8618001797656",,"16/05/28,18:12:52+32"006:WD+05.1,ZL139.6,YL1.2,AUTO,YSJ-ONOK"

//主動收到短信"AT+CMGR=6+CMGR:"RECUNREAD","+8618001797656",,"16/05/28,18:20:51+32"006:WD+05.1,ZL139.6,YL1.2,AUTO,YSJ-ONOK"

qDebug()TIMEMS"Receive:"data;

emitreceiveData(data);

if(data.endsWith(",,0OK")){

clear();

emitreadMsgFinish();

return;

//收到行短信后會收到+CMTI:"SM",2,其中2為短信索引

//接著根據(jù)新短信的索引讀取短信,讀取短信成功返回AT+CMGR=5+CMGR:0,,230891683110304105F0240D91688110978310F000004121519115322303E13919

if(data.contains("CMTI")){

//獲取新短信的索引號

msgIndex=data.split(",").at(1).toInt();

writeData(QString("AT+CMGR=%1\r").arg(msgIndex));

}elseif(data.contains("CMGR")){

//一步步解析服務(wù)中心號碼,發(fā)件人號碼,發(fā)送時間,短信內(nèi)容

QStringListlist=data.split(",");

if(list.count()3){

return;

if(mode==0){

QStringunicode=list.at(2);

intlen=unicode.length();

//去除末尾ok兩個字符

unicode=unicode.mid(0,len-2);

if(unicode=="0"){

clear();

emitreadMsgFinish();

return;

intindex=unicode.indexOf("08");

QStringcenterNum=unicodeToTel(unicode.mid(index+6,12));

QStringmsgTel=unicodeToTel(unicode.mid(index+26,12));

QStringmsgType=unicode.mid(index+40,2);

QStringmsgTime=unicodeToTime(unicode.mid(index+42,12));

QStringmsgContent=unicode.mid(index+58);

//類型為00則采用的是7bit編碼,需要用7bit解碼

//類型為08則采用的是unicode編碼

if(msgType=="00"){

msgContent=unicodeToMsg7Bit(msgContent);

}elseif(msgType=="08"){

msgContent=unicodeToMsg(msgContent);

//發(fā)送收到新短信信號

emitreceiveMsg(centerNum,msgTel,msgTime,msgContent);

}else{

QStringcenterNum=;

QStringmsgTel=list.at(1).mid(4,11);

QStringmsgTime=list.at(3);

msgTime=msgTime.mid(1,msgTime.length());

msgTime.replace("/","-");

msgTime="20"+msgTime+""+list.at(4).mid(0,8);

QStringListstr;

for(inti=4;ilist.count();++i){

str.append(list.at(i));

QStringmsgContent=str.join(",");

msgContent=msgContent.split("\"").at(1);

msgContent=msgContent.mid(0,msgContent.length()-2);

//發(fā)送收到新短信信號

emitreceiveMsg(centerNum,msgTel,msgTime,msgContent);

}elseif(data.contains("NOCARRIER")){

emitcallFinsh();

}elseif(data.contains("NOANSWER")){

emitcallError();

}elseif(data.contains("RING")){

QStringtel;

QStringListlist=data.split("\"");

if(list.count()1){

tel=list.at(1);

emitreceiveCall(tel);

}elseif(data.contains("DTMF")){

intindex=data.indexOf("DTMF");

QStringkey=data.mid(index+5,1);

emitreceiveKey(key);

voidSendMsgThread::deleteMsg()

//自動刪除SIM卡上的短信

if(autoDelete){

deleteMsg(msgIndex);

QStringSendMsgThread::sendAT(constQStringcmd,intsleep)

if(!isOpen||!isLive){

return"";

//主動執(zhí)行命令期間,斷開收到數(shù)據(jù)信號槽連接

disconnect(com,SIGNAL(readyRead()),this,SLOT(readData()));

writeData(QString("%1\r").arg(cmd));

msleep(sleep);

QStringdata=com-readAll();

data.replace("","");

data.replace("\r","");

data.replace("\n","");

if(data.length()0){

qDebug()TIMEMS"Result:"data;

emitreceiveData(data);

//完成處理后,重新綁定收到數(shù)據(jù)信號槽連接

connect(com,SIGNAL(readyRead()),this,SLOT(readData()),Qt::DirectConnection);

returndata;

boolSendMsgThread::sendMsg(constQStringtel,constQStringmsg)

boolok=false;

charctrlz=26;

intsleepTime;

QStringmsgContent;

QStringsendMsg;

if(mode==0){

sleepTime=6000;

msgContent=QString("%1%2%3%4%5").arg("0011000D91").arg(getMsgTel(tel))

.arg("0

溫馨提示

  • 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)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論