亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        基于Linux的智能電表數據采集實現

        2017-09-29 04:03:32靖衛(wèi)兵紀松波
        軟件導刊 2017年9期
        關鍵詞:智能電表

        靖衛(wèi)兵 紀松波

        摘 要:隨著科技的迅速發(fā)展,精密用電設備也越來越多,它們對電流、電壓、功率等基本參數要求較高。為了完整地反映用電設備的運行狀態(tài),需要對多個用電參數進行采集。在Linux操作系統開發(fā)環(huán)境下,通過分析智能電表使用的通信協議Dl645-1997,編寫串口驅動,使用RS-485接口與智能電表通信,最后通過編寫、移植QT應用程序,完成對電量、電流、電壓和功率的采集和精確顯示。該系統能夠實時采集用電器的用電參數,為其安全運行提供保障,也為今后工業(yè)電量數據采集和遠程傳輸提供參考,具有良好的應用前景。

        關鍵詞:智能電表;嵌入式Linux;通信協議;Qt移植

        DOI:10.11907/rjdk.172440

        中圖分類號:TP319 文獻標識碼:A 文章編號:1672-7800(2017)009-0158-03

        Abstract:With the rapid development of science and technology, precision electrical equipment is also increasing, they are the current, voltage, power and other basic parameters require a higher. In order to be able to complete the operation of the electrical equipment, the need for multiple electrical parameters to be collected. In this paper, the Linux operating system development environment, through the analysis of smart meters using the communication protocol Dl645-1997, the preparation of serial port driver, the use of RS-485 interface and smart meter communication, and finally through the preparation, transplantation QT application to complete the power, Voltage, and power acquisition and accurate display. This system can collect the electrical parameters of the electrical appliance in real time, provide security for its safe operation, and provide reference for the later industrial data acquisition and remote transmission, and has high application prospect.

        Key Words:smart meter; embedded linux; communication protocol; Qt transplant

        0 引言

        我國經濟的快速發(fā)展帶動了各行業(yè)對電能的大量需求,因而迫切需要對電能供應進行科學管理。與此同時,越來越多的智能電表在生產生活中得到廣泛應用,通過讀取智能電表中的電量、電流、電壓和功率,從而監(jiān)測用電設備的運行狀態(tài),為用電設備的安全運行提供安全保障。Dl645-1997協議成為國際智能電表普遍采用的一種主流通信協議,只是采集用電量作為電費征收依據的傳統方式很難滿足工業(yè)實際中電力系統采集數據的全面性、可靠性方面的需要[1]。本文基于中華人民共和國電力行業(yè)標準Dl645-1997多功能電表通信規(guī)約,提出了一種基于Tiny4412為核心處理器的嵌入式智能電表數據采集的設計方案和實現方法。利用RS-485接口并結合智能電表通信規(guī)約,使用智能電表完成智能電表數據的采集。通過移植Qt完成電表數據采集工作。

        1 Dl645-1997通信協議

        Dl645-1997協議是中華人民共和國電力行業(yè)標準關于多功能電表的通信規(guī)約,制定該標準是為了統一和規(guī)范多功能電能表與數據終端設備進行數據交換時的物理連接和協議。采用一對多的主從工作方式,主機至少可以與一臺從機通信,而從機的地址必須唯一[2]。

        1.1 字節(jié)格式

        該協議的每字節(jié)含8位二進制碼,傳輸時加上一個起始位(0)表示傳輸方向、一個偶校驗位P和一個停止位(1)共11位。D0是字節(jié)的最低有效位,D7是字節(jié)的最高有效位,字節(jié)格式如圖1所示。

        1.2 幀格式

        幀是傳輸信息的基本單位,讀取智能電表的信息時,主機必須按照此幀格式給電表發(fā)送數據,電表在收到正確的主機數據幀時,會查看主機幀格式中的地址會否與本地址相符合,只有兩個地址一致時,電表才會將正確的電表數據回傳給主機[3]。幀格式如表1所示。

        BCD碼:地址長度為12位十進制數,低地址位在先,高地址位在后??刂拼a的格式如圖2所示,其中D7=0時表示由主站發(fā)出的命令幀,D7=1:由從站發(fā)出的應答幀;D6=0:從站正確應答,D6=1:從站對異常信息的應答;D5=0:無后續(xù)數據幀;D5=1:有后續(xù)數據幀;D4-D0:請求及應答功能碼,當其為00001表示讀數據,00010時表示讀后續(xù)數據,00011時重讀數,00100為寫數據,01010:寫設備地址,01100:更改通信速率。控制碼決定是向電表讀數據還是寫數據,既能夠讀電表中的各種數據,也能寫數據改變設備的地址和通信波特率。endprint

        數據長度表示數據域的字節(jié)數。數據域DATA:數據域包括數據標識和數據、密碼等,其結構隨控制碼的功能而改變。其中,數據標示指電表裝置中各種不同類型、不同屬性的數據。該協議使用2個字節(jié)的4個字段分別標示數據的類型和屬性。這2個字節(jié)為DI1和DI0,4個字段分別為DI1H、DI1L、DI0H、DI0L,其中DI0L為最低級標識字段,DI1H為最高級標識段,如圖3所示。當DI1H為1001,DI1L為0000時,表示為當前有功電能量,DI0H為0001,DI0L為0000時,表示正向總電能。如果要讀取電表的正向有功總電能,數據域data從高到低位為1001 0000 0001 0000。其它類型的數據域data類似,

        可參考協議附錄A。傳輸時發(fā)送方按字節(jié)進行加33H處理,接收方按字節(jié)進行減33H處理且所有數據項均先傳送低位字節(jié),后傳送高位字節(jié)。

        校驗碼CS:從幀起始符開始到校驗碼之前的所有各字節(jié)的模256的和,即各字節(jié)二進制算術和,不計超過256的溢出值。結束符號16H:標識一幀信息的結束,其值為16H=00010110B。

        1.3 主機請求幀

        當主機需要讀取數據時需要按照表1幀格式發(fā)送給電表。例如若要讀取電表的正向總電能,通過上述分析可知,需要向電表發(fā)送0x68,0x11,0x11,0x11,0x11,0x11,0x11,0x68,0x1,0x2,0x43,0xc3,0xd9,0x16。其中,0x68和0x16分別是幀頭和幀尾,0x11,0x11,0x11,0x11,0x11,0x11是為了方便自己提前設置的設備地址。0x1是控制碼表示由主站發(fā)出的命令幀,0x2表示數據域有兩個字節(jié),數據域data為1001000000010000B,數據域需要經過加33H處理,且數據傳輸先低位再高位。校驗碼是各字節(jié)之和的后8位即oxd9。讀取電表其它數據也類似,只是控制碼、數據域data和校驗碼不同。

        1.4 從機應答幀

        電表收到主機發(fā)的請求幀后,會給主機返回一個應答幀。應答幀的幀格式與主機的請求幀很類似。讀取數據的數據域后,數據也經過加33H自動處理,且先接收低位數據。

        2 系統結構

        2.1 Linux操作系統

        Linux是一套免費使用和自由傳播的類Unix操作系統,是一個基于POSIX和UNIX的多用戶、多任務、支持多線程和多CPU的操作系統。它能運行主要的Unix工具軟件、應用程序和網絡協議。Linux繼承了Unix以網絡為核心的設計思想,是一個性能穩(wěn)定的多用戶網絡操作系統。Linux可以運行在多種硬件平臺上,如具有X86、SPARC、Alpha等處理器的平臺。此外,Linux還是一種嵌入式操作系統,可以運行在平板電腦、機頂盒或游戲機上。Linux內核是Linux系統的核心程序,主要完成任務調度、內存管理、IO設備管理等功能[5],主要為應用程序提供一個穩(wěn)定良好的運行環(huán)境。應用程序是為方便用戶操作而提供的程序,驅動程序實現了操作系統對硬件的有效管理,應用程序實現了方便用戶操作的目的。

        2.2 串口驅動

        在認識串口驅動之前必須先了解Linux tty子系統。Linux tty子系統包含tty核心、tty線路規(guī)程和tty驅動。tty核心是對整個tty設備的抽象,對用戶提供統一的接口,tty線路規(guī)程是對傳輸數據的格式化,tty驅動則是面向tty設備的硬件驅動[6],在此即是串口驅動。當用戶使用write()函數向串口發(fā)送數據時,write函數會通過系統調用來找到file_operations里的.write函數指針,其中tty_write()函數與.write指針相對應。ttt_write()函數又會找到線路規(guī)程中的tty_ldisc_ops,并調用其中的n_tty_write()函數。n_tty_write()函數又會引用tty_operation結構中的uart_write()函數。uart_write()函數最終找到串口驅動里的write()函數,最終將數據發(fā)送給硬件設備。當應用程序讀串口時,首先響應tty核心中的tty_read()函數,然后在該函數中調用線路規(guī)程中的n_tty_read()函數,該函數不會繼續(xù)調用其它函數,首先會設置應用程序為阻塞狀態(tài)[7],如果沒有數據可讀,則通過調度讓阻塞生效。如果有數據可讀,在線路規(guī)程read_buffer()函數中將數據讀走,read_buffer()函數中的數據來源于串口驅動,串口驅動接受到硬件的數據后,就會送到線路規(guī)程中的read_buffer()函數中去,當應用程序需要讀數據時,只需在read_buffer()函數中讀取即可。串口驅動接收數據的途徑為:串口驅動通過注冊接受中斷,然后讀取UFCON和UFSTAT兩個寄存器中的數據,通過UFSTAT寄存器可以判斷RxFIFO中數據量的大小,如果為0,退出中斷處理,若非0則在URXH寄存器中取出接受到的數據,然后通過調用uart_insert_char()函數將數據存放到串口驅動中的buf中[8],數據接受完畢后,再調用tty_filp_buffer_push函數將串口驅動接受到的數據送到線路規(guī)程中的read_buf中,讀串口數據完畢。讀寫過程如圖4所示。

        3 Qt移植

        Qt是一個跨平臺的C++應用程序開發(fā)框架,廣泛應用于GUI程序。Qt中所有類型的GUI組件如按鈕、標簽等都派生于QWiget。Qt利用信號與槽機制代替?zhèn)鹘y的Callback來進行對象之間的溝通。當操作事件發(fā)生時,對象會發(fā)出一個信號,而槽則是一個函數接受一個特定的信號并且運行槽本身而設置的動作。信號與槽之間通過Qobject的靜態(tài)方法connect來鏈接[9]。在Qt中沒有特定的串口控制類,該項目中使用第三方的QextSerialPort類通過添加posix_qextserialport.h、qextserialbase.h及posix_qextserialport.cpp、qextserialbase.cpp實現電表的串口數據傳輸[10]。在界面文件widget.ui中,添加PushButton和LineEdit控件向串口中發(fā)送要讀取數據的命令和顯示數據。在讀寫串口之前需要先打開串口驅動文件,然后設置波特率、數據位、停止位和校驗位。當PushButton被按下后,會將不同的讀命令送到與其相關的槽函數中,在槽函數中調用寫串口函數myCom->write((char*)s,14),s是存放命令的地址,14代表命令的大小,電表收到讀命令后會返回相應的數據,Qt應用程序利用讀串口函數QByteArray temp = myCom->readAll();QDataStream out(&temp,QIODevice::ReadWrite);接收電表返回的字符串,然后經過數據格式轉換和數據分離后顯示在LineEdit控件中,將數據代碼調試正確后,使用qmake工具生成Makefile,然后使用make命令即可生成可執(zhí)行應用程序myCom。將可執(zhí)行文件拷貝到開發(fā)板中,修改啟動腳本,即可開機運行此Qt程序。endprint

        4 系統測試

        將智能電表的RS485接口和開發(fā)板的RS485相連接,智能電表接一個用電器。啟動開發(fā)板,會自動運行移植好的Qt應用程序,在應用程序中設置好串口工作時的波特率、數據位、停止位等參數。點擊相應的按鈕就能讀取并顯示相應的數據。測試表明,該系統能夠準確讀取電表中的總電能、瞬時電流、瞬時電壓和瞬時功率。

        5 結語

        該智能電表采集系統以tiny4412處理器作為硬件平臺,采用Linux技術,首先分析電表使用協議,結合RS-485接口,讀取所需要的電表數據,然后通過移植Qt顯示數據。經過測試,整個系統具有數據準確、穩(wěn)定可靠、人機界面友好等特點,能夠很好地適用于現代工業(yè)需求,應用前景十分廣闊。

        參考文獻:

        [1] 王平,張新東.基于智能儀表的數據采集系統設計[J].自動化與儀表,2009,24(4):9-10.

        [2] 樊龍,張文愛.基于Modbus協議的智能電表數據采集傳輸系統的實現[J].制造業(yè)自動化,2014(2):120-121.

        [3] 耿建坡,王永輝,陶鵬,等.智能電能表檢測裝置應用分析[J].河北電力技術,2012(3):4-5.

        [4] 程淼,智能電能表的主要功能及其選用[J].知識經濟,2011(4):127.

        [5] 于海彬,王斌,陳興林,等.基于Linux的SC16IS752的串口驅動程序設計[J].自動化與儀表,2013(12):38-39.

        [6] 宋寶華.Linux設備驅動詳解[M].北京:人民郵電出版社,2010.

        [7] 于海彬,王斌,陳興林.基于Linux的SC16IS752的串口驅動程序設計[J].自動化與儀表,2013(12):36-41.

        [8] 吳俊安,江澤濤,涂斌.Linux下PC機串口與智能儀器間的數據通信[J].計算機與現代化,2005(7):39-42.

        [9] 吳燕燕,賀鋒濤.基于ARM9平臺上Qt/Eebedded的移植與開發(fā)[J].液晶與顯示,2013(12):261-263.

        [10] 全威.基于Linux系統與Qt開發(fā)框架的虛擬儀表的顯示應用研究[D].哈爾濱:哈爾濱理工大學,2017.

        (責任編輯:孫 娟)endprint

        猜你喜歡
        智能電表
        智能電表及抄表系統在線損管理中的應用探究
        智能電表及集抄技術在線損管理中的應用研究
        基于智能電網建設中的智能電表高級應用探究
        一種基于全光纖的集中器信息采集系統方案設計
        智能電網中智能電表的應用分析
        智能電表的工作模式以及抄表模式集中化的實踐分析
        基于ZigBee的電能無線抄表系統的設計
        基于Si4438的無線智能電表設計
        基于暫態(tài)特征聚類的家用負荷識別
        一種針對于電表計量芯片的低電流供電方法
        体验区试看120秒啪啪免费| 中文字幕无码日韩欧毛| 亚洲人成人99网站| 一区二区三区视频偷拍| 日本按摩偷拍在线观看| 久久国产精品一区二区三区| 免费国产成人肉肉视频大全| 黑人巨大av在线播放无码| 奇米影视久久777中文字幕| 久久福利青草精品资源| 久久久亚洲精品一区二区| 日韩一级137片内射视频播放| 麻豆国产av在线观看| 中文有码亚洲制服av片| 熟妇人妻久久中文字幕| aaaaaa级特色特黄的毛片| 在线视频 亚洲精品| 40分钟永久免费又黄又粗| 国产麻豆国精精品久久毛片| 美女人妻中出日本人妻| 日本一二三区视频在线| 中国农村熟妇性视频| 欧美一片二片午夜福利在线快| 精品国内自产拍在线视频| 国产成人精品蜜芽视频| 不卡av一区二区在线| 亚洲成av人片在线观看| 99热这里有精品| 国产免费一级在线观看| 一本一道久久a久久精品综合蜜桃 成年女人18毛片毛片免费 | 区一区一日本高清视频在线观看 | 一区二区三区国产大片| 在线天堂av一区二区| а天堂8中文最新版在线官网| 欧美人与动人物牲交免费观看久久| 最近日本免费观看高清视频| 不卡视频一区二区三区| 亚洲av一区二区国产精品| 亚洲综合视频一区二区| 粗大的内捧猛烈进出少妇 | 亚洲天堂免费成人av|