2013-08-29 40 views
2

我正在開發一款能夠播放各種視頻遊戲控制檯(真實硬件,未模擬)的街機機櫃。將會是一臺運行選擇菜單的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 

如果你已經閱讀了所有這些,謝謝你的時間。所以(最後),這裏是我的問題:

  1. 你的總體想法是什麼;在我的想法一般,可行性等?

  2. 什麼樣的PLC應該用於預編碼器?我原本是想試試Arduino,但是由於使用了高級編程庫,我的閱讀表明它會太慢。在另一臺PLC上構建我自己的電路板沒有問題。

  3. 我應該用什麼語言編程PLC?我不介意學習一門新的語言。這個項目沒有時間限制,我會盡可能快地使預編碼器運行。

  4. 我需要什麼將我的程序刷到PLC上?

  5. 在運行時,這些PLC之間應該如何進行通信?

  6. 我在正確的地方詢問;權利論壇,權利部分等?我應該問的任何地方?

等待你的反應踊躍,

-Rob

+1

一個非常有趣和精心準備的問題,但它需要認真格式。 StackOverflow是一個開發者社區,所以是的 - 你的一些問題是相關的。然而,切斷所有的主題信息(例如,個人背景)並提供簡短而具體的問題。 –

+0

感謝您的意見。我編輯了這篇文章,並且裁剪了大約1/3到1/2的材料,以便將其提煉成只有必要的材料。你能推薦一些地方發佈更詳細的問題嗎? – rcadegaming

回答

1

我有一些想法,可能對你有用:

你有什麼總體思路;在我的想法一般,可行性等?

  • 這個項目聽起來像你想在後衛作弊,就像我以前做的,在我的雅達利操縱桿555定時器芯片,當我還是個孩子。
  • 該項目是可行的,但你將需要一個非常快的PLC。
  • 你可能會花很多時間來完成這項工作,比如任務。

什麼樣的PLC應該用於預編碼器?我原本是想試試Arduino,但是由於使用了高級編程庫,我的閱讀表明它會太慢。在另一臺PLC上構建我自己的電路板沒有問題。

當我想到PLC可能足夠快時,想到了幾件事情。

  • 如果使用PLC,有一個任務架構,您可以使用事件觸發的垂直同步脈衝一項任務,而另一個事件控制檯上的活動觸發。如果您使用沒有任務架構的PLC,用戶可能會識別隨着程序掃描與v-sync和遊戲中的活動進入和退出相位而發生的可變延遲。如果PLC速度足夠快,例如1ms的掃描時間,這可能不會成立。

  • 大多數廉價PLC永遠不會成功。開銷和性能會使大多數PLC在每次掃描時保持5-10ms左右。但是,基於PC的PLC可能運行良好。所以也許一個Beckhoff控制器可以很好地工作。如果您使用的是類似於CX2000的產品,則它具有用於用戶界面的Windows 7,USB,DVI和側面的Ethercat總線,用於連接控制器和控制檯連接的物理I/O卡。請參閱下面的軟件。有許多非基於PC的PLC可以正常工作,但這些PLC可能會很昂貴且難以集成。

  • 如果您使用足夠快的模型,Arduino解決方案應該可以工作。但是你的開發時間會更長,因爲它不帶有空白屏幕和一堆庫。故障排除比真正閃耀的PLC更讓人頭疼。你需要仔細計劃才能讓Arduino工作。而且,連接微控制器的硬件更難,你必須管理你的代碼中的開關。每個PLC都在其輸入中進行過濾,而且各種I/O使設計變得簡單。但是,如果金錢是一個問題,Arduino或其他微控制器是真正的選擇。一個快速的PLC可能會非常昂貴(800至2000美元,大概1500美元)。如果你打算建立多個系統,Arduino可能會更好。

我應該使用什麼語言PLC程序?我不介意學習一門新的語言。這個項目沒有時間限制,我會盡可能快地使預編碼器運行。

  • IEC61131是PLC編程語言標準。在美國,大多數PLC都是用梯形邏輯編程的,因爲它很容易學習,並且可以更快地排除故障並在機器中維護。結構化文本也有其優點,特別是在性能方面。它看起來像基本/ C/Java的一些融合,易於學習和看起來像你的僞代碼的例子。至於你的項目,我認爲它可以用任何一種語言編程。我絕不會使用其他IEC61131語言來完成這項任務。

  • Beckhoff TwinCAT3使用MS Visual Studio作爲IDE,您可以在同一個項目中同時編寫選擇菜單(在VB/C++/C#中)和PLC代碼(在IEC61131中)。 TwinCAT運行許​​可證(位於CX2000單元上)以內核模式運行,只要Windows 7沒有做更重要的事情,就可以爲Windows 7提供處理性能。我已經使用了一些CX1020型號,他們表現出色。掃描時間大約爲5ms,代碼量很大。更快的單位將掃描< 1ms。

我需要閃我的程序到PLC?

PLC不像微控制器那樣「閃光」。無論您用什麼軟件編寫軟件,都可以連接到控制器。術語「上線」使得連接成爲可能。術語「下載」和「上傳」是指在開發計算機和PLC之間傳輸程序。術語「在線編輯」是指在PLC執行代碼時進行代碼更改。當現代PLC斷電時,他們使用電池將程序和用戶RAM複製到閃存。當他們開機時,他們將閃存複製回RAM。要連接任何現代PLC,您將使用USB或以太網電纜。

在運行時,這些PLC之間應該如何與PC進行通信?

您計劃多個PLC?連接PC的PLC是一個複雜的課題。術語「OPC服務器」指的是一些[昂貴的]軟件,可讓您的自定義Windows PC應用程序訪問PLC中的存儲器。 Beckhoff解決方案將所有這些巧妙融合在一起,而不需要購買更多的東西。 PLC到PLC通信更容易。該方法通常由以太網決定,並且細節差別很大。

我在正確的地方詢問;權利論壇,權利部分等?我應該問的任何地方?

  • 當然,也有在這個論壇上,這似乎對鐵桿PC /網絡/移動開發往往一些PLC活動。我來到這裏是爲了解決我更深層次的軟件問題。

  • 您可以嘗試plctalk.net,這是一個更加適應螺栓和螺栓工程師和服務技術人員的野外連接和與機械和自動化相關的兼容性問題的論壇。您可能會對垂直同步脈衝產生一些空洞的注意。他們的技能集合圍繞着一個工業範式,其中可靠性可能是他們的最高要求。

  • 您可能還會問到關於Arduino或Microchip/Atmel/ARM論壇的性能問題。如果你告訴他們一個PLC比他們的硬件更快,那會激起他們真正的好!他們可能會告訴你,你可以得到微秒級的性能數字,如果你正在使用硬件中斷和大量物理電路來實現這一點,那麼你就可以應付這些不眠之夜的故障排除。

丹尼斯