Basic для PIC микроконтроллеров Пн, 21.05.2012, 14:48



Переводчик/Translator

   
Приветствую Вас Гость | RSS

Страница 1 из 11
Форум Picbasic.ru » Программирование на ПК » Программирование на Basic » VB 2010: COM порт (Проблема при приеме информации с COM порт)
VB 2010: COM порт
xxxmonejall Дата: Вт, 03.01.2012, 01:39  |                                                                                                                Сообщение # 1
Группа: Проверенные
Ранг: Продвинутый
Сообщений: 133
Репутация: 0  ±
Замечания:  ±
На сайте с 17.05.2008

Статус: Offline

Доброго времени суток.
В программирование полный ноль:)
Так что сильно не пинайте. задача состоит в том что нужно принимать данные с ком порта, и рисовать по них график.
Все вроде бы работает, с микроконтроллера данные посылаются, моя программа их принимает.Но замечен глюк от 0 до 99 график рисуется, но только переходит за 100 начинаются глюки. Прилагаю фото графика и сам исходник. Может кто что подскажет, извините если что не так Но это первая моя программа на ПК. Раньше никогда не писал. Да и еще с контролера данные идут такие как нужно смотрел через терминал.

include "MODEDEFS.BAS"
@ device pic16F84A, xt_osc, wdt_off, protect_off, pwrt_on
Define CHAR_PACING 500
DEFINE OSC 4
Trisb = %00000000
diodes var word
diodes = 0
main:

diodes = diodes + 1

