Конечно, стоило. Если бы подобная статья была у меня в начале проекта, разработка прошла бы значительно быстрее, и удалось бы избежать ряда проблем.
По моему опыту, при работе с generic-типами, когда конкретный тип определяется в runtime, в большинстве случаев приходится использовать рефлексию — это одна из её основных областей применения.
Если существует способ использовать ModbusVariable<T> без рефлексии в подобных условиях — буду искренне рад увидеть такой подход. Это действительно интересный вопрос.
Добавил дополнительную главу «Почему Modbus?», думаю, она ответит на некоторые вопросы.
Не совсем понял про.
прямое общения по tcp
Если вы имели в виду простой обмен по TCP, то мы столкнемся с теми же проблемами, что надо вручную делать автообновления и контроль соединения.
Так же у вас есть упоминание, что на плк могут быть разные проекты. Они все работают по modbus с одинаковыми контрактом общения?
Проект был только один, до других проектов не дошло, но предполагалось, что они будут. Сначала был создан проект, потом к нему добавили устройство Modbus TCP.
Было бы интересно понять что происходит со стороны CodeSys
К сожалению, у меня нет проекта и нет CODESYS, чтобы предоставить что-то конкретное, могу лишь сказать, что для чтения и записи в регистры Modbus использовался синтаксис.
Удивительно, как я раньше не заметил, что это эквивалентно 0x80 | «нужная константа».
Я проверил, и действительно, чтобы зафиксировать нажатие, достаточно проверить, установлены ли нужные биты. Таким образом, мультитач будет работать правильно. Я обновил свой шаблонный проект, и теперь стрелка движется во все 8 направлений. В связи с новой информацией, придется менять главу статьи про управление.
Вот код который в итоге получился для кнопки Вверх:
if ((keyCode & SegaGenesis.JOYPAD_UP) != 0) {
if (y < 0x7F) {
continue;
}
//Do something
}
Я изучил все константы в классе SegaGenesis, но не нашёл ни одной, которая бы равнялась 0x80. Скорей всего так и есть:
"Возможно, он всегда выставлен, или обозначает, что хотя бы одна кнопка нажата."
Конечно, стоило. Если бы подобная статья была у меня в начале проекта, разработка прошла бы значительно быстрее, и удалось бы избежать ряда проблем.
По моему опыту, при работе с generic-типами, когда конкретный тип определяется в runtime, в большинстве случаев приходится использовать рефлексию — это одна из её основных областей применения.
Если существует способ использовать ModbusVariable<T> без рефлексии в подобных условиях — буду искренне рад увидеть такой подход. Это действительно интересный вопрос.
Добавил дополнительную главу «Почему Modbus?», думаю, она ответит на некоторые вопросы.
Не совсем понял про.
Если вы имели в виду простой обмен по TCP, то мы столкнемся с теми же проблемами, что надо вручную делать автообновления и контроль соединения.
Проект был только один, до других проектов не дошло, но предполагалось, что они будут. Сначала был создан проект, потом к нему добавили устройство Modbus TCP.
К сожалению, у меня нет проекта и нет CODESYS, чтобы предоставить что-то конкретное, могу лишь сказать, что для чтения и записи в регистры Modbus использовался синтаксис.
Цикл выполниться не 256 раз, а 242.
Удивительно, как я раньше не заметил, что это эквивалентно 0x80 | «нужная константа».
Я проверил, и действительно, чтобы зафиксировать нажатие, достаточно проверить, установлены ли нужные биты. Таким образом, мультитач будет работать правильно. Я обновил свой шаблонный проект, и теперь стрелка движется во все 8 направлений. В связи с новой информацией, придется менять главу статьи про управление.
Вот код который в итоге получился для кнопки Вверх:
Я изучил все константы в классе SegaGenesis, но не нашёл ни одной, которая бы равнялась 0x80. Скорей всего так и есть:
Спасибо. Добавил