時間:2019-08-12 15:53:52來源:藍海華騰
一、介紹
從OSI網絡模型的角度來看同,現場總線網絡一般只實現了第1層(物理層)、第2層(數據鏈路層)、第7層(應用層)。因為現場總線通常只包括一個網段,因此不需要第3層(傳輸層)和第4層(網絡層),也不需要第5層(會話層)第6層(描述層)的作用。
CAN(ControllerAreaNetwork)現場總線僅僅定義了第1層、第2層(見ISO11898標準);實際設計中,這兩層完全由硬件實現,設計人員無需再為此開發(fā)相關軟件(Software)或固件(Firmware)。同時,CAN只定義物理層和數據鏈路層,沒有規(guī)定應用層,本身并不完整,需要一個高層協議來定義CAN報文中的11/29位標識符、8字節(jié)數據的使用。而且,基于CAN總線的工業(yè)自動化應用中,越來越需要一個開放的、標準化的高層協議:這個協議支持各種CAN廠商設備的互用性、互換性,能夠實現在CAN網絡中提供標準的、統一的系統通訊模式,提供設備功能描述方式,執(zhí)行網絡管理功能。
應用層(Applicationlayer):為網絡中每一個有效設備都能夠提供一組有用的服務與協議。
通訊描述(Communicationprofile):提供配置設備、通訊數據的含義,定義數據通訊方式。
設備描述(Deviceproflile):為設備(類)增加符合規(guī)范的行為。
下面將介紹基于CAN的高層協議:CAL協議和基于CAL協議擴展的CANopen協議。CANopen協議是CAN-in-Automation(CiA)定義的標準之一,并且在發(fā)布后不久就獲得了廣泛的承認。尤其是在歐洲,CANopen協議被認為是在基于CAN的工業(yè)系統中占領導地位的標準。大多數重要的設備類型,例如數字和模擬的輸入輸出模塊、驅動設備、操作設備、控制器、可編程控制器或編碼器,都在稱為“設備描述”的協議中進行描述;“設備描述”定義了不同類型的標準設備及其相應的功能。依靠CANopen協議的支持,可以對不同廠商的設備通過總線進行配置。在OSI模型中,CAN標準、CANopen協議之間的關系如下圖所示:
圖1CAN、CANopen標準在OSI網絡模型中的位置框圖
二、CAL協議
CAL(CANApplicationLayer)協議是目前基于CAN的高層通訊協議中的一種,最早由Philips醫(yī)療設備部門制定?,F在CAL由獨立的CAN用戶和制造商集團CiA(CANinAutomation)協會負責管理、發(fā)展和推廣。
CAL提供了4種應用層服務功能:
CMS(CAN-basedMessageSpecification)
CMS提供了一個開放的、面向對象的環(huán)境,用于實現用戶的應用。CMS提供基于變量、事件、域類型的對象,以設計和規(guī)定一個設備(節(jié)點)的功能如何被訪問(例如,如何上載下載超過8字節(jié)的一組數據(域),并且有終止傳輸的功能)。CMS從MMS(ManufacturingMessageSpecification)繼承而來。MMS是OSI為工業(yè)設備的遠程控制和監(jiān)控而制定的應用層規(guī)范。
NMT(NetworkManagemenT)
提供網絡管理(如初始化、啟動和停止節(jié)點,偵測失效節(jié)點)服務。這種服務是采用主從通訊模式(所以只有一個NMT主節(jié)點)來實現的。
DBT(DistriBuTor)
提供動態(tài)分配CANID(正式名稱為COB-ID,CommunicationObjectIdentifier)服務。這種服務是采用主從通訊模式(所以只有一個DBT主節(jié)點)來實現的。
LMT(LayerManagemenT)
LMT提供修改層參數的服務:一個節(jié)點(LMTMaster)可以設置另外一個節(jié)點(LMTSlave)的某層參數(如改變一個節(jié)點的NMT地址,或改變CAN接口的位定時和波特率)。
CMS為它的消息定義了8個優(yōu)先級,每個優(yōu)先級擁有220個COB-ID,范圍從1到1760。剩余的標志(0,1761-2031)保留給NMT,DBT和LMT,見下表。
映射到CAL服務和對象的COB-ID(11位CAN標識符) | 服務或對象 |
0 | NMT 啟動/停止服務 |
1 - 220 | CMS對象 優(yōu)先級0 |
221 - 440 | CMS對象 優(yōu)先級1 |
441 - 660 | CMS對象 優(yōu)先級2 |
661 - 880 | CMS對象 優(yōu)先級3 |
881 - 1100 | CMS對象 優(yōu)先級4 |
1101 - 1320 | CMS對象 優(yōu)先級5 |
1321 - 1540 | CMS對象 優(yōu)先級6 |
1541 - 1760 | CMS對象 優(yōu)先級7 |
1761 - 2015 | NMT 節(jié)點保護 |
2016 - 2031 | NMT,LMT,DBT服務 |
三、變頻器與貝加萊人機界面連接如下
圖2
四、CPS_ModbusRTUGateway(I-7232D)配置
在計算機上安裝I-7232DUTILITY配置軟件,并運行如下圖所示
圖3
運行配置軟件后顯示如下圖,I-7232D上電時將INT腳與GND短接,使I-7232D工作在配置模式
圖4
選擇正確的通訊COM口,點擊“CONNETCT”連接I-7232D,連接成功后,點擊CAN-bus將出現如下窗口圖所示:
圖5
I-7232D的CANopen端:
波特率:250KBPS
節(jié)點號為:1
然后點擊RS-485按鈕如下圖
圖6
I-7232D的RS-485端:
波特率:19200BPS
數據長度:8
奇偶校驗:無
停止位:1
超時:50ms
在配置完通訊端口參數后擊點“NEXT”彈出如下窗口,如圖所示
圖7
然后點擊“ADD”按鈕添加MODBUS地址映射,”ModbusDeviceNodeID”,這里輸入被映射的變頻器RS-485節(jié)點地址,”RelayAddress”,本欄里選擇MODBUSRTU功能碼,這里我們只用兩個功能碼:AnalogOutput(寫入)和AnalogInput(讀取),“Register/RelayAddress”此處填入要讀/寫的變頻器寄存器地址,“DataLength”這里設置讀/寫變頻器寄存器的數據長度。在這里我們的映射地址如下表所示。在完成映射后點擊“ModbusInformation”和“PDOInformation”可以察看映射參數列表如下圖所示
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
完成以上操作后點擊“NEXT”出現如下窗口
圖10
然后點擊“Finish”保存配置的參數到I-7232D同時在應用程序根目錄下生成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";設備名稱
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寫入
UserType.Send_COB[2]=$301;......
UserType.Send_COB[3]=$401;......
;nodeidcofg
UserType.Node[1]=$01;RS-485節(jié)點地址
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進入運行狀態(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])?將要寫入的數據
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]);存儲讀入的數據
(*setthedestinationadress*)
CANrtr_01[i].can_id=UserType.RTR_COB[i]
(*setcan_id*)
CANrtr_01[i]FUBCANrtr();發(fā)送請求讀取數據
(*callCANrtr*)
whenCANrtr_01[i].status<>MSG_BUSY;1
nextSend_Data1
endselect
endloop
數據轉換程序:
(*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地址映射時沒有按COB-ID對齊(節(jié)省空間地址)如在寫入時COB-ID為0X301一次可寫入4個字,前兩個字為#1號變頻器的MODBUS地址,后兩個字為#2號變頻器MODBUS地址,讀取地址原理相同,具體查看I-7232D的PDO的參數列表
聲明:本文為轉載類文章,如涉及版權問題,請及時聯系我們刪除(QQ: 2737591964),不便之處,敬請諒解!
標簽:
上一篇:扶梯解決方案
中國傳動網版權與免責聲明:凡本網注明[來源:中國傳動網]的所有文字、圖片、音視和視頻文件,版權均為中國傳動網(m.u63ivq3.com)獨家所有。如需轉載請與0755-82949061聯系。任何媒體、網站或個人轉載使用時須注明來源“中國傳動網”,違反者本網將追究其法律責任。
本網轉載并注明其他來源的稿件,均來自互聯網或業(yè)內投稿人士,版權屬于原版權人。轉載請保留稿件來源及作者,禁止擅自篡改,違者自負版權法律責任。
產品新聞
更多>2024-10-31
2024-10-31
2024-10-31
2024-10-31
2024-10-29
2024-10-18