国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

用VB編寫(xiě)CAN總線以太網(wǎng)通訊協(xié)議

2012-02-15 21:12韓立立
通信技術(shù) 2012年12期
關(guān)鍵詞:模擬量控件字節(jié)

韓立立

(中國(guó)石油大學(xué) 理學(xué)院實(shí)驗(yàn)中心,山東 青島266580)

0 引言

隨著計(jì)算機(jī)、網(wǎng)絡(luò)技術(shù)、軟件工程、自動(dòng)控制等多個(gè)高新技術(shù)的發(fā)展,越來(lái)越多的工業(yè)現(xiàn)場(chǎng)情況需要用計(jì)算機(jī)實(shí)現(xiàn)對(duì)CAN設(shè)備的監(jiān)控。當(dāng)CAN設(shè)備沒(méi)有通訊協(xié)議時(shí),就需要編寫(xiě)符合CAN總線傳輸?shù)耐ㄓ崊f(xié)議。

文中將著重闡述該系統(tǒng)通訊方法的實(shí)現(xiàn)。由于計(jì)算機(jī)不能直接發(fā)送數(shù)據(jù)到CAN總線上去,必須經(jīng)過(guò)CAN-以太網(wǎng)網(wǎng)關(guān)或CAN-232串口服務(wù)器轉(zhuǎn)換才能實(shí)現(xiàn)。

1 通訊介紹

控制器局域網(wǎng)絡(luò)(CAN,Control Area Network),它最初是由德國(guó)的 BOSCH公司為汽車(chē)監(jiān)測(cè)、控制系統(tǒng)而設(shè)計(jì)的。目前,CAN總線是唯一已成為國(guó)際標(biāo)準(zhǔn)的,被公認(rèn)為是幾種最有前途的現(xiàn)場(chǎng)總線之一。

CAN具有下列主要特性[1]:單根雙絞線最遠(yuǎn)傳輸距離10km/5kb/s,最高傳輸速率1Mb/s/40m。非破壞性總線仲裁技術(shù),采用干擾概率低的短幀結(jié)構(gòu)多地址傳送; CAN可與輸入輸出設(shè)備、單片機(jī)、控制器、收發(fā)器等多種設(shè)備配合使用。全系統(tǒng)數(shù)據(jù)兼容性;錯(cuò)誤檢測(cè)和出錯(cuò)信息自動(dòng)判別、自動(dòng)重發(fā)、自動(dòng)脫離。

在總線中傳送的報(bào)文,每幀由7 部分組成,詳細(xì)說(shuō)明如下:

1)00:A 口(一般CAN-以太網(wǎng)網(wǎng)關(guān)有1-4個(gè)CAN端口)收到的數(shù)據(jù),0-3 對(duì)應(yīng)A-D 4個(gè)CAN 端口,為報(bào)文接收到的第1個(gè)字節(jié)。

2)10 00 00 00:接收到的CAN ID(CAN ID 為1,低位字節(jié)在前,高位在后)。

3)08:此CAN 數(shù)據(jù)包中的CAN 數(shù)據(jù)區(qū)長(zhǎng)度(最大8 個(gè)字節(jié))。

4)01 02 03 04 05 06 07 08:8 個(gè)字節(jié)的CAN數(shù)據(jù)區(qū)數(shù)據(jù)。

5)01:1 為擴(kuò)展幀(CAN2.0B)格式,0 為標(biāo)準(zhǔn)幀(CAN2.0A)。

6)00:遠(yuǎn)程傳輸位,0-非RTR 數(shù)據(jù)包,1-為RTR數(shù)據(jù)包。

7)00 00 00 00:保留的4 個(gè)數(shù)據(jù)字節(jié),為報(bào)文接收的最后字節(jié)。

CAN協(xié)議支持兩種報(bào)文格式,其唯一的不同是標(biāo)識(shí)符(ID)長(zhǎng)度不同,標(biāo)準(zhǔn)格式為11 位,擴(kuò)展格式為29 位。報(bào)文的尾部由幀結(jié)束標(biāo)出。在相鄰的兩條報(bào)文間有一很短的間隔位,如果這時(shí)沒(méi)有站進(jìn)行總線存取,總線將處于空閑狀態(tài)。

2 用VB進(jìn)行以太網(wǎng)通訊

VB中通過(guò)Winsock控件與遠(yuǎn)程計(jì)算機(jī)或以太網(wǎng)設(shè)備建立連接,并通過(guò)用戶數(shù)據(jù)交換協(xié)議(UDP)或者傳輸控制協(xié)議(TCP)進(jìn)行數(shù)據(jù)交換。Microsoft Access、Visual Basic、Visual c++等的開(kāi)發(fā)人員都可使用它。用VB的Winsock 控件來(lái)編寫(xiě)客戶端和服務(wù)器應(yīng)用程序,只需設(shè)置控件的屬性并調(diào)用其方法就可輕易連接到一臺(tái)遠(yuǎn)程機(jī)器上去;并且還可在兩應(yīng)用程序間進(jìn)行雙向交換數(shù)據(jù),完成兩機(jī)間的通信,編程簡(jiǎn)單、快捷、安全[2]。

