最近我們有一個(gè)客戶(hù)對(duì) a_in.py 和 v_in.py 示例有問(wèn)題。他們將單端5伏信號(hào)連接到USB-1408FS -PLUS的通道0 。示例程序返回了 ~3.6 伏的錯(cuò)誤值。客戶(hù)驗(yàn)證 InstaCal 返回了正確的結(jié)果。那么什么給呢?
a_in.py 和 v_in.py 程序沒(méi)有正確讀取輸入的原因是因?yàn)檩斎朐O(shè)置為差分模式,這意味著輸入的一側(cè)保持打開(kāi)狀態(tài)。這怎么可能?這是因?yàn)樵撌纠褂冒l(fā)現(xiàn)接口連接到設(shè)備,而忽略了您在 InstaCal 中的設(shè)置方式。因此,當(dāng)默認(rèn)情況下發(fā)現(xiàn)該板時(shí),它處于差分模式。
下面是將輸入設(shè)置為單端的修改后的 a_in.py 示例。還添加了 ULRange 枚舉以指定電壓范圍。下面是程序列表,并突出顯示了更改。
"""
文件:a_in.py
演示的庫(kù)調(diào)用:mcculw.ul.a_in() 或 mcculw.ul.a_in_32()
目的: 讀取 A/D 輸入通道。
演示:在用戶(hù)指定的顯示器上顯示模擬輸入
渠道。
其他庫(kù)調(diào)用:mcculw.ul.to_eng_units()
或 mcculw.ul.to_eng_units_32()
mcculw.ul.release_daq_device()
特殊要求:設(shè)備必須有一個(gè) A/D 轉(zhuǎn)換器。
輸入通道上的模擬信號(hào)。
"""
from __future__ import absolute_import、除法、print_function
from builtins import * # @UnusedWildImport
從 mcculw 進(jìn)口 ul
從mcculw.device_info導(dǎo)入DaqDeviceInfo
# 添加了以下導(dǎo)入
從 mcculw.enums 導(dǎo)入 ULRange
從 mcculw.enums 導(dǎo)入 AnalogInputMode
從 mcculw.ul 導(dǎo)入 ULError, a_input_mode
嘗試:
從console_examples_util導(dǎo)入config_first_detected_device
除了導(dǎo)入錯(cuò)誤:
從 .console_examples_util 導(dǎo)入 config_first_detected_device
def run_example():
# 默認(rèn)情況下,示例檢測(cè)并顯示所有可用設(shè)備和
# 選擇列出的第一個(gè)設(shè)備。使用 dev_id_list 變量進(jìn)行過(guò)濾
# 通過(guò)設(shè)備 ID 檢測(cè)到設(shè)備(有關(guān)設(shè)備 ID,請(qǐng)參閱 UL 文檔)。
#如果use_device_detection設(shè)置為False,則board_num變量需要
# 匹配使用Instacal 配置的所需板號(hào)。
use_device_detection = True
dev_id_list = []
board_num = 0
嘗試:
如果使用設(shè)備檢測(cè):
config_first_detected_device(board_num,dev_id_list)
daq_dev_info = DaqDeviceInfo(board_num)
如果不是 daq_dev_info.supports_analog_input:
raise Exception('錯(cuò)誤:DAQ 設(shè)備不支持'
'模擬輸入')
print('\n活動(dòng)數(shù)據(jù)采集設(shè)備:', daq_dev_info.product_name, ' (',
daq_dev_info.unique_id, ')\n', sep='')
ai_info = daq_dev_info.get_ai_info()
ai_range = ai_info.supported_ranges[0]
頻道 = 0
# ********* 添加此功能
a_input_mode(board_num,AnalogInputMode.SINGLE_ENDED)
# 從設(shè)備獲取值
如果 ai_info.resolution <= 16:
# 對(duì)分辨率 <= 16 的設(shè)備使用 a_in 方法
# *************** 添加了 ULRange.BIP10VOLTS **********
值 = ul.a_in(board_num, channel, ULRange.BIP10VOLTS)
# 將原始值轉(zhuǎn)換為工程單位
# *************** 添加了 ULRange.BIP10VOLTS **********
eng_units_value = ul.to_eng_units(board_num, ULRange.BIP10VOLTS, value)
別的:
# 對(duì)分辨率 > 16 的設(shè)備使用 a_in_32 方法
#(省略可選參數(shù))
value = ul.a_in_32(board_num, channel, ai_range)
# 將原始值轉(zhuǎn)換為工程單位
eng_units_value = ul.to_eng_units_32(board_num, ai_range, value)
#顯示原始值
打印('原始值:',值)
# 顯示工程值
打印('工程價(jià)值:{:.3f}'。格式(eng_units_value))
除了作為 e 的例外:
打印('\ n',e)
最后:
如果使用設(shè)備檢測(cè):
ul.release_daq_device(board_num)
如果 __name__ == '__main__':
運(yùn)行示例()