2013-08-29 4 views
2

Я работаю на аркадном шкафу, который сможет воспроизводить различные игровые консоли (реальное оборудование, а не эмулировать). будет ПК внутри, чтобы запустить меню выбора. Я должен сам это написать. Мне также понадобится программа PLC, которая будет выполнять различные функции, такие как управление реле, которые переключают аудио/видео/элементы управления между ПК и различными консолями и т. Д. Мне потребуется помощь с этими двумя задачами вовремя, но они не являются над чем я сейчас работаю.Сообщение Оптимизировано: нужен совет по программированию ПЛК: предварительный энкодер для аркады, повторное использование + турбо + медленные функции

То, что я работаю как отправная точка, связано с кодированием контроллера. В принципе, элементы управления для каждого игрока состоят из нескольких кнопок и джойстика. Они используют мгновенные, нормально разомкнутые контактные переключатели, по одному для каждой кнопки и по одному для каждого кардинального направления на джойстике. Нажатие кнопки или направление джойстика закрывает переключатель. Состояние кнопок затем передается на консоль с помощью энкодера.

Кодер имеет подключение для каждой кнопки и направления джойстика, которое подключается к 5 вольтам («высокий») через нагрузочный резистор. Когда нажата кнопка или направление, соединение с землей осуществляется через мгновенный переключатель. Когда кодер считывает землю («низкий») при подключении кнопок, он знает, что нажата кнопка, и она передает это сообщение на консоль.

У меня уже есть все это, работая с различными консолями, но я подумал о некоторых функциях, которые было бы неплохо добавить. Это моя текущая задача.

Первой особенностью является переназначение кнопок. Некоторые из этих игр были разработаны с учетом контроллеров, поэтому, когда вы используете их с панелью управления аркадой, некоторые из кнопок могут быть не там, где вы хотите. В некоторых играх кнопки можно переназначить с помощью программного обеспечения, а другие - нет. Моя идея - добавить ПЛК между джойстиком и кнопками и кодер. Я буду называть этот ПЛК «предварительным кодировщиком».

Прекодер будет считывать состояния кнопок на некоторых входных выводах, а затем записывать эти состояния обратно на некоторые выходные выходы, передавая их в кодировщик. Преимущество состоит в том, что его программирование может связывать любой входной контакт с любым выходным выводом, эффективно переставляя кнопки. Всякий раз, когда консоль выбирается через меню компьютера, может быть выбран профиль сопоставления кнопок, связанный с конкретной игрой, и пересылается в предварительный кодировщик.

Конечно, процедура предварительного кодирования, которая считывает кнопки и передает их состояния в кодировщик, должна очень быстро повторяться для плавного управления. Эти игры будут работать от 50 до 60 Гц, что означает новый видеокадр каждые 16,67 мс или меньше. В идеале, предварительный кодировщик сможет повторить эту процедуру много раз в секунду для обеспечения абсолютного минимального входного запаздывания. Я хочу убедиться, что выбор кода и оборудования оптимизирован для работы как можно быстрее.

Вторая особенность - турбо кнопки. В некоторых играх, особенно в аркадных играх, требуется многократно нажать кнопку огня каждый раз, когда вы хотите стрелять из своего пистолета или пушек вашего корабля и т. Д., Даже если у вас есть неограниченные боеприпасы. Это кажется ненужным, и он быстро утомляет ваши пальцы. Турбо-кнопка - это та, которая может удерживаться непрерывно, но в игре говорят, что вы быстро нажимаете и отпускаете ее. Это можно сделать в программном обеспечении для чего-либо, работающего на ПК, или с аналоговым решением, например, с таймером 555, но лучший способ - синхронизировать синхронизацию турбо-кнопок с частотой обновления видео. Подавая вертикальный синхроимпульс с видеовыхода ПК или видеоигры в ПЛК, он точно знает, как часто формируется кадр видео. Затем можно управлять таймингом в режиме Turbo, определяя в количествах кадров периоды, когда кнопка должна быть нажата и отпущена. Информация о времени также может быть включена в профили кнопок для конкретной игры.

Третья особенность - это медленные кнопки.Фактически, это, вероятно, будет применено только к джойстику, но я имею в виду переключатели для своих кардинальных направлений в качестве кнопок. В некоторых играх (вероятно, это будет использоваться только в shmups) иногда необходимо перемещать своего персонажа (корабль/самолет) через очень узкие пространства. Если движение слишком быстро в ответ на минимальный вход джойстика, вы можете зайти слишком далеко и сработать. Идея состоит в том, что, хотя кнопка медленной активации удерживается, джойстик будет менее восприимчивым, быстро активируя и дезактивируя его так же, как кнопки турбо.

