Код звуковой, но имеет небольшой недостаток. Обратите внимание на этот код:
MSComm.Output = "@MAIN:PWR=On" & Chr(13)
Do While MSComm.InBufferCount > 0
Text1.Text = Text1.Text & MSComm.Input
Loop
При отправке каких-то данных, сразу ожидайте увидеть ответ. Код не войдет в цикл Do, потому что читать пока нечего.
Итак, либо проверьте .InBufferCount после небольшой паузы, либо используйте другой подход. У меня обычно есть таймер проверки порта каждые 200 мс или около того (в зависимости от срочности). Вы также можете ответить на событие OnComm, но известно, что это событие приводит к увеличению загрузки ЦП до 100%, если проходит слишком много данных. Похоже, вы будете иметь дело с небольшим набором данных, поэтому вы должны быть в порядке с любым подходом.