RS232c в VB6 поможет - PullRequest
       30

RS232c в VB6 поможет

1 голос
/ 17 мая 2011

Привет всем, я новичок в этой отправке команды RS232c.Это то, что есть в документах для моего Yamaha A / V RX-A2000.

PWR
  [PUT Command] 
     @MAIN:PWR=Parameter
  [GET Command]
     @MAIN:PWR=?
        Operating & retrieving Power state of Main Zone
        Initial Auto Feedback is Available
  [Parameters]
        Standby
          PUT: turining its state to Standby / GET: indicating Standby status.
        On
          PUT: turining its state to On / GET: indicating On status.
        On/Standby
          PUT Only: toggling its status between On/Standby

Я немного сбит с толку относительно того, как отправлять подобные команды через элемент управления MSComm.

Это было бы правильно?

Дэвид

Ответы [ 2 ]

3 голосов
/ 17 мая 2011

Ваш код выглядит примерно правильно - концептуально в любом случае - хотя настройка для Do While на самом деле не совсем верна. См. http://support.microsoft.com/kb/194922 для примера кодирования. (но часть ".Handshaking = 2 - comRTS" должна быть ".Handshaking = 2"). Использование событий - более надежный подход к коммуникации RS232.

См. http://www.vbrad.com/article.aspx?id=37 для дальнейших указаний.

Если на вашем компьютере установлен HyperTerminal (или какая-либо другая программа TTY), используйте его, чтобы попытаться установить связь с Yamaha вручную. Надеюсь, в вашем руководстве пользователя есть несколько примеров, которые вы можете попробовать. Google на "гипертерминале rs232" для других идей; например, http://www.connectworld.net/interface-troubleshooting.html. Переход по ручному маршруту по крайней мере подтвердит, что вы можете заставить свой компьютер общаться с Yamaha, и это поможет вам подумать о том, как написать свой код.

(Google "гипертерминальные окна замены" для других программ TTY; например, http://www.windowsreference.com/windows-vista/alternatives-to-hyperterminal-in-vista/)

2 голосов
/ 17 мая 2011

Код звуковой, но имеет небольшой недостаток. Обратите внимание на этот код:

MSComm.Output = "@MAIN:PWR=On" & Chr(13)

Do While MSComm.InBufferCount > 0
     Text1.Text = Text1.Text & MSComm.Input
Loop

При отправке каких-то данных, сразу ожидайте увидеть ответ. Код не войдет в цикл Do, потому что читать пока нечего.

Итак, либо проверьте .InBufferCount после небольшой паузы, либо используйте другой подход. У меня обычно есть таймер проверки порта каждые 200 мс или около того (в зависимости от срочности). Вы также можете ответить на событие OnComm, но известно, что это событие приводит к увеличению загрузки ЦП до 100%, если проходит слишком много данных. Похоже, вы будете иметь дело с небольшим набором данных, поэтому вы должны быть в порядке с любым подходом.

...