深入浅出FSUIPC的作用以及使用方法
生活随笔
收集整理的這篇文章主要介紹了
深入浅出FSUIPC的作用以及使用方法
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
看此貼前您需要掌握的技能或知識:
1. 有FSX或FS2004并正確安裝了FSUIPC
2. 具備一定的C語言理解能力,C語言是一切高級語言的基礎,單片機主要也用的C語言。
3. 掌握以下幾種編程語言之一即可: VC++\VB\C#\DELPHI\JAVA\C++MFC\.NET版的C++或VB,本文以VB為例,因為相對而言上位機的編寫VB比較容易,當然,FSUIPC_SDK中也包含了匯編,但個人不建議使用匯編,雖然匯編代碼效率高,但非常難以理解,如果你是非常N的硬件工程師可能你會選擇匯編(單片機也可用匯編)。
4. 單片機與PC機串口通信原理,這個是最基本的單片機和PC的通訊方式(實際上因為速度慢已經過時,但足夠FS用),事實上USB更好,本文沒有用USB,因為USB協議很復雜,而且不是每款單片機都支持USB。
需要注意的地方:
1. FSUIPC_SDK的文件中指出VB不是主要用的語言,如果你會C#的話,建議你用那個語言,將來可以和PMDG的SDK銜接起來。
2. 過去PMDG也是走的FSUIPC接口,但現在好像不是了,所以想控制PMDG的飛友還需再下功夫(我也在下功夫)
3. 看完本文后你可能不想買搖桿了,或者,你可能感覺買搖桿虧了,這都是正常現象,你需要知道的是搖桿的物理結構設計也是很辛苦的,所以并不虧。
如果你只想DIY個搖桿,那么MJOY16是你不二選擇, 老毛子開發(fā),功能相當強大,用AVR單片機(建議用ATMEGA16L)的虛擬USB技術,相當于直接模擬出了游戲控制器(別的游戲也能用),而且不需要你明白什么語言,只要焊接技術過硬、會向單片機燒程序即可。
本文適合人群:想DIY駕駛艙面板、開關或全套駕駛艙的高水準發(fā)燒友。
一、什么是FSUIPC?
在FS2004時代,FSUIPC是所有高水平插件的接口,有人也說它是模塊或者外掛程序,從安裝上看,FSUIPC就是一個很小的DLL文件,但它很重要,沒有它很多插件工作不了,這個現象延續(xù)到了FSX時代,但FSX時代官方提出了新的概念,就是SimConnect,這個東西使FSUIPC不再那么重要了,因為插件可以走那個接口了,但我們還是要裝FSUIPC,因為它還有靈活定義搖桿的功能,總之FSUIPC功能非常強大,我們是在用它的最基本且重要的功能。
二、簡單的原理(你可能覺得不簡單)
想通過硬件來控制FS一個方式就是用游戲控制器,而另外的方式就是通過接口連接到FS,我們這里用FSUIPC是因為FSUIPC相對簡單,而后者的結構(寫指令)主要是:先用單片機識別開關狀態(tài)--單片機將開關狀態(tài)調制成便于串口傳送的格式--單片機用串口發(fā)送給電腦--電腦上位機解讀串口發(fā)來的數據并提取開關狀態(tài)--電腦上位機將開關狀態(tài)寫入FSUIPC對應偏移地址的內存中--FSUIPC向FSX發(fā)送相應指令--FSX相應的開關發(fā)生變化;(讀指令)FSUIPC讀取FSX相應的信息到FSUIPC相應的偏移地址的內存中(主要用于MCP的數碼管讀取,不過它很強大,甚至包括飛機型號都能讀)--由上位機完成讀取FSUIPC的相應偏移地址的內存中的FS信息--上位機將該信息調制成適合串口傳送的格式--單片機收到并解調該信息--單片機控制相應的硬件顯示該信息。
三、請到官方鏈接http://www.schiratti.com/dowson.html下載FSUIPC_SDK 解壓后你會發(fā)現大概是這樣的:
你驚喜地發(fā)現里面有個EXE文件,沒錯,你可以打開它試一試,然后打開FSX,隨便加載個機模機場進游戲。 //-----------------------------------------------------------------
FSInterrogate2std.exe關于它的作用:
1.找到你想完成的指令在FSUIPC的偏移地址,只有知道了該地址你才可以知道該對那里進行操作。
2.知道該怎么賦值、達到什么效果。
本文以控制FD(飛行指揮儀)開關為例
打開 FSInterrogate2std.exe
有一個About的提示,直接OK忽略掉,不是什么重要信息(版權啊什么的)
然后你會看到主頁面是個大表格,很簡單,左側第一列即為偏移地址,后面的是相關信息。
我們得到相關信息:
偏移地址2EE0、變量類型是U32(一般理解為unsigned int 32)、SIZE=4(直接翻譯是尺寸,大家意會即可)、READ/WRITE代表可讀可寫
但我們還是不知道怎么賦值
左下單擊Interrogate(步驟1)
左上單擊Setup Fields(步驟2)
在表格中找到2EE0項(步驟3)
此時如果你沒開FSX,把FSX打開并隨意加載一個有FD的機模,隨便一個機場,進游戲,本文以默認321為例
一般默認狀態(tài)下FD是關閉的
執(zhí)行步驟4,點擊Read Buffer1, 32bit Buffer1顯示0?
這就意味著FSUIPC的2EE0偏移地址中的32位數據為0時對應FSX中的FD是關閉狀態(tài),
我們再切入FSX,手動把FD點亮
再次執(zhí)行步驟4,同理,我們會發(fā)現FD開啟時對應的32位數據是1
這時候我們就知道該怎么控制FSUIPC去控制FSX了。
//------------------------------------------------------------
接下來我們開始上位機的編寫(我用的環(huán)境是VB6.0,沒錯,就是這個很老的版本)
解壓UIPC_SDK_VisualBasic.zip
看一下FSUIPC的幫助文檔(readme),從中我們可以看出不管使用任何語言都是基本一個套路:
FSUIPC_Initialization()初始化
FSUIPC_Open()開
FSUIPC_Read()/Write() 讀或寫
FSUIPC_Process()這個是每次操作讀或寫后必須要經過的過程
FSUIPC_Close()在你關閉上位機是順便要關掉FSUIPC
至于其他部分相當于SDK中寫好的驅動大家不懂也無傷大雅,當然明白更好。
然后再進一層目錄,打開.vbp文件,這是工程文件,相當于官方例程點直接運行,此時應該不會報錯(不管你開不開FSX),如果你報錯了說明VB軟件有問題或者別的有問題。
如果你開了FSX,此時對話框中應該顯示你FSX中的虛擬時間,FSUIPC版本,FS版本,由此可知該例程以讀為主,所以本文沒有贅述有關讀的操作,有興趣的同學直接讀懂例程部分即可
幫助文檔中給出了獲取飛機型號的代碼,我們來練習一下,以復制粘貼為主
首先在窗口中拖出一個TEXT框
Public Function GetAircraftTitle(ByRef AircraftTitle As String) As Boolean。。。。。End Function
這部分代碼直接復制到整篇代碼的尾部即可,它是一個函數,我們在其他地方調用它
If GetAircraftTitle(ACTitle) Then
? ?? ???' do whatever with the result passed back in ACTitle
? ?? ? Text1.Text = ACTitle??‘這部分是需要添加的,用于在窗口顯示機型信息
? ?? ?Else
? ?? ???'* display/process the error message based back in ACTitle
? ?? ?End If
而這部分代碼需要放在 Private Sub Timer1_Timer() 中
插入到End Sub之前即可
運行正常
//-----------------------------------------------------------------------------
編輯我們自己的代碼段是照貓畫虎的過程
??If FSUIPC_Write(&H2EE0, 4, VarPtr(fd_status), dwResult) Then
??
? ?If FSUIPC_Process(dwResult) Then
? ?Else
? ?End If
??
??End If
我們手動對fd_status賦值,看一下FSX的變化,正常,進入下一步/階段
//----------------------------------------------------------------------------------
串口的數據處理:
掌握串口傳輸數據原理是每個硬件工程師最基本的要求,為方便理解,本文只涉及很簡單的應用,不包含校驗的復雜過程。
首先定義數據包的基本格式:FA fd_status(0/1) FB 簡單的說就是 FA 00 FB 或 FA 01 FB
然后我們只講一下思路,就是先識別FA,然后顯然FA之后的數就應該賦值給fs_status,賦值到什么時候結束呢?識別出FB的時候。
具體實現方式本文不再細講,相關電子論壇會有完整的原理解釋,有需要的同學請研讀我提供的代碼,不懂可以百度或跟帖
然后是調試過程,該過程使用了串口調試助手和虛擬串口通道,本文結尾附件出可下載,也可自行百度下載別的版本。
打開串口調試助手Porthelper.exe,將波特率與VB中匹配,COM口選虛擬橋的一端,然后VB上配置成另一端即可。 選擇HEX發(fā)送
發(fā)送窗口輸入 FA 00 FB 或 FA 01 FB 并點擊發(fā)送,觀察FSX變化,正常
這時你用鼠標點FD應該是無效的,上位機會不斷地刷FD的狀態(tài),所以這樣才能保證將來硬件與軟件的同步。
//-------------------------------------------------------------------
注意這個選項,關于MSCOMM1的,它默認是0
注:串口調試助手是免費軟件,版權歸原作者所有。
鑒于本帖篇幅有點長,我決定對下位機另開一貼,同時也防止本帖沉掉,相信版主應該沒意見吧 。
//--------------------------------------------------------------------------
1. 有FSX或FS2004并正確安裝了FSUIPC
2. 具備一定的C語言理解能力,C語言是一切高級語言的基礎,單片機主要也用的C語言。
3. 掌握以下幾種編程語言之一即可: VC++\VB\C#\DELPHI\JAVA\C++MFC\.NET版的C++或VB,本文以VB為例,因為相對而言上位機的編寫VB比較容易,當然,FSUIPC_SDK中也包含了匯編,但個人不建議使用匯編,雖然匯編代碼效率高,但非常難以理解,如果你是非常N的硬件工程師可能你會選擇匯編(單片機也可用匯編)。
4. 單片機與PC機串口通信原理,這個是最基本的單片機和PC的通訊方式(實際上因為速度慢已經過時,但足夠FS用),事實上USB更好,本文沒有用USB,因為USB協議很復雜,而且不是每款單片機都支持USB。
需要注意的地方:
1. FSUIPC_SDK的文件中指出VB不是主要用的語言,如果你會C#的話,建議你用那個語言,將來可以和PMDG的SDK銜接起來。
2. 過去PMDG也是走的FSUIPC接口,但現在好像不是了,所以想控制PMDG的飛友還需再下功夫(我也在下功夫)
3. 看完本文后你可能不想買搖桿了,或者,你可能感覺買搖桿虧了,這都是正常現象,你需要知道的是搖桿的物理結構設計也是很辛苦的,所以并不虧。
如果你只想DIY個搖桿,那么MJOY16是你不二選擇, 老毛子開發(fā),功能相當強大,用AVR單片機(建議用ATMEGA16L)的虛擬USB技術,相當于直接模擬出了游戲控制器(別的游戲也能用),而且不需要你明白什么語言,只要焊接技術過硬、會向單片機燒程序即可。
本文適合人群:想DIY駕駛艙面板、開關或全套駕駛艙的高水準發(fā)燒友。
一、什么是FSUIPC?
在FS2004時代,FSUIPC是所有高水平插件的接口,有人也說它是模塊或者外掛程序,從安裝上看,FSUIPC就是一個很小的DLL文件,但它很重要,沒有它很多插件工作不了,這個現象延續(xù)到了FSX時代,但FSX時代官方提出了新的概念,就是SimConnect,這個東西使FSUIPC不再那么重要了,因為插件可以走那個接口了,但我們還是要裝FSUIPC,因為它還有靈活定義搖桿的功能,總之FSUIPC功能非常強大,我們是在用它的最基本且重要的功能。
二、簡單的原理(你可能覺得不簡單)
想通過硬件來控制FS一個方式就是用游戲控制器,而另外的方式就是通過接口連接到FS,我們這里用FSUIPC是因為FSUIPC相對簡單,而后者的結構(寫指令)主要是:先用單片機識別開關狀態(tài)--單片機將開關狀態(tài)調制成便于串口傳送的格式--單片機用串口發(fā)送給電腦--電腦上位機解讀串口發(fā)來的數據并提取開關狀態(tài)--電腦上位機將開關狀態(tài)寫入FSUIPC對應偏移地址的內存中--FSUIPC向FSX發(fā)送相應指令--FSX相應的開關發(fā)生變化;(讀指令)FSUIPC讀取FSX相應的信息到FSUIPC相應的偏移地址的內存中(主要用于MCP的數碼管讀取,不過它很強大,甚至包括飛機型號都能讀)--由上位機完成讀取FSUIPC的相應偏移地址的內存中的FS信息--上位機將該信息調制成適合串口傳送的格式--單片機收到并解調該信息--單片機控制相應的硬件顯示該信息。
三、請到官方鏈接http://www.schiratti.com/dowson.html下載FSUIPC_SDK 解壓后你會發(fā)現大概是這樣的:
你驚喜地發(fā)現里面有個EXE文件,沒錯,你可以打開它試一試,然后打開FSX,隨便加載個機模機場進游戲。 //-----------------------------------------------------------------
FSInterrogate2std.exe關于它的作用:
1.找到你想完成的指令在FSUIPC的偏移地址,只有知道了該地址你才可以知道該對那里進行操作。
2.知道該怎么賦值、達到什么效果。
本文以控制FD(飛行指揮儀)開關為例
打開 FSInterrogate2std.exe
有一個About的提示,直接OK忽略掉,不是什么重要信息(版權啊什么的)
然后你會看到主頁面是個大表格,很簡單,左側第一列即為偏移地址,后面的是相關信息。
我們得到相關信息:
偏移地址2EE0、變量類型是U32(一般理解為unsigned int 32)、SIZE=4(直接翻譯是尺寸,大家意會即可)、READ/WRITE代表可讀可寫
但我們還是不知道怎么賦值
左下單擊Interrogate(步驟1)
左上單擊Setup Fields(步驟2)
在表格中找到2EE0項(步驟3)
此時如果你沒開FSX,把FSX打開并隨意加載一個有FD的機模,隨便一個機場,進游戲,本文以默認321為例
一般默認狀態(tài)下FD是關閉的
執(zhí)行步驟4,點擊Read Buffer1, 32bit Buffer1顯示0?
這就意味著FSUIPC的2EE0偏移地址中的32位數據為0時對應FSX中的FD是關閉狀態(tài),
我們再切入FSX,手動把FD點亮
再次執(zhí)行步驟4,同理,我們會發(fā)現FD開啟時對應的32位數據是1
這時候我們就知道該怎么控制FSUIPC去控制FSX了。
//------------------------------------------------------------
接下來我們開始上位機的編寫(我用的環(huán)境是VB6.0,沒錯,就是這個很老的版本)
解壓UIPC_SDK_VisualBasic.zip
看一下FSUIPC的幫助文檔(readme),從中我們可以看出不管使用任何語言都是基本一個套路:
FSUIPC_Initialization()初始化
FSUIPC_Open()開
FSUIPC_Read()/Write() 讀或寫
FSUIPC_Process()這個是每次操作讀或寫后必須要經過的過程
FSUIPC_Close()在你關閉上位機是順便要關掉FSUIPC
至于其他部分相當于SDK中寫好的驅動大家不懂也無傷大雅,當然明白更好。
然后再進一層目錄,打開.vbp文件,這是工程文件,相當于官方例程點直接運行,此時應該不會報錯(不管你開不開FSX),如果你報錯了說明VB軟件有問題或者別的有問題。
如果你開了FSX,此時對話框中應該顯示你FSX中的虛擬時間,FSUIPC版本,FS版本,由此可知該例程以讀為主,所以本文沒有贅述有關讀的操作,有興趣的同學直接讀懂例程部分即可
幫助文檔中給出了獲取飛機型號的代碼,我們來練習一下,以復制粘貼為主
首先在窗口中拖出一個TEXT框
Public Function GetAircraftTitle(ByRef AircraftTitle As String) As Boolean。。。。。End Function
這部分代碼直接復制到整篇代碼的尾部即可,它是一個函數,我們在其他地方調用它
If GetAircraftTitle(ACTitle) Then
? ?? ???' do whatever with the result passed back in ACTitle
? ?? ? Text1.Text = ACTitle??‘這部分是需要添加的,用于在窗口顯示機型信息
? ?? ?Else
? ?? ???'* display/process the error message based back in ACTitle
? ?? ?End If
而這部分代碼需要放在 Private Sub Timer1_Timer() 中
插入到End Sub之前即可
運行正常
//-----------------------------------------------------------------------------
編輯我們自己的代碼段是照貓畫虎的過程
??If FSUIPC_Write(&H2EE0, 4, VarPtr(fd_status), dwResult) Then
??
? ?If FSUIPC_Process(dwResult) Then
? ?Else
? ?End If
??
??End If
我們手動對fd_status賦值,看一下FSX的變化,正常,進入下一步/階段
//----------------------------------------------------------------------------------
串口的數據處理:
掌握串口傳輸數據原理是每個硬件工程師最基本的要求,為方便理解,本文只涉及很簡單的應用,不包含校驗的復雜過程。
首先定義數據包的基本格式:FA fd_status(0/1) FB 簡單的說就是 FA 00 FB 或 FA 01 FB
然后我們只講一下思路,就是先識別FA,然后顯然FA之后的數就應該賦值給fs_status,賦值到什么時候結束呢?識別出FB的時候。
具體實現方式本文不再細講,相關電子論壇會有完整的原理解釋,有需要的同學請研讀我提供的代碼,不懂可以百度或跟帖
然后是調試過程,該過程使用了串口調試助手和虛擬串口通道,本文結尾附件出可下載,也可自行百度下載別的版本。
打開串口調試助手Porthelper.exe,將波特率與VB中匹配,COM口選虛擬橋的一端,然后VB上配置成另一端即可。 選擇HEX發(fā)送
發(fā)送窗口輸入 FA 00 FB 或 FA 01 FB 并點擊發(fā)送,觀察FSX變化,正常
這時你用鼠標點FD應該是無效的,上位機會不斷地刷FD的狀態(tài),所以這樣才能保證將來硬件與軟件的同步。
//-------------------------------------------------------------------
注意這個選項,關于MSCOMM1的,它默認是0
注:串口調試助手是免費軟件,版權歸原作者所有。
鑒于本帖篇幅有點長,我決定對下位機另開一貼,同時也防止本帖沉掉,相信版主應該沒意見吧 。
//--------------------------------------------------------------------------
總結
以上是生活随笔為你收集整理的深入浅出FSUIPC的作用以及使用方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 招行白金卡每年几次免费洗牙/怎么预约
- 下一篇: 招行白金卡信用卡额度一般多少