999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于C#的串口通信系統的設計和實現

2019-07-29 01:12:33劉馬飛
物聯網技術 2019年6期
關鍵詞:單片機設備系統

劉馬飛

摘 要:物聯網應用技術專業學生在學習完C#.NET程序設計課程后,雖然掌握了一定的C#軟件編程知識,但在如何編寫軟件程序驅動物聯網底層傳感設備,構建物聯網實際應用時仍然束手無策。物聯網底層傳感設備大都為RS 232串口通信設備,文中給出一個有實用價值的簡單設計—基于C#的串口通信系統的設計和實現,練習使用所學的C#編程知識完成與物聯網底層設備的交互,加強物聯網專業學生構建應用系統的編程能力。

關鍵詞:C#;RS 232;串口通信;程序設計;軟件編程;物聯網

中圖分類號:TP393 文獻標識碼:A 文章編號:2095-1302(2019)06-00-04

0 引 言

高職院校普遍將《C++程序設計》課程定為計算機大類專業的基礎主干課程,同時也是物聯網應用技術、電子信息技術等專業的專業基礎課。在物聯網應用技術專業的教學安排中,大都在學習完C++,對程序控制、類和對象等概念有了基礎了解后,方才進一步學習C#程序設計。C#程序設計授課教師,尤其是來自軟件方向的教師,在課程教學中一般會把窗體程序界面設計等可視化程序設計作為授課主要內容,常常忽略了與硬件設備交互的部分。因此物聯網應用技術專業學生在進行綜合項目開發時,常常無從下手。物聯網底層傳感設備大都為單片機控制設備,其與外界通信的接口常采用RS 232串口[1]。在構建物聯網應用系統時,需要計算機應用程序與物聯網底層傳感設備進行通信交互,實現價值應用。

為促進物聯網應用技術專業人才的培養,無錫職業技術學院物聯網學院經過精心設計,開設了《物聯設備編程與實施》課程,該課程的目的在于突出基于物聯網設備進行C#軟件開發,旨在提升物聯網專業學生的軟件開發能力和系統構建能力,并將其打造成為職業教育物聯網應用技術專業教學資源庫的主干核心課程[1-2]。該課程的核心教學內容之一便是C#串口編程。物聯網應用技術專業學生中普遍存在因課外缺少串口硬件設備而無法練習串口編程內容的問題。

為了讓學生能在課外學習C#串口編程知識,提高對課程內容的掌握程度,本文介紹了一個基于C#的串口數據收發系統的設計和實現案例,通過案例的介紹,指導物聯網應用技術專業學生使用所學的C#編程知識完成與物聯網底層設備的交互,提升構建物聯網應用系統的編程能力。

1 系統設計原理及知識

1.1 系統功能設計

C#串口數據收發系統具有串口發送和串口接收功能。串口發送:通過點擊發送按鈕將發送文本框內的字符串數據通過串口發送出去;串口接收:從串口接收數據并轉成字符串顯示到接收文本框中。為了便于學生在課后缺少串口設備的情況下也能進行程序調試,可通過虛擬串口軟件Virtual Serial Port Driver添加一對虛擬串口,該串口的數據收發系統和常規串口調試助手可分別連接到這一對虛擬串口上,便于通過串口收發數據。

1.2 串口通信基礎

串口通信是指外設和計算機間通過數據信號線、地線、控制線等,按位進行傳輸數據的一種通信方式[3]。其中最常用的一種串行通信接口為RS 232C,其全名是“數據終端設備(DTE)和數據通信設備(DCE)之間串行二進制數據交換接口技術標準”。RS 232串行口物理接口示意如圖1所示,其中2腳表示輸入引腳RXD,3腳表示輸出引腳TXD,5腳表示接地。RS 232C全雙工的兩端只需要如圖2所示連接三個引腳,便可進行全雙工通信。

