“新捷達”型汽車組合儀表的串行通訊的實現(xiàn)
通過串行通訊可以實現(xiàn)對儀表軟乱豆、硬件版本的檢測伶棒、儀表里程清零及儀表調(diào)校等一系列儀表出廠前重要的檢測項目及參數(shù)設(shè)定。在開發(fā)汽車儀表檢測設(shè)備的過程中项戴,非常重要的工作就是實現(xiàn)工控機與汽車儀表的串行通訊形帮。對應(yīng)于"新捷達"型汽車組合儀表(西門子VDO公司產(chǎn)品),為實現(xiàn)技術(shù)安全性周叮,故其串行口采用非標(biāo)準(zhǔn)串行通訊協(xié)議沃缘,是用一般的串口通訊控件所難以實現(xiàn)的,必須由熟悉儀表軟件結(jié)構(gòu)的人員從底層編寫通訊程序则吟。
本文采用C++Builder開發(fā)平臺槐臀,在Windows 98操作系統(tǒng)下,成功實現(xiàn)了與"新捷達"型汽車組合儀表的通訊氓仲,并具有美觀簡潔的用戶操作界面水慨。 2 New Jetta型儀表串行通訊要求簡述
1.1 硬件連接
文中工控機與儀表的硬件連接是從儀表的K-line經(jīng)過電平轉(zhuǎn)換器連接工控機的RS-232串行口,采用半雙工串行異步通訊方式敬扛。
1.2 軟件規(guī)范
軟件規(guī)范關(guān)于串口數(shù)據(jù)通訊協(xié)議中包括了通信握手现熔、多重校驗、出錯重發(fā)滤躺、超時處理等展霸。
1.2.1 通訊初始化
當(dāng)儀表點火信號端起動約2s后可以建立通訊響應(yīng)。首先以5b通訊速率發(fā)送信息屠途,該信息包含1個起始位莺肌,7個數(shù)據(jù)位,1個奇偶校驗位和1個停止位(向儀表發(fā)送* * H)带诊。
儀表收到該信息后大約要等待一個約5 ms的循環(huán)時間辈喜,然后通訊模塊起動。從此時起所有的通訊字節(jié)將以10 400b/s的波特率來收發(fā)(此波特率為非標(biāo)準(zhǔn)波特率)于箩。
經(jīng)過100ms儀表送出同步字節(jié)(1個起始位砖伴,8個數(shù)據(jù)位,1個停止位判嘀,為* * H)愧汽,再經(jīng)過loms儀表送出密碼的低字節(jié),10ms后儀表送出密碼的高字節(jié)(1個起始位,7個數(shù)據(jù)位横朋,1個奇偶校驗位况芒,1個停止位,密碼值為* * * *H)叶撒。
此后绝骚,儀表等待工控機送回倒序的密碼高字節(jié)。這種回送方式是本串行通訊的防錯處理機制祠够。如果此字節(jié)儀表沒有接收到压汪,那么儀表將再次發(fā)送同步字節(jié)和密碼字節(jié)。
當(dāng)儀表接收到回送字節(jié)后古瓤,標(biāo)準(zhǔn)模塊通訊以10 400b/s的波特率起動(每字節(jié)包含1個起始位止剖,8個數(shù)據(jù)位,1個停止位)落君。此時穿香,儀表開始發(fā)送儀表ID模塊,為4個模塊绎速,分別包括16皮获,16,15抠衬,9個字節(jié)裸岁。在這4個模塊的發(fā)送過程中,儀表與工控機之間又有很多的信息應(yīng)答要求锹肾,如有差錯則通訊中止郊啄。
1.2.2 正常通訊過程
經(jīng)過通訊初始化后,正常通訊以10 400b/s的波特率開始建立奥泛,此時工控機可以發(fā)送命令字節(jié)流給儀表寄菲,來實現(xiàn)對儀表的控制及參數(shù)設(shè)置。每隔特定的時間間隔虫弓,儀表與工控機間仍須互送握手信號起胡,否則通訊中止。
2 軟件程序設(shè)計
本通訊方式屬于零Modem串行異步通訊赂裁。在異步通訊中轻迹,字符格式和波特率是2個重要指標(biāo)。本文中通訊過程既有波特率的變化烛许,也有幀格式的變化,對通訊的響應(yīng)時間也有嚴(yán)格要求耙厚。
在C++Builder可視化編程格式下不再支持直接對寄存器操作的函數(shù)强挫,故首先用嵌入?yún)R編的辦法實現(xiàn)Inporb和Outporb函數(shù)。本通訊的數(shù)據(jù)流是以字節(jié)為發(fā)送單位的,故編寫字節(jié)收發(fā)函數(shù)俯渤,為查詢方式呆细,如清單1所示:
清單1:
byte TForml∷bytReceiveByte(void)
{
byte bytTemp; //Dim bytTemp As Byte
int intTemp八匠; //Dim intTemp As Integer
byte bytResult絮爷;
bytTemp=InportB(intLSR);//intLSR=0x3fd
intTemp=0梨树;
blnBeyond WaitTime=False坑夯;
while((bytTemp&0x1)!=0x1)
{
bytTemp=InportB(intLSR);
intTemp=intTemp+1抡四;
S1eep(1)柜蜈;
//檢查接收的數(shù)據(jù)是否準(zhǔn)備好,為1表示接收移位寄存器已收到一個完整的數(shù)據(jù)指巡,并送到接收緩沖器中
if(intTemp>intWaitTime)
{Error()淑履;}
}
if(!blnBeyondWaitTime)
bytResult=InportB(intDRR);//intDRR=0x3f8
return bytResult;
}
VOld TForml∷subSendByte(byte bytSend)
{
byte bytTemp溜屡;
bytTemp=InportB(intLSR)蹂曾;
//檢查發(fā)送緩沖器是否為空,1為空
while((bytTemp&0x20)!=0x20)
bytTemp=InportB(intLSR)盗闯;
OutportB(0x3F8边饿,bytSend); //發(fā)送緩沖器為空
bytTemp=InportB(intLSR)蚀抄;
//檢查發(fā)送移位寄存器是否為空值舀,即發(fā)送緩沖器的數(shù)據(jù)是否送完
while((bytTemp&0x40)!=0x40)
bytTemp=InportB(intLSR);
bytTemp=InportB(intLSR)牌盖;
//檢查接收的數(shù)據(jù)是否準(zhǔn)備好裙澎,為1表示接收移位寄存器已收到一個完整的數(shù)據(jù),并送到接收緩沖器中
while((bytTemp & 0x1)!=0x1)
bytTemp=InportB(intLSR)吧郑;
bytTemp=InportB(intDRR)艘彭;
//清空接收緩沖區(qū)中的發(fā)送數(shù)據(jù)
}
在此基礎(chǔ)上建立本通訊初始化的主函數(shù),如清單2所示:
清單2:
void TForml∷InitRS232(void)
{
String strTemp颗蝶;//Dim strTemp As String
byte bytTemp跟狱; //Dim bytTemp As Byte
int intTemp; //Dim intTemp As Integer
int i户魏; //Dim I As Integer
//Stepl:
OutportB (intLCR驶臊,0x80);
//輸出控制字叼丑,下面輸出波特串
OutportB(intLSB关翎,0x0)扛门; //低位
OutportB(intMSB,0x5A)纵寝; //高位
OutportB(intLCR论寨,0xA);
//5 bit爽茴,l起始位葬凳,1奇偶位和1停止位
OutportB(intIER,0)室奏; //抑制中斷
strTemp=""火焰;
subSendByte (0x * *) //發(fā)送建立通訊密碼
//Step2:
OutportB(intLCR,0x80)窍奋;
//輸出控制字施式,下面輸出波特率
OutportB(intLSB,0xB)执峰;
OutportB(intMSB涎花,0x0);
OutportB(intLCR饭磕,0x3)瞒酪;//10400,8现伺,N
strTemp=strTemp+""+IntToHex(bytReceiveByte()测佛,2);
//Step3:
Receive the Low byte Of Key Word
strTemp=strTemp+""+IntToHex(bytReceiveByte(),2);
//Step4:
Receive the High byte Of Key Word
bytTemp=bytReceiveByte()嘹据;
strTemp=strTemp+""+IntToHex(bytTemp影凿,2);
//Step5:
下面PC送高位字節(jié)的取反
if(! blnBeyondWaitTime)
subSendByte(byte(~bytTemp))茎贩; //byte
else
{Error();}
//Step 6 Receive the block data
if (! blnReceiveIDBlock(16)) //接收第1個ID塊第勉,為16B
{Error();}
if (! blnReceiveIDBlock(16)) //接收第2個ID塊锅锨,為16B
{Error()叽赊;}
if (! blnReceiveIDBlock(15)) //接收第3個ID塊,為15B
{Error()必搞;}
if (! blnReceiveIDBlock(9)) //接收第4個ID塊必指,為9B
{Error();}
//Cluster)> >PC
subReceiveTheFifthBlock()恕洲;
String ResOfFT=strTestDataStream(strEnableFT)塔橡;
//儀表Epprom可讀寫命令
if(ResOfFT==EmptyStr)
{Error();}
blnInitRS232=True研侣;
3 結(jié) 語
本文采用C++Builder軟件平臺成功開發(fā)了儀表特殊串行口通訊程序谱邪,該系統(tǒng)在西門子VDO(蕪湖)公司生產(chǎn)線投入使用一年多炮捧,與采用快速通訊方式相比通訊傳輸性能穩(wěn)定庶诡,并具有了方便美觀的用戶界面惦银,為實現(xiàn)儀表檢測設(shè)備奠定了基礎(chǔ),具有重要的應(yīng)用價值末誓。
聲明:本網(wǎng)站所收集的部分公開資料來源于互聯(lián)網(wǎng)扯俱,轉(zhuǎn)載的目的在于傳遞更多信息及用于網(wǎng)絡(luò)分享,并不代表本站贊同其觀點和對其真實性負(fù)責(zé)酝凄,也不構(gòu)成任何其他建議食迈。本站部分作品是由網(wǎng)友自主投稿和發(fā)布、編輯整理上傳冀远,對此類作品本站僅提供交流平臺嘿惜,不為其版權(quán)負(fù)責(zé)。如果您發(fā)現(xiàn)網(wǎng)站上所用視頻峰毙、圖片坯公、文字如涉及作品版權(quán)問題,請第一時間告知失臂,我們將根據(jù)您提供的證明材料確認(rèn)版權(quán)并按國家標(biāo)準(zhǔn)支付稿酬或立即刪除內(nèi)容酷匹,以保證您的權(quán)益!聯(lián)系電話:010-58612588 或 Email:editor@mmsonline.com.cn权洼。
- 暫無反饋

編輯推薦
- 2025新年特刊:打造新質(zhì)生產(chǎn)力,智啟未來新篇章
- 定義制造業(yè)未來的數(shù)控加工中心技術(shù)專題
- 航空航天及交通領(lǐng)域先進制造技術(shù)應(yīng)用專題
- 解碼消費電子產(chǎn)品生產(chǎn)的數(shù)字化之路技術(shù)專題
- 精密智能機床绳锅,助力制造升級技術(shù)專題
- 汽車輕量化驅(qū)動下的零部件加工應(yīng)用專題
- 高性能銑刀實現(xiàn)高精加工生產(chǎn)技術(shù)專題
- 航空航天發(fā)動機解決方案專題
- 高效齒輪加工生產(chǎn)技術(shù)方案專題
- 金屬加工液的性能不止?jié)櫥夹g(shù)應(yīng)用專題