日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

深入浅出FSUIPC的作用以及使用方法

發(fā)布時間:2023/12/10 编程问答 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 深入浅出FSUIPC的作用以及使用方法 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
看此貼前您需要掌握的技能或知識:
1. 有FSX或FS2004并正確安裝了FSUIPC
2. 具備一定的C語言理解能力,C語言是一切高級語言的基礎(chǔ),單片機(jī)主要也用的C語言。
3. 掌握以下幾種編程語言之一即可: VC++\VB\C#\DELPHI\JAVA\C++MFC\.NET版的C++或VB,本文以VB為例,因為相對而言上位機(jī)的編寫VB比較容易,當(dāng)然,FSUIPC_SDK中也包含了匯編,但個人不建議使用匯編,雖然匯編代碼效率高,但非常難以理解,如果你是非常N的硬件工程師可能你會選擇匯編(單片機(jī)也可用匯編)。
4. 單片機(jī)與PC機(jī)串口通信原理,這個是最基本的單片機(jī)和PC的通訊方式(實(shí)際上因為速度慢已經(jīng)過時,但足夠FS用),事實(shí)上USB更好,本文沒有用USB,因為USB協(xié)議很復(fù)雜,而且不是每款單片機(jī)都支持USB。

需要注意的地方:
1. FSUIPC_SDK的文件中指出VB不是主要用的語言,如果你會C#的話,建議你用那個語言,將來可以和PMDG的SDK銜接起來。
2. 過去PMDG也是走的FSUIPC接口,但現(xiàn)在好像不是了,所以想控制PMDG的飛友還需再下功夫(我也在下功夫)
3. 看完本文后你可能不想買搖桿了,或者,你可能感覺買搖桿虧了,這都是正常現(xiàn)象,你需要知道的是搖桿的物理結(jié)構(gòu)設(shè)計也是很辛苦的,所以并不虧。



如果你只想DIY個搖桿,那么MJOY16是你不二選擇, 老毛子開發(fā),功能相當(dāng)強(qiáng)大,用AVR單片機(jī)(建議用ATMEGA16L)的虛擬USB技術(shù),相當(dāng)于直接模擬出了游戲控制器(別的游戲也能用),而且不需要你明白什么語言,只要焊接技術(shù)過硬、會向單片機(jī)燒程序即可。


本文適合人群:想DIY駕駛艙面板、開關(guān)或全套駕駛艙的高水準(zhǔn)發(fā)燒友。


一、什么是FSUIPC?
在FS2004時代,FSUIPC是所有高水平插件的接口,有人也說它是模塊或者外掛程序,從安裝上看,FSUIPC就是一個很小的DLL文件,但它很重要,沒有它很多插件工作不了,這個現(xiàn)象延續(xù)到了FSX時代,但FSX時代官方提出了新的概念,就是SimConnect,這個東西使FSUIPC不再那么重要了,因為插件可以走那個接口了,但我們還是要裝FSUIPC,因為它還有靈活定義搖桿的功能,總之FSUIPC功能非常強(qiáng)大,我們是在用它的最基本且重要的功能。
二、簡單的原理(你可能覺得不簡單)
想通過硬件來控制FS一個方式就是用游戲控制器,而另外的方式就是通過接口連接到FS,我們這里用FSUIPC是因為FSUIPC相對簡單,而后者的結(jié)構(gòu)(寫指令)主要是:先用單片機(jī)識別開關(guān)狀態(tài)--單片機(jī)將開關(guān)狀態(tài)調(diào)制成便于串口傳送的格式--單片機(jī)用串口發(fā)送給電腦--電腦上位機(jī)解讀串口發(fā)來的數(shù)據(jù)并提取開關(guān)狀態(tài)--電腦上位機(jī)將開關(guān)狀態(tài)寫入FSUIPC對應(yīng)偏移地址的內(nèi)存中--FSUIPC向FSX發(fā)送相應(yīng)指令--FSX相應(yīng)的開關(guān)發(fā)生變化;(讀指令FSUIPC讀取FSX相應(yīng)的信息到FSUIPC相應(yīng)的偏移地址的內(nèi)存中(主要用于MCP的數(shù)碼管讀取,不過它很強(qiáng)大,甚至包括飛機(jī)型號都能讀)--由上位機(jī)完成讀取FSUIPC的相應(yīng)偏移地址的內(nèi)存中的FS信息--上位機(jī)將該信息調(diào)制成適合串口傳送的格式--單片機(jī)收到并解調(diào)該信息--單片機(jī)控制相應(yīng)的硬件顯示該信息。
三、請到官方鏈接http://www.schiratti.com/dowson.html下載FSUIPC_SDK 解壓后你會發(fā)現(xiàn)大概是這樣的:

你驚喜地發(fā)現(xiàn)里面有個EXE文件,沒錯,你可以打開它試一試,然后打開FSX,隨便加載個機(jī)模機(jī)場進(jìn)游戲。 //-----------------------------------------------------------------
FSInterrogate2std.exe關(guān)于它的作用:
1.找到你想完成的指令在FSUIPC的偏移地址,只有知道了該地址你才可以知道該對那里進(jìn)行操作。
2.知道該怎么賦值、達(dá)到什么效果。

本文以控制FD(飛行指揮儀)開關(guān)為例
打開 FSInterrogate2std.exe
有一個About的提示,直接OK忽略掉,不是什么重要信息(版權(quán)啊什么的)
然后你會看到主頁面是個大表格,很簡單,左側(cè)第一列即為偏移地址,后面的是相關(guān)信息。


我們得到相關(guān)信息:
偏移地址2EE0、變量類型是U32(一般理解為unsigned int 32)、SIZE=4(直接翻譯是尺寸,大家意會即可)、READ/WRITE代表可讀可寫
但我們還是不知道怎么賦值

左下單擊Interrogate(步驟1)
左上單擊Setup Fields(步驟2)


在表格中找到2EE0項(步驟3)
此時如果你沒開FSX,把FSX打開并隨意加載一個有FD的機(jī)模,隨便一個機(jī)場,進(jìn)游戲,本文以默認(rèn)321為例
一般默認(rèn)狀態(tài)下FD是關(guān)閉的
執(zhí)行步驟4,點(diǎn)擊Read Buffer1 32bit Buffer1顯示0?
這就意味著FSUIPC的2EE0偏移地址中的32位數(shù)據(jù)為0時對應(yīng)FSX中的FD是關(guān)閉狀態(tài),
我們再切入FSX,手動把FD點(diǎn)亮
再次執(zhí)行步驟4,同理,我們會發(fā)現(xiàn)FD開啟時對應(yīng)的32位數(shù)據(jù)是1
這時候我們就知道該怎么控制FSUIPC去控制FSX了。
//------------------------------------------------------------
接下來我們開始上位機(jī)的編寫(我用的環(huán)境是VB6.0,沒錯,就是這個很老的版本)
解壓UIPC_SDK_VisualBasic.zip

看一下FSUIPC的幫助文檔(readme),從中我們可以看出不管使用任何語言都是基本一個套路:
FSUIPC_Initialization()初始化
FSUIPC_Open()開
FSUIPC_Read()/Write() 讀或?qū)?br style="word-wrap:break-word" /> FSUIPC_Process()這個是每次操作讀或?qū)懞蟊仨氁?jīng)過的過程
FSUIPC_Close()在你關(guān)閉上位機(jī)是順便要關(guān)掉FSUIPC

