Я работаю на аркадном шкафу, который сможет воспроизводить различные игровые консоли (реальное оборудование, а не эмулировать). будет ПК внутри, чтобы запустить меню выбора. Я должен сам это написать. Мне также понадобится программа 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
Если вы прочли все это, спасибо за ваше время. Итак (наконец), вот мои вопросы:
Что вы толкуиете? по моей идее вообще, выполнимости и т. д.?
Какой ПЛК следует использовать для предварительного кодировщика? Я изначально думал о попытке Arduino, но мое чтение показывает, что это будет слишком медленным, из-за использования высокоуровневых библиотек программирования. У меня нет проблемы с созданием моей собственной платы вокруг другого ПЛК.
Какой язык следует использовать для программирования ПЛК? Я не против изучать новый язык. В этом проекте нет ограничений по времени, и я поставлю все, что потребуется, чтобы ускорить работу предварительного кодировщика.
Что мне нужно, чтобы сверлить мою программу на ПЛК?
Во время работы, как эти ПЛК обмениваются данными друг с другом и с ПК?
Я спрашиваю в нужном месте; правый форум, правая часть и т. д.? Где бы я ни спрашивал?
В ожидании вашего ответа с нетерпением,
Роб
очень интересный и хорошо подготовленный вопрос, но это требует серьезного форматирования. StackOverflow - сообщество разработчиков, так что да - некоторые из ваших вопросов актуальны. Однако вырезать всю информацию вне темы (например.личный фон) и предоставить короткие и конкретные вопросы. –
Спасибо за ввод. Я отредактировал сообщение и отрезал от 1/3 до 1/2 материала, чтобы отделить его только от того, что необходимо. Можете ли вы порекомендовать где-нибудь разместить более подробные вопросы? – rcadegaming