3 通訊協(xié)議的編寫(xiě)

CAN的報(bào)文格式分兩種:擴(kuò)展幀和標(biāo)準(zhǔn)幀。標(biāo)準(zhǔn)幀每次只能傳送8個(gè)數(shù)據(jù)(16進(jìn)制),而現(xiàn)場(chǎng)需要傳輸?shù)臄?shù)據(jù)類(lèi)型不僅有開(kāi)關(guān)量,還有模擬量,且一般所需要傳輸?shù)臄?shù)據(jù)都很多。所以我們將CAN的8個(gè)數(shù)據(jù)(例如FFFF006E43301000)分成兩部分:前兩為FFFF代表開(kāi)關(guān)量,如果將16進(jìn)制轉(zhuǎn)換成2進(jìn)制為1111 1111 1111 1111,代表16個(gè)開(kāi)關(guān)量數(shù)據(jù),從左到右分別是 D1、D2…D16;后 6位006E43301000代表2個(gè)模擬量,前一個(gè)模擬量為整數(shù)(006E轉(zhuǎn)換成10進(jìn)制分別是110),后一個(gè)模擬量為小數(shù)編碼傳輸(43301000用IEEE754編碼,轉(zhuǎn)換成小數(shù)為176.0652,具體轉(zhuǎn)換方法如下:176.0652轉(zhuǎn)換成2進(jìn)制為10110000.0001,規(guī)格化二進(jìn)制數(shù):1.01100000001*2^7 (小數(shù)點(diǎn)移了7位),計(jì)算指數(shù):7+127=134 (127是個(gè)標(biāo)準(zhǔn)數(shù)值),按照IEEE754編碼排列為 0 10000110 01100000001 000000000000(不足32位,后面補(bǔ)0,直到補(bǔ)足32位),二進(jìn)制結(jié)果是0100 0011 0011 0000 0001 0000 0000 0000,十六進(jìn)制結(jié)果是0x43301000)。這樣每個(gè)CAN標(biāo)準(zhǔn)幀傳輸16個(gè)開(kāi)關(guān)量和1個(gè)10進(jìn)制0—65535的整數(shù)值和1個(gè)10進(jìn)制任意的小數(shù)值(如果實(shí)際需要傳輸?shù)恼麛?shù)數(shù)據(jù)大于 65535,可以作為小數(shù)傳輸),實(shí)際需要傳輸?shù)拈_(kāi)關(guān)量或模擬量有多少,就發(fā)送相應(yīng)倍率的CAN標(biāo)準(zhǔn)幀就可以了。例如實(shí)際需要傳輸500個(gè)開(kāi)關(guān)量和70個(gè)模擬量,500除以16取整應(yīng)該是32;70除以2取整為35;所以應(yīng)該傳輸35個(gè)CAN標(biāo)準(zhǔn)幀。這35個(gè)CAN標(biāo)準(zhǔn)幀的區(qū)分就在CAN ID中,舉例說(shuō)明(發(fā)送數(shù)據(jù)為P1—P600):

軟件發(fā)送 001400000008FFFF006E43301000000 000000000到CAN設(shè)備。代表從上位電腦寫(xiě)P1—P19到CAN設(shè)備其中P1-P16為1,P17為16進(jìn)制006E,10進(jìn)制為110;P38為16進(jìn)制43301000實(shí)際值為176.0652;

軟件發(fā)送 001500000008FFFF006E43301000000 000000000到CAN設(shè)備。代表從上位電腦寫(xiě)P21—P39到CAN設(shè)備其中P21-P36為1,P37為16進(jìn)制006E,10進(jìn)制為110;P38為16進(jìn)制43301000實(shí)際值為176.0652[3];

每組20個(gè)數(shù)據(jù)(第20個(gè)數(shù)據(jù)不用),在編制軟件時(shí)用循環(huán)很容易完成。

4 軟件通訊的實(shí)現(xiàn)

將 CAN-以太網(wǎng)網(wǎng)關(guān)的工作模式設(shè)置成服務(wù)器方式;將CAN-以太網(wǎng)網(wǎng)關(guān)CAN總線的通訊速率設(shè)置成和CAN設(shè)備一樣的速率;將計(jì)算機(jī)的IP地址設(shè)置成和CAN-以太網(wǎng)網(wǎng)關(guān)同一個(gè)網(wǎng)段里的不同IP地址;用VB新建個(gè)工程,將Winsock控件添加到工程中,其屬性中的RemoteHost屬性設(shè)置成CAN-以太網(wǎng)網(wǎng)關(guān)的IP地址,其屬性中的 RemotePort屬性設(shè)置成 CAN-以太網(wǎng)網(wǎng)關(guān)的偵聽(tīng)端口,在窗體上添加 Command1、Command2、Text1.Text3個(gè)控件,編寫(xiě)代碼如下:

