国产日韩精品欧美一区-国产日韩高清一区二区三区-国产日韩不卡免费精品视频-国产日产欧美精品一区二区三区-午夜国产精品免费观看-午夜国产精品理论片久久影院

設為主頁  加入收藏
 
·I2S數(shù)字功放IC/內(nèi)置DSP音頻算法功放芯片  ·馬達驅(qū)動IC  ·2.1聲道單芯片D類功放IC  ·內(nèi)置DC/DC升壓模塊的D類功放IC  ·鋰電充電管理IC/快充IC  ·無線遙控方案  ·直流無刷電機驅(qū)動芯片
當前位置:首頁->方案設計
基于VB的伺服驅(qū)動器串口通信的實現(xiàn)
文章來源: 更新時間:2015/7/29 9:13:00
在線咨詢:
給我發(fā)消息
張順平 3003262363
給我發(fā)消息
張代明 3003290139
給我發(fā)消息
鄢先輝 2850985542
13713728695
 

伺服驅(qū)動器是構(gòu)成伺服系統(tǒng)的基本部件,廣泛應用于各種電力傳動自動控制系統(tǒng)中,如:數(shù)控機床、柔性制造系統(tǒng)、機器人驅(qū)動、火炮隨動系統(tǒng)、雷達控制、艦船推進、車輛驅(qū)動、印刷設備、紡織設備、縫紉設備等。在應用伺服驅(qū)動器的過程中,實時讀取和修改各個控制參數(shù)來達到實時控制,是對伺服系統(tǒng)的基本要求。
  本文即針對德國博世力士樂的伺服驅(qū)動器indradrive,采用靈活易用的VB6.0編程語言,通過indradrive本身所帶的rs232串行通信接口,實現(xiàn)了上位pc機與伺服驅(qū)動器的串行通信,完成了對伺服驅(qū)動器內(nèi)部各控制參數(shù)的實時控制。
indradrive的通信協(xié)議
  indradrive采用sis通信協(xié)議,它是一種二進制通信協(xié)議,含有完整的報文格式和返回校驗格式。針對博世力士樂的各種產(chǎn)品(plc、伺服驅(qū)動器等),sis協(xié)議的通信格式是統(tǒng)一的。
  sis協(xié)議采用的數(shù)據(jù)格式為:1位起始位,8位數(shù)據(jù),1位或2位停止位,無校驗位;通信傳輸數(shù)據(jù)的波特率為115200bps。sis協(xié)議采用十六進制數(shù)據(jù)格式來表示各種指令代碼及數(shù)據(jù),其軟件通信指令經(jīng)過優(yōu)化設計后,只有兩條,一條為讀指令,一條為寫指令,兩條指令使得上位機軟件編寫非常方便。
  sis協(xié)議的報文格式如附表所示。

  附表 sis協(xié)議的報文格式

 

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

 
 
 
    相關產(chǎn)品  
 
 
·藍牙音箱的音頻功放/升壓/充電管
·單節(jié)鋰電內(nèi)置升壓音頻功放IC選型
·HT7179 12V升24V內(nèi)置
·5V USB輸入、三節(jié)鋰電升壓型
·網(wǎng)絡主播聲卡專用耳機放大IC-H
 
M12269 HT366 ACM8629 HT338 

業(yè)務洽談:手機:13713728695(微信同號)   QQ:3003207580  EMAIL:panbo@szczkjgs.com   聯(lián)系人:潘波

地址:深圳市寶安西鄉(xiāng)航城大道航城創(chuàng)新創(chuàng)業(yè)園A5棟307/309

版權(quán)所有:深圳市永阜康科技有限公司  備案號:粵ICP備17113496號