最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python調(diào)用.NET庫的方法步驟

 更新時間:2019年12月27日 11:21:41   作者:天元浪子  
這篇文章主要介紹了Python調(diào)用.NET庫的方法步驟,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

開發(fā)背景是這樣的:整個項(xiàng)目中使用很多臺摩托羅拉的RFID讀卡器,我要為這些讀卡器寫一個管理程序,判斷是否有RFID標(biāo)簽進(jìn)入或離開某個區(qū)域。用戶提供給我的,除了設(shè)備,就是一個.net的動態(tài)庫文件。

經(jīng)朋友指點(diǎn),安裝了.NET Framework 4.0和IronPython 2.7之后,終于可以調(diào)用.net庫了。我不確定的是,python環(huán)境下那些打包工具是否還是使用,因?yàn)槟_本要在IronPython的解釋器ipy.exe中運(yùn)行——這是后話,需要在以后的應(yīng)用中去實(shí)踐。先說說實(shí)際應(yīng)用中的稀奇古怪的問題吧。

我的核心任務(wù)有兩個:讀RFID標(biāo)簽、讀寫GPIO端口。前者相對簡單,操作過程也非常順利。后者就屢屢碰壁,到現(xiàn)在也沒有徹底解決。

C#讀GPIO端口的代碼是這樣的:

IOPinStatus[] inputPinsStatus = null;
IOPinStatus[] outputPinsStatus = null;
Reader.GetIOStatus(out inputPinsStatus,out outputPinsStatus);

inputPinsStatus[i].pinStatus就是輸入端口的狀態(tài),這是一個布爾型的變量。

IronPython需要先構(gòu)造兩個變量inputPinsStatus和outputPinsStatus,然后再調(diào)用GetIOStatus方法:

inputPinsStatus = clr.Reference[Array[bool]](())
outputPinsStatus = clr.Reference[Array[bool]](())
Reader.GetIOStatus(inputPinsStatus, outputPinsStatus)

inputPinsStatus是不能遍歷的,必須使用inputPinsStatus.Value才可以。

C#寫GPIO端口的代碼是這樣的(端口0寫True):

IOPinStatus[] selectedOutPins = null;
selectedOutPins = new IOPinStatus[6];
selectedOutPins[0].pin = IOPins.PIN_0;
selectedOutPins[0].pinStatus = True;
Reader.SetOutputStatus(selectedOutPins);

IronPython代碼是這樣的:

outForSet = Array.CreateInstance(IOPinStatus, 6)
IOPinStatus.pin.SetValue(outForSet[0], IOPins.PIN_0)
IOPinStatus.pinStatus.SetValue(outForSet[0], True)
Reader.SetOutputStatus(outForSet)

這時,蹊蹺事兒出現(xiàn)了:代碼可以順利執(zhí)行,沒有提示語法錯誤,設(shè)備也沒有相應(yīng)的動作!檢查SetValue的結(jié)果,的確沒有生效。本來這一句最初是這樣寫的:

outForSet[0].pinStatus = True

但系統(tǒng)提示:RuntimeWarning: Setting field Field on value type IOPinStatus may result in updating a copy. Use IOPinStatus.pinStatus.SetValue(instance, value) if this is safe. For more information help(IOPinStatus.pinStatus.SetValue).

改用SetValue之后,卻好比對牛彈琴,什么反應(yīng)也沒有了。強(qiáng)烈郁悶中。。。

冥思苦想了一天之后,我發(fā)現(xiàn)了IOPinStatus的原型函數(shù):

print IOPinStatus.__doc__
IOPinStatus(pin: IOPins, pinStatus: bool)

既然無法直接給變量的pin和pinStatus賦值,那么重新構(gòu)造一個變量是否可行呢?

outForSet = Array.CreateInstance(IOPinStatus, 6)
outForSet[0] = IOPinStatus(IOPins.PIN_0, True)
... ...
Reader.SetOutputStatus(outForSet)

終于成功了!

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

最新評論

驻马店市| 施秉县| 云浮市| 鹤庆县| 郑州市| 格尔木市| 灵川县| 泾川县| 视频| 阳新县| 巢湖市| 南投县| 永康市| 沐川县| 焦作市| 筠连县| 巴青县| 临潭县| 兴仁县| 新邵县| 铜陵市| 昔阳县| 镇宁| 宁晋县| 通辽市| 大连市| 湾仔区| 布尔津县| 余江县| 渑池县| 蒙城县| 石泉县| 定日县| 丹凤县| 通河县| 济阳县| 五寨县| 桃园县| 沙湾县| 枣阳市| 武陟县|