我正在開發一款能夠播放各種視頻遊戲控制檯(真實硬件,未模擬)的街機機櫃。將會是一臺運行選擇菜單的PC機。我必須自己寫。我還需要編程一個PLC,它可以做各種事情,比如控制在PC和各種控制檯之間切換音頻/視頻/控制的繼電器等。我需要及時幫助完成這兩項任務,但它們不是我現在在做什麼。精簡後:需要PLC項目建議:商場按鈕預編碼器,重新映射+ Turbo +慢速功能
我正在做什麼作爲起點與控制器編碼有關。基本上,每個玩家的控件由幾個按鈕和一個操縱桿組成。這些開關使用瞬時常開觸點開關,每個按鈕一個,操縱桿上的每個主要方向一個。按下按鈕或操縱桿方向,關閉開關。然後按鈕的狀態通過編碼器傳送到控制檯。
編碼器對每個按鈕和操縱桿方向都有一個連接,通過一個上拉電阻連接到5伏(「高」)。按下按鈕或方向時,通過瞬時開關進行接地連接。當編碼器在按鈕連接上讀取接地(「低」)時,它知道按鈕已被按下,並將其傳送到控制檯。
我已經有了所有這些與各種控制檯的工作,但我想到了一些功能,將很好添加。這是我當前任務進入的地方。
第一個功能是按鈕重新映射。這些遊戲中的一些遊戲是設計時考慮到了控制器的,因此當您在街機控制面板中使用它們時,某些按鈕可能不在您想要的位置。有些遊戲允許按鈕通過軟件重新映射,但其他遊戲則不然。我的想法是在操縱桿和按鈕與編碼器之間添加一個PLC。我將這個PLC稱爲「預編碼器」。
預編碼器將讀取某些輸入引腳上按鈕的狀態,然後將這些狀態寫回某些輸出引腳,然後將它們中繼到編碼器。其優點是它的編程可以將任何輸入引腳與任何輸出引腳相關聯,有效地重新映射按鈕。無論何時通過計算機的菜單選擇控制檯,都可以選擇與特定遊戲關聯的按鈕映射配置文件,並將其轉發給預編碼器。
當然,預編碼器的例程讀取按鈕並將其狀態傳遞給編碼器必須非常快速地重複進行平滑控制。這些遊戲將以大約50到60Hz的頻率運行,這意味着每16.67ms或更短的時間內新的視頻幀。理想情況下,預編碼器將能夠每幀重複執行多次,多次,以確保絕對最小的輸入延遲。我想確保代碼和硬件選擇得到優化,以儘可能快地運行。
第二個功能是渦輪按鈕。有些遊戲,特別是街機遊戲,每次你想要發射槍或你的艦炮時,都需要重複按下一個發射按鈕,即使你有無限的彈藥。這看起來沒有必要,而且會讓你的手指快速疲勞。渦輪按鈕是一個可以連續按下的按鈕,但遊戲被告知您正在快速按下並釋放它。這可以用PC上運行的任何軟件完成,或者使用像555定時器這樣的模擬解決方案,但最好的方法是將turbo按鍵時間與視頻刷新速率同步。通過將來自PC或視頻遊戲控制檯的視頻輸出的垂直同步脈衝提供給PLC,它將準確知道一幀視頻的渲染頻率。然後可以通過以幀的數量定義按鈕被按下和釋放的時段來控制快速按鈕時序。計時信息也可以包含在特定於遊戲的按鈕配置文件中。
第三個功能是慢速按鈕。實際上,這可能只適用於操縱桿,但我指的是開關的基本方向作爲按鈕。在某些遊戲中(它可能只用於shmups),有時需要將角色(船/飛機)移動到非常狹小的空間中。如果移動速度太快以至於無法響應甚至最小的操縱桿輸入,則可能會變得太快並且崩潰。這個想法是,當一個緩慢的激活按鈕被保持時,通過以與渦輪按鈕相同的方式快速激活和停用它,控制桿的響應會變得更少。
我不確定我是否希望預編碼器本身能夠觀看垂直同步脈衝,或者是否會太慢。我目前的想法是,一個獨立的PLC將負責駕駛室本身的一般管理;觀看「開」按鈕,切換繼電器,直接與PC通信,觀看垂直同步脈衝等。這將釋放預編碼器以更快地運行。
以下是預編碼器的一些示例「代碼」。顯然,這只是我腦海中的一個粗略輪廓,因爲我甚至不知道它會是什麼語言。這個例子假定一個專用PLC將被用作預編碼器。除了其他任務之外,單獨的PLC將負責觀看垂直同步脈衝,例如從計算機獲取遊戲配置文件並將某些信息傳遞給預編碼器。那PLC將知道幀定時應該用於turbo和慢速功能,它將對幀進行計數,並且在幀期間,當turbo按鈕應該被禁用時,它將輸出高電平到預編碼器PCB上的一個引腳,讓它知道禁用turbo鈕釦。在應該啓用的幀期間,它會向該引腳輸出低電平。與慢速按鈕相同的想法。預編碼器在程序結束時還會檢查一個引腳,因此可以告訴它停止並等待不同的遊戲配置文件。
get info from other PLC (which got it from the computer, from a user-selected game profile):
array containing list of turbo buttons (buttons are identified by what input pin they are connected to)
array containing list of slow buttons (will probably only be the joystick directions, if any)
array containing list of slow activation buttons (should normally be only one button, if any)
array containing list of normal buttons (not turbo or slow)
array containing which output pin to use for each button (this determines remapping)
Begin Loop
if turbo pin is high
for each turbo button
output pin = high
next
else
for each turbo button
output pin = input pin
next
end if
if slow pin is high and slow activation button is pressed
for each slow button
output pin = high
next
else
for each slow button
output pin = input pin
next
end if
for each normal button
output pin = input pin
next
Restart Loop unless stop pin is low
如果你已經閱讀了所有這些,謝謝你的時間。所以(最後),這裏是我的問題:
你的總體想法是什麼;在我的想法一般,可行性等?
什麼樣的PLC應該用於預編碼器?我原本是想試試Arduino,但是由於使用了高級編程庫,我的閱讀表明它會太慢。在另一臺PLC上構建我自己的電路板沒有問題。
我應該用什麼語言編程PLC?我不介意學習一門新的語言。這個項目沒有時間限制,我會盡可能快地使預編碼器運行。
我需要什麼將我的程序刷到PLC上?
在運行時,這些PLC之間應該如何進行通信?
我在正確的地方詢問;權利論壇,權利部分等?我應該問的任何地方?
等待你的反應踊躍,
-Rob
一個非常有趣和精心準備的問題,但它需要認真格式。 StackOverflow是一個開發者社區,所以是的 - 你的一些問題是相關的。然而,切斷所有的主題信息(例如,個人背景)並提供簡短而具體的問題。 –
感謝您的意見。我編輯了這篇文章,並且裁剪了大約1/3到1/2的材料,以便將其提煉成只有必要的材料。你能推薦一些地方發佈更詳細的問題嗎? – rcadegaming