Я не уверен, хочу ли я, чтобы сам предварительный кодировщик наблюдал вертикальный синхроимпульс, или если он слишком сильно замедлит его. Мое настоящее мышление заключается в том, что отдельный ПЛК будет отвечать за общее управление самой кабиной; просмотр кнопки «включено», включение реле, непосредственное общение с ПК, просмотр вертикального синхроимпульса и т. д. Это освободит предварительный кодер, чтобы работать быстрее.

Вот пример «кода» для предварительного кодировщика. Очевидно, это всего лишь грубая схема того, что я имею в виду, поскольку я даже не знаю, на каком языке это будет. В этом примере предполагается, что выделенный ПЛК будет использоваться так же, как и предварительный кодер. Отдельный ПЛК будет отвечать за просмотр вертикального синхроимпульса в дополнение к другим задачам, таким как получение игрового профиля с компьютера и передача некоторой информации об этом в предварительный кодировщик. Этот ПЛК будет знать, какими должны быть временные рамки для турбо и медленных функций, он будет считать кадры, а во время кадров, когда необходимо отключить турбо-кнопки, он выводит высоко на штырь на печатной плате перед кодировщиком, сообщая ему об отключении турбонаддува кнопок. Во время кадров, когда он должен быть включен, он выводит с низким значением этот вывод. Та же идея с медленными кнопками. Существует также булавка, которую pre-encoder проверяет в конце своей процедуры, поэтому можно сказать, чтобы остановить и ждать другого игрового профиля.

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. Какой ПЛК следует использовать для предварительного кодировщика? Я изначально думал о попытке Arduino, но мое чтение показывает, что это будет слишком медленным, из-за использования высокоуровневых библиотек программирования. У меня нет проблемы с созданием моей собственной платы вокруг другого ПЛК.

  3. Какой язык следует использовать для программирования ПЛК? Я не против изучать новый язык. В этом проекте нет ограничений по времени, и я поставлю все, что потребуется, чтобы ускорить работу предварительного кодировщика.

  4. Что мне нужно, чтобы сверлить мою программу на ПЛК?

  5. Во время работы, как эти ПЛК обмениваются данными друг с другом и с ПК?

  6. Я спрашиваю в нужном месте; правый форум, правая часть и т. д.? Где бы я ни спрашивал?

В ожидании вашего ответа с нетерпением,

Роб
+1

очень интересный и хорошо подготовленный вопрос, но это требует серьезного форматирования. StackOverflow - сообщество разработчиков, так что да - некоторые из ваших вопросов актуальны. Однако вырезать всю информацию вне темы (например.личный фон) и предоставить короткие и конкретные вопросы. –

+0

Спасибо за ввод. Я отредактировал сообщение и отрезал от 1/3 до 1/2 материала, чтобы отделить его только от того, что необходимо. Можете ли вы порекомендовать где-нибудь разместить более подробные вопросы? – rcadegaming

ответ

1

У меня есть некоторые мысли, которые могли бы быть полезными для вас:

Каковы ваши общие мысли; по моей идее вообще, выполнимости и т. д.?

  • Этот проект звучит, как вы хотите, чтобы обмануть на Защитнику, как я делал с чипом 555 таймера в моем Atari джойстиком, когда я был ребенком.
  • Проект возможен, но вам понадобится довольно быстрый ПЛК.
  • Вы можете потратить много времени на выполнение этой работы, как на квест.

Какой ПЛК следует использовать для предварительного кодировщика? Я изначально думал о попытке Arduino, но мое чтение показывает, что это будет слишком медленным, из-за использования высокоуровневых библиотек программирования. У меня нет проблемы с созданием моей собственной платы вокруг другого ПЛК.

Поскольку я думал о том, что ПЛК может быть достаточно быстрым, на ум пришло немало вещей.

  • Если используется PLC, который имеет архитектуру задач, вы можете использовать событие для запуска задачи на пульсе v-синхронизации, и другое событие для запуска на консоли деятельности. Если вы используете ПЛК без архитектуры задачи, пользователь может распознать задержку переменных, которая будет возникать по мере того, как сканирование программы перемещается и не соответствует фазе с помощью v-sync и активности в игре. Это может быть неверно, если ПЛК достаточно быстро, скажем, 1 мс времени сканирования.

  • Большинство недорогих ПЛК никогда этого не сделают. Накладные расходы и производительность будут держать большинство ПЛК примерно на 5-10 мс на сканирование. Однако ПЛК на базе ПК может работать хорошо. Так что, может быть, контроллер Beckhoff будет работать хорошо. Если вы используете что-то вроде CX2000, у него есть Windows 7, USB, DVI для пользовательского интерфейса и шина Ethercat сбоку для подключения физических карт ввода/вывода для подключения контроллера и консоли. См. Ниже приведенное ниже программное обеспечение. Есть много ПЛК на базе ПК, которые будут работать нормально, но это, вероятно, будет дорого и сложнее интегрировать.

  • Решение Arduino должно работать, если вы используете достаточно быструю модель. Но ваше время разработки будет выше, потому что в нем нет ничего, кроме пустого экрана и множества библиотек. Устранение неполадок - это скорее боль в области шеи, чем ПЛК, которые действительно сияют. Вам нужно будет тщательно спланировать работу Ардуино. Кроме того, аппаратное сопряжение с микроконтроллером сложнее, и вам придется управлять дедупликацией коммутаторов в вашем коде. Каждый ПЛК имеет фильтрацию на своих входах, а разнообразие ввода-вывода упрощает проектирование. Но, Arduino или другой микроконтроллер действительно выбор, если деньги являются проблемой. Быстрый ПЛК может быть действительно дорогим (от $ 800 до $ 20 тыс., Думаю, около $ 1500). Если вы собираетесь построить более чем несколько систем, Arduino может быть лучше.

