PROFIBUSDP主站通信程序設(shè)計_第1頁
PROFIBUSDP主站通信程序設(shè)計_第2頁
PROFIBUSDP主站通信程序設(shè)計_第3頁
PROFIBUSDP主站通信程序設(shè)計_第4頁
PROFIBUSDP主站通信程序設(shè)計_第5頁
已閱讀5頁,還剩10頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

PROFIBUS-DP主站通信程序設(shè)計假設(shè)已經(jīng)設(shè)計好了能完成某種功能的從站,就可以編寫主站測試程序來測試從站的性能。CP5611FBPRO-8DI八路數(shù)字量輸入智能節(jié)點為例PROFIBUS-DP主站通信程序設(shè)計,編程環(huán)境使用VC++6.0。本程序能夠完成應(yīng)用程序的初始化、數(shù)據(jù)讀入、數(shù)據(jù)輸出和應(yīng)用程序的復(fù)位等根本操作。PROFIBUS-DP主站通信程序設(shè)計步驟為:VC++6.0下創(chuàng)立一個應(yīng)用程序;CP5611DPN_USER.HDPLIB.LIB兩個文件拷貝到剛剛建的工程根名目下,并且添加到應(yīng)用程序中;VC++6.0環(huán)境下編寫通信程序。通信程序中主要函數(shù)介紹定義變量dpn_interfacedpn_ptr;//使用前必需首先定義dpn_interface的構(gòu)造:structdpn_interface{structREFERENCEreference;//子構(gòu)造體unsignedcharstat_nr;//站地址unsignedcharlength;//返回數(shù)據(jù)長度unsignedshortinterror_code;//錯誤代碼unsignedcharslv_state;//DP從站狀態(tài)unsignedcharsys_state;//DP主站狀態(tài)unsignedcharsys_event;//大事信息unsignedcharuser_data[MAX_DATA_LEN];//數(shù)據(jù)區(qū)};structREFERENCE{unsignedcharboard_select;//CP板卡選擇設(shè)置unsignedcharaccess;//系統(tǒng)訪問設(shè)置};dpn_init(&dpn_ptr)CP5611/5613進(jìn)展訪問操作之前必需調(diào)用初始化函數(shù)。使用初始化函數(shù)之前,必需對該函數(shù)做一些初始化操作,其他函數(shù)使用前也必需首先對變量初始化:dpn_ptr.reference.board_select=1;//CP5611/5613的板卡號,假設(shè)系統(tǒng)中1dpn_ptr.reference.access=(DPN_SYS_NOT_CENTRAL)|(DPN_ROLE_NOT_CENTRAL);//系統(tǒng)中不設(shè)置高級任務(wù)和高級懇求//以上兩項一般固定dpn_ptr.length=126;//length=profibus網(wǎng)絡(luò)中最大的從站地址intj=0;for(j=0;j<126;j++)//設(shè)置設(shè)備讀寫屬性{if(“網(wǎng)絡(luò)中存在該地址”){dpn_ptr.user_data[j]=DPN_SLV_WRITE_READ;//假設(shè)網(wǎng)絡(luò)中存在本地址,則將屬性設(shè)置為DPN_SLV_WRITE_READ0}else}

