2015-05-03 3 views
3

Мне нужна помощь, я в отчаянииПочему последовательные порты не работают должным образом в Unity?

В течение двух недель, когда я работал в своем проекте, это использует связь по последовательному порту (последовательная плата PIC). Я должен установить соединение, но я не могу получить данные из COM-порта. Я прочитал несколько форумов, и причиной проблемы является неполная реализация System.IO.Ports класс.

Когда я пытаюсь получить данные о COM порт, событие SerialDataReceivedEventHandler (представляет собой метод, который будет обрабатывать событие DataReceived объекта SerialPort.) Не вызывается или активирован. Я попытался его решить, но я не нашел окончательного решения. Я думал, чтобы доказать внешнюю DLL, но друг сказал мне, что проблема будет продолжаться, на самом деле я сделал это и получил ту же проблему: SerialDataReceivedEventHandler не работает. Кроме того, кто-то рекомендовал мне использовать вторичный поток, хотя я не понимаю, как это сделать вообще.

Я написал программу на Visual C#, и все работает нормально. Я заинтригован.

Мне нужно найти решение, идею или хорошую документацию. Если кто-то что-то знает об этом, помогите мне, пожалуйста.

Мне нужно понять причину этого, чтобы продолжить.

+0

Пожалуйста, не используйте' unity' тег для вопросов, связанных с Unity игрового движка. Как правило, это хорошая идея, чтобы прочитать описание тега перед использованием это –

+0

У меня проблема, и на форуме единства я читал, что проблема в том, что единство использует моно 2.0 события последовательных данных не реализованы правильно, поэтому поэтому событие не запускает метод. Вам нужно проверить значение каждые X раз или создать собственную DLL для реализации этого, но это сложнее. – Darkmax

ответ

0

Я думаю, что это происходит потому, что Unity основан на Mono вместо .Net и довольно старой версии. Вы не могли долгое время использовать Linq на устройствах iOS из-за ошибок AOT, а реализация локализации была ошибкой (или, по крайней мере, это было в предыдущих версиях Unity, с которыми я пытался работать). Я даже не смог find the source of System.IO.Ports in the source of Unity's Mono fork, поэтому удивительно, что он компилируется вообще.

+0

SerialPort реализован в Mono и даже в моноблоке Unity, см. Здесь: https://github.com/Unity-Technologies/mono/blob/unity-staging/mcs/class/System/System.IO.Ports/SerialPort .cs, но есть ограничения, в частности, не реализовано никаких событий, подробности здесь: http://www.mono-project.com/archived/howtosystemioports/#limitations – Ben

1

Unity основан на Mono, а Mono полностью не реализует класс Serial, в частности, не реализовано никаких уведомлений (например, SerialDataReceivedEvent).

Именно поэтому он работает в Visual Studio, а не в Unity.

Вот различие между реализацией .NET Моно и полной из последовательного класса:

Экстракт из http://www.mono-project.com/archived/howtosystemioports/#limitations

«Ограничение На момент написания этой статьи, есть аа несколько ограничений, что нужно принять к сведению:

1) Там нет уведомления о событии для принятых последовательных данных Если вы хотите получить данные, необходимо установить тайм-аут и наблюдать за повторным. Получив данные, процитировав ReadByte(), если вы считаете, что могут быть данные.

2) Необходимо только чтение данных в формате byte [] - поддержка char [] отсутствует. Вы должны сделать свое собственное чтение байтов и перевести это в свою кодировку.

3) DiscardNull, ParityReplace, ReceivedBytesThreshold не выполняются.»

Смежные вопросы