亚洲日本成本线在观看,最新国自产拍在线,免费性爱视频日本,久久精品国产亚洲精品国产精品

            現(xiàn)在位置:范文先生網(wǎng)>理工論文>電子通信論文>金剛石合成控制系統(tǒng)中多串口通信技術(shù)的設(shè)計(jì)與實(shí)現(xiàn)

            金剛石合成控制系統(tǒng)中多串口通信技術(shù)的設(shè)計(jì)與實(shí)現(xiàn)

            時(shí)間:2023-02-21 00:16:03 電子通信論文 我要投稿

            金剛石合成控制系統(tǒng)中多串口通信技術(shù)的設(shè)計(jì)與實(shí)現(xiàn)

            摘要:通過多串口通信技術(shù)在金剛石合成控制系統(tǒng)中的應(yīng)用,討論了32位Windows操作系統(tǒng)下,VC多串口通信技術(shù)的設(shè)計(jì)與實(shí)現(xiàn)方法,并運(yùn)用面向?qū)ο蠓椒ê投嗑程技術(shù)設(shè)計(jì)了一個(gè)比較完善的串口通信類。闡述了用VC開發(fā)上位機(jī)與PLC之間的串口通信程序設(shè)計(jì)方法和實(shí)現(xiàn)技術(shù)。
              關(guān)鍵詞:串口通信;面向?qū)ο蠓椒ǎ欢嗑程;PLC
              
             。币
              
              傳統(tǒng)的金剛石合成機(jī)控制系統(tǒng)是由一個(gè)PLC和一個(gè)可顯示終端構(gòu)成。這種傳統(tǒng)的控制系統(tǒng)一般具有如下缺點(diǎn):
              
              (1)系統(tǒng)所有的工作都由PLC完成,其控制精度較差,致使合成的金剛石質(zhì)量較差;
              
              (2)顯示終端的平面尺寸過小,這一方面使得操作人員觀察系統(tǒng)的狀態(tài)很不方便,另一方面?也常常會(huì)引起誤操作;
              
              (3)金剛石合成工藝復(fù)雜,需控制的參數(shù)很多,但原控制系統(tǒng)不能對(duì)參數(shù)進(jìn)行保存,這樣在根據(jù)不同產(chǎn)品和工藝要求對(duì)部分參數(shù)進(jìn)行調(diào)整時(shí),每次都必須重新設(shè)置所有的參數(shù),操作非常麻煩;
              
              (4)界面不友好;
              
              (5)不能通過控制系統(tǒng)自動(dòng)考核操作人員的工作質(zhì)量。
              
              為了提高控制精度、方便操作,開發(fā)新的控制系統(tǒng)迫在眉睫。筆者針對(duì)以上問題,將IPC與PLC有機(jī)結(jié)合在一起,開發(fā)了一套新的控制系統(tǒng)。通過該系統(tǒng)可在上位機(jī)(IPC)和PLC之間通過RS-232與RS-485進(jìn)行大量串口通信。
              
              2VC串口通信分析
              
              在32位Windows系統(tǒng)下使用VC開發(fā)串口通信程序通常有如下4種方法:
              
             。ǎ保┦褂茫停椋悖颍铮螅铮妫艄咎峁┑拿麨椋停樱茫希停偷耐ㄐ趴丶;
              
             。ǎ玻┲苯邮褂茫祝椋睿洌铮鳎髴(yīng)用程序接口(API);
              
              (3)自行設(shè)計(jì)一個(gè)串口通信類;
              
              (4)通過開發(fā)一個(gè)ActiveX控件來實(shí)現(xiàn)串口通信功能。
              
              在上述幾種方法中,實(shí)際上還是使用WindowsAPI函數(shù),然后把串口通信的細(xì)節(jié)給封裝起來,同時(shí)提供給用戶幾個(gè)簡(jiǎn)單的接口函數(shù)。上述幾種方法各有優(yōu)缺點(diǎn),但在實(shí)際情況下,大多數(shù)編程人員喜歡使用API函數(shù)自行設(shè)計(jì)串口通信類。
              
              用WindowsAPI函數(shù)進(jìn)行串口通信的編程流程如圖1所示。其中打開串口是確定串口號(hào)與串口的打開方式;初始化串口用于配置通訊的波特率、每字節(jié)位數(shù)、校驗(yàn)位、停止位和讀寫超時(shí)等;讀寫串口用于向串口進(jìn)行發(fā)送數(shù)據(jù)和從串口接收數(shù)據(jù);關(guān)閉串口用于將串口關(guān)閉并釋放串口資源(Windows系統(tǒng)下串口是系統(tǒng)資源)。
              
              由于絕大多數(shù)控制系統(tǒng)中串口通信是比較費(fèi)時(shí)的,而且監(jiān)控系統(tǒng)還要進(jìn)行數(shù)據(jù)處理和顯示等,所以一般采用多線程技術(shù),并用AfxBeginThread()函數(shù)創(chuàng)建輔助線程來管理串口通信,這樣,主進(jìn)程就能在進(jìn)行串口讀寫的同時(shí),處理數(shù)據(jù)并完成用戶指令的響應(yīng),但是設(shè)計(jì)時(shí)一定要處理好數(shù)據(jù)的共享問題。
              
              串口讀寫既可以選擇同步、異步方式,也可以選擇查詢、定時(shí)讀寫和事件驅(qū)動(dòng)方式。由于同步方式容易造成線程阻塞,所以一般采用異步方式;而查詢方式要占用大量的CPU時(shí)間,所以一般采用定時(shí)讀寫或者事件驅(qū)動(dòng)方式,事件驅(qū)動(dòng)方式相關(guān)文獻(xiàn)較多,故此重點(diǎn)討論定時(shí)讀寫方式。定時(shí)讀寫方式就是上位機(jī)向下位機(jī)發(fā)送固定格式的數(shù)據(jù),在下位機(jī)收到后向上位機(jī)返回狀態(tài)信息數(shù)據(jù)。由于數(shù)據(jù)的傳輸需要時(shí)間,所有上位機(jī)發(fā)送數(shù)據(jù)后就調(diào)用_sleep()函數(shù)進(jìn)行休眠,休眠的時(shí)間可根據(jù)需要進(jìn)行不同的設(shè)置。這樣,可以節(jié)省CPU時(shí)間,以使系統(tǒng)能夠很好地進(jìn)行監(jiān)控工作和處理其它事務(wù)。
              
             。常郑么谕ㄐ诺脑O(shè)計(jì)與實(shí)現(xiàn)
              
              筆者在Windows系統(tǒng)下,采用面向?qū)ο蟮姆椒ê投嗑程技術(shù),并使用VisualC6.0作為編程工具開發(fā)了一個(gè)通用串口通信類CSerialPort,該CSerialPort類封裝了串口通信的基本數(shù)據(jù)和方法,下面給出CSerialPort類的簡(jiǎn)單介紹。
              
              CSerialPort類頭文件中的主要成員變量和成員函數(shù)如下:
              
             。茫欤幔螅螅茫樱澹颍椋幔欤校铮颍
              
              {
              
             。穑颍椋觯幔簦:
              
             。龋粒危模牛蹋韄hPort;
              
             。模茫拢韄Dcb;
              
              COMMTIMEOUTSm_TimeOuts;
              
             。模祝希遥模韄Error;
              
              
              
              
             。校酰猓欤椋:
              
              CSerialPort();??//構(gòu)造函數(shù)
              
             。觯椋颍簦酰幔臁茫樱澹颍椋幔欤校铮颍();??//析構(gòu)函數(shù)
              
              //InitPort()函數(shù)實(shí)現(xiàn)初始化串口
              
             。拢希希蹋桑睿椋簦校铮颍(
              
              char*str=“com1”,
              
             。眨桑危裕拢幔酰洌遥幔簦澹剑梗叮埃,
              
             。眨桑危裕校幔颍椋簦剑,
              
             。眨桑危裕拢簦澹樱椋澹剑,
              
             。眨桑危裕樱簦铮穑拢椋簦螅剑,
              
             。眨桑危裕遥澹幔洌停酰欤簦椋穑欤椋澹颍剑,
              
             。眨桑危裕遥澹幔洌茫铮睿螅簦幔睿簦剑,
              
             。眨桑危裕祝颍椋簦澹停酰欤簦椋穑欤椋澹颍剑保,
              
              UINTWriteConstant=1000);
              
             。模茫拢牵澹簦模茫();?//獲得DCB參數(shù)
              
              //SetDCB()函數(shù)實(shí)現(xiàn)設(shè)置DCB參數(shù)
              
             。拢希希蹋樱澹簦模茫(
              
              UINTBaudRate=9600,
              
             。眨桑危裕校幔颍椋簦剑,
              
              UNITByteSize=8,
              
             。眨桑危裕樱簦铮穑拢椋簦螅剑);
              
             。牵澹簦裕椋恚澹希酰簦()函數(shù)獲得超時(shí)參數(shù)
              
              COMMTIMEOUTSGetTimeOuts();
              
             。樱澹簦裕椋恚澹希酰簦()函數(shù)設(shè)置超時(shí)參數(shù)
              
             。拢希希蹋樱澹簦裕椋恚澹希酰簦(
              
             。眨桑危裕遥澹幔洌停酰欤簦椋穑欤椋澹颍剑,
              
             。眨桑危裕遥澹幔洌茫铮睿螅簦幔睿簦剑,
              
             。眨桑危裕祝颍椋簦澹停酰欤簦椋穑欤椋澹颍剑保,
              
             。眨桑危裕祝颍椋簦澹茫铮睿螅簦幔睿簦剑保埃埃);
              
              //WritePort()函數(shù)實(shí)現(xiàn)寫串口操作
              
             。觯铮椋洌祝颍椋簦澹校铮颍(HANDLEport,CString);
              
             。茫樱簦颍椋睿纾遥澹幔洌校铮颍(HANDLEport);//讀串口操作
              
             。拢希希蹋茫欤铮螅澹校铮颍();?//關(guān)閉串口
              
              };
              
              下面對(duì)該類的重要函數(shù)作以說明:
              
              (1)在構(gòu)造函數(shù)CSerialPort()中已對(duì)該類的數(shù)據(jù)成員進(jìn)行了初始化操作。
              
             。ǎ玻┏跏蓟诤瘮(shù)InitPort()函數(shù)用于完成串口的初始化工作,包括打開串口、設(shè)置DCB參數(shù)、設(shè)置通信的超時(shí)時(shí)間等。
              
              打開串口使用CreateFile()函數(shù),其中InitPort()函數(shù)中的第一個(gè)參數(shù)為要打開的串口,通常將該參數(shù)賦給CreateFile()函數(shù)中的第一個(gè)參數(shù);設(shè)置DCB參數(shù)應(yīng)調(diào)用該類中的SetDCB()函數(shù),并將InitPort()函數(shù)中的第2至第5參數(shù)賦給SetDCB()函數(shù);設(shè)置通信的超時(shí)時(shí)間應(yīng)調(diào)用該類中的SetTimeOuts()函數(shù),并將InitPort()函數(shù)中的第6至第9參數(shù)賦給SetTimeOuts()函數(shù)。另外,該串口是系統(tǒng)資源,應(yīng)該根據(jù)不同要求對(duì)其安全屬性進(jìn)行設(shè)置。
              
             。ǎ常樱澹簦模茫拢ǎ┖瘮(shù)用于設(shè)置DCB參數(shù),包括傳輸?shù)牟ㄌ芈、是否進(jìn)行奇偶校驗(yàn)、每字節(jié)長(zhǎng)度以及停止位等。
              
              (4)SetTimeOuts()函數(shù)用于設(shè)定訪問的超時(shí)值,根據(jù)設(shè)置的值可以計(jì)算出總的超時(shí)間隔。前面兩個(gè)參數(shù)用來設(shè)置讀操作總的超時(shí)值,后面兩個(gè)參數(shù)用來設(shè)置寫操作總的超時(shí)值。
              
              (5)WritePort()函數(shù)用來完成向串口寫數(shù)據(jù)。由于該系統(tǒng)需要對(duì)多個(gè)串口進(jìn)行通信,所以首先應(yīng)把串口號(hào)作為參數(shù)傳遞給該函數(shù);接著該函數(shù)把按參數(shù)傳遞過來的、要發(fā)送的數(shù)據(jù)進(jìn)行編碼(也就是加入校驗(yàn),這樣能減少誤碼率),然后再調(diào)用WindowsAPI函數(shù)WriteFile()并把數(shù)據(jù)發(fā)送到串口。
              
             。ǎ叮遥澹幔洌校铮颍簦ǎ┖瘮(shù)用來完成從串口讀數(shù)據(jù),由于有多個(gè)串口,所以應(yīng)把串口作為參數(shù)傳遞進(jìn)來,然后調(diào)用API函數(shù)ReadFile(),并把下位機(jī)發(fā)送到串口,數(shù)據(jù)讀出來放到緩存里面,接著對(duì)數(shù)據(jù)進(jìn)行處理以將其變換成字符
              
              
              
              串(CString)類型并返回。
              
             。ǎ罚牵澹簦模茫拢ǎ┖瘮(shù)主要用于獲得串口的當(dāng)前配置,可通過調(diào)用API函數(shù)GetCommState()來實(shí)現(xiàn),然后再進(jìn)行相應(yīng)的處理。
              
             。ǎ福牵澹簦裕椋恚澹希酰簦螅ǎ┖瘮(shù)用于獲得訪問超時(shí)值。
              
             。ǎ梗茫欤铮螅澹校铮颍簦ǎ┖瘮(shù)可用來關(guān)閉串口。因?yàn)樵冢祝椋睿洌铮鳎笙到y(tǒng)中串口是系統(tǒng)資源,因而在不用時(shí),應(yīng)將其釋放掉,以便于其它進(jìn)程對(duì)該資源的使用。
              
             。椿诖谕ㄐ诺慕饎偸铣煽刂
              
              金剛石合成控制系統(tǒng)采用主從式控制方式,上位機(jī)為微機(jī)、下位機(jī)為PLC。上位機(jī)的主要功能是對(duì)系統(tǒng)進(jìn)行實(shí)時(shí)監(jiān)控,下位機(jī)的主要功能是對(duì)系統(tǒng)進(jìn)行實(shí)時(shí)控制。上位機(jī)采用Windows98操作系統(tǒng),其監(jiān)控程序可用VC開發(fā),上、下位機(jī)之間通過RS-232與RS-485串口進(jìn)行通信,它們之間采用的通信波特率為9600bps,無奇偶校驗(yàn),每字節(jié)8位,并有1位停止位。上、下位機(jī)之間傳送的數(shù)據(jù)格式可自己定義。由于傳輸數(shù)據(jù)時(shí)可能會(huì)引起錯(cuò)誤,所以加入了校驗(yàn)算法。該系統(tǒng)通過上位機(jī)向下位機(jī)發(fā)送數(shù)據(jù),下位機(jī)收到后就把當(dāng)前系統(tǒng)的狀態(tài)參數(shù)返回給上位機(jī)。由于該系統(tǒng)中所控制的參數(shù)具有遲滯性,所以應(yīng)采用定時(shí)發(fā)送數(shù)據(jù)的方法來采集現(xiàn)場(chǎng)狀態(tài)信息。
              
              上位機(jī)編程時(shí),可用VC6.0生成一個(gè)對(duì)話框類型的程序框架,然后將自己編寫的CSerialPort類加入到該工程中,并在主界面類?CCrystal?中添加一個(gè)CSerialPort類的成員變量serial。當(dāng)監(jiān)控系統(tǒng)開始工作時(shí),可用AfxBeginThread??函數(shù)創(chuàng)建輔助線程來管理串口通信,當(dāng)調(diào)用CSerialPort類中的WritePort??函數(shù)向串口發(fā)送數(shù)據(jù)后,可調(diào)用_sleep??函數(shù)使輔助線程休眠一段時(shí)間,以便使PLC有充分的時(shí)間返回?cái)?shù)據(jù);接著再調(diào)用CSerialPort類中的ReadPort()函數(shù)并從串口讀數(shù)據(jù),然后再調(diào)用_sleep()函數(shù)使輔助線程再休眠一定的時(shí)間。這樣設(shè)計(jì)后,當(dāng)進(jìn)行串口通信時(shí),主線程就能繼續(xù)完成監(jiān)控功能和處理其他事務(wù)。輔助線程函數(shù)的主要代碼如下:
              
             。眨桑危裕樱澹颍椋幔欤校颍铮ǎ觯铮椋洌穑幔颍幔恚
              
              {
              
             。茫悖颍螅簦幔欤恚洌欤纾剑ǎ茫悖颍螅簦幔欤穑幔颍幔?
              
              CStringstr;
              
             。椋睿簦妫欤幔纾剑;
              
             。绻跏蓟谑》祷
              
             。椋妫ǎ。桑睿椋簦校铮颍簦ā埃悖铮恚病保
              
              {AfxMessageBox(“打開串口2失敗”);
              
             。颍澹簦酰颍睿埃
              
              }
              
             。h(huán)讀寫串口,直到結(jié)束
              
             。鳎瑁椋欤澹ǎ妫欤幔纾
              
              {
              
             。@里把要發(fā)送的數(shù)據(jù)傳送給變量str
              
              ……
              
             。虼趯憯(shù)據(jù)
              
             。恚洌欤纾荆螅澹颍椋幔欤祝颍椋簦澹校铮颍(hport,str);
              
             。屳o助線程休眠100ms
              
             。撸螅欤澹澹(100);
              
             。瘡拇谧x數(shù)據(jù)并賦給變量str
              
             。螅簦颍剑恚洌欤纾荆螅澹颍椋幔欤遥澹幔洌校铮颍(hport);
              
             。@里把從串口得到的數(shù)據(jù)進(jìn)行處理
              
              ……
              
              5結(jié)束語(yǔ)
              
              運(yùn)用面向?qū)ο蠓椒ê投嗑程技術(shù)設(shè)計(jì)的通用串口通信類CSerialPort類,通過對(duì)WindowsAPI函數(shù)的封裝使串口通信變得簡(jiǎn)單方便、容易維護(hù)。目前,該軟件系統(tǒng)已成功地應(yīng)用于金剛石合成控制系統(tǒng),并成功解決了RS-232與RS-485兩種串口通信的問題。經(jīng)過幾個(gè)月的運(yùn)行表明,該串口通信軟件工作穩(wěn)定,出色地完成了系統(tǒng)的實(shí)時(shí)監(jiān)控和顯示任務(wù)。此外,由于采用了面向?qū)ο蟮姆椒ê湍K化設(shè)計(jì),該軟件的維護(hù)和升級(jí)十分方便;同時(shí)該系統(tǒng)具有很好的移植性,按照不同需求稍微改動(dòng)一些代碼就可以應(yīng)用于其它控制系統(tǒng)中。

            【金剛石合成控制系統(tǒng)中多串口通信技術(shù)的設(shè)計(jì)與實(shí)現(xiàn)】相關(guān)文章:

            金剛石合成控制系統(tǒng)中多串口通信技術(shù)的設(shè)計(jì)與實(shí)現(xiàn)08-06

            基于Vxworks實(shí)時(shí)操作系統(tǒng)的串口通信程序設(shè)計(jì)與實(shí)現(xiàn)08-19

            在CPLD管理下實(shí)現(xiàn)高效多串口中斷源08-06

            基于PC/104的多串口通訊的設(shè)計(jì)08-06

            Windows CE中實(shí)現(xiàn)藍(lán)牙串口驅(qū)動(dòng)程序08-06

            多媒介通信系統(tǒng)鏈路管理的設(shè)計(jì)和實(shí)現(xiàn)08-06

            遠(yuǎn)程終端中通信控制卡的設(shè)計(jì)與實(shí)現(xiàn)08-06

            智能家居控制系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)08-06

            數(shù)字懸浮控制系統(tǒng)中的降噪方法及實(shí)現(xiàn)08-06