版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、題 目:基于vc+的串口數(shù)據(jù)采集系統(tǒng)設(shè)計(jì)57內(nèi)蒙古科技大學(xué)畢業(yè)設(shè)計(jì)說(shuō)明書(shū)(畢業(yè)論文)基于vc+的串口數(shù)據(jù)采集系統(tǒng)設(shè)計(jì)摘 要隨著現(xiàn)代信息技術(shù)的發(fā)展以及計(jì)算機(jī)網(wǎng)絡(luò)的廣泛使用,計(jì)算機(jī)通信技術(shù)已經(jīng)日漸成熟,但串行通信作為一種靈活方便可靠的通信方式,仍不失為有效的通信手段,被廣泛應(yīng)用于工業(yè)控制中。本文以采集結(jié)晶器振動(dòng)信號(hào)為背景,在windows平臺(tái)下,利用vc+ 6.0提供的mscomm串行通信控件,對(duì)波特率、數(shù)據(jù)位、停止位、奇偶校驗(yàn)位等串口參數(shù)進(jìn)行設(shè)置,完成串口對(duì)數(shù)據(jù)的接收和發(fā)送。通過(guò)rs-232c串行接口接收外部設(shè)備傳遞的實(shí)時(shí)的結(jié)晶器振動(dòng)信號(hào)數(shù)據(jù),對(duì)采集到的振動(dòng)信號(hào)進(jìn)行分析和研究,并繪制結(jié)晶器振動(dòng)實(shí)
2、時(shí)曲線,采用pid算法進(jìn)行參數(shù)整定,利用modbus編寫(xiě)串口通信協(xié)議來(lái)控制結(jié)晶器的振動(dòng),完成對(duì)結(jié)晶器振動(dòng)的實(shí)時(shí)監(jiān)測(cè)。關(guān)鍵詞:vc+;串口通信;mscomm;pid算法內(nèi)蒙古科技大學(xué)畢業(yè)設(shè)計(jì)說(shuō)明書(shū)(畢業(yè)論文)the serial data acquisition system based on the vc+abstractwith the development of modern information technology, as well as the extensive use of computer networks, the computer communication techn
3、ology have become more mature, but serial communication as a convenient and reliable means of communication, is still an effective means of communication, and is widely used in industrial control.this article with the vibration signals of mold collected as the background, in the windows platform ,us
4、ing the serial communication control of mscomm provided by the vc + + 6.0,with baud rate, data bits, stop bits, parity bit, such as serial port parameters to set to complete the serial port to receive and send data. through the rs-232c serial interface to external equipment to receive real-time tran
5、smission of mold vibration signal data, the vibration signals collected for analysis and research, and real-time rendering mold vibration curve, tuning the use of pid algorithm parameter, using modbus serial communication protocol to control the mold vibration, to complete the mold of the real-time
6、monitoring of vibration.key words: vc+;serial communication;mscomm;pid algorithm內(nèi)蒙古科技大學(xué)畢業(yè)設(shè)計(jì)說(shuō)明書(shū)(畢業(yè)論文)目 錄摘 要iabstractii第一章 緒論11.1 研究背景11.2 研究現(xiàn)狀21.3 研究意義2第二章數(shù)據(jù)采集系統(tǒng)總體方案設(shè)計(jì)42.1系統(tǒng)的設(shè)計(jì)要求42.2系統(tǒng)的功能實(shí)現(xiàn)4第三章系統(tǒng)軟件設(shè)計(jì)53.1 開(kāi)發(fā)軟件選擇53.2 串行通信系統(tǒng)63.2.1 串行通信概念63.2.2 串行通信的種類73.2.3 串行通信的傳輸方向93.2.4 串行通信接口93.3 mscomm串行通訊設(shè)計(jì)113.3.1
7、添加mscomm控件113.3.2在sdi中使用mscomm控件123.3.3串口的初始化及打開(kāi)串口133.3.4 mscomm接收數(shù)據(jù)處理153.4 通信協(xié)議設(shè)計(jì)173.4.1 modbus協(xié)議173.4.2 modbus協(xié)議的兩種傳輸方式183.4.3兩種協(xié)議的檢驗(yàn)方式203.4.4 modbus的功能碼233.5數(shù)據(jù)圖形顯示253.5.1坐標(biāo)軸的繪制253.5.2定時(shí)器的設(shè)置26第四章人機(jī)交互界面設(shè)計(jì)284.1 登陸界面設(shè)計(jì)284.1.1創(chuàng)建登陸界面284.1.2界面字體設(shè)計(jì)294.1.3界面背景色設(shè)計(jì)304.1.4用戶權(quán)限設(shè)置314.2 控制界面設(shè)計(jì)324.2.1 pid控制系統(tǒng)324
8、.2.2 pid控制原理和特點(diǎn)344.2.3 pid參數(shù)整定方法354.2.4 pid算法的實(shí)現(xiàn)36設(shè)計(jì)總結(jié)38參考文獻(xiàn)39附錄 源程序40致謝54第一章 緒論1.1 研究背景隨著計(jì)算機(jī)系統(tǒng)的應(yīng)用和微機(jī)網(wǎng)絡(luò)的發(fā)展,通信功能越來(lái)越顯得重要。計(jì)算機(jī)與外界的信息交換稱為通信。因此,通信既包括計(jì)算機(jī)與計(jì)算機(jī)之間,也包括計(jì)算機(jī)和外部設(shè)備之間、計(jì)算機(jī)與單片機(jī)之間的信息交換?;镜耐ㄐ欧绞接胁⑿型ㄐ藕痛型ㄐ艃煞N。人們?yōu)榱烁玫卣J(rèn)識(shí)世界,盡可能多地獲取自然界的各種信息,單純依靠人類的感官已遠(yuǎn)遠(yuǎn)不能滿足人們的愿望。由微處理器和各種性能優(yōu)良的器件構(gòu)成的數(shù)據(jù)采集系統(tǒng)的應(yīng)用日益廣泛為人類獲取各種信息提供了必要的手段
9、,數(shù)據(jù)采集系統(tǒng)是模擬系統(tǒng)和數(shù)字系統(tǒng)之間的接口。為了能夠采集快速變化的信號(hào),例如,發(fā)動(dòng)機(jī)的點(diǎn)火過(guò)程、機(jī)械的沖擊振動(dòng)等等,總是希望數(shù)據(jù)采集速率越快越好,所以,一個(gè)數(shù)據(jù)采集系統(tǒng)的優(yōu)良與否直接關(guān)系到一個(gè)控制系統(tǒng)性能的好壞。應(yīng)用上位機(jī)實(shí)現(xiàn)現(xiàn)場(chǎng)的采集與控制越來(lái)越被大家所重視,上位機(jī)提供良好的人機(jī)界面,使現(xiàn)場(chǎng)監(jiān)控更直接、簡(jiǎn)潔可靠和穩(wěn)定。在現(xiàn)代鋼鐵企業(yè)中,結(jié)晶器是連續(xù)鑄鋼中的鑄坯成型設(shè)備,也是連鑄機(jī)心臟設(shè)備和關(guān)鍵技術(shù)。最初的連鑄機(jī)結(jié)晶器是靜止的,在拉坯過(guò)程中極易與結(jié)晶器壁發(fā)生粘結(jié),從而導(dǎo)致拉不動(dòng)和拉漏事故。因此靜止不振動(dòng)的結(jié)晶器限制了連鑄生產(chǎn)的工業(yè)化。結(jié)晶器振動(dòng)是使結(jié)晶器按給定的振動(dòng)幅度、振動(dòng)頻率和波形偏斜特
10、性沿連鑄機(jī)外弧線運(yùn)動(dòng)。其目的是便于“脫?!?,能有效地防止連鑄坯在凝固過(guò)程中與結(jié)晶器銅壁發(fā)生粘結(jié)而出現(xiàn)粘掛拉裂和拉漏事故,提高連鑄坯的表面質(zhì)量。考慮到結(jié)晶器振動(dòng)狀況選擇的不同對(duì)連鑄坯表面質(zhì)量好壞產(chǎn)生的重要影響,我們希望選擇最佳的振動(dòng)狀況,保證煉出鋼的質(zhì)量最好,從而決定結(jié)晶器振動(dòng)狀況的參數(shù)包括結(jié)晶器的振動(dòng)幅度和振動(dòng)頻率等,因此,對(duì)結(jié)晶器振動(dòng)狀況的控制其實(shí)就是來(lái)調(diào)整這些振動(dòng)參數(shù)。1.2 研究現(xiàn)狀在現(xiàn)存的工業(yè)通信中,串行通信技術(shù)依然有很大的生存空間。目前以太網(wǎng)基本上實(shí)現(xiàn)的是計(jì)算機(jī)設(shè)備與設(shè)備之間的互聯(lián),而在接入終端,很多設(shè)備與計(jì)算機(jī)的連接是通過(guò)串行通信接口來(lái)實(shí)現(xiàn)的。在計(jì)算機(jī)剛剛出現(xiàn)的時(shí)候,設(shè)備連接問(wèn)題就
11、出現(xiàn)了。比如說(shuō)銀行最早的ibm大型機(jī)需要和終端連接,這個(gè)連接就是用串行通信技術(shù)來(lái)實(shí)現(xiàn)的。直到現(xiàn)在,串行通信技術(shù)被廣泛地應(yīng)用到it和工業(yè)通信領(lǐng)域。隨著互聯(lián)網(wǎng)絡(luò)技術(shù)的興起,串行通信技術(shù)也得到新的發(fā)展空間。計(jì)算機(jī)常常通過(guò)串口連接modem或其他可在pstn公用電話網(wǎng)上使用的通信設(shè)備(網(wǎng)絡(luò)控制器等),采用撥號(hào)或租用專線的方式入網(wǎng),與遠(yuǎn)程的終端服務(wù)器、pos機(jī)、atm取款機(jī)等在廣域網(wǎng)或城域網(wǎng)范圍內(nèi)通信。局域網(wǎng)lan中也可采用串行通信技術(shù),計(jì)算機(jī)將串口直接連接到終端服務(wù)器上。在網(wǎng)絡(luò)中的以太網(wǎng)交換機(jī)、路由器設(shè)備等主要的數(shù)據(jù)傳輸設(shè)備中,人們除了可以見(jiàn)到以太網(wǎng)接口、光纖接口以外,還可以見(jiàn)到一個(gè)控制口,即cons
12、ole口,這個(gè)接口使用的也是串行通信技術(shù)。在連鑄煉鋼過(guò)程中,提高連鑄機(jī)的生產(chǎn)率是國(guó)內(nèi)外冶金界共同努力的方向。而加快澆鑄速度是增加連鑄機(jī)生產(chǎn)率的最有效途徑。但澆鑄速度的提高又會(huì)帶來(lái)連鑄機(jī)工作穩(wěn)定性和鑄坯表面質(zhì)量下降的問(wèn)題。最令人擔(dān)心的是鑄速提高會(huì)使結(jié)晶器內(nèi)凝固殼厚度減薄,坯殼與結(jié)晶器之間摩擦力增大而引起的漏鋼事故增加,嚴(yán)重影響連鑄坯的表面質(zhì)量。1.3 研究意義由于串行通信是在一根傳輸線上一位一位的傳送信息,所用的傳輸線少,并且可以借助現(xiàn)成的電話網(wǎng)進(jìn)行信息傳送,因此,特別適合于遠(yuǎn)距離傳輸。對(duì)于那些與計(jì)算機(jī)相距不遠(yuǎn)的人機(jī)交換設(shè)備和串行存儲(chǔ)的外部設(shè)備如終端、打印機(jī)、邏輯分析儀、磁盤(pán)等,上位機(jī)與下位機(jī)之
13、間的通信,采用串行方式交換數(shù)據(jù)也很普遍。在實(shí)時(shí)控制和管理方面,采用多臺(tái)微機(jī)處理機(jī)組成分級(jí)分布控制系統(tǒng)中,各cpu之間的通信一般都是串行方式。所以串行接口是微機(jī)應(yīng)用系統(tǒng)常用的接口。串行通信廣泛應(yīng)用于internet、電信、金融、工業(yè)控制、服務(wù)業(yè)、終端連線及其他應(yīng)用領(lǐng)域,在不同的應(yīng)用領(lǐng)域,串行通信可以與其他通信方式相結(jié)合、與access或mssql數(shù)據(jù)庫(kù)相結(jié)合、與winsock通信相結(jié)合,方便的與sms模塊、modem、rabbit 2000潛入式系統(tǒng)、plc通信程序、matlab環(huán)境等進(jìn)行通信,所以研究串口通信軟件設(shè)計(jì)具有很強(qiáng)應(yīng)用價(jià)值。第二章 數(shù)據(jù)采集系統(tǒng)總體方案設(shè)計(jì)2.1系統(tǒng)的設(shè)計(jì)要求在工業(yè)生
14、產(chǎn)中,為了減少摩擦力,結(jié)晶器會(huì)按一定的振動(dòng)模式相對(duì)鑄坯做振動(dòng)。而不同的振動(dòng)對(duì)連鑄坯表面質(zhì)量好壞產(chǎn)生的重要影響。因此為了冶煉出鋼的質(zhì)量最好,就要對(duì)結(jié)晶器的振動(dòng)情況進(jìn)行監(jiān)測(cè)和控制。對(duì)此提出以下設(shè)計(jì)要求:利用vc+編寫(xiě)的串口通信程序能夠接收到單片機(jī)數(shù)據(jù)采集系統(tǒng)傳遞的結(jié)晶器振動(dòng)數(shù)據(jù)并發(fā)送數(shù)據(jù),通過(guò)pid控制算法和modbus通信協(xié)議來(lái)控制結(jié)晶器的振動(dòng),使結(jié)晶器的振動(dòng)達(dá)到工藝要求。2.2系統(tǒng)的功能實(shí)現(xiàn)設(shè)計(jì)的主要思想是利用串行通信技術(shù)完成對(duì)結(jié)晶器振動(dòng)的實(shí)時(shí)數(shù)據(jù)采集。則系統(tǒng)軟件各部分的功能如下:1、為了對(duì)控制系統(tǒng)進(jìn)行一定的安全防范,創(chuàng)建一個(gè)登陸界面來(lái)進(jìn)行用戶權(quán)限控制。2、使用mscomm控件來(lái)進(jìn)行串口通信設(shè)
15、置,與下位機(jī)進(jìn)行串口數(shù)據(jù)采集。3、使用軟件定時(shí)器的方法來(lái)實(shí)現(xiàn)動(dòng)態(tài)曲線的顯示。4、采用pid控制算法來(lái)完成對(duì)結(jié)晶器振動(dòng)參數(shù)控制。第三章 系統(tǒng)軟件設(shè)計(jì)3.1 開(kāi)發(fā)軟件選擇vc+是微軟公司開(kāi)發(fā)的一個(gè)ide(集成開(kāi)發(fā)環(huán)境),就是使用c+的一個(gè)開(kāi)發(fā)平臺(tái)。vc主要由是mfc組成,是與系統(tǒng)聯(lián)系非常緊密的編程工具,它兼有高級(jí),和低級(jí)語(yǔ)言的雙重性,功能強(qiáng)大,靈活,執(zhí)行效率高,幾乎可說(shuō)vc在 windows平臺(tái)無(wú)所不能。mfc實(shí)際上是微軟提供的,用于在c+環(huán)境下編寫(xiě)應(yīng)用程序的一個(gè)框架和引擎。vc+應(yīng)用程序的開(kāi)發(fā)主要有兩種模式,一種是win api方式,另一種則是mfc方式,傳統(tǒng)的win api開(kāi)發(fā)方式比較繁瑣,而
16、mfc則是對(duì)win api再次封裝,所以mfc相對(duì)于win api開(kāi)發(fā)更具備效率優(yōu)勢(shì)。visual basic 是一種可視化的、面向?qū)ο蠛筒捎檬录?qū)動(dòng)方式的結(jié)構(gòu)化高級(jí)程序設(shè)計(jì)語(yǔ)言,可用于開(kāi)發(fā) windows 環(huán)境下的各類應(yīng)用程序。vb作為開(kāi)發(fā)工具而言它使用basic這種面向過(guò)程的語(yǔ)言來(lái)進(jìn)行工作,把一個(gè)項(xiàng)目或者說(shuō)一套解決方案分成若干個(gè)模塊每個(gè)過(guò)程完成相應(yīng)的工作。而c+是一種面向?qū)ο蟮木幊陶Z(yǔ)言,它的思想更接近于人的思維,它認(rèn)為萬(wàn)物皆對(duì)象,而每個(gè)對(duì)象既是獨(dú)立存在具有主動(dòng)思維的個(gè)體,又可以是互相作用相互制約的聯(lián)系!vc編程的更注重效率,編譯后得到的程序可直接運(yùn)行,vc是面向?qū)ο蟮?,而vb則是基于對(duì)象的
17、。因?yàn)関b只有封裝的特性,卻不支持繼承和多態(tài)。開(kāi)發(fā)一個(gè)使用在windows下的軟件,c+可以說(shuō)是一個(gè)規(guī)范,現(xiàn)在的c+編譯器或多或少都對(duì)它進(jìn)行了擴(kuò)充,集成了更多東西。其主要應(yīng)用方面如下: vc主要是針對(duì)windows系統(tǒng),適合一些系統(tǒng)級(jí)的開(kāi)發(fā),可以方便實(shí)現(xiàn)一些底層的調(diào)用。在vc里邊嵌入?yún)R編語(yǔ)言很簡(jiǎn)單。 vc主要用在驅(qū)動(dòng)程序開(kāi)發(fā)。vc執(zhí)行效率高,當(dāng)對(duì)系統(tǒng)性能要求很高的時(shí)候,可用vc開(kāi)發(fā)。 vc主要適用于游戲開(kāi)發(fā)。vc多用于單片機(jī),工業(yè)控制等軟件開(kāi)發(fā)。 vc可以開(kāi)發(fā)優(yōu)秀的基于通信的程序。 vc可以開(kāi)發(fā)高效靈活的文件操作程序。 vc可以開(kāi)發(fā)靈活高效的數(shù)據(jù)庫(kù)操作程序。 vc是編cad軟件的唯一選擇!包括
18、autocad的二次開(kāi)發(fā)。 vc在多線程、網(wǎng)絡(luò)通信、分布應(yīng)用方面,vc+有不可比擬的優(yōu)勢(shì)。3.2 串行通信系統(tǒng)3.2.1 串行通信概念cpu與外設(shè)之間信息交換的過(guò)程稱為通信。根據(jù)cpu與外設(shè)之間連線結(jié)構(gòu)和數(shù)據(jù)發(fā)送方式的不同,可將通信分為并行通信和串行通信兩種基本方式3。在并行通信方式中,數(shù)據(jù)各位同時(shí)傳送,如圖3.1所示,并行通信的優(yōu)點(diǎn)是速度快,多用與同一設(shè)備內(nèi)不同器件或模塊之間的數(shù)據(jù)傳輸;缺點(diǎn)是需要傳輸線多,干擾大、可靠性差,線路架設(shè)困難,且成本高不適合進(jìn)行長(zhǎng)距離數(shù)據(jù)傳輸。 圖 3.1并行通信 圖 3.2 串行通信在串行通信方式中,數(shù)據(jù)位逐一傳送,如圖3.2所示。串行通信的優(yōu)點(diǎn)是所需傳輸線少,
19、適合遠(yuǎn)距離傳輸。假設(shè)并行傳送8位二進(jìn)制所需時(shí)間為t,在發(fā)送速率相同的情況下,串行傳送至少需要8t。而在實(shí)用的串行通信系統(tǒng)中,還需要在數(shù)據(jù)位前、后分別插入起始位和停止位,以保證數(shù)據(jù)可靠接收,因此實(shí)際傳輸時(shí)間大于8t。3.2.2 串行通信的種類根據(jù)數(shù)據(jù)傳輸方式的不同,可將串行通信分為同步通信和異步通信。同步通信是一種數(shù)據(jù)連續(xù)傳輸?shù)拇型ㄐ欧绞健Mㄐ艜r(shí),發(fā)送方把需要發(fā)送的多個(gè)字符節(jié)的數(shù)據(jù)和校驗(yàn)信息連接起來(lái),形成數(shù)據(jù)塊。發(fā)送時(shí),發(fā)送方只需在數(shù)據(jù)塊前面插入12個(gè)特殊的同步字符,然后按特定速率逐位輸出數(shù)據(jù)塊內(nèi)的每一個(gè)數(shù)據(jù)位。顯然,在這種通信方式中,數(shù)據(jù)塊內(nèi)各個(gè)字節(jié)數(shù)據(jù)之間沒(méi)有間隙,傳輸效率高,但發(fā)送、接收
20、雙方必須保持同步,且數(shù)據(jù)塊的長(zhǎng)度越大,對(duì)同步的要求就越高。因此,同步通信設(shè)備結(jié)構(gòu)復(fù)雜(發(fā)送方要能自動(dòng)插入同步字符,接收方要能自動(dòng)檢測(cè)出同步字符,且發(fā)送、接收時(shí)鐘相同,即除了數(shù)據(jù)線和地線外,還需要時(shí)鐘信號(hào)線),成本高,多用在高速數(shù)字通信系統(tǒng)中。典型的同步通信數(shù)據(jù)幀格式如表3.1所示:表 3.1 同步通信數(shù)據(jù)幀同步字符1同步字符2n個(gè)字節(jié)的連續(xù)數(shù)據(jù)校驗(yàn)信息1校驗(yàn)信息2異步通信的特點(diǎn)是每次只傳送一個(gè)字,每個(gè)字由起始位、數(shù)據(jù)位、奇偶校驗(yàn)位和停止位組成,典型的異步通信數(shù)據(jù)幀格式如圖3.3所示,圖 3.3 異步通信數(shù)據(jù)幀字符幀也叫數(shù)據(jù)幀,由起始位、數(shù)據(jù)位、奇偶校驗(yàn)位和停止位等四部分組成。起始位:位于字符幀
21、開(kāi)頭,只占一位,為邏輯0低電平,用于向接收設(shè)備表示發(fā)送端開(kāi)始發(fā)送一幀信息。數(shù)據(jù)位:緊跟起始位之后,用戶根據(jù)情況可取5位、6位、7位或8位,低位在前高位在后。奇偶校驗(yàn)位:位于數(shù)據(jù)位之后,僅占一位,用來(lái)表征串行通信中采用奇校驗(yàn)還是偶校驗(yàn),由用戶決定。停止位:位于字符幀最后,為邏輯1高電平。通??扇?位、1.5位或2位,用于向接收端表示一幀字符信息已經(jīng)發(fā)送完,也為發(fā)送下一幀作準(zhǔn)備。在串行通信中,兩相鄰字符幀之間可以沒(méi)有空閑位,也可以有若干空閑位,這由用戶來(lái)決定。波特率是異步通信的另一個(gè)重要指標(biāo)。波特率是每秒鐘傳送二進(jìn)制數(shù)碼的位數(shù),也叫比特?cái)?shù),單位為bit/s,即位/秒。波特率用于表征數(shù)據(jù)傳輸?shù)乃俣龋?/p>
22、波特率越高,數(shù)據(jù)傳輸速度越快。但波特率和字符的實(shí)際傳輸速率不同,字符的實(shí)際傳輸速率是每秒內(nèi)所傳字符幀的幀數(shù),和字符幀格式有關(guān)??梢?jiàn),異步通信與同步通信并沒(méi)有本質(zhì)的區(qū)別,只是在異步通信中數(shù)據(jù)塊長(zhǎng)度短(一般為一個(gè)字節(jié)),收發(fā)雙方容易實(shí)現(xiàn)同步,但各數(shù)據(jù)塊之間不連續(xù)(即插入了起、止位)。異步通信的過(guò)程可概述為:對(duì)于發(fā)送方來(lái)說(shuō),發(fā)送時(shí),先輸出底電平的起始位,然后按特定速率發(fā)送數(shù)據(jù)位,當(dāng)最后一位數(shù)據(jù)發(fā)送完畢后,發(fā)送一個(gè)高電平的停止位,這樣就完成了一幀數(shù)據(jù)的發(fā)送過(guò)程。如果不再需要發(fā)送新的數(shù)據(jù)或數(shù)據(jù)尚未準(zhǔn)備就緒時(shí),就將數(shù)據(jù)傳輸線置為高電平狀態(tài)。對(duì)于接收方來(lái)說(shuō),要不斷檢測(cè)傳輸線路上的電平狀態(tài)。當(dāng)發(fā)現(xiàn)傳輸線由高電
23、平變?yōu)榈碗娖綍r(shí),即認(rèn)為有數(shù)據(jù)傳入,進(jìn)入接收準(zhǔn)備狀態(tài),然后以相同速率檢測(cè)傳輸線的電平狀態(tài),接收隨后送來(lái)的數(shù)據(jù)位、奇偶校驗(yàn)位和停止位。也就是說(shuō),在異步通信方式中,發(fā)送方通過(guò)控制數(shù)據(jù)線的電平狀態(tài)來(lái)完成數(shù)據(jù)的發(fā)送,接收方通過(guò)檢測(cè)數(shù)據(jù)線的電平狀態(tài)確認(rèn)是否有數(shù)據(jù)傳入以及接收的數(shù)據(jù)位是0還是1,只要發(fā)送速率和接收檢測(cè)速率相同,就能準(zhǔn)確接收,發(fā)送、接收設(shè)備可以使用各自的時(shí)鐘源完成數(shù)據(jù)的發(fā)送和接收,無(wú)需要使用同一時(shí)鐘信號(hào)??梢?jiàn),異步串行通信所需要傳輸線最少,一根數(shù)據(jù)線和一根地線就能實(shí)現(xiàn)數(shù)據(jù)的發(fā)送及其接收。3.2.3 串行通信的傳輸方向根據(jù)串行通信數(shù)據(jù)的傳輸方向,如圖3.4所示,可將串行通信系統(tǒng)分為單工方式、半雙
24、工方式、和全雙工方式3。如果兩串行通信設(shè)備之間只有一根數(shù)據(jù)線,一方發(fā)送,另一方接收,就構(gòu)成了“單工”方式,如圖3.4(a)。如果兩串行通信設(shè)備之間將依靠一根數(shù)據(jù)線分時(shí)收、發(fā)數(shù)據(jù),就構(gòu)成了,“半雙工”通信方式,如圖3.4(b)。在這種方式中,在同一傳輸線上要完成數(shù)據(jù)的雙向傳輸,因此通信雙方不可能同時(shí)發(fā)送和接收,任何時(shí)候只能是一方發(fā)送,另一方在接收。如果在兩通信設(shè)備之間能同時(shí)接受和發(fā)送,就構(gòu)成了,“全雙工” 通信方式,如圖3.4(c)。由于允許同時(shí)發(fā)送和接收,就需要兩根數(shù)據(jù)線:a設(shè)備的發(fā)送端接b設(shè)備的接收端;b設(shè)備的發(fā)送端接a設(shè)備的接收端。圖 3.4 通信方式3.2.4 串行通信接口串行接口簡(jiǎn)稱串
25、口,也稱串行通信接口(通常指com接口),是采用串行通信方式的擴(kuò)展接口。一條信息的各位數(shù)據(jù)被逐位按順序傳送的通訊方式稱為串行通訊。串行通訊的特點(diǎn)是:數(shù)據(jù)位傳送,按位順序進(jìn)行,最少只需一根傳輸線即可完成。串口的出現(xiàn)是在1980年前后,數(shù)據(jù)傳輸率是115kbps230kbps。串口出現(xiàn)的初期是為了實(shí)現(xiàn)連接計(jì)算機(jī)外設(shè)的目的,初期串口一般用來(lái)連接鼠標(biāo)和外置modem以及老式攝像頭和寫(xiě)字板等設(shè)備。串口也可以應(yīng)用與由于兩臺(tái)計(jì)算機(jī)(或設(shè)備)之間的互聯(lián)及數(shù)據(jù)傳輸。由于串口(com)不支持熱插拔及傳輸速率較低目前部分新主板和大部分便攜電腦已開(kāi)始取消該接口,目前串口多用于工控和測(cè)量設(shè)備以及部分通信設(shè)備中。rs-2
26、32也稱標(biāo)準(zhǔn)串口,最常用的一種串行通訊接口。它是在1970年由美國(guó)電子工業(yè)協(xié)會(huì)(eia)聯(lián)合貝爾系統(tǒng)、調(diào)制解調(diào)器廠家及計(jì)算機(jī)終端生產(chǎn)廠家共同制定的用于串行通訊的標(biāo)準(zhǔn)。它的全名是“數(shù)據(jù)終端設(shè)備(dte)和數(shù)據(jù)通訊設(shè)備(dce)之間串行二進(jìn)制數(shù)據(jù)交換接口技術(shù)標(biāo)準(zhǔn)”。傳統(tǒng)的rs-232-c接口標(biāo)準(zhǔn)有22根線,采用標(biāo)準(zhǔn)25芯d型插頭座(db25),后來(lái)使用簡(jiǎn)化為9芯d型插座(db9),現(xiàn)在應(yīng)用中25芯插頭座已很少采用。rs-232串行接口起初僅是用于ibm-pc中支持調(diào)制解調(diào)器與打印機(jī)的連接,迄今已廣泛應(yīng)用于支持不同的外部設(shè)備和pc之間的通信,它已被定義為一種在低速率(最高為20kbps)串行通信中增
27、大通信距離的單端標(biāo)準(zhǔn)。多年以來(lái),該項(xiàng)標(biāo)準(zhǔn)一直在修訂,以適應(yīng)速度更快驅(qū)動(dòng)器的需求,比如max3225,其數(shù)據(jù)率高達(dá)1mbps。rs-232串行接口信號(hào)在正負(fù)電平之間波動(dòng)。雖然rs-232串行接口的數(shù)據(jù)是反相的,但從晶體管晶體管邏輯電路(ttl)電平至rs-232電平再返回到ttl電平的轉(zhuǎn)換過(guò)程又恢復(fù)了初始的極性。rs-232串行接口傳送距離不會(huì)超過(guò)100英尺,原因是發(fā)送電平(±5v)和接收電平(±3v)之差僅允許2v的共模抑制,電纜上的分布電容由于超過(guò)了規(guī)定的負(fù)載(2500pf),從而降低了擺率。因?yàn)閞s-232串行接口的設(shè)計(jì)為點(diǎn)至點(diǎn),并不是多點(diǎn)接口,其驅(qū)動(dòng)器額定負(fù)載為單個(gè)3
28、7k。假如需要的話,采用菊花鏈原理則可實(shí)現(xiàn)多點(diǎn)連接。在菊花鏈配置中,rs-232串行接口信號(hào)先進(jìn)入一個(gè)接收器,再送至一個(gè)發(fā)送器中驅(qū)動(dòng)下一個(gè)單元。對(duì)該種技術(shù)而言,電纜的斷裂是一個(gè)主要問(wèn)題。如發(fā)生在從機(jī)1和從機(jī)2之間的斷裂將使得所有后續(xù)設(shè)備無(wú)法發(fā)送和接收數(shù)據(jù)。利用預(yù)緩沖或增強(qiáng)rs-232串行接口的輸出驅(qū)動(dòng)能力(讓其能驅(qū)動(dòng)多個(gè)并行的5k輸入負(fù)載)、或切換輸入負(fù)載亦可實(shí)現(xiàn)多點(diǎn)rs-232通信,此外,將rs-232串行接口的收信機(jī)(rx)和發(fā)信機(jī)(tx)信號(hào)轉(zhuǎn)換成rs-422串行接口信號(hào)同樣可實(shí)現(xiàn)rs-232串行接口的多點(diǎn)通信。3.3 mscomm串行通訊設(shè)計(jì)3.3.1添加mscomm控件visual
29、c+為我們提供了一種好用的activex控件microsoft communications control(即mscomm)來(lái)支持應(yīng)用程序?qū)Υ诘脑L問(wèn),在應(yīng)用程序中插入mscomm控件后就可以較為方便地實(shí)現(xiàn)對(duì)通過(guò)計(jì)算機(jī)串口收發(fā)數(shù)據(jù)。其添加方法如下:1、將mscomm控件添加到當(dāng)前工程中。在visual c+主界面中,單擊project | add to project中components and controls命令。打開(kāi)registered activex controls文件夾。2、彈出如圖3.5所示的components and controls gallery對(duì)話框,單擊micro
30、soft communications control,version 6.0選項(xiàng),然后單擊insert按鈕。圖 3.5 components and controls gallery對(duì)話框3、彈出如圖3.6所示的microsoft visual c+對(duì)話框,單擊確定按鈕。 圖3.6 microsoft visual c+對(duì)話框然后彈出如圖3.7所示的comfirm classes 對(duì)話框。不需要修改窗口中的任何參數(shù),單擊ok按鈕。然后單擊3.5所示對(duì)話框的close按鈕即完成控件的加載。此時(shí),在visual c+工具箱中可以看到名稱為microsoft communications cont
31、rol,version 6.0的圖標(biāo)。在visual c+主界面workspace窗口中,單擊class view選項(xiàng)卡,可以看到在列表中增加了一個(gè)cmscomm類。表明mscomm控件已經(jīng)加載到程序中??丶Q為cmscomm。圖3.7 comfirm classes 對(duì)話框3.3.2在sdi中使用mscomm控件由于單文檔接口程序在設(shè)計(jì)期間沒(méi)有提供窗口,所以無(wú)法像基于對(duì)話框的程序那樣將控件拖動(dòng)到窗口上自動(dòng)建立cmscomm控件的id。所以,需使用程序來(lái)創(chuàng)建cmscomm類的實(shí)例。為使創(chuàng)建的控件實(shí)例在整個(gè)程序中都可以訪問(wèn),一般將控件實(shí)例創(chuàng)建在cmainframe類的實(shí)例中。具體創(chuàng)建過(guò)程應(yīng)包括
32、如下幾個(gè)主要方面:1、在主框架頭文件mainfrm.h中添加代碼。#include “mscomm.h” /在應(yīng)用區(qū),加入對(duì)mscomm控件類頭文件的引用class cmainframe : public cframewndprotected:cmscomm mycom;/聲明cmscomm類的對(duì)象mycommafx_msg void oncommmscomm();/聲明mycomm控件事件的響應(yīng)函數(shù)declare_eventsink_map();/聲明mycomm控件的事件引用宏;2、在主框架實(shí)現(xiàn)文件mainfrm.cpp中添加代碼。begin_eventsink_map(cmainfram
33、e,cframewnd) on_event(cmainframe, idc_mscomm1, oncommmscomm,vts_none) end_eventsink_map() /mycomm控件引用宏的實(shí)現(xiàn)代碼在主框架類成員函數(shù)oncreate()函數(shù)中添加如下代碼:int cmycomview:oncreate(lpcreatestruct lpcreatestruct) dword style=ws_visible|ws_child;/聲明樣式變量styleif (!mycomm.create(null,style,crect(0,0,0,0),this,idc_mscomm1)afx
34、messagebox("failed to create ole communications controln");return -1;/ 創(chuàng)建mycomm對(duì)象的實(shí)例3、在手工定義資源文件中添加id。3.3.3串口的初始化及打開(kāi)串口在使用mscomm控件前,要對(duì)串口進(jìn)行初始化,初始化只要完成對(duì)串口的參數(shù)進(jìn)行設(shè)置,包括使用的端口、通信波特率、數(shù)據(jù)位、奇偶校驗(yàn)、停止位。如圖3.8,設(shè)置好參數(shù)后,就可以打開(kāi)串口。圖3.8 參數(shù)設(shè)置if(mycomm.getportopen()mycomm.setportopen(false); /如果串口是打開(kāi)的,則行關(guān)閉串口mycomm.se
35、tinbuffersize(1024);/指定接收緩沖區(qū)大小mycomm.setinbuffercount(0);/清空接收緩沖區(qū)mycomm.setinputmode(1);/設(shè)置數(shù)據(jù)獲取方式mycomm.setinputlen(0);/設(shè)置每次讀取長(zhǎng)度mycomm.setrthreshold(1);/設(shè)置接收oncomm事件門(mén)限mycomm.setportopen(1);/設(shè)置打開(kāi)端口號(hào)mycomm.setsettings("9600,n,8,1");串口接收數(shù)據(jù)事件的初始化還要在主框架cpp文件中加入以下事件驅(qū)動(dòng)說(shuō)明,begin_eventsink_map(csdms
36、com1view, cview)/afx_eventsink_map(caboutdlg)on_event(csdmscom1view, idc_mscomm1, 1 /* oncomm */, oncomm, vts_none)/afx_eventsink_mapend_eventsink_map()3.3.4 mscomm接收數(shù)據(jù)處理 該控件只有一個(gè)事件,即oncomm事件。當(dāng)mscomm控件在接收到數(shù)據(jù)事件發(fā)生時(shí)能及時(shí)響應(yīng)并獲取緩沖區(qū)中的數(shù)據(jù),由微機(jī)接收到從單片機(jī)數(shù)據(jù)采集系統(tǒng)傳遞的variant類型的數(shù)據(jù)后,將variant類型的數(shù)據(jù)轉(zhuǎn)換成十進(jìn)制數(shù)值再送到程序中去進(jìn)行曲線顯示。無(wú)論何時(shí)當(dāng)
37、commevent屬性的值變化時(shí),就會(huì)激發(fā)oncomm事件,這表明控件新發(fā)生了一個(gè)通信事件或一個(gè)錯(cuò)誤。根據(jù)commevent屬性值判斷出發(fā)生了什么具體事件。通常在oncomm事件的響應(yīng)代碼段內(nèi)使用switch函數(shù)根據(jù)commevent值來(lái)分別執(zhí)行各種情況下的處理程序5。使用mscomm控件時(shí),其中一個(gè)難點(diǎn)就是對(duì)輸入緩沖區(qū)和輸出緩沖區(qū)的數(shù)據(jù)進(jìn)行處理。因?yàn)橄蜉敵鼍彌_區(qū)寫(xiě)入的數(shù)據(jù)及輸入緩沖區(qū)讀出的是數(shù)據(jù)都是variant類型的數(shù)據(jù),而程序中常用的通信數(shù)據(jù)既可能是文本型的字符串,又可能是二進(jìn)制的數(shù)值。能否處理好字符串與variant類型數(shù)據(jù)間的轉(zhuǎn)換及二進(jìn)制數(shù)據(jù)與variant類型數(shù)據(jù)的轉(zhuǎn)換,對(duì)能否成功
38、應(yīng)用通信至關(guān)重要。本設(shè)計(jì)對(duì)接收事件的處理具體代碼如下,updatedata(true);/取控件的數(shù)據(jù)switch(mycomm.getcommevent() case 2: variant variant_inp;colesafearray safearray_inp;long len,k;byte rxdata2048; /設(shè)置byte數(shù)組cstring strtemp;variant_inp=mycomm.getinput();/讀緩沖區(qū) safearray_inp=variant_inp;/variant型變量轉(zhuǎn)換為colesafearray型變量 len=safearray_inp.
39、getonedimsize();/得到有效數(shù)據(jù)長(zhǎng)度 for(k=0;k<len;k+)safearray_inp.getelement(&k, rxdata + k);/轉(zhuǎn)換為byte型數(shù)組for(k = 0; k < len; k+)/將數(shù)組轉(zhuǎn)換為cstring型變量byte bt = *(char*)(rxdata + k); /字符型trtemp.format("%02x ", bt);/將字符送入臨時(shí)變量strtemp存放 updatedata(false);updatedata(false);/更新編輯框內(nèi)容break; updatedata(
40、false);/更新控件 format()第一個(gè)參數(shù)是格式化字符串,就像printf()的第一個(gè)參數(shù)一樣,后面的參數(shù)就是與格式化字符串中每個(gè)字段對(duì)應(yīng)的類型變量。3.4 通信協(xié)議設(shè)計(jì)3.4.1 modbus協(xié)議當(dāng)今世界,工業(yè)控制已從單機(jī)控制走向集中監(jiān)控、集散控制。在進(jìn)入網(wǎng)絡(luò)時(shí)代的今天,工業(yè)控制器連網(wǎng)也為網(wǎng)絡(luò)管理提供了方便。modbus協(xié)議就是工業(yè)控制器的網(wǎng)絡(luò)協(xié)議中的一種。modbus協(xié)議是modicon公司于1978年發(fā)明的一種用于電子控制器進(jìn)行控制和通訊的通訊協(xié)議。通過(guò)此協(xié)議,控制器相互之間、控制器經(jīng)由網(wǎng)絡(luò)(例如以太網(wǎng))和其它設(shè)備之間可以進(jìn)行通信。它的開(kāi)放性、可擴(kuò)充性和標(biāo)準(zhǔn)化使它成為一個(gè)通用工
41、業(yè)標(biāo)準(zhǔn)。有了它,不同廠商生產(chǎn)的控制設(shè)備可以簡(jiǎn)單可靠地連成工業(yè)網(wǎng)絡(luò),進(jìn)行系統(tǒng)的集中監(jiān)控,從而使它成為最流行的協(xié)議之一。modbus協(xié)議包括ascii,rtu等,并沒(méi)有規(guī)定物理層。此協(xié)議定義了控制器能夠認(rèn)識(shí)和使用的消息結(jié)構(gòu),而不管它們是經(jīng)過(guò)何種網(wǎng)絡(luò)進(jìn)行通信的。標(biāo)準(zhǔn)的modbus 是使用rs-232c 兼容串行接口, rs-232c規(guī)定了連接器針腳、接線、信號(hào)電平、波特率、奇偶校驗(yàn)等信息,modbus的ascii,rtu協(xié)議則在此基礎(chǔ)上規(guī)定了消息、數(shù)據(jù)的結(jié)構(gòu)、命令和應(yīng)答的方式。modbus控制器的數(shù)據(jù)通信采用master/slave方式(主/從),即master端發(fā)出數(shù)
42、據(jù)請(qǐng)求消息,slave端接收到正確消息后就可以發(fā)送數(shù)據(jù)到master端以響應(yīng)請(qǐng)求;master端也可以直接發(fā)消息修改slave端的數(shù)據(jù),實(shí)現(xiàn)雙向讀寫(xiě)。modbus可以應(yīng)用在支持modbus協(xié)議的plc和plc之間、plc和個(gè)人計(jì)算機(jī)之間、計(jì)算機(jī)和計(jì)算機(jī)之間、遠(yuǎn)程plc和計(jì)算機(jī)之間以及遠(yuǎn)程計(jì)算機(jī)之間(通過(guò)modem連接),可見(jiàn)modbus的應(yīng)用是相當(dāng)廣泛的。由于modbus是一個(gè)事實(shí)上的工業(yè)標(biāo)準(zhǔn),許多廠家的plc,hmi組態(tài)軟件都支持modbus,而且modbus是一個(gè)開(kāi)放標(biāo)準(zhǔn),其協(xié)議內(nèi)容可以免費(fèi)獲得,一些小型廠商甚至個(gè)人都可根據(jù)協(xié)議標(biāo)準(zhǔn)開(kāi)發(fā)出支持modbus的產(chǎn)品或軟件,從而使其產(chǎn)品聯(lián)入到mo
43、dbus的數(shù)據(jù)網(wǎng)絡(luò)中。因此,modbus有著廣泛的應(yīng)用基礎(chǔ)。在實(shí)際應(yīng)用中,可以使用rs232,rs 485 /422 ,modem加電話線、甚至tcp/ip來(lái)聯(lián)網(wǎng)。所以,modbus的傳輸介質(zhì)種類較多,可以根據(jù)傳輸距離來(lái)選擇。當(dāng)在網(wǎng)絡(luò)上通信時(shí),modbus協(xié)議決定了每個(gè)控制器須要知道它們的設(shè)備地址,識(shí)別按地址發(fā)來(lái)的消息,決定要產(chǎn)生何種行動(dòng)。如果需要回應(yīng),控制器將生成應(yīng)答并使用modbus協(xié)議發(fā)送給詢問(wèn)方。 modbus協(xié)議需要對(duì)數(shù)據(jù)進(jìn)行校驗(yàn),串行協(xié)議中除有奇偶校驗(yàn)外,ascii模式采用lrc校驗(yàn),rtu模式采用16位crc校驗(yàn),但tcp模式?jīng)]有額外規(guī)定校驗(yàn),因?yàn)閠
44、cp協(xié)議是一個(gè)面向連接的可靠協(xié)議。另外,modbus采用主從方式定時(shí)收發(fā)數(shù)據(jù),在實(shí)際使用中如果某slave站點(diǎn)斷開(kāi)后(如故障或關(guān)機(jī)),master端可以診斷出來(lái),而當(dāng)故障修復(fù)后,網(wǎng)絡(luò)又可自動(dòng)接通。因此,modbus協(xié)議的可靠性較好。3.4.2 modbus協(xié)議的兩種傳輸方式modbus可分為兩種傳輸模式:ascii模式和rtu模式。使用何種模式由用戶自行選擇,包括串口通信參數(shù)(波特率、校驗(yàn)方式等)。在配置每個(gè)控制器的時(shí)候,同一個(gè)modbus網(wǎng)絡(luò)上的所有設(shè)備都必須選擇相同的傳輸模式和串口參數(shù)。1、ascii模式當(dāng)控制器設(shè)為在modbus網(wǎng)絡(luò)上以ascii(美國(guó)標(biāo)準(zhǔn)信息交換代碼)模式通信,在消息中
45、的每個(gè)8bit字節(jié)都作為兩個(gè)ascii字符發(fā)送。這種方式的主要優(yōu)點(diǎn)是字符發(fā)送的時(shí)間間隔可達(dá)到1秒而不產(chǎn)生錯(cuò)誤。使用ascii模式,如表3.3所示,消息以冒號(hào)(:)字符(ascii碼3ah)作為起始位,以回車(chē)換行符(ascii碼0dh, 0ah)作為結(jié)束符。傳輸過(guò)程中,網(wǎng)絡(luò)上的設(shè)備不斷偵測(cè)“:”字符,當(dāng)有一個(gè)冒號(hào)接收到時(shí),每個(gè)設(shè)備就解碼下個(gè)位的地址域,來(lái)判斷是否發(fā)給自己的。與地址域一致的設(shè)備繼續(xù)接受其它域,直至接受到回車(chē)換行符。表3.2 ascii模式的消息幀起始位設(shè)備地址功能代碼數(shù)據(jù)lrc校驗(yàn)結(jié)束符1個(gè)字符2個(gè)字符2個(gè)字符n個(gè)字符 2個(gè)字符 2個(gè)字符除起始位和結(jié)束符外,其
46、他域可以使用的傳輸字符是十六進(jìn)制的09,af,當(dāng)然也要用ascii碼表示字符。當(dāng)選用ascii模式時(shí),消息幀使用lrc(縱向冗長(zhǎng)檢測(cè))進(jìn)行錯(cuò)誤檢測(cè)。2、rtu模式當(dāng)控制器設(shè)為在modbus網(wǎng)絡(luò)上以rtu(遠(yuǎn)程終端單元)模式通信,在消息中的每個(gè)8bit字節(jié)包含兩個(gè)4bit的十六進(jìn)制字符。如表3.4,這種方式的主要優(yōu)點(diǎn)是:在同樣的波特率下,可比ascii方式傳送更多的數(shù)據(jù)。表 3.3 rtu模式的消息幀起始位設(shè)備地址功能代碼數(shù)據(jù)crc校驗(yàn)結(jié)束符t1-t2-t3-t48bit8bitn個(gè)bit16bitt1-t2-t3-t4該模式下消息發(fā)送至少要以3.5個(gè)字符時(shí)間的停頓間隔開(kāi)始。傳輸過(guò)程中,網(wǎng)絡(luò)設(shè)備
47、不斷偵測(cè)網(wǎng)絡(luò)總線,包括停頓間隔時(shí)間內(nèi)。當(dāng)?shù)谝粋€(gè)域(地址域)接收到,相應(yīng)的設(shè)備就對(duì)接下來(lái)的傳輸字符進(jìn)行解碼,一旦有至少3. 5個(gè)字符時(shí)間的停頓就表示該消息的結(jié)束。在rtu模式中整個(gè)消息幀必須作為一連續(xù)的流轉(zhuǎn)輸,如果在幀完成之前有超過(guò)1.5個(gè)字符時(shí)間的停頓時(shí)間,接收設(shè)備將刷新不完整的消息并假定下一字節(jié)是一個(gè)新消息的地址域。同樣地,如果一個(gè)新消息在小于3. 5個(gè)字符時(shí)間內(nèi)接著前個(gè)消息開(kāi)始,接收的設(shè)備將認(rèn)為它是前一消息的延續(xù)。如果在傳輸過(guò)程中有以上兩種情況發(fā)生的話,必然會(huì)導(dǎo)致crc校驗(yàn)產(chǎn)生一個(gè)錯(cuò)誤消息,反饋給發(fā)送方設(shè)備。表3.4 ascii協(xié)議和rtu協(xié)議進(jìn)行的比較協(xié)議開(kāi)始標(biāo)記結(jié)束
48、標(biāo)記校驗(yàn)傳輸效率程序處理ascii:(冒號(hào))cr,lflrc低直觀,簡(jiǎn)單,易調(diào)試rtu無(wú)無(wú)crc高不直觀,稍復(fù)雜通過(guò)表3.4比較可以看到,ascii協(xié)議和rtu協(xié)議相比擁有開(kāi)始和結(jié)束標(biāo)記,因此在進(jìn)行程序處理時(shí)能更加方便,而且由于傳輸?shù)亩际强梢?jiàn)的ascii字符,所以進(jìn)行調(diào)試時(shí)就更加的直觀,另外它的lrc校驗(yàn)也比較容易。但是因?yàn)樗鼈鬏數(shù)亩际强梢?jiàn)的ascii字符,rtu傳輸?shù)臄?shù)據(jù)每一個(gè)字節(jié)ascii都要用兩個(gè)字節(jié)來(lái)傳輸,比如rtu傳輸一個(gè)十六進(jìn)制數(shù)0xf9,ascii就需要傳輸“f”“9”的ascii碼0x39和0x46兩個(gè)字節(jié),這樣它的傳輸?shù)男示捅容^低。所以一般來(lái)說(shuō),如果所需要傳輸?shù)臄?shù)據(jù)量較小可
49、以考慮使用ascii協(xié)議,如果所需傳輸?shù)臄?shù)據(jù)量比較大,最好能使用rtu協(xié)議。3.4.3兩種協(xié)議的檢驗(yàn)方式1、lrc校驗(yàn)lrc域是一個(gè)包含一個(gè)8位二進(jìn)制值的字節(jié)。lrc值由傳輸設(shè)備來(lái)計(jì)算并放到消息幀中,接收設(shè)備在接收消息的過(guò)程中計(jì)算lrc,并將它和接收到消息中l(wèi)rc域中的值比較,如果兩值不等,說(shuō)明有錯(cuò)誤。lrc校驗(yàn)比較簡(jiǎn)單,它在ascii協(xié)議中使用,檢測(cè)了消息域中除開(kāi)始的冒號(hào)及結(jié)束的回車(chē)換行號(hào)外的內(nèi)容。它僅僅是把每一個(gè)需要傳輸?shù)臄?shù)據(jù)按字節(jié)疊加后取反加1即可。下面是它的vc代碼: byte getcheckcode(const char * psendbuf, int nend)/獲得校驗(yàn)碼 by
50、te bylrc = 0; char pbuf4; int ndata = 0; for(i=1; i<end; i+=2) /i初始為1,避開(kāi)開(kāi)始標(biāo)記“冒號(hào)” /每?jī)蓚€(gè)需要發(fā)送的ascii碼轉(zhuǎn)化為一個(gè)十六進(jìn)制數(shù) pbuf 0 = psendbuf i; pbuf 1 = psendbuf i+1;
51、; pbuf 2 = '0' sscanf(pbuf,"%x",& ndata); bylrc += ndata; bylrc = bylrc; bylrc +; return bylrc; 2、crc校驗(yàn) crc域是兩個(gè)字節(jié),包含一
52、16位的二進(jìn)制值。它由傳輸設(shè)備計(jì)算后加入到消息中。接收設(shè)備重新計(jì)算收到消息的crc,并與接收到的crc域中的值比較,如果兩值不同,則有誤。crc是先調(diào)入一值是全“1”的16位寄存器,然后調(diào)用一過(guò)程將消息中連續(xù)的8位字節(jié)各當(dāng)前寄存器中的值進(jìn)行處理。僅每個(gè)字符中的8bit數(shù)據(jù)對(duì)crc有效,起始位和停止位以及奇偶校驗(yàn)位均無(wú)效。crc產(chǎn)生過(guò)程中,每個(gè)8位字符都單獨(dú)和寄存器內(nèi)容相異或(or),結(jié)果向最低有效位方向移動(dòng),最高有效位以0填充。lsb被提取出來(lái)檢測(cè),如果lsb為1,寄存器單獨(dú)和預(yù)置的值或一下,如果lsb為0,則不進(jìn)行。整個(gè)過(guò)程要重復(fù)8次。在最后一位(第8位)完成后,下一個(gè)8位字節(jié)又單獨(dú)和寄存器
53、的當(dāng)前值相異或。最終寄存器中的值,是消息中所有的字節(jié)都執(zhí)行之后的crc值。crc添加到消息中時(shí),低字節(jié)先加入,然后高字節(jié)。下面是它的vc代碼: word getcheckcode(const char * psendbuf, int nend)/獲得校驗(yàn)碼 word wcrc = word(0xffff); for(int i=0; i<nend; i+)
54、60; wcrc = word(byte(psendbufi); for(int j=0; j<8; j+)
55、160; if(wcrc & 1) wcrc >>= 1; wcrc = 0x
56、a001; else &
57、#160; wcrc >>= 1;
58、0; return wcrc;對(duì)于一條rtu協(xié)議的命令可以簡(jiǎn)單的通過(guò)以下的步驟轉(zhuǎn)化為ascii協(xié)議的命令:(1) 把命令的crc校驗(yàn)去掉,并且計(jì)算出lrc校驗(yàn)取代。(2) 把生成的命令串的每一個(gè)字節(jié)轉(zhuǎn)化成對(duì)應(yīng)的兩個(gè)字節(jié)的ascii碼,比如0x03轉(zhuǎn)化成0x30,0x33(0的ascii碼和3的ascii碼)。(3) 在命令的開(kāi)頭加上起始標(biāo)記“:”,它的ascii碼為0x3a。(4) 在命令的尾部加上結(jié)束標(biāo)記cr,lf(0xd,0xa),此處的cr,lf表示回車(chē)和換行的ascii碼。所以對(duì)應(yīng)的ascii協(xié)議可以使用以上的步驟來(lái)生成。3.4.4 mo
59、dbus的功能碼modbus網(wǎng)絡(luò)是一個(gè)工業(yè)通信系統(tǒng),由帶智能終端的可編程序控制器和計(jì)算機(jī)通過(guò)公用線路或局部專用線路連接而成。其系統(tǒng)結(jié)構(gòu)既包括硬件、亦包括軟件。它可應(yīng)用于各種數(shù)據(jù)采集和過(guò)程監(jiān)控。下表3.5是modbus的功能碼定義。表 3.5 modbus的功能碼功能碼名稱作用01讀取線圈狀態(tài)取得一組邏輯線圈的當(dāng)前狀態(tài)(on/off)02讀取輸入狀態(tài)取得一組開(kāi)關(guān)輸入的當(dāng)前狀態(tài)(on/off)03讀取保持寄存器在一個(gè)或多個(gè)保持寄存器中取得當(dāng)前的二進(jìn)制值04讀取輸入寄存器在一個(gè)或多個(gè)輸入寄存器中取得當(dāng)前的二進(jìn)制值05強(qiáng)置單線圈強(qiáng)置一個(gè)邏輯線圈的通斷狀態(tài)06預(yù)置單寄存器把具體二進(jìn)值裝入一個(gè)保持寄存器0
60、7讀取異常狀態(tài)取得8個(gè)內(nèi)部線圈的通斷狀態(tài),這8個(gè)線圈的地址由控制器決定08回送診斷校驗(yàn)把診斷校驗(yàn)報(bào)文送從機(jī),以對(duì)通信處理進(jìn)行評(píng)鑒09編程(只用于484)使主機(jī)模擬編程器作用,修改pc從機(jī)邏輯10控詢(只用于484)可使主機(jī)與一臺(tái)正在執(zhí)行長(zhǎng)程序任務(wù)從機(jī)通信,探詢?cè)搹臋C(jī)是否已完成其操作任務(wù),僅在含有功能碼9的報(bào)文發(fā)送后,本功能碼才發(fā)送11讀取事件計(jì)數(shù)可使主機(jī)發(fā)出單詢問(wèn),并隨即判定操作是否成功,尤其是該命令或其他應(yīng)答產(chǎn)生通信錯(cuò)誤時(shí)12讀取通信事件記錄可是主機(jī)檢索每臺(tái)從機(jī)的modbus事務(wù)處理通信事件記錄。如果某項(xiàng)事務(wù)處理完成,記錄會(huì)給出有關(guān)錯(cuò)誤13編程(184/384 484 584)可使主機(jī)模擬編程器功能修改pc從機(jī)邏輯14探詢(184/384 484 584)可使主機(jī)與正在執(zhí)行任務(wù)的從機(jī)通信,定期控詢?cè)搹臋C(jī)是否已完成其程序操作,僅在含有功能13的報(bào)文
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 廣告設(shè)計(jì)合同
- 2025信息系統(tǒng)工程監(jiān)理合同(范本)
- 2025房屋裝修合同樣板
- 課題申報(bào)參考:綠色技術(shù)創(chuàng)新視角下制造業(yè)碳解鎖成效與實(shí)現(xiàn)路徑研究
- 綜合教育視角下的進(jìn)階數(shù)學(xué)學(xué)習(xí)策略
- 探索學(xué)生自主學(xué)習(xí)與心理成長(zhǎng)的關(guān)聯(lián)
- 教育培訓(xùn)在農(nóng)產(chǎn)品電商平臺(tái)的價(jià)值體現(xiàn)
- 2024年藥品批發(fā)零售項(xiàng)目資金籌措計(jì)劃書(shū)代可行性研究報(bào)告
- 遠(yuǎn)程辦公疫情后的新常態(tài)與挑戰(zhàn)
- 2025年湘教新版第二冊(cè)生物下冊(cè)月考試卷
- 2024版塑料購(gòu)銷(xiāo)合同范本買(mǎi)賣(mài)
- 2024-2025學(xué)年人教新版高二(上)英語(yǔ)寒假作業(yè)(五)
- JJF 2184-2025電子計(jì)價(jià)秤型式評(píng)價(jià)大綱(試行)
- GB/T 44890-2024行政許可工作規(guī)范
- 2024年安徽省中考數(shù)學(xué)試卷含答案
- 2025屆山東省德州市物理高三第一學(xué)期期末調(diào)研模擬試題含解析
- 2024年滬教版一年級(jí)上學(xué)期語(yǔ)文期末復(fù)習(xí)習(xí)題
- 兩人退股協(xié)議書(shū)范文合伙人簽字
- 2024版【人教精通版】小學(xué)英語(yǔ)六年級(jí)下冊(cè)全冊(cè)教案
- 汽車(chē)噴漆勞務(wù)外包合同范本
- 微項(xiàng)目 探討如何利用工業(yè)廢氣中的二氧化碳合成甲醇-2025年高考化學(xué)選擇性必修第一冊(cè)(魯科版)
評(píng)論
0/150
提交評(píng)論