|
我有一張 73xx 馬達控制卡而我需要一對 General purpose digital I/O line 來控制我系統一部分。我知道有 32 lines 在馬達卡的 DIO 接頭,但我想要用 Motion I/O 的接口因為我已經在 UMI 7764 上接好線了。我試著要用 flex_set_breakpoint_output_momo function,這個和LabVIEW 裡的 Set Breakpoint Output MOMO VI 很像。
mustOn/mustOff (MOMO) 是怎樣運作的? 甚麼應該要接給這個 function 的 mustOn 與 mustOff ?
Breakpoint 和 Inhibit lines for Digital I/O 都用相同的 mustOn/mustOff (MOMO) 協定。方式就是有兩個部林陣列來設定breakpoint 的 tri-state output。對 line 0,如果 mustOn 為 true,則此線為 digital high (5V)。如果 mustOff 為 true,則此線為 digital low (0V)。如果都是 False,則此線為 unchange state。如果兩者都為 true,則 mustOn 蓋過 mustOff,此線為 high。下表說明了 mustOn 和 mustOff 的狀態所給出的 Output
MUST ON | MUST OFF | OUTPUT |
T | F | T |
F | T | F |
F | F | Unchanged |
T | T | T |
使嗽 MOMO 也讓你可以 set 或 reset 獨立的 inhibit output 而不影響其他的 inhibit output。這讓你的 tri-state 都能在每個 output 控制: On,Off,或 Unchanged。一個一 (1) 在 mustOn 的點陣上的 bit location 會讓 inhibit On,而當一個一 (1) 在相對應的 mustOff 的點陣上會讓 inhibit Off。一個零 (0) 在各別的點陣上都沒有影響,所以讓 mustOn 和 mustOff bits 上都為零就是一個有效的 hold,inhibit 的狀態就為 unchanged。如果你將 mustOn 和 mustOff bit 都設為一 (1),這會被認為是 mustOn 的狀態並且 inhibit On。在 LabVIEW 裡,你可以使用 Set Inhibit MOMO 和 Set Breakpoint Output MOMO VI來設定這些參數。
在一個文字環境下,MOMO 輸入就單純的是點陣。如果你看在 NI-FlexMotion 的 function call,你可以看到一個表說明 8 bits 的 mustOn 和 mustOff 的參數是怎麼對應的。Bits D1 - D6 都要被設定為 0 或 1,如果需要的話你可以計算 8 bit 的 U8 數值。C 的原型函式對於 inhibit 和 breakpoint 如下表示
status = flex_set_inhib_momo (boardID, u8 mustOn, u8 mustOff)
status = flex_set_bp_momo (boardID, axisOrEncoder, u8 mustOn, u8 mustOff)
mustOn/mustOff inhibit points 會強制設定為 8 bit representation:
D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
0 | mustOn/Off 6 | mustOn/Off 5 | mustOn/Off 4 | mustOn/MustOff 3 | mustOn/Off 2 | mustOn/Off 1 | 0 |
對 D1-D6 1 為 enabled on 而 0 為 output unchanged
舉例來說,如果我想要 enable breakpoint 1,我需要設定如下
must on = 00000010 = 2 in binary
must off = 0000000 = 0 in binary
你可以使用 Windows 裡的基本的計算來從 binary 轉換到 decimal。
|