В учебном процессе, если группа ребят работает в рамках одного большого проекта, возможна ситуация, когда в эту группу входят ученики разных уровней подготовки. Например, участники начального уровня умеют программировать еще только на NXT-G, а "продвинутые" ребята уже свободно ориентируются в NXC. |
В программировании такого уровня взаимодействия нет особенных трудностей – примеры, как организовать общение двух блоков, что на NXT-G, что на NXC, можно быстро найти в Internet.
В NXT-G за это ответственны два блока.
В NXC передачу данных можно осуществить с использований следующих функции симейства SendRemote* и ReceiveRemote*. Например, передача строковых данных программируется с помощью
SendRemoteString(byte conn, byte queue, string str)
ReceiveRemoteString(byte queue, bool clear, string &str)
И в NXT-G, и в NXC необходимо указывать такое значение, как MailBox (в NXC это параметр queue). Номер Mailbox на принимающей стороне должен быть задан такой же, как номер Mailbox на передающей стороне. Но вот в этом как раз и кроется небольшой ньюанс, на выяснение которого можно потратить довольно много времени: в NXT-G номера нумеруются от 1 до 10, в то время как в NXC нумерация идет от 0 до 9. Т.е. если для номера Mailbox по незнанию (или по невнимательноcти) в программах на разных языках задано одно и тоже значение, например, 1. То со стороны будет казаться, что данные не передаются, хотя оба блока успешно видят друг друга. Изменение номера Mailbox (queue) на 0 в NXC решает проблему – данные начинают передаваться.
Чтобы избежать такого рода ошибок, рекомендация – использовать макро-определения в NXС вместо чисел. Эти макро-определения как раз и были введены, чтобы избежать этой путаницы.
MAILBOX1 0
MAILBOX2 1
MAILBOX3 2
MAILBOX4 3
MAILBOX5 4
MAILBOX6 5
MAILBOX7 6
MAILBOX8 7
MAILBOX9 8
MAILBOX10 9
Т.е. вместо использования
SendRemoteString(1, 1, "Hello");
будет
SendRemoteString(1, MAILBOX2, "Hello");
Комментариев нет:
Отправить комментарий