閱讀 | 訂閱
閱讀 | 訂閱
控製係統

基於VB的伺服驅動器串口通信的實現(二)

星之球激光 來源:工控網2012-10-29 我要評論(0 )   

vb實現pc機與(yu) indradrive的串行通信 pc機與(yu) indradrive的通信常采用主從(cong) 問答方式,pc機始終具有初始傳(chuan) 送優(you) 先權,所有的通信均由pc機來啟動。每次通信都是由pc機通過發送(...

vb實現pc機與(yu) indradrive的串行通信

  pc機與(yu) indradrive的通信常采用主從(cong) 問答方式,pc機始終具有初始傳(chuan) 送優(you) 先權,所有的通信均由pc機來啟動。每次通信都是由pc機通過發送(讀/寫(xie) 參數)命令啟動通信,indradrive在接到pc機發送的命令後,首先檢查命令中的起始標誌,然後檢查命令中的驅動器地址是否與(yu) 自己的驅動器地址相符,如果不一致,說明計算機是與(yu) 其它的驅動器進行通信,從(cong) 而忽略該命令;如果一致,就響應該命令,並將執行結果回送到pc機,一次通信過程結束。

  在vb的控件工具箱中提供了一個(ge) 使用非常方便的串行通信控件mscomm,它全麵地提供了使用串行通信上層開發的所有細則,串行通信的實現既可以采用中斷方式,又可以采用查詢方式。mscomm控件提供了實現串行端口中斷功能的oncomm事件,該事件是唯一的,可以截取串口的任何消息,當有串口事件或錯誤發生時,vb程序就會(hui) 自動轉入oncomm事件處理程序中。commevent屬性存有串口最近的事件或錯誤的數值代碼,可以在程序中隨時讀取commevent屬性值來了解通信情況,oncomm事件是和commevent屬性密切相關(guan) 、一起使用,當任何一個(ge) oncomm事件或錯誤發生時,都會(hui) 使得commevent屬性值改變。在oncomm事件處理過程中,可以通過判斷commevent屬性值,對於(yu) 不同的屬性值轉入不同的事件處理過程。

  根據sis通信協議的規定,vb程序中主要是針對mscomm控件的操作,主要有mscomm控件的初始化和oncomm事件的處理。

  mscomm控件的主要初始化代碼如下:

  mscomm_com1.commport = 1

  ‘設定需要使用的串口

  mscomm_com1.settings = “115200,n,8,1”

  ‘設定傳(chuan) 輸的波特率和校驗方式

  mscomm_com1.portopen = true ‘打開通信串口

  mscomm_com1.rthreshold = 1

  ‘設置輸入緩衝(chong) 區字符輸入門限

  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

  ‘從(cong) 接收緩衝(chong) 區copy字符

  upper_limit = ubound(input_buffer)

  ‘收到數據的個(ge) 數

  for i = 0 to upper_limit

  input_to_hex = hex(input_buffer(i))

  ‘將接收到的數據轉化為(wei) 十六進製

  if len(input_to_hex) 《 2 then

  ‘將不滿兩(liang) 位的十六進製值前補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 & “ ”

  ‘顯示接收的內(nei) 容

  next

  end sub

讀寫(xie) 命令實例及注意事項

  有了上麵的基礎,就可以根據sis協議的數據格式來實時讀寫(xie) indradrive的內(nei) 部參數,如讀取位置反饋值參數s-0-0051的值,首先將參數號51轉化為(wei) 十六進製數33,即在用戶數據頭的第四、五兩(liang) 個(ge) 字節分別寫(xie) 入3300(注意:高字節在後,低字節在前);其它字節可以相繼得出,因是讀參數值,所以不需寫(xie) 用戶數據;從(cong) 而發送內(nei) 容應為(wei) :02 02 05 05 00 80 01 01 3c 01 00 33 00。如果通信正常,則會(hui) 接收到類似的字節內(nei) 容:02 20 07 07 10 80 01 01 00 3c 01 4e ac 07 00,其中後4個(ge) 字節即為(wei) 位置反饋值(注意:高字節在後,低字節在前),十六進製表示應為(wei) 7ac4e,將其轉化為(wei) 十進製為(wei) 502862,實際的位置值應為(wei) 50.2862(位置值的分辨率為(wei) 0.0001)。在寫(xie) 參數時,和讀參數的不同的地方就是用到用戶數據,也就是將欲寫(xie) 入的值寫(xie) 到用戶數據的位置。如將100.0000寫(xie) 入最大行程值參數s-0-0278,首先將參數號278轉化為(wei) 十六進製數116,即在用戶數據頭的第四、五兩(liang) 個(ge) 字節分別寫(xie) 入16 11;再將1000000(注意不是100.0000)轉化為(wei) 十六進製為(wei) f4240,即在用戶數據的四個(ge) 字節依次寫(xie) 入40 42 0f 00;其它字節可以相繼得出;發送內(nei) 容應為(wei) :02 76 09 09 00 8f 01 01 3c 01 00 16 01 40 42 0f 00。如通信正常,則會(hui) 接收到:02 1a 03 03 10 8f 01 01 00 3c 01,表示改寫(xie) 參數成功。

  值得注意的是,除了在數據格式上遵從(cong) sis協議之外,操作過程中還應注意以下幾點:

  通信波特率應為(wei) 115200 bps。

  寫(xie) 參數時,應先使indradrive處於(yu) pm(參數模式)。通過置位參數s-0-0420(激活參數模式)的bit1、bit0,就可以將indradrive切換到pm;而在改寫(xie) 參數s-0-0420時,不需在pm;在將s-0-0420的bit1和bit0置位後,不要忘了再將其複位,這樣便進入pm,便可以隨意改寫(xie) 參數了。在配置完參數後,應該跳出pm,進入om(操作模式),通過參數s-0-0422(跳出參數模式)來完成,配置過程與(yu) s-0-0420類似。

  (3)讀參數時無論indradrive處於(yu) pm和om均可讀取,沒有限製。

  (4)讀參數時,接收到內(nei) 容的第11個(ge) 字節以後的內(nei) 容為(wei) 用戶數據;而寫(xie) 參數時,接收到的內(nei) 容中沒有用戶數據部分,隻要通信正常,均會(hui) 收到相同內(nei) 容02

  1a 03 03 10 8f 01 01 00 3c 01。

  (5)如果正在上位機用indraworks調試indradrive,則讀寫(xie) 參數時,應使indraworks離線,否則會(hui) 提示串口被占用。

結語

  本文所闡述的串口通信方法已成功應用於(yu) 調試博世力士樂(le) indradrive伺服驅動器的實驗中,靈活方便,達到了實時修改驅動器的參數的要求;適當改進即可應用於(yu) 地鐵站台屏蔽門係統和安全門係統以及自動門係統的上位機監控,具有較好的實際價(jia) 值和可擴展性。

轉載請注明出處。

免責聲明

① 凡本網未注明其他出處的作品,版權均屬於(yu) fun88网页下载,未經本網授權不得轉載、摘編或利用其它方式使用。獲本網授權使用作品的,應在授權範圍內(nei) 使 用,並注明"來源:fun88网页下载”。違反上述聲明者,本網將追究其相關(guan) 責任。
② 凡本網注明其他來源的作品及圖片,均轉載自其它媒體(ti) ,轉載目的在於(yu) 傳(chuan) 遞更多信息,並不代表本媒讚同其觀點和對其真實性負責,版權歸原作者所有,如有侵權請聯係我們(men) 刪除。
③ 任何單位或個(ge) 人認為(wei) 本網內(nei) 容可能涉嫌侵犯其合法權益,請及時向本網提出書(shu) 麵權利通知,並提供身份證明、權屬證明、具體(ti) 鏈接(URL)及詳細侵權情況證明。本網在收到上述法律文件後,將會(hui) 依法盡快移除相關(guan) 涉嫌侵權的內(nei) 容。

網友點評
0相關評論
精彩導讀