技術(shù)頻道

娓娓工業(yè)
您現(xiàn)在的位置: 中國(guó)傳動(dòng)網(wǎng) > 技術(shù)頻道 > 技術(shù)百科 > 基于VB的伺服驅(qū)動(dòng)器串口通信的實(shí)現(xiàn)

基于VB的伺服驅(qū)動(dòng)器串口通信的實(shí)現(xiàn)

時(shí)間:2008-03-28 13:20:00來(lái)源:lihan

導(dǎo)語(yǔ):?伺服驅(qū)動(dòng)器是構(gòu)成伺服系統(tǒng)的基本部件,廣泛應(yīng)用于各種電力傳動(dòng)自動(dòng)控制系統(tǒng)中
伺服驅(qū)動(dòng)器是構(gòu)成伺服系統(tǒng)的基本部件,廣泛應(yīng)用于各種電力傳動(dòng)自動(dòng)控制系統(tǒng)中,如:數(shù)控機(jī)床、柔性制造系統(tǒng)、機(jī)器人驅(qū)動(dòng)、火炮隨動(dòng)系統(tǒng)、雷達(dá)控制、艦船推進(jìn)、車輛驅(qū)動(dòng)、印刷設(shè)備、紡織設(shè)備、縫紉設(shè)備等。在應(yīng)用伺服驅(qū)動(dòng)器的過(guò)程中,實(shí)時(shí)讀取和修改各個(gè)控制參數(shù)來(lái)達(dá)到實(shí)時(shí)控制,是對(duì)伺服系統(tǒng)的基本要求。    本文即針對(duì)德國(guó)博世力士樂(lè)的伺服驅(qū)動(dòng)器indradrive,采用靈活易用的vb 6.0編程語(yǔ)言,通過(guò)indradrive本身所帶的rs232串行通信接口,實(shí)現(xiàn)了上位pc機(jī)與伺服驅(qū)動(dòng)器的串行通信,完成了對(duì)伺服驅(qū)動(dòng)器內(nèi)部各控制參數(shù)的實(shí)時(shí)控制。 indradrive的通信協(xié)議    indradrive采用sis通信協(xié)議,它是一種二進(jìn)制通信協(xié)議,含有完整的報(bào)文格式和返回校驗(yàn)格式。針對(duì)博世力士樂(lè)的各種產(chǎn)品(plc、伺服驅(qū)動(dòng)器等),sis協(xié)議的通信格式是統(tǒng)一的。    sis協(xié)議采用的數(shù)據(jù)格式為:1位起始位,8位數(shù)據(jù),1位或2位停止位,無(wú)校驗(yàn)位;通信傳輸數(shù)據(jù)的波特率為115200 bps。sis協(xié)議采用十六進(jìn)制數(shù)據(jù)格式來(lái)表示各種指令代碼及數(shù)據(jù),其軟件通信指令經(jīng)過(guò)優(yōu)化設(shè)計(jì)后,只有兩條,一條為讀指令,一條為寫(xiě)指令,兩條指令使得上位機(jī)軟件編寫(xiě)非常方便。    sis協(xié)議的報(bào)文格式如附表所示。 附表 sis協(xié)議的報(bào)文格式
  其中報(bào)頭由8個(gè)字節(jié)組成,它們的意義如下:   第一個(gè)字節(jié)stz:起始位,默認(rèn)為0x02;   第二個(gè)字節(jié)cs:用于校驗(yàn)數(shù)據(jù),它的值是除此字節(jié)外,所有的數(shù)相加后的低8位值異或ff,再加1后的值;   第三個(gè)字節(jié)datl:除去報(bào)頭后所有數(shù)據(jù)的長(zhǎng)度(字節(jié)的個(gè)數(shù));   第四個(gè)字節(jié)datlw:重復(fù)第三個(gè)字節(jié)的內(nèi)容;   第五個(gè)字節(jié)cntrl:決定錯(cuò)誤返回類型,默認(rèn)為0x00;   第六個(gè)字節(jié)service:服務(wù)類型(讀參數(shù)寫(xiě)0x80,寫(xiě)參數(shù)寫(xiě)0x8f);   第七個(gè)字節(jié)adrs:驅(qū)動(dòng)器地址;   第八個(gè)字節(jié)adre:驅(qū)動(dòng)器地址。   用戶數(shù)據(jù)頭包含5個(gè)字節(jié),意義如下:   第一個(gè)字節(jié)control byte:操作參數(shù)值,默認(rèn)為0x3c;   第二個(gè)字節(jié)device address(unit address):驅(qū)動(dòng)器地址;   第三個(gè)字節(jié)parameter type:參數(shù)類型,對(duì)于驅(qū)動(dòng)器其值為0x00;   第四、五字節(jié)parameter number:參數(shù)號(hào),對(duì)于驅(qū)動(dòng)器的s參數(shù),直接寫(xiě)參數(shù)號(hào)的十六進(jìn)制值;對(duì)于p參數(shù),寫(xiě)“215+參數(shù)號(hào)”的十六進(jìn)制值。   用戶數(shù)據(jù)的數(shù)據(jù)長(zhǎng)度取決于操作參數(shù)的數(shù)據(jù)類型,如操作參數(shù)為int型,寫(xiě)2個(gè)字節(jié);為dword型,寫(xiě)4個(gè)字節(jié)。寫(xiě)的時(shí)候注意低位字節(jié)在前,高位字節(jié)在后。 vb實(shí)現(xiàn)pc機(jī)與indradrive的串行通信   pc機(jī)與indradrive的通信常采用主從問(wèn)答方式,pc機(jī)始終具有初始傳送優(yōu)先權(quán),所有的通信均由pc機(jī)來(lái)啟動(dòng)。每次通信都是由pc機(jī)通過(guò)發(fā)送(讀/寫(xiě)參數(shù))命令啟動(dòng)通信,indradrive在接到pc機(jī)發(fā)送的命令后,首先檢查命令中的起始標(biāo)志,然后檢查命令中的驅(qū)動(dòng)器地址是否與自己的驅(qū)動(dòng)器地址相符,如果不一致,說(shuō)明計(jì)算機(jī)是與其它的驅(qū)動(dòng)器進(jìn)行通信,從而忽略該命令;如果一致,就響應(yīng)該命令,并將執(zhí)行結(jié)果回送到pc機(jī),一次通信過(guò)程結(jié)束。   在vb的控件工具箱中提供了一個(gè)使用非常方便的串行通信控件mscomm,它全面地提供了使用串行通信上層開(kāi)發(fā)的所有細(xì)則,串行通信的實(shí)現(xiàn)既可以采用中斷方式,又可以采用查詢方式。mscomm控件提供了實(shí)現(xiàn)串行端口中斷功能的oncomm事件,該事件是唯一的,可以截取串口的任何消息,當(dāng)有串口事件或錯(cuò)誤發(fā)生時(shí),vb程序就會(huì)自動(dòng)轉(zhuǎn)入oncomm事件處理程序中。commevent屬性存有串口最近的事件或錯(cuò)誤的數(shù)值代碼,可以在程序中隨時(shí)讀取commevent屬性值來(lái)了解通信情況,oncomm事件是和commevent屬性密切相關(guān)、一起使用,當(dāng)任何一個(gè)oncomm事件或錯(cuò)誤發(fā)生時(shí),都會(huì)使得commevent屬性值改變。在oncomm事件處理過(guò)程中,可以通過(guò)判斷commevent屬性值,對(duì)于不同的屬性值轉(zhuǎn)入不同的事件處理過(guò)程。   根據(jù)sis通信協(xié)議的規(guī)定,vb程序中主要是針對(duì)mscomm控件的操作,主要有mscomm控件的初始化和oncomm事件的處理。 mscomm控件的主要初始化代碼如下: mscomm_com1.commport = 1 ‘設(shè)定需要使用的串口 mscomm_com1.settings = “115200,n,8,1” ‘設(shè)定傳輸?shù)牟ㄌ芈屎托r?yàn)方式 mscomm_com1.portopen = true ‘打開(kāi)通信串口 mscomm_com1.rthreshold = 1 ‘設(shè)置輸入緩沖區(qū)字符輸入門限 oncomm事件的處理程序主要代碼如下: private sub mscomm_com1_oncomm() dim input_buffer as variant dim upper_limit as integer dim input_to_hex as string dim i as integer input_buffer = mscomm_com1.input ‘從接收緩沖區(qū)copy字符 upper_limit = ubound(input_buffer) ‘收到數(shù)據(jù)的個(gè)數(shù) for i = 0 to upper_limit input_to_hex = hex(input_buffer(i)) ‘將接收到的數(shù)據(jù)轉(zhuǎn)化為十六進(jìn)制 if len(input_to_hex) < 2 then ‘將不滿兩位的十六進(jìn)制值前補(bǔ)0 input_to_hex = "0" & input_to_hex end if if i = 0 then ‘每開(kāi)始新的一次接收,清空顯示文本框 txtreceivedata.text = "" end if txtreceivedata.text = txtreceivedata.text & input_to_hex & " " ‘顯示接收的內(nèi)容 next end sub 讀寫(xiě)命令實(shí)例及注意事項(xiàng)   有了上面的基礎(chǔ),就可以根據(jù)sis協(xié)議的數(shù)據(jù)格式來(lái)實(shí)時(shí)讀寫(xiě)indradrive的內(nèi)部參數(shù),如讀取位置反饋值參數(shù)s-0-0051的值,首先將參數(shù)號(hào)51轉(zhuǎn)化為十六進(jìn)制數(shù)33,即在用戶數(shù)據(jù)頭的第四、五兩個(gè)字節(jié)分別寫(xiě)入33 00(注意:高字節(jié)在后,低字節(jié)在前);其它字節(jié)可以相繼得出,因是讀參數(shù)值,所以不需寫(xiě)用戶數(shù)據(jù);從而發(fā)送內(nèi)容應(yīng)為:02 02 05 05 00 80 01 01 3c 01 00 33 00。如果通信正常,則會(huì)接收到類似的字節(jié)內(nèi)容:02 20 07 07 10 80 01 01 00 3c 01 4e ac 07 00,其中后4個(gè)字節(jié)即為位置反饋值(注意:高字節(jié)在后,低字節(jié)在前),十六進(jìn)制表示應(yīng)為7ac4e,將其轉(zhuǎn)化為十進(jìn)制為502862,實(shí)際的位置值應(yīng)為50.2862(位置值的分辨率為0.0001)。在寫(xiě)參數(shù)時(shí),和讀參數(shù)的不同的地方就是用到用戶數(shù)據(jù),也就是將欲寫(xiě)入的值寫(xiě)到用戶數(shù)據(jù)的位置。如將100.0000寫(xiě)入最大行程值參數(shù)s-0-0278,首先將參數(shù)號(hào)278轉(zhuǎn)化為十六進(jìn)制數(shù)116,即在用戶數(shù)據(jù)頭的第四、五兩個(gè)字節(jié)分別寫(xiě)入16 11;再將1000000(注意不是100.0000)轉(zhuǎn)化為十六進(jìn)制為f4240,即在用戶數(shù)據(jù)的四個(gè)字節(jié)依次寫(xiě)入40 42 0f 00;其它字節(jié)可以相繼得出;發(fā)送內(nèi)容應(yīng)為:02 76 09 09 00 8f 01 01 3c 01 00 16 01 40 42 0f 00。如通信正常,則會(huì)接收到:02 1a 03 03 10 8f 01 01 00 3c 01,表示改寫(xiě)參數(shù)成功。 值得注意的是,除了在數(shù)據(jù)格式上遵從sis協(xié)議之外,操作過(guò)程中還應(yīng)注意以下幾點(diǎn):   通信波特率應(yīng)為115200 bps。   寫(xiě)參數(shù)時(shí),應(yīng)先使indradrive處于pm(參數(shù)模式)。通過(guò)置位參數(shù)s-0-0420(激活參數(shù)模式)的bit1、bit0,就可以將indradrive切換到pm;而在改寫(xiě)參數(shù)s-0-0420時(shí),不需在pm;在將s-0-0420的bit1和bit0置位后,不要忘了再將其復(fù)位,這樣便進(jìn)入pm,便可以隨意改寫(xiě)參數(shù)了。在配置完參數(shù)后,應(yīng)該跳出pm,進(jìn)入om(操作模式),通過(guò)參數(shù)s-0-0422(跳出參數(shù)模式)來(lái)完成,配置過(guò)程與s-0-0420類似。 (3)讀參數(shù)時(shí)無(wú)論indradrive處于pm和om均可讀取,沒(méi)有限制。 (4)讀參數(shù)時(shí),接收到內(nèi)容的第11個(gè)字節(jié)以后的內(nèi)容為用戶數(shù)據(jù);而寫(xiě)參數(shù)時(shí),接收到的內(nèi)容中沒(méi)有用戶數(shù)據(jù)部分,只要通信正常,均會(huì)收到相同內(nèi)容02 1a 03 03 10 8f 01 01 00 3c 01。 (5)如果正在上位機(jī)用indraworks調(diào)試indradrive,則讀寫(xiě)參數(shù)時(shí),應(yīng)使indraworks離線,否則會(huì)提示串口被占用。 結(jié)語(yǔ)   本文所闡述的串口通信方法已成功應(yīng)用于調(diào)試博世力士樂(lè)indradrive伺服驅(qū)動(dòng)器的實(shí)驗(yàn)中,靈活方便,達(dá)到了實(shí)時(shí)修改驅(qū)動(dòng)器的參數(shù)的要求;適當(dāng)改進(jìn)即可應(yīng)用于地鐵站臺(tái)屏蔽門系統(tǒng)和安全門系統(tǒng)以及自動(dòng)門系統(tǒng)的上位機(jī)監(jiān)控,具有較好的實(shí)際價(jià)值和可擴(kuò)展性。

標(biāo)簽:

點(diǎn)贊

分享到:

上一篇:實(shí)時(shí)操作系統(tǒng)μC/OS-II的改進(jìn)...

下一篇:微能WIN-V63矢量控制變頻器在...

中國(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.treenowplaneincome.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é)任。

網(wǎng)站簡(jiǎn)介|會(huì)員服務(wù)|聯(lián)系方式|幫助信息|版權(quán)信息|網(wǎng)站地圖|友情鏈接|法律支持|意見(jiàn)反饋|sitemap

中國(guó)傳動(dòng)網(wǎng)-工業(yè)自動(dòng)化與智能制造的全媒體“互聯(lián)網(wǎng)+”創(chuàng)新服務(wù)平臺(tái)

網(wǎng)站客服服務(wù)咨詢采購(gòu)咨詢媒體合作

Chuandong.com Copyright ?2005 - 2024 ,All Rights Reserved 版權(quán)所有 粵ICP備 14004826號(hào) | 營(yíng)業(yè)執(zhí)照證書(shū) | 不良信息舉報(bào)中心 | 粵公網(wǎng)安備 44030402000946號(hào)