serout portb.1, T9600, [#diodes,13]
pause 50
portb.3 = 1
pause 50
portb.3 = 0
pause 50

goto main


______________________________________________________________________________________________________________
Public Class TEST

Dim data_from_port As String = 0
Public Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Control.CheckForIllegalCrossThreadCalls = False


End Sub

Public Sub Chart1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Chart1.Click

End Sub

Public Sub ComboBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged

End Sub

Public Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
SerialPort1.PortName = ComboBox1.Text
SerialPort1.BaudRate = ComboBox2.Text
SerialPort1.WriteTimeout = 500
SerialPort1.ReadTimeout = 500
SerialPort1.StopBits = ComboBox3.Text
SerialPort1.DataBits = ComboBox4.Text
SerialPort1.Open()

If SerialPort1.IsOpen = True Then
Button2.Visible = True
End If
If SerialPort1.IsOpen = True Then
Button1.Visible = False
End If
End Sub

Public Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
If SerialPort1.IsOpen = True Then
SerialPort1.Close()
End If
If SerialPort1.IsOpen = False Then
Button2.Visible = False
End If
If SerialPort1.IsOpen = False Then
Button1.Visible = True
End If

End Sub

Public Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click

End Sub

Public Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged

End Sub

Public Sub SerialPort1_DataReceived(ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived

data_from_port = SerialPort1.ReadExisting()
TextBox1.Text = data_from_port
Chart1.Series("Форсунка 1").Points.AddY(data_from_port)

End Sub

Private Sub ComboBox4_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox4.SelectedIndexChanged

End Sub

Private Sub ComboBox3_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox3.SelectedIndexChanged

End Sub

Private Sub Label1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Label1.Click

End Sub

Private Sub Label4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Label4.Click

End Sub
End Class
Прикрепления: 3253849.jpg(56Kb) · WindowsApplicat.zip(136Kb) · UNTITLED.hex(1Kb) · Untitled.pbp(0Kb)
ADMIN Дата: Вт, 03.01.2012, 18:50  |                                                                                                                Сообщение # 2
Администратор
Группа: Администраторы
Ранг: МАСТЕР
Сообщений: 824
Репутация: 14  ±
Замечания:  ±
На сайте с 20.08.2007

Статус: Offline

Надо при отладке смотреть что попадает в data_from_port.
Скорей всего дело в строке:
Chart1.Series("Форсунка 1").Points.AddY(data_from_port)
Разве точка добавляется как String?
xxxmonejall Дата: Чт, 05.01.2012, 11:07  |                                                                                                                Сообщение # 3
Группа: Проверенные
Ранг: Продвинутый
Сообщений: 133
Репутация: 0  ±
Замечания:  ±
На сайте с 17.05.2008

Статус: Offline

Я это уже пробовал менять:( Ничего не вышло. Гипер терминалом с контролера все гуд. А тут на тебе:( Может с настройкой порта что-то, слышал что есть такая штука как проверка четности и бытности ну или что-то типа того. Но как с с этим работать не знаю.
ADMIN Дата: Чт, 05.01.2012, 17:51  |                                                                                                                Сообщение # 4
Администратор
Группа: Администраторы
Ранг: МАСТЕР
Сообщений: 824
Репутация: 14  ±
Замечания:  ±
На сайте с 20.08.2007

Статус: Offline

Что пробовал менять? И что не вышло? Если гипертерминалом все ОК, то причем тут четность?
Я говорю, что нужно запустить приложение пошагово и передавать в COM данные. И пошагово смотреть, что попадает в Chart после 99.
xxxmonejall Дата: Пт, 06.01.2012, 23:21  |                                                                                                                Сообщение # 5
Группа: Проверенные
Ранг: Продвинутый
Сообщений: 133
Репутация: 0  ±
Замечания:  ±
На сайте с 17.05.2008

Статус: Offline

Все:) Наконец то понял в чем проблема:
поменял DEFINE char_pacing 1000 на 100 (задержка между передачей знаков на МК)
А в программе на ПК SerialPort1.ReadTimeout = 10000
И все как-бы заработало, но замечены все же не приятные глюки. Збои начались после числа 400. Радует только то что ясна причина:)
Есть еще один вопросик: можно ли сделать так чтобы мк отправил что-то и ждал пока с ПК не придет команда что данные получены, и аж тогда отправлял следующие данные дальше, и чтоб та же история была на пк?
ADMIN Дата: Сб, 07.01.2012, 05:23  |                                                                                                                Сообщение # 6
Администратор
Группа: Администраторы
Ранг: МАСТЕР
Сообщений: 824
Репутация: 14  ±
Замечания:  ±
На сайте с 20.08.2007

Статус: Offline

Я вот не понимаю - 'вроде бы заработало, но как-бы глючит'. Насчет второго вопроса - у команды serout есть модификатор 'wait'
xxxmonejall Дата: Сб, 07.01.2012, 18:38  |                                                                                                                Сообщение # 7
Группа: Проверенные
Ранг: Продвинутый
Сообщений: 133
Репутация: 0  ±
Замечания:  ±
На сайте с 17.05.2008

Статус: Offline

Quote
Насчет второго вопроса - у команды serout есть модификатор 'wait'

Синтаксис команды serout: serout Pin, mode, [Item {, Item...}] По книге хилинского.
Так где там есть wait??? Вот в serout2 есть такая штука как FlowPin, вот это как раз то что мне нужно. Или я просто что-то не так понял?
ADMIN Дата: Сб, 07.01.2012, 19:55  |                                                                                                                Сообщение # 8
Администратор
Группа: Администраторы
Ранг: МАСТЕР
Сообщений: 824
Репутация: 14  ±
Замечания:  ±
На сайте с 20.08.2007

Статус: Offline

Извиняюсь, оговорился. Конечно, не у команды SEROUT, а у команды SERIN2. То есть, команда serin2, в которой можно указать модификатор Wait, будет ожидать указанную в модификаторе последовательность в течение определенного времени и перейдет на метку, в зависимости от результата. Насчет FlowPin не разбирался, не знаю.
ADMIN Дата: Сб, 07.01.2012, 20:18  |                                                                                                                Сообщение # 9
Администратор
Группа: Администраторы
Ранг: МАСТЕР
Сообщений: 824
Репутация: 14  ±
Замечания:  ±
На сайте с 20.08.2007

Статус: Offline

Кстати здесь есть пример с использованием этого модификатора, правда на протоне и с командой HSERIN. Думаю, смысл будет понятен
xxxmonejall Дата: Чт, 23.02.2012, 00:27  |                                                                                                                Сообщение # 10
Группа: Проверенные
Ранг: Продвинутый
Сообщений: 133
Репутация: 0  ±
Замечания:  ±
На сайте с 17.05.2008

Статус: Offline

Доброго времени суток. Есть вопрос:
С устройства на микроконтроллере по УСАРТ приходит куча разной информации в таком виде: F1 = 21321, F2 = 3434, F3 = 654645, F4 = 23423, RPM = 3434 и еще кучу всего. ловлю все это на пк и вывожу в TextBох, и там это все это вижу так-же все это можно записать в переменную и что угодно с этим делать. Как на Basice можно это все отфильтровать, как значение после F1 = записать в переменную F1, а значение после F2 = в переменную F2 и тд... Может кто что посоветует???
DAlexV Дата: Чт, 23.02.2012, 11:59  |                                                                                                                Сообщение # 11
Группа: Модераторы
Ранг: Разобрался
Сообщений: 514
Репутация: 7  ±
Замечания:  ±
На сайте с 13.05.2008

Статус: Offline

В VB6 есть функция SPLIT. В VB2010 наверное то же есть. Гонишь данные через в числовом виде через запятую например. Апосля чего запускаешь функцию SPLIT и получаешь массив с разделенными данными. Работает быстрее чем MID$
http://www.picbasic.ru/forum/9-141-1529-16-1234283755 (спасибо ALEXу, за подсказку)

a() = Split(C_Port.Data_Resive, ",")

Res_Data.Dat_A = Val(Trim(a(0))) / 10
Res_Data.Dat_B = Val(Trim(a(1))) / 10
Res_Data.Dat_C = Val(Trim(a(2))) / 10
Res_Data.PID = Val(Trim(a(3)))

пример для изучения http://www.picbasic.ru/forum/9-141-2291-16-1243695810 (VER4.rar)

Успехов wink

Будьте оригинальны - не повторяйте чужих ошибок !!!!
Пишу только на Рыбе (SwordFish). Другую пищу не предлагать, на шерсть влияет :)
xxxmonejall Дата: Сб, 25.02.2012, 03:05  |                                                                                                                Сообщение # 12
Группа: Проверенные
Ранг: Продвинутый
Сообщений: 133
Репутация: 0  ±
Замечания:  ±
На сайте с 17.05.2008

Статус: Offline

Большое спасибо.... буду разбираться:)
Форум Picbasic.ru » Программирование на ПК » Программирование на Basic » VB 2010: COM порт (Проблема при приеме информации с COM порт)
Страница 1 из 11
Поиск:

Статистика активности пользователей
Добавили больше сообщений
Добавили больше статей
Добавили больше файлов
  • DAlexV (514)
  • terrarus (484)
  • ivan_fd (467)
  • demanik (405)
  • retas (363)
  • mikhail09p (334)
  • brown (303)
  • Matrix252005 (282)
  • MasterPic (196)
  • holyuser (193)

  • DAlexV (7)
  • S_moke (5)
  • deskjet (4)
  • PB (3)
  • Andriy76 (3)
  • Uncle_Dizel (2)
  • Matrix252005 (2)
  • rybkinleo (2)
  • ivan_fd (2)
  • Broka (2)
  • MiXaS (13)
  • brown (11)
  • vladh (9)
  • demanik (9)
  • deskjet (6)
  • Aleksey (5)
  • long (3)
  • evgenb (3)
  • rybkinleo (3)
  • Nakoiher (3)
  • Форум PICBasic

    Форум разработчиков электроники. Последние сообщения

    добавить на Яндекс

    Copyright Slazonger © 2012Создать сайт бесплатно