Private Sub Command1_Click()

Winsock1.Connect

End Sub

Private Sub Command2_Click()’發(fā)送0014000 00008FFFF006E00780064000000000000

Dim X(19) As Byte

'X(0) = &H0

X(1) = &H14

X(2) = &H0

X(3) = &H0

X(4) = &H0

X(5) = &H8

X(6) =&HFF

X(7) = &HFF

X(8) = &H0

X(9) = &H6E

X(10) = &H0

X(11) = &H78

X(12) = &H0

X(13) = &H64

X(14) = &H0

X(15) = &H0

X(16) = &H0

X(17) = &H0

X(18) = &H0

X(19) = &H0

Winsock1.SendData X()

End Sub

接收數(shù)據(jù)代碼如下:

Private Sub Winsock 1_DataArrival (ByVal bytes Total as Long)

Dim p1, buf, data1 As String

Dim InByte, I

Buf = ""

Winsock 1.GetData data1

InByte = data1

For I = LBound(InByte) To UBound(InByte)

If Len(Hex(InByte(I))) = 1 Then Buf = Buf+ "0" + Hex(InByte(I))

If Len(Hex(InByte(I))) = 0 Then Buf = Buf+ "00"

If Len(Hex(InByte(I))) = 2 Then Buf = Buf+ Hex(InByte(I))

Next I

Text1.Text = Buf ‘將接收的數(shù)據(jù)放到Text1.Text里顯示

End Sub

將設(shè)備連接好,加電后,運(yùn)行軟件點(diǎn)擊Command1,和 CAN設(shè)備建立通訊鏈路,點(diǎn)擊Command2,將數(shù)據(jù)發(fā)送到CAN設(shè)備。當(dāng)CAN設(shè)備返回?cái)?shù)據(jù)時(shí),將自動(dòng)顯示在Text1.Text里。

5 結(jié)語(yǔ)

用以上方法將數(shù)據(jù)讀上來(lái)后,可以自己編寫(xiě)監(jiān)控界面,也可以用DDE 或OPC的方式將采集數(shù)據(jù)放到任何組態(tài)軟件中,用組態(tài)軟件監(jiān)控設(shè)備運(yùn)行[4]?;谇度胧较到y(tǒng)的智能節(jié)點(diǎn)在CAN總線中的應(yīng)用靈活穩(wěn)定[5]。CAN總線技術(shù)下設(shè)計(jì)企業(yè)的生產(chǎn)監(jiān)控系統(tǒng),提高現(xiàn)代制造企業(yè)生產(chǎn)的信息化與網(wǎng)絡(luò)化水平。

[1] 京金華(北京)有限公司.CAN產(chǎn)品配置手冊(cè)[M].北京:出版者不詳,2007:2-22.

[2] 李天啟.Visual Basic 6學(xué)習(xí)捷徑[M].北京:清華大學(xué)出版社,1994:68-98.

[3] 王道義.VisualBasic 6使用詳解[M].北京:機(jī)械工業(yè)出版社,1997:32-55.

[4] 張亞娟.基于嵌入式系統(tǒng)的智能節(jié)點(diǎn)在 CAN總線中的應(yīng)用[J].通信技術(shù),2006(06):51-54.

[5] 蔡連君.基于 CAN總線的生產(chǎn)監(jiān)控系統(tǒng)研究[J].通信技術(shù),2009,42(10):151-152.

猜你喜歡
模擬量控件字節(jié)
No.8 字節(jié)跳動(dòng)將推出獨(dú)立出口電商APP
基于.net的用戶定義驗(yàn)證控件的應(yīng)用分析
No.10 “字節(jié)跳動(dòng)手機(jī)”要來(lái)了?
基于信號(hào)集中監(jiān)測(cè)的軌道電路模擬量報(bào)警分析
基于MSP430的四旋翼飛行器的S-BUS通信協(xié)議的設(shè)計(jì)與實(shí)現(xiàn)
關(guān)于.net控件數(shù)組的探討
關(guān)于600MW火電機(jī)組模擬量控制系統(tǒng)設(shè)計(jì)和研究
一種通用模擬量及開(kāi)關(guān)量信號(hào)采集板卡的設(shè)計(jì)
基于S7-200PLC 模擬量擴(kuò)展模塊使用問(wèn)題的研究
基于嵌入式MINIGUI控件子類(lèi)化技術(shù)的深入研究與應(yīng)用
临安市| 鹿邑县| 秦皇岛市| 万年县| 华容县| 沈丘县| 南靖县| 永宁县| 德兴市| 河东区| 孟州市| 乐清市| 白水县| 定襄县| 南澳县| 镇远县| 阜平县| 集安市| 绍兴县| 日土县| 绥阳县| 孝感市| 汪清县| 察雅县| 扎囊县| 万州区| 梨树县| 安塞县| 远安县| 长治市| 东乡县| 道真| 阜宁县| 博乐市| 新巴尔虎右旗| 庆安县| 当阳市| 贵南县| 申扎县| 容城县| 五家渠市|