Какой язык следует использовать для программирования PLC? Я не против изучать новый язык. В этом проекте нет ограничений по времени, и я поставлю все, что потребуется, чтобы ускорить работу предварительного кодировщика.

  • IEC61131 является стандартом для языков программирования ПЛК. В США большинство ПЛК программируются в лестничной логике, потому что это действительно легко изучить и быстрее устранить неисправности и поддерживать в машинах. У структурированного текста есть свои преимущества, особенно в производительности. Это похоже на некоторое объединение базового/C/Java, легко учиться и выглядит почти как ваш пример псевдокода. Что касается вашего проекта, я думаю, он может быть запрограммирован на любом языке. Я бы никогда не использовал другие языки IEC61131 для этой задачи.

  • Beckhoff TwinCAT3 использует MS Visual Studio в качестве среды IDE, где вы можете написать меню выбора (в VB/C++/C#) и код ПЛК (в IEC61131) в том же проекте. Лицензия на время исполнения для TwinCAT (на блоке CX2000) работает в режиме ядра, обеспечивая производительность обработки до Windows 7, когда она не делает что-то более важное. Я использовал несколько моделей CX1020, и они были отличными исполнителями. Время сканирования составляло около 5 мс при значительном количестве кода. Более быстрые устройства сканируют < 1 мс.

Что мне нужно прошить мою программу на ПЛК?

ПЛК не «мигают», как микроконтроллеры. Независимо от того, какое программное обеспечение, которое вы используете для написания программного обеспечения, будет иметь возможность подключиться к контроллеру. Термин «выходить в интернет» делает соединение. Термины «загрузка» и «загрузка» относятся к передаче программы между компьютером разработки и ПЛК. Термин «онлайн-редактирование» относится к изменению кода, когда ПЛК выполняет код. Когда современные ПЛК отключены, они используют батарею, чтобы скопировать программу и оперативную память пользователя. Когда они включаются, они копируют флэш обратно в ОЗУ. Чтобы установить соединение с любым современным ПЛК, вы будете использовать кабель USB или Ethernet.

Во время работы, как эти ПЛК будут взаимодействовать друг с другом и с ПК?

Вы планируете использовать более одного ПЛК? Соединение ПЛК с ПК - сложный вопрос. Термин «OPC-сервер» относится к некоторому [дорогому] программному обеспечению, которое позволяет вашему пользовательскому приложению Windows PC получать доступ к памяти в ПЛК. Решение Beckhoff склеивает все это вместе, не покупая больше материала. Связь ПЛК с ПЛК проще. Этот метод обычно используется в сети Ethernet и широко варьируется в зависимости от деталей.

Я спрашиваю в нужном месте; правый форум, правая часть и т. д.? Где бы я ни спрашивал?

  • Конечно, есть некоторая активность PLC на этом форуме, который, как представляется, имеют тенденцию к хардкорных PC/Web/Mobile развития. Я прихожу сюда для удивительно умных ответов на мои более глубокие вопросы о программном обеспечении.

  • Вы можете попробовать plctalk.net, форум, который немного ориентирован на инженеров-гайки и болты инженеров и техников обслуживания с дикими проблемами связи и совместимости, связанными с машинами и автоматикой. Вы можете получить пустые взгляды о вертикальных импульсах синхронизации. Их наборы навыков вращаются вокруг промышленной парадигмы, где надежность, вероятно, является их самым высоким призванием.

  • Вы также можете задать вопросы о производительности на форумах Arduino или Microchip/Atmel/ARM. Если вы скажете им, что ПЛК быстрее, чем их аппаратное обеспечение, это будет очень полезно! Они могут сказать вам, что вы можете получить номера производительности в микросекундах, которые вы можете использовать, если используете аппаратные прерывания и множество физических схем, чтобы сделать это реальностью, и вы можете справиться с бессонной ночью поиска неисправностей.

-Dennis