Модераторы: Akina
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Буфер порта RS-232 
:(
    Опции темы
wanderervb
Дата 30.4.2008, 04:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 26.3.2008

Репутация: нет
Всего: нет



Доброго времени суток!
Подскажите пожалуйста, как правильно присвоить значения буфера, переменной?
Для тестирования канала, поставил перемычку между Rx и Tx выводами порта.
Отсылаю и принимаю строку “tttttttttttttttttttt”, но дальше буфера дело не продвинулось.
При шаговой отладке программы, видно, что буфер получил строку, но при присвоении значения буфера строковой переменной, значение буфера «обнуляется», а переменная не получает значение буфера.
Подскажите, в чем проблема?


Код

Private Sub Sent_message()
    Dim Output_com As String
    Dim nComPort As Integer
    Dim sInit As String
    Dim bStop As Boolean
    Dim Instring As String
    Dim sTemp As String
    Dim Input_com As String
  
      Output_com = Text1.Text
 
  MSComm1.CommPort = 1    
  MSComm1.Settings = "9600,N,8,1"    
  MSComm1.InputLen = 0             
  MSComm1.PortOpen = True          
  MSComm1.Output = Output_com 

    nTemp = 0
    bStop = False
    While nTemp < 32000 And bStop = False
        nTemp = nTemp + 1
  
        If MSComm1.InBufferCount >= 2 Then
            Input_com = MSComm1.Input
            If InStr(Input_com, Output_com) = 0 Then bStop = True
        End If
        
    Wend
  
  Text2.Text = Input_com
  

  MSComm1.PortOpen = False


End Sub

PM MAIL   Вверх
Akina
Дата 30.4.2008, 08:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 34
Всего: 454



Ты полностью пренебрегаешь физикой работы СОМ-порта.  Одной перемычки между Rx и Tx катастрофически мало.



--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
JusTalionis
Дата 30.4.2008, 17:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 576
Регистрация: 11.7.2006

Репутация: 6
Всего: 17



Теоретически, должно быть еще две перемычки: RTS-CTS и DSR-DTR.
Тем не менее, в FAQе Cardinal выложил проект терминала на контроле ( http://forum.vingrad.ru/faq/topic-158053.html ), и он отлично работает без них.

Однако, должен заметить, что применение контрола лишает прогу переносимости: на какой-нибудь другой машине скомпилированный екзешник может не заработать. Предупреждаю, ибо сам на это нарвался, и до сих пор пока не решил проблему (но продолжаю).


Это сообщение отредактировал(а) JusTalionis - 30.4.2008, 17:57
PM MAIL   Вверх
wanderervb
Дата 30.4.2008, 19:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 26.3.2008

Репутация: нет
Всего: нет



Цитата(Akina @ 30.4.2008,  08:37)
Ты полностью пренебрегаешь физикой работы СОМ-порта.  Одной перемычки между Rx и Tx катастрофически мало.

Линии DTR, RTS, CTS, DSR, DCD и RI это линии квитирования и используются в основном в модемах.
PM MAIL   Вверх
JusTalionis
Дата 1.5.2008, 16:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 576
Регистрация: 11.7.2006

Репутация: 6
Всего: 17



Ну да. И вот чтобы порт не ждал ответа- и соединяют его сам на себя: оправку запроса  на прием ответа. Так и получаются две перемычки. Но, повторяю, у меня без них работало.  Может это от конкретной модели порта зависит тоже (у меня был эмулированный: на кабеле через USB).

А почему у тебя Input_com = MSComm1.Input стоит в цикле? ИМХО, достаточно один раз присвоить - и содержимое всего буфера перекачается в переменную.

PM MAIL   Вверх
wanderervb
Дата 1.5.2008, 20:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 26.3.2008

Репутация: нет
Всего: нет



Цитата(JusTalionis @ 1.5.2008,  16:22)
Ну да. И вот чтобы порт не ждал ответа- и соединяют его сам на себя: оправку запроса  на прием ответа. Так и получаются две перемычки. Но, повторяю, у меня без них работало.  Может это от конкретной модели порта зависит тоже (у меня был эмулированный: на кабеле через USB).

А почему у тебя Input_com = MSComm1.Input стоит в цикле? ИМХО, достаточно один раз присвоить - и содержимое всего буфера перекачается в переменную.

Это время ожидания ответа от устройства, но я пробовал и без цикла, всеравно неполучается.
В буфере MSComm1.Input видно, что ответ пришел “tttttttttttttttttttt”, но при присвоение значения буфера строковой переменной непроисходит Input_com = “”
Нет, иногда присваиваются первые один или два  элемента строки, но почему так и непонятно

PM MAIL   Вверх
JusTalionis
Дата 2.5.2008, 09:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 576
Регистрация: 11.7.2006

Репутация: 6
Всего: 17



Первые две? - наблюдал такое на очень медленной скорости передачи. Если сразу после передачи: команда отправки и сразу после нее команда приема, - не принимает НИЧЕГО.
Тогда разнес передачу и прием на две кнопки: передал - обождал две-три секунды - прием: тогда принимается целиком. А если через маленькое время (полсекунды) - то вот так вот - первые несколько символов.
А если ты используешь контрол - зачем тебе ожидание вообще? Используй событие "приход данных" - и всё автоматически получится. Ну скачай из FAQа пример терминала (дал ссылку выше), посмотри как Cardinal сделал - всё ведь у него работает прекрасно.

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "VB6"
Akina

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по VB обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • Используйте теги [code=vb][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Akina.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | VB6 | Следующая тема »


 




[ Время генерации скрипта: 0.1072 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.