傳感層設備常用的核心芯片是單片機,80C51單片機的P3口有兩個復用接口,分別為RXD和TXD,而這也是單片機進行串行通信的收發口,但單片機采用的是TTL電平標準,+5 V表示邏輯1,0 V表示邏輯0;而RS 232電平標準要求+15 V或+13 V表示邏輯1,-15 V或-13 V表示邏輯0,所以需要通過MAX232芯片實現TTL電平與RS 232電平之間的轉換。

RS 232串口以字符幀為單位傳送數據,字符幀由起始位、數據位、校驗位以及停止位構成,如圖3所示。起始位固定為1位,邏輯0表明字符幀開始;數據位的位數可選值為

5位、7位和8位,通常8意為8位對應一個字節的8個比特。校驗位可選,進行校驗時,可以在偶、奇、高和低四種校驗方式中任選一種。停止位表示字符幀結束,一般取1,1.5和2位(邏輯1)。每個位的持續時間由波特率表示,典型取值為1 200 bps,2 400 bps,4 800 bps,9 600 bps,19 200 bps。對于兩個串口通信的設備而言,只有兩端的波特率、數據位、校驗位以及停止位保持一致,才能保證發送的每個數據包都能夠被對方正確接收。串口通信系統界面如圖4所示。

1.3 C#串口控件

在C#.NET中提供SerialPort類用于完成串口通信操作,其屬于System.IO.Ports命名空間,在C#Windows窗體應用程序中經SerialPort類封裝成可視化控件SerialPort,使用可視化方式完成編程。SerialPort類的常用屬性和常用方法見表1和表2所列[1,4]。

SerialPort串口操作延續文件操作思想,在進行串口操作之前首先需要調用Open()方法對打開串口;串口打開后,調用Write()函數等將數據通過串口發送出去,再調用Read()函數從串口接收對端發送的數據,串口操作完成后,需調用Close()方法關閉串口。

應用程序從串口讀取數據時,由于不知串口對端發送過來的數據何時到達接收緩沖區,因而面臨著“不知何時讀”的困境,其解決方式通常有兩種,其一是開啟一個新的線程,不斷讀取串口數據;其二是采用事件觸發方式。SerialPort封裝了自動觸發事件,設定有串口緩沖區接收到的字符個數(屬性ReceivedBytesThreshold值),當接收緩沖區的字節數大于等于該值時,系統將自動觸發DataReceive事件。因此可以添加DataReceive事件的響應函數,在該響應函數中讀取數據。需要注意的是,事件觸發方式通過創建線程來實現,但監聽線程的創建由C#內部系統來完成,因此在代碼實現上更加簡便。

2 功能設計和程序實現

2.1 窗體設計

在Visual Studio開發環境中創建如圖4所示的應用程序窗體。程序運行時,首先選擇相應的串口和波特率打開串口,串口打開后便可通過發送按鈕將發送文本框內的字符串數據發送到串口對端,而串口接收到的數據將自動轉換成字符串顯示在接收文本框中。

2.2 邏輯實現及關鍵代碼

2.2.1 程序初始化

計算機存在多個串行口,因此程序運行時首先需要列出計算機所有可用串口供用戶選擇,同時進行程序邏輯初始化,確保串口未打開時無法點擊發送按鈕進行發送操作。因此添加窗口Load事件響應函數,在Load事件響應函數中完成上述初始化操作。

序使用SerialPort類而非SerialPort控件或編寫非Windows窗體應用程序的C#程序時,需要定義SerialPort類對象作為成員對象,并進行SerialPort對象初始化和DataReceived事件響應回調函數關聯操作,初始化通常在窗體構造函數中進行。

2.2.4 串口接收數據

串口數據接收采用事件觸發方式,添加串口控件的DataReceived事件響應函數,在該響應函數中進行數據接收操作。接收時首先調用BytesToRead屬性,獲得串口字符個數;其次定義與字符個數相對應的字節數組;最后調用Read方法,把串口數據讀入字節數組,并將字節數組按指定編碼格式轉換回字符串進行顯示[5]。