dpn_ptr.user_data[j]=0;//FBPRO-8DI2,應(yīng)當(dāng)設(shè)置//dpn_ptr.user_data[2]=DPN_SLV_WRITE_READ;dpn_init(&dpn_ptr);//調(diào)用初始化函數(shù)假設(shè)有錯誤,可以參考初始化函數(shù)的返回值來解決。interror=dpn_ptr.error_code;有以下幾種:錯誤代碼解釋如下:DPN_NO_ERROR:無錯誤。返回值是有效的,并且必需進(jìn)展推斷。DPN_ACCESS_ERRORDP應(yīng)用程序無權(quán)寫該函數(shù)或從站。DPN_APPL_LIMIT_ERRORDP應(yīng)用程序的最大允許數(shù)目。DPN_BOARD_ERROR:CP固件錯誤〔2層無法正常啟動〕。DPN_CENTRAL_ERRORDP應(yīng)用程序調(diào)用。DPN_CLOSE_ERROR:關(guān)閉DP應(yīng)用程序出錯。DPN_GLB_CTRL_ERROR:調(diào)用dpn_global_crtl函數(shù)時掌握命令的數(shù)值范圍非法。DPN_LENGTH_ERROR:dpn_interface、dpn_interface_s和dpn_interface_s_ext構(gòu)造體的元素“l(fā)ength”超出允許數(shù)值范圍,或者dpn_out_slv、dpn_out_slv_mdpn_out_slv_m_ext的數(shù)據(jù)長度與配置值不匹配。DPN_MEM_BOARD_ERROR:CP上沒有足夠的空閑內(nèi)存。DPN_MEM_HOST_ERROR:主站上沒有足夠的空閑內(nèi)存。DPN_MODE_ERROR:當(dāng)前無法執(zhí)行函數(shù)調(diào)用。調(diào)用dpn_set_mode函數(shù)時發(fā)生該錯誤,可能是由于在轉(zhuǎn)變操作方式時試圖跳過一個狀態(tài)。DPN_NO_DBASE_ERROR:DP數(shù)據(jù)庫無入口或入口錯誤。DPN_OPEN_ERROR:DP應(yīng)用程序注冊錯誤〔例如未下載驅(qū)動、未插入CP等〕。DPN_RECEIVE_ERROR:CP對接口驅(qū)動確實認(rèn)錯誤。DPN_REFERENCE_DIFF_ERROR:多用戶方式錯誤。調(diào)用dpn_init函數(shù)時,referenceCPDP應(yīng)用程序的dpn_init函數(shù)不匹配。DPN_REFERENCE_ERROR:dpn_interface、dpn_interface_m和dpn_ifc_m_ext構(gòu)造體的元素reference無效。DPN_SEND_ERROR:CP的調(diào)用錯誤。DPN_SLV_STATE_ERROR:dpn_interface構(gòu)造體slv_state元素?zé)o效。DPN_STAT_NR_ERROR:dpn_interface、dpn_interface_s和dpn_interface_s_extstat_nr無效,或者數(shù)據(jù)庫中不存在從站。DPN_SYS_STATE_ERROR:dpn_interface構(gòu)造體的sys_state元素?zé)o效。DPN_USER_DATA_ERROR:dpn_interface構(gòu)造體的一個user_data數(shù)組無效。DPN_WD_EXPIRED_ERROR:DP應(yīng)用程序的運行監(jiān)控信號檢測到超時從而導(dǎo)致任務(wù)無法執(zhí)行。DPN_WRONG_BOARD_ERROR:dpn_interfacereference.board元素?zé)o效。輸入有效值〔14〕CP〔CP_L2_11,CP_L2_22〕。DPN_LOAD_L2_VXD_ERRORSOFTNETCP需要的其次層驅(qū)動。可system(Windows95系統(tǒng))或System32\Driver(WindowsNT系統(tǒng))中刪除而造成。DPN_OPEN_L2_VXD_ERRORSOFTNETCP需要的其次層驅(qū)動。該錯誤在其次層驅(qū)動啟動時顯示??赡艿木売桑嚎偩€短路,軟入口已經(jīng)使用,AMPRO2錯誤,信息效勞器〔SIM9SYNC〕未運行。只有當(dāng)時始化正確后,才能進(jìn)一步進(jìn)展以下操作。假設(shè)消滅錯誤,可能緣由有以下幾種:已經(jīng)調(diào)用了初始化函數(shù),并且已經(jīng)成功,但沒有調(diào)用復(fù)位函數(shù),又一次調(diào)用了初始化函數(shù)。dpn_ptr.user_data[j]的值超出了以下三種狀態(tài)設(shè)置:DPN_SLV_WRITE_READ、DPN_SLV_READDPN_SLV_NO_ACCESSDPN_SLV_WRITE_READDPN_SLV_READ屬性的模塊沒有在配置軟件中進(jìn)展正確配置。dpn_ptr.reference.board_selectdpn_ptr.reference.access屬性設(shè)置不正確。SetPG/PC設(shè)置不正確,也不能初始化成功,關(guān)于它的設(shè)置見6.5.5。CP5611網(wǎng)絡(luò)接口卡的驅(qū)動程序。在初始化前沒有將配置好的參數(shù)文件正確下載到系統(tǒng)中。數(shù)據(jù)輸出函數(shù)dpn_out_slv(&ptr_ptr)DP從站。通過該函數(shù)可以將上位機的掌握命DP從站,完成對從站的掌握操作。例如下面程序段向地址為m_ptraddDP從站發(fā)送了八字節(jié)的有效數(shù)據(jù)。dpn_ptr.reference.board_select=1;dpn_ptr.reference.access=(DPN_SYS_NOT_CENTRAL)|(DPN_ROLE_NOT_CENTRAL);ptr_ptr.stat_nr=m_ptradd;//從站地址ptr_ptr.length=8;//與從站的參數(shù)化數(shù)據(jù)必需全都,本例中8字節(jié)輸出,8字節(jié)輸入ptr_ptr.user_data[0]=0;//PC8個字節(jié)的輸出數(shù)據(jù)ptr_ptr.user_data[1]=0;//8字節(jié)數(shù)據(jù)可自定義ptr_ptr.user_data[2]=0;ptr_ptr.user_data[3]=0;ptr_ptr.user_data[4]=0;ptr_ptr.user_data[5]=0;ptr_ptr.user_data[6]=0;ptr_ptr.user_data[7]=0;dpn_out_slv(&ptr_ptr);dpn_in_slv(&dpn_ptr)DP從站的有效數(shù)據(jù)。通過該函數(shù)可以將DP從站的數(shù)據(jù)讀入到上位機,完成對從站的監(jiān)控操作。例如下面程序段即讀入地址為m_ptraddDP從站八字節(jié)的有效數(shù)據(jù)。dpn_ptr.reference.board_select=1;dpn_ptr.reference.access=(DPN_SYS_NOT_CENTRAL)|(DPN_ROLE_NOT_CENTRAL);dpn_ptr.stat_nr=m_ptradd;//從站地址dpn_ptr.length=255;//此處必需設(shè)置255dpn_in_slv(&dpn_ptr);//返回值a1=ptr_ptr.user_data[0];//PC8個字節(jié)的輸入數(shù)據(jù)a2=ptr_ptr.user_data[1];a3=ptr_ptr.user_data[2];a4=ptr_ptr.user_data[3];a5=ptr_ptr.user_data[4];a6=ptr_ptr.user_data[5];a7=ptr_ptr.user_data[6];a8=ptr_ptr.user_data[7];intlen=dpn_ptr.length;//返回實際數(shù)據(jù)長度interror=dpn_ptr.error_code;//返回錯誤代碼,沒有錯誤返回0intslvstate=dpn_ptr.slv_state;//返回從站狀態(tài),有以下取值返回從站狀態(tài)類型代碼解釋如下:DPN_SLV_STAT_OFFLINE:DP從站不在數(shù)據(jù)傳輸段〔CP啟動〕DPN_SLV_STAT_NOT_ACTIVE:從站在本地數(shù)據(jù)庫中未激活DPN_SLV_STAT_READY:DP從站處于數(shù)據(jù)傳輸段DPN_SLV_STAT_READY_DIAG:DP從站處于數(shù)據(jù)傳輸段并且有診斷數(shù)據(jù)存在DPN_SLV_STAT_NOT_READY:DP從站不在數(shù)據(jù)傳輸段DPN_SLV_STAT_NOT_READY_DIAG:DP從站不在數(shù)據(jù)傳輸段并且有診斷數(shù)據(jù)存在intsysstate=dpn_ptr.sys_state;//返回系統(tǒng)狀態(tài),有以下取值返回系統(tǒng)狀態(tài)代碼解釋如下:DPN_SYS_OFFLINE〔Offline模式〕:DP從站的通信,F(xiàn)DL從令牌環(huán)中退出。用戶接口等待一個啟動信號。DPN_SYS_STOP〔STOP模式〕:FDL,F(xiàn)DL2類主站的通信DP從站。DPN_SYS_CLEAR〔CLEAR模式〕:對從站設(shè)置參數(shù),檢查通信接口配置并讀DP從站用戶的數(shù)據(jù)。輸出數(shù)據(jù)將被無視。DPN_SYS_OPERATE〔OPERATE模式〕:1DP從站進(jìn)展用戶DP從站的輸入數(shù)據(jù)傳送給用戶,用戶的輸出數(shù)據(jù)傳送給DPOPERATEGlobal_Control去除DP從站的輸出。初始化函數(shù)的返回值沒有錯誤后,可以進(jìn)展其他函數(shù)的操作,但有時并不能到達(dá)我們期望的結(jié)果,比方數(shù)據(jù)不能讀取到上位機,或者上位機的數(shù)據(jù)不能正確下載到從站中。初始化正確但是不能正常通信的可能緣由有以下幾種:從站沒有工作。從站電源指示燈亮,但是電源電壓低,微處理器沒有工作。通信電纜沒有連接好。通信電纜太長或通信速度太快。沒有正確設(shè)置終端電阻。地址設(shè)置不全都。讀取總線參數(shù)dpn_read_bus_par(&dpn_ptr)dpn_ptr.reference.board_select=1;dpn_ptr.reference.access=(DPN_SYS_NOT_CENTRAL)|(DPN_ROLE_NOT_CENTRAL);dpn_ptr.length=255;//255固定dpn_read_bus_par(&dpn_ptr);返回值,user_data[]為總線參數(shù),總線參數(shù)的構(gòu)造如下所示:dpn_reset(&dpn_ptr)退出時程序要復(fù)位dpn_ptr.reference.board_select=1;dpn_ptr.reference.access=(DPN_SYS_NOT_CENTRAL)|(DPN_ROLE_NOT_CENTRAL);dpn_reset(&dpn_ptr);error_code=0;主站通信程序開發(fā)實例在生疏了主要的通信函數(shù)后,下面給出FBPRO-8DI即8通道隔離型數(shù)字量輸入智能節(jié)點的上位機開發(fā)程序?qū)嵗?,例程中省略了對話框的局部初始化程序,著重給出了PROFIBUS-DP通信程序局部。期望能在讀者進(jìn)展上位機通信開發(fā)過程中,起到拋磚引玉的作用。voidCMy8DIDlg::initpro//初始化{dpn_ptr.reference.access=(DPN_SYS_NOT_CENTRAL)|(DPN_ROLE_NOT_CENTRAL);dpn_ptr.reference.board_select=1;//以上兩行一般固定不變dpn_reset(&dpn_ptr);//復(fù)位for(intj=0;j<126;j++)//設(shè)置設(shè)備讀寫屬性{{}else}

if(devFlag[j])//網(wǎng)絡(luò)中存在該地址dpn_ptr.user_data[j]=DPN_SLV_WRITE_READ;dpn_ptr.user_data[j]=0;dpn_ptr.length=126;dpn_ptr.reference.access=(DPN_SYS_NOT_CENTRAL)|(DPN_ROLE_NOT_CENTRAL);dpn_ptr.reference.board_select=1;//以上兩行一般固定不變dpn_init(&dpn_ptr);//調(diào)用初始化函數(shù)//初始化出錯處理,錯誤類型參考上一節(jié)代碼解釋dpn_ptr.reference.access=(DPN_SYS_NOT_CENTRAL)|(DPN_ROLE_NOT

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論