至于其他部分相當(dāng)于SDK中寫好的驅(qū)動大家不懂也無傷大雅,當(dāng)然明白更好。

然后再進(jìn)一層目錄,打開.vbp文件,這是工程文件,相當(dāng)于官方例程點(diǎn)直接運(yùn)行,此時應(yīng)該不會報錯(不管你開不開FSX),如果你報錯了說明VB軟件有問題或者別的有問題。
如果你開了FSX,此時對話框中應(yīng)該顯示你FSX中的虛擬時間,FSUIPC版本,FS版本,由此可知該例程以讀為主,所以本文沒有贅述有關(guān)讀的操作,有興趣的同學(xué)直接讀懂例程部分即可
幫助文檔中給出了獲取飛機(jī)型號的代碼,我們來練習(xí)一下,以復(fù)制粘貼為主
首先在窗口中拖出一個TEXT框


Public Function GetAircraftTitle(ByRef AircraftTitle As String) As Boolean。。。。。End Function
這部分代碼直接復(fù)制到整篇代碼的尾部即可,它是一個函數(shù),我們在其他地方調(diào)用它
If GetAircraftTitle(ACTitle) Then
? ?? ???' do whatever with the result passed back in ACTitle
? ?? ? Text1.Text = ACTitle??‘這部分是需要添加的,用于在窗口顯示機(jī)型信息
? ?? ?Else
? ?? ???'* display/process the error message based back in ACTitle
? ?? ?End If

而這部分代碼需要放在 Private Sub Timer1_Timer() 中
插入到End Sub之前即可
運(yùn)行正常

//-----------------------------------------------------------------------------
編輯我們自己的代碼段是照貓畫虎的過程
??If FSUIPC_Write(&H2EE0, 4, VarPtr(fd_status), dwResult) Then
??
? ?If FSUIPC_Process(dwResult) Then
? ?Else
? ?End If
??
??End If

我們手動對fd_status賦值,看一下FSX的變化,正常,進(jìn)入下一步/階段
//----------------------------------------------------------------------------------
串口的數(shù)據(jù)處理:
掌握串口傳輸數(shù)據(jù)原理是每個硬件工程師最基本的要求,為方便理解,本文只涉及很簡單的應(yīng)用,不包含校驗的復(fù)雜過程。
首先定義數(shù)據(jù)包的基本格式:FA fd_status(0/1) FB 簡單的說就是 FA 00 FB 或 FA 01 FB
然后我們只講一下思路,就是先識別FA,然后顯然FA之后的數(shù)就應(yīng)該賦值給fs_status,賦值到什么時候結(jié)束呢?識別出FB的時候。
具體實(shí)現(xiàn)方式本文不再細(xì)講,相關(guān)電子論壇會有完整的原理解釋,有需要的同學(xué)請研讀我提供的代碼,不懂可以百度或跟帖
然后是調(diào)試過程,該過程使用了串口調(diào)試助手和虛擬串口通道,本文結(jié)尾附件出可下載,也可自行百度下載別的版本。
打開串口調(diào)試助手Porthelper.exe,將波特率與VB中匹配,COM口選虛擬橋的一端,然后VB上配置成另一端即可。 選擇HEX發(fā)送
發(fā)送窗口輸入 FA 00 FB 或 FA 01 FB 并點(diǎn)擊發(fā)送,觀察FSX變化,正常


這時你用鼠標(biāo)點(diǎn)FD應(yīng)該是無效的,上位機(jī)會不斷地刷FD的狀態(tài),所以這樣才能保證將來硬件與軟件的同步。

//-------------------------------------------------------------------



注意這個選項,關(guān)于MSCOMM1的,它默認(rèn)是0











注:串口調(diào)試助手是免費(fèi)軟件,版權(quán)歸原作者所有。
鑒于本帖篇幅有點(diǎn)長,我決定對下位機(jī)另開一貼,同時也防止本帖沉掉,相信版主應(yīng)該沒意見吧 。
//--------------------------------------------------------------------------

總結(jié)

以上是生活随笔為你收集整理的深入浅出FSUIPC的作用以及使用方法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。