由于事件觸發方式系統創建了監聽線程進行串口接收緩沖區監聽,當接收緩沖區字節數超過串口控件屬性ReceivedBytesThreshold值時,將產生DataReceived事件。當DataReceived事件被處理時,才會調用DataReceived事件相應函數,即spdemo_DataReceived。通常串口對端發送數據包的大小非固定,因此ReceivedBytesThreshold通常采用默認值1。當串口接收緩沖區收到數據包第一個字節時,便輔助線程產生DataReceived事件。當該DataReceived事件被處理時,有可能數據包還未接收完畢,因此可采用一個簡單但低效、不可靠的辦法執行Thread.Sleep(10)操作使線程休眠100 ms,使得在執行讀取操作時,數據包接收完畢[6]。

由于事件觸發方式中,DataReceived事件的響應函數spdemo_DataReceived()是在系統創建的輔助監聽線程上執行的,而窗體界面的控件則是在主線上創建的,因此為避免線程競爭,C#窗體編程只能創建控件的線程來操作控件數據,禁止跨線程訪問控件資源。因此需要使用Invoke或BeginInvoke方法,通過委托調用封送到主線程上執行,具體實現:this.Invoke((EventHandler)(delegate{界面控件使用}))。

2.3 系統改進及擴展

本系統設計本著可用、簡單的原則,設計了字符串文本的發送和接收顯示,方便學生實現。一旦學生掌握了基本的實現方法,就可以在該基礎上完善功能,擴展應用。例如設計溫濕度監控應用程序時通過RS 232串口連接傳感層單片機設備,接收傳感層設備通過串口上傳的溫度濕度等傳感數據并展示。設計硬件設備控制程序時,通過串口發送操作指令數據到底層執行器設備,如控制LED燈進行相應開關操作。以上每個改進都可以比較方便的實現,但要求學生有耐心并能自主學習,激發學生學習興趣和成就感。

系統在接收數據時,使用簡單的線程休眠等待數據包接收完成的辦法,在實際串口通信系統收發過程中將會造成數據包接收不完整以及接收處理速度慢等問題,因此需要考慮串口數據可靠、高效接收的解決方案。

3 結 語

本文通過基于C#的串口數據收發系統的設計和實現案例,對《物聯網設備編程與實施》課程中的核心知識內容—C#串口編程進行了詳細闡述。通過介紹該項目,使得物聯網應用技術專業的學生深入了解應用程序如何與硬件設備交互,加深了對C#串口編程知識的理解和運用,加強了構建物聯網應用系統的編程能力。

參 考 文 獻

[1]陳天娥.物聯網設備編程與實施[M].北京:高等教育出版社,2014.

[2]邱曉榮.《物聯網設備編程與實施》課程的構建與實施[J].物聯網技術,2015,5(7):96-97.

[3]王靜霞,楊宏麗,劉俐.單片機應用技術(C語言版)[M].3版.北京:電子工業出版社,2015.

[4] NAGEL C,GLYNN J,SKINNER M. C#高級編程[M].9版. 李銘譯.北京:清華大學出版社,2015.

[5]于國防,李劍.C#語言Windows程序設計[M].北京:清華大學出版社,2010.

[6] WATSON K,HAMMER J V,REID J D. C#入門經典[M].7版.齊立波,黃俊偉,譯.北京:清華大學出版社,2016.

[7]胥飛燕,鄭華榮,周宦銀,等.基于FPGA的多串口控制器的設計與實現[J].物聯網技術,2017,7(10):31-32.

[8]周陽,周美嬌,黃波,等.基于C#的串口通信系統的設計與研究[J].電子測量技術,2015,38(7):135-140.

[9]李越,童耀南,朱凱,等.基于ZigBee和STC單片機的無線數據采集系統[J].物聯網技術,2017,7(3):19-21.

