時(shí)間:2019-08-12 15:53:52來(lái)源:藍(lán)海華騰
一、介紹
從OSI網(wǎng)絡(luò)模型的角度來(lái)看同,現(xiàn)場(chǎng)總線(xiàn)網(wǎng)絡(luò)一般只實(shí)現(xiàn)了第1層(物理層)、第2層(數(shù)據(jù)鏈路層)、第7層(應(yīng)用層)。因?yàn)楝F(xiàn)場(chǎng)總線(xiàn)通常只包括一個(gè)網(wǎng)段,因此不需要第3層(傳輸層)和第4層(網(wǎng)絡(luò)層),也不需要第5層(會(huì)話(huà)層)第6層(描述層)的作用。
CAN(ControllerAreaNetwork)現(xiàn)場(chǎng)總線(xiàn)僅僅定義了第1層、第2層(見(jiàn)ISO11898標(biāo)準(zhǔn));實(shí)際設(shè)計(jì)中,這兩層完全由硬件實(shí)現(xiàn),設(shè)計(jì)人員無(wú)需再為此開(kāi)發(fā)相關(guān)軟件(Software)或固件(Firmware)。同時(shí),CAN只定義物理層和數(shù)據(jù)鏈路層,沒(méi)有規(guī)定應(yīng)用層,本身并不完整,需要一個(gè)高層協(xié)議來(lái)定義CAN報(bào)文中的11/29位標(biāo)識(shí)符、8字節(jié)數(shù)據(jù)的使用。而且,基于CAN總線(xiàn)的工業(yè)自動(dòng)化應(yīng)用中,越來(lái)越需要一個(gè)開(kāi)放的、標(biāo)準(zhǔn)化的高層協(xié)議:這個(gè)協(xié)議支持各種CAN廠(chǎng)商設(shè)備的互用性、互換性,能夠?qū)崿F(xiàn)在CAN網(wǎng)絡(luò)中提供標(biāo)準(zhǔn)的、統(tǒng)一的系統(tǒng)通訊模式,提供設(shè)備功能描述方式,執(zhí)行網(wǎng)絡(luò)管理功能。
應(yīng)用層(Applicationlayer):為網(wǎng)絡(luò)中每一個(gè)有效設(shè)備都能夠提供一組有用的服務(wù)與協(xié)議。
通訊描述(Communicationprofile):提供配置設(shè)備、通訊數(shù)據(jù)的含義,定義數(shù)據(jù)通訊方式。
設(shè)備描述(Deviceproflile):為設(shè)備(類(lèi))增加符合規(guī)范的行為。
下面將介紹基于CAN的高層協(xié)議:CAL協(xié)議和基于CAL協(xié)議擴(kuò)展的CANopen協(xié)議。CANopen協(xié)議是CAN-in-Automation(CiA)定義的標(biāo)準(zhǔn)之一,并且在發(fā)布后不久就獲得了廣泛的承認(rèn)。尤其是在歐洲,CANopen協(xié)議被認(rèn)為是在基于CAN的工業(yè)系統(tǒng)中占領(lǐng)導(dǎo)地位的標(biāo)準(zhǔn)。大多數(shù)重要的設(shè)備類(lèi)型,例如數(shù)字和模擬的輸入輸出模塊、驅(qū)動(dòng)設(shè)備、操作設(shè)備、控制器、可編程控制器或編碼器,都在稱(chēng)為“設(shè)備描述”的協(xié)議中進(jìn)行描述;“設(shè)備描述”定義了不同類(lèi)型的標(biāo)準(zhǔn)設(shè)備及其相應(yīng)的功能。依靠CANopen協(xié)議的支持,可以對(duì)不同廠(chǎng)商的設(shè)備通過(guò)總線(xiàn)進(jìn)行配置。在OSI模型中,CAN標(biāo)準(zhǔn)、CANopen協(xié)議之間的關(guān)系如下圖所示:
圖1CAN、CANopen標(biāo)準(zhǔn)在OSI網(wǎng)絡(luò)模型中的位置框圖
二、CAL協(xié)議
CAL(CANApplicationLayer)協(xié)議是目前基于CAN的高層通訊協(xié)議中的一種,最早由Philips醫(yī)療設(shè)備部門(mén)制定?,F(xiàn)在CAL由獨(dú)立的CAN用戶(hù)和制造商集團(tuán)CiA(CANinAutomation)協(xié)會(huì)負(fù)責(zé)管理、發(fā)展和推廣。
CAL提供了4種應(yīng)用層服務(wù)功能:
CMS(CAN-basedMessageSpecification)
CMS提供了一個(gè)開(kāi)放的、面向?qū)ο蟮沫h(huán)境,用于實(shí)現(xiàn)用戶(hù)的應(yīng)用。CMS提供基于變量、事件、域類(lèi)型的對(duì)象,以設(shè)計(jì)和規(guī)定一個(gè)設(shè)備(節(jié)點(diǎn))的功能如何被訪(fǎng)問(wèn)(例如,如何上載下載超過(guò)8字節(jié)的一組數(shù)據(jù)(域),并且有終止傳輸?shù)墓δ埽?。CMS從MMS(ManufacturingMessageSpecification)繼承而來(lái)。MMS是OSI為工業(yè)設(shè)備的遠(yuǎn)程控制和監(jiān)控而制定的應(yīng)用層規(guī)范。
NMT(NetworkManagemenT)
提供網(wǎng)絡(luò)管理(如初始化、啟動(dòng)和停止節(jié)點(diǎn),偵測(cè)失效節(jié)點(diǎn))服務(wù)。這種服務(wù)是采用主從通訊模式(所以只有一個(gè)NMT主節(jié)點(diǎn))來(lái)實(shí)現(xiàn)的。
DBT(DistriBuTor)
提供動(dòng)態(tài)分配CANID(正式名稱(chēng)為COB-ID,CommunicationObjectIdentifier)服務(wù)。這種服務(wù)是采用主從通訊模式(所以只有一個(gè)DBT主節(jié)點(diǎn))來(lái)實(shí)現(xiàn)的。
LMT(LayerManagemenT)
LMT提供修改層參數(shù)的服務(wù):一個(gè)節(jié)點(diǎn)(LMTMaster)可以設(shè)置另外一個(gè)節(jié)點(diǎn)(LMTSlave)的某層參數(shù)(如改變一個(gè)節(jié)點(diǎn)的NMT地址,或改變CAN接口的位定時(shí)和波特率)。
CMS為它的消息定義了8個(gè)優(yōu)先級(jí),每個(gè)優(yōu)先級(jí)擁有220個(gè)COB-ID,范圍從1到1760。剩余的標(biāo)志(0,1761-2031)保留給NMT,DBT和LMT,見(jiàn)下表。
映射到CAL服務(wù)和對(duì)象的COB-ID(11位CAN標(biāo)識(shí)符) | 服務(wù)或?qū)ο?/td> |
0 | NMT 啟動(dòng)/停止服務(wù) |
1 - 220 | CMS對(duì)象 優(yōu)先級(jí)0 |
221 - 440 | CMS對(duì)象 優(yōu)先級(jí)1 |
441 - 660 | CMS對(duì)象 優(yōu)先級(jí)2 |
661 - 880 | CMS對(duì)象 優(yōu)先級(jí)3 |
881 - 1100 | CMS對(duì)象 優(yōu)先級(jí)4 |
1101 - 1320 | CMS對(duì)象 優(yōu)先級(jí)5 |
1321 - 1540 | CMS對(duì)象 優(yōu)先級(jí)6 |
1541 - 1760 | CMS對(duì)象 優(yōu)先級(jí)7 |
1761 - 2015 | NMT 節(jié)點(diǎn)保護(hù) |
2016 - 2031 | NMT,LMT,DBT服務(wù) |
三、變頻器與貝加萊人機(jī)界面連接如下
圖2
四、CPS_ModbusRTUGateway(I-7232D)配置
在計(jì)算機(jī)上安裝I-7232DUTILITY配置軟件,并運(yùn)行如下圖所示
圖3
運(yùn)行配置軟件后顯示如下圖,I-7232D上電時(shí)將INT腳與GND短接,使I-7232D工作在配置模式
圖4
選擇正確的通訊COM口,點(diǎn)擊“CONNETCT”連接I-7232D,連接成功后,點(diǎn)擊CAN-bus將出現(xiàn)如下窗口圖所示:
圖5
I-7232D的CANopen端:
波特率:250KBPS
節(jié)點(diǎn)號(hào)為:1
然后點(diǎn)擊RS-485按鈕如下圖
圖6
I-7232D的RS-485端:
波特率:19200BPS
數(shù)據(jù)長(zhǎng)度:8
奇偶校驗(yàn):無(wú)
停止位:1
超時(shí):50ms
在配置完通訊端口參數(shù)后擊點(diǎn)“NEXT”彈出如下窗口,如圖所示
圖7
然后點(diǎn)擊“ADD”按鈕添加MODBUS地址映射,”ModbusDeviceNodeID”,這里輸入被映射的變頻器RS-485節(jié)點(diǎn)地址,”RelayAddress”,本欄里選擇MODBUSRTU功能碼,這里我們只用兩個(gè)功能碼:AnalogOutput(寫(xiě)入)和AnalogInput(讀取),“Register/RelayAddress”此處填入要讀/寫(xiě)的變頻器寄存器地址,“DataLength”這里設(shè)置讀/寫(xiě)變頻器寄存器的數(shù)據(jù)長(zhǎng)度。在這里我們的映射地址如下表所示。在完成映射后點(diǎn)擊“ModbusInformation”和“PDOInformation”可以察看映射參數(shù)列表如下圖所示
nstance NO. | Modbus Device NodeID | Relay Address | Register/Relay Address | Data Length |
1 | 1 | Analog Output | 32769 | 1 |
2 | 1 | Analog Output | 32770 | 1 |
3 | 1 | Analog Input | 33036 | 1 |
4 | 1 | Analog Input | 33079 | 1 |
5 | 1 | Analog Input | 33081 | 1 |
6 | 2 | Analog Output | 32769 | 1 |
7 | 2 | Analog Output | 32770 | 1 |
8 | 2 | Analog Input | 33036 | 1 |
9 | 2 | Analog Input | 33079 | 1 |
10 | 2 | Analog Input | 33081 | 1 |
圖8
圖9
完成以上操作后點(diǎn)擊“NEXT”出現(xiàn)如下窗口
圖10
然后點(diǎn)擊“Finish”保存配置的參數(shù)到I-7232D同時(shí)在應(yīng)用程序根目錄下生成EDS文件,保存成功后返回主窗口。完成配置后掉電重啟I-7232D。
PP45CANopen程序:
CAN通訊口初始化程序
(*initprogram*)
CANopen_0.enable=1
CANopen_0.baud_rate=25;250k
CANopen_0.cob_anz=20
CANopen_0.error_adr=adr(ERR)
CANopen_0.device="SS1.IF3";設(shè)備名稱(chēng)
CANopen_0.info=0
CANopen_0FUBCANopen();初始化CAN
NMT_Data[0]=1;CANOPEN命令01-
NMT_Data[1]=0
;requstcobcofg
UserType.RTR_COB[1]=$281;COB-ID281讀取
UserType.RTR_COB[2]=$381;......
UserType.RTR_COB[3]=$481
;cmmdcobcofg
UserType.Send_COB[1]=$301;COB-ID301寫(xiě)入
UserType.Send_COB[2]=$301;......
UserType.Send_COB[3]=$401;......
;nodeidcofg
UserType.Node[1]=$01;RS-485節(jié)點(diǎn)地址
UserType.Node[2]=$02;..
UserType.Node[3]=$03
PDO程序;
(*cyclicprogram*)
loopi=1to3do
m[i]=workstep[i]
selectworkstep[i]
stateSend_NMT
CANwrite_NMT[i].enable=1
CANwrite_NMT[i].us_ident=CANopen_0.us_ident
CANwrite_NMT[i].can_id=NMT_COB;0
CANwrite_NMT[i].data_adr=adr(NMT_Data[0])
CANwrite_NMT[i].data_lng=sizeof(NMT_Data)
CANwrite_NMT[i]FUBCANwrite()----?使I-78232D進(jìn)入運(yùn)行狀態(tài)
whenCANwrite_NMT[i].status<>MSG_BUSY;1
nextSend_Data1
stateSend_Data1
(*PDO1RX*)
CANwrite_data1[i].enable=1
CANwrite_data1[i].us_ident=CANopen_0.us_ident
CANwrite_data1[i].can_id=UserType.Send_COB[i]
CANwrite_data1[i].data_adr=adr(UserType.Txdata[i].Data[0])?將要寫(xiě)入的數(shù)據(jù)
CANwrite_data1[i].data_lng=sizeof(UserType.Txdata[i])
CANwrite_data1[i]FUBCANwrite()
whenCANwrite_data1[i].status<>MSG_BUSY;1
nextSend_Data2
stateSend_Data2(*PDO1TX*)
(*讀取模式為異步RTR*)
CANrtr_01[i].request=notCANrtr_01[i].request
CANrtr_01[i].enable=1
(*enablethefunctionblockCANrtr*)
CANrtr_01[i].us_ident=CANopen_0.us_ident
(*setus_idwiththevaluefromCANopen*)
CANrtr_01[i].data_adr=ADR(UserType.Rxdata[i].Data[0]);存儲(chǔ)讀入的數(shù)據(jù)
(*setthedestinationadress*)
CANrtr_01[i].can_id=UserType.RTR_COB[i]
(*setcan_id*)
CANrtr_01[i]FUBCANrtr();發(fā)送請(qǐng)求讀取數(shù)據(jù)
(*callCANrtr*)
whenCANrtr_01[i].status<>MSG_BUSY;1
nextSend_Data1
endselect
endloop
數(shù)據(jù)轉(zhuǎn)換程序:
(*cyclicprogram*)
loopi=1to2do
ifi=1then
memcpy(adr(mActFreq[i]),adr(UserType.Rxdata[i].Data[2]),2)
MotorApp[i].rActFreq=real(mActFreq[i])/100.0;actfreqence
memcpy(adr(MotorApp[i].rStatus),adr(UserType.Rxdata[i].Data[0]),2);statusword
UserType.Txdata[i].Data[0]=byte(MotorApp[i].wCtrlWord);setcontrlword
UserType.Txdata[i].Data[1]=byte(lsr(MotorApp[i].wCtrlWord,8))
UserType.Txdata[i].Data[2]=byte(uint(MotorApp[i].wSetfreq*100));setFreqence
UserType.Txdata[i].Data[3]=byte(lsr(uint(MotorApp[i].wSetfreq*100),8))
UserType.Txdata[i].Data[4]=UserType.Txdata[i+1].Data[4]
UserType.Txdata[i].Data[5]=UserType.Txdata[i+1].Data[5]
UserType.Txdata[i].Data[6]=UserType.Txdata[i+1].Data[6]
UserType.Txdata[i].Data[7]=UserType.Txdata[i+1].Data[7]
else
memcpy(adr(mActFreq[i]),adr(UserType.Rxdata[i].Data[0]),2)
MotorApp[i].rActFreq=real(mActFreq[i])/100.0;actfreqence
memcpy(adr(MotorApp[i].rStatus),adr(UserType.Rxdata[i].Data[2]),2);statusword
UserType.Txdata[i].Data[4]=byte(MotorApp[i].wCtrlWord);setcontrlword
UserType.Txdata[i].Data[5]=byte(lsr(MotorApp[i].wCtrlWord,8))
UserType.Txdata[i].Data[6]=byte(uint(MotorApp[i].wSetfreq*100));setFreqence
UserType.Txdata[i].Data[7]=byte(lsr(uint(MotorApp[i].wSetfreq*100),8))
UserType.Txdata[i].Data[0]=UserType.Txdata[i-1].Data[0]
UserType.Txdata[i].Data[1]=UserType.Txdata[i-1].Data[1]
UserType.Txdata[i].Data[2]=UserType.Txdata[i-1].Data[2]
UserType.Txdata[i].Data[3]=UserType.Txdata[i-1].Data[3]
endif
status_1=UserType.Rxdata[1].Data[1]
status_2=UserType.Rxdata[1].Data[7]
endloop
注意:在MODBUS地址映射時(shí)沒(méi)有按COB-ID對(duì)齊(節(jié)省空間地址)如在寫(xiě)入時(shí)COB-ID為0X301一次可寫(xiě)入4個(gè)字,前兩個(gè)字為#1號(hào)變頻器的MODBUS地址,后兩個(gè)字為#2號(hào)變頻器MODBUS地址,讀取地址原理相同,具體查看I-7232D的PDO的參數(shù)列表
聲明:本文為轉(zhuǎn)載類(lèi)文章,如涉及版權(quán)問(wèn)題,請(qǐng)及時(shí)聯(lián)系我們刪除(QQ: 2737591964),不便之處,敬請(qǐng)諒解!
標(biāo)簽:
中國(guó)傳動(dòng)網(wǎng)版權(quán)與免責(zé)聲明:凡本網(wǎng)注明[來(lái)源:中國(guó)傳動(dòng)網(wǎng)]的所有文字、圖片、音視和視頻文件,版權(quán)均為中國(guó)傳動(dòng)網(wǎng)(www.surachana.com)獨(dú)家所有。如需轉(zhuǎn)載請(qǐng)與0755-82949061聯(lián)系。任何媒體、網(wǎng)站或個(gè)人轉(zhuǎn)載使用時(shí)須注明來(lái)源“中國(guó)傳動(dòng)網(wǎng)”,違反者本網(wǎng)將追究其法律責(zé)任。
本網(wǎng)轉(zhuǎn)載并注明其他來(lái)源的稿件,均來(lái)自互聯(lián)網(wǎng)或業(yè)內(nèi)投稿人士,版權(quán)屬于原版權(quán)人。轉(zhuǎn)載請(qǐng)保留稿件來(lái)源及作者,禁止擅自篡改,違者自負(fù)版權(quán)法律責(zé)任。
產(chǎn)品新聞
更多>鋼鐵廠(chǎng)的“眼科手術(shù)”:維宏線(xiàn)激光如何...
2025-04-30
性能躍升20%!維宏NK300CX Plus數(shù)控系統(tǒng)...
2025-04-11
rpi-image-gen:樹(shù)莓派軟件鏡像構(gòu)建的終...
2025-04-08
【產(chǎn)品解讀】全面提升精密制造檢測(cè)節(jié)拍...
2025-03-31
激光閃耀 智慧引領(lǐng) | WISE MASER 黑武士...
2025-03-20
推薦專(zhuān)題
更多>