[10]吳卓葵,謝曉玲.基于單片機和C#的電壓監測系統設計[J].自動化與儀器儀表,2014(4):71-73.

猜你喜歡
單片機設備系統
諧響應分析在設備減振中的應用
Smartflower POP 一體式光伏系統
工業設計(2022年8期)2022-09-09 07:43:20
WJ-700無人機系統
ZC系列無人機遙感系統
北京測繪(2020年12期)2020-12-29 01:33:58
基于單片機的SPWM控制逆變器的設計與實現
電子制作(2019年13期)2020-01-14 03:15:28
基于單片機的層次漸變暖燈的研究
電子制作(2019年15期)2019-08-27 01:12:10
基于單片機的便捷式LCF測量儀
電子制作(2019年9期)2019-05-30 09:42:02
基于MPU6050簡單控制設備
電子制作(2018年11期)2018-08-04 03:26:08
連通與提升系統的最后一塊拼圖 Audiolab 傲立 M-DAC mini
500kV輸變電設備運行維護探討
工業設計(2016年12期)2016-04-16 02:52:00
主站蜘蛛池模板: 亚洲欧美在线综合图区| 久久精品无码专区免费| 在线观看亚洲天堂| 欧美日韩国产在线人| 午夜色综合| 国产欧美精品一区二区| 国产微拍精品| 国产欧美日韩综合一区在线播放| 国产欧美精品一区二区| 日本欧美视频在线观看| 亚洲人精品亚洲人成在线| 青青青国产精品国产精品美女| 国产成人三级| 五月天天天色| 久久精品人人做人人爽电影蜜月| 欧美日韩亚洲综合在线观看 | 国产新AV天堂| 超清无码一区二区三区| 国产乱人激情H在线观看| 国产成人h在线观看网站站| 无码免费视频| 狠狠综合久久久久综| 久久青草热| 亚洲色精品国产一区二区三区| 在线观看亚洲天堂| 国产综合网站| 国产麻豆aⅴ精品无码| 国产在线观看人成激情视频| 视频一区视频二区中文精品| 亚洲精品午夜天堂网页| 精品无码人妻一区二区| 国产精品免费露脸视频| a在线亚洲男人的天堂试看| 国产在线视频欧美亚综合| 国产精品手机视频一区二区| 激情五月婷婷综合网| 亚洲欧美综合另类图片小说区| 中文字幕佐山爱一区二区免费| 国产在线八区| 国产人成乱码视频免费观看| 国产精品亚洲欧美日韩久久| 天天色综网| 爆乳熟妇一区二区三区| 国产日韩欧美在线视频免费观看| 国产免费福利网站| 亚洲日本中文综合在线| 日本不卡在线播放| 青青草原国产av福利网站| av在线人妻熟妇| 一本综合久久| 91精品视频网站| 激情乱人伦| 久久男人视频| 亚洲午夜天堂| 日韩精品一区二区三区免费| 国产夜色视频| 日韩最新中文字幕| 午夜国产在线观看| av免费在线观看美女叉开腿| 99热线精品大全在线观看| 91久久精品国产| 国产无码性爱一区二区三区| 亚洲日本中文字幕天堂网| 国产免费久久精品99re丫丫一 | 久久天天躁狠狠躁夜夜躁| 91无码人妻精品一区二区蜜桃| 欧美日韩v| 亚洲a级毛片| 欧美成人手机在线观看网址| 精品免费在线视频| 国产婬乱a一级毛片多女| 国产91丝袜在线播放动漫 | 韩日无码在线不卡| 最近最新中文字幕免费的一页| 无码专区在线观看| 亚洲欧洲自拍拍偷午夜色| www欧美在线观看| 91色国产在线| 亚洲无线国产观看| 九九九久久国产精品| 日韩黄色在线| 国产亚洲美日韩AV中文字幕无码成人|