purebasic.info

PureBasic forum
Текущее время: Сб июн 23, 2018 9:05 am

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 70 ]  На страницу Пред.  1, 2, 3, 4, 5  След.
Автор Сообщение
 Заголовок сообщения: Re: Работа с байтами UART
СообщениеДобавлено: Вт июн 27, 2017 7:26 pm 
Не в сети
студент

Зарегистрирован: Вт июн 27, 2017 7:13 pm
Сообщений: 5
Благодарил (а): 4 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
ДОбрый день уважаемые . ковыряюсь который день но никак ума не дам . Есть пакет от круизконтроля 24 байта Формат для UART.
Бинарный:
//***** Вывод на UART *****
// Формат буфера 24 байт + 1 байт контрольной суммы
//1 байт – адрес 192 ($C0)
//3 байта – скорость текущая (3 цифры) /скорость 120 км/ч байты: 1,2,0/
//3 байта – скорость стабилизации (3 цифры)
//3 байта – скорость пользователя/скорость стабилизации (3 цифры)
//1 байт – текущая таблица (1-2-3)
//1 байт – не активирован/активирован/режим настройки (0/1/2)
//1 байт – значения "бездействие – ускорение - торможение" (0-1-2)
//1 байт - флаг состояния:
// 0 - Всё OK
// 1 - Power-on Reset Flag
// 2 - External Reset Flag
// 3 - Brown-out Reset Flag
// 4 - Watchdog Reset Flag
// 5 - JTAG Reset Flag
// 6 - Предельное время работы привода
// 7 - Выход за пределы разрешенного диапазона скоростей
//1 байт - флаг состояния датчиков:
// 0 бит - "1" фазовая аппроксимация (1-включена 0-выключена)
// 1 бит - "2" состояние педали тормоза (1-нажата 0-не нажата)
// 2 бит - "4" состояние дополнительного стоп-сигнала (1-включен 0-выключен)
// 3 бит - "8" состояние педали сцепления (1-нажата 0-не нажата) - Зарезервировано!
// 4 бит - "16" флаг скорости пользователя (1-активирована 0-не активирована)
// 5 бит - "32" флаг ДХО (1-активированы 0-не активированы)
//1 байт - значение пользовательской коррекции хода дросселя в процентах 50...150
//1 байт "0" - Зарезервировано!
//1 байт "0" - Зарезервировано!
//1 байт "0" - Зарезервировано!
//1 байт "0" - Зарезервировано!
//1 байт "0" - Зарезервировано!
//1 байт "0" - Зарезервировано!
//1 байт "13"
//1 байт "10"
//1 байт – контрольная сумма (складываются все значения кроме адреса и передается в виде одного байта)

как принять и разложить информацию в 22 переменные для дальнейшего их отображения в графическом виде ? С приемом одного байта разобрался .


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Работа с байтами UART
СообщениеДобавлено: Вт июн 27, 2017 11:15 pm 
Не в сети
профессор

Зарегистрирован: Пн июл 22, 2013 11:00 pm
Сообщений: 570
Благодарил (а): 2 раз.
Поблагодарили: 32 раз.
Пункты репутации: 9
Так по байтам и бери только формат переменной в которую будешь записывать и отображать из неё на экран сделай строковый. :roll:
Код:
1
2
3
4
 
Skosty${3}
Skosty$=str(peecb())+str(peecb())+str(peecb())
 



Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Работа с байтами UART
СообщениеДобавлено: Ср июн 28, 2017 9:39 am 
Не в сети
студент

Зарегистрирован: Вт июн 27, 2017 7:13 pm
Сообщений: 5
Благодарил (а): 4 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
Если честно то ничего не понял .


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Работа с байтами UART
СообщениеДобавлено: Чт июн 29, 2017 12:01 am 
Не в сети
профессор

Зарегистрирован: Пн июл 22, 2013 11:00 pm
Сообщений: 570
Благодарил (а): 2 раз.
Поблагодарили: 32 раз.
Пункты репутации: 9
У тебя к примеру когда 3 байта для скорости идёт каждый байт отдельно а не сразу в 3 зашифрована инфа.
вот пример как получить эти данные
Первый вывод стрркой
другие 2-как числовой тип
с битами уже по другому
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
 
 
Skosty$=Str(PeekB(?dannye))+Str(PeekB(?dannye+1))+Str(PeekB(?dannye+2))
scorost.i=Val(Skosty$)
 
 
Debug Skosty$
Debug scorost
Debug Val(Str(PeekB(?dannye))+Str(PeekB(?dannye+1))+Str(PeekB(?dannye+2)))
 
 
 
 
DataSection
 dannye:
!db 1,2,0
 
EndDataSection
 



Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Работа с байтами UART
СообщениеДобавлено: Чт июн 29, 2017 8:45 am 
Не в сети
студент

Зарегистрирован: Вт июн 27, 2017 7:13 pm
Сообщений: 5
Благодарил (а): 4 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
Ой ... я совсем запутался . Давайте попорядку .
1) я получаю байт из порта и проверяю начало ли это моей кодовой посылки ( 192 )

Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Global  Potok1=192
 
 
Procedure ReadCom()
Bufer.c
   
If ComId>0                                   ; Проверяем, был ли открыт порт.    
   CoutnBute=ComInputBufferCount(ComId)
   If CoutnBute>0
      ComRead(ComId,@Bufer,1)               ; Если новый байт есть, помещаем его в переменную Bufer.
      If Bufer= Potok1
        SetGadgetText(33,Str(Bufer))         ;   отображение   начала   строки  , то есть  всегда   будет  показ  192
       EndIf
    EndIf
EndIf  
EndProcedure
 


далее я должен начать прием следующих байтов несущих информацию вместо SetGadgetText(33,Str(Bufer))
будет Gosub priem

Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
Global  Potok1=192
 
 
Procedure ReadCom()
Bufer.c
   
If ComId>0                                   ; Проверяем, был ли открыт порт.    
   CoutnBute=ComInputBufferCount(ComId)
   If CoutnBute>0
      ComRead(ComId,@Bufer,1)               ; Если новый байт есть, помещаем его в переменную Bufer.
      If Bufer= Potok1
        Gosub  priem         ;  Последующий прием ...
       EndIf
    EndIf
EndIf  
EndProcedure
 
priem :
If ComId>0                                   ; Проверяем, был ли открыт порт.    
   CoutnBute=ComInputBufferCount(ComId)
   If CoutnBute>0
      ComRead(ComId,@Bufer2,1)               ; Если новый байт есть, помещаем его в переменную Bufer2.    
    EndIf
EndIf
 return



Что то не так ....белиберда получается


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Работа с байтами UART
СообщениеДобавлено: Чт июн 29, 2017 9:46 am 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11188
Благодарил (а): 4 раз.
Поблагодарили: 416 раз.
Для COM порта есть библиотека SerialPort и в MVCOM нет необходимости.

После приема 1 байта и идентификации его как начала пакета, нужно принять все остальные данные
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
Global  Potok1=192
 
 
Procedure ReadCom()
  Bufer.c
  Dim buff.a(24)
 
  If ComId>0                                   ; Проверяем, был ли открыт порт.    
    CoutnBute=ComInputBufferCount(ComId)
    If CoutnBute>0
      ComRead(ComId,@Bufer,1)               ; Если новый байт есть, помещаем его в переменную Bufer.
      If Bufer= Potok1
     
       
        Repeat
         
          If ComInputBufferCount(ComId)>=23
            ComRead(ComId,@buff(),23)               ; Если данные есть, помещаем их в массив Buff.
            Break
          EndIf
         
          Delay(10)
        ForEver
       
        ; Работа с принятыми данными.
       
      EndIf
    EndIf
  EndIf  
EndProcedure


_________________
Компьютер позволяет решать все те проблемы, которые до его изобретения не существовали. :) :)


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Работа с байтами UART
СообщениеДобавлено: Чт июн 29, 2017 12:53 pm 
Не в сети
студент

Зарегистрирован: Вт июн 27, 2017 7:13 pm
Сообщений: 5
Благодарил (а): 4 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
не могу понять как вывести массив в окно .
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
Global ComId=0 ; Объявляем переменную ComId глобальной.
Global  Potok1=192
 
; В этой процедуре осуществляется приём байта из COM порта.
Procedure InCom()
  Bufer.c
  Dim buff.a(24)
  If ComId>0                                   ; Проверяем, был ли открыт порт.    
    CoutnBute=ComInputBufferCount(ComId)
    If CoutnBute>0
      ComRead(ComId,@Bufer,1)               ; Если новый байт есть, помещаем его в переменную Bufer.
      If Bufer= Potok1
       Repeat
        If ComInputBufferCount(ComId)>=23
            ComRead(ComId,@buff(),23)               ; Если данные есть, помещаем их в массив Buff.
         Break
         EndIf
          Delay(10)
        ForEver
        ; Работа с принятыми данными.
        SetGadgetText(4,(buff)) ; и выводим на экран Так видимо неправильно
      EndIf
    EndIf
  EndIf  
EndProcedure
 
; Открываем окно.
If OpenWindow(0, 200, 200, 400, 100,"Тестер КК",#PB_Window_MinimizeGadget)
 If CreateGadgetList(WindowID(0)) ; Создаём новый список гаджетов.
  TextGadget(0,20,12,25,15,"Порт") ; Выводим в окно надпись "Порт".
  ComboBoxGadget(1,80,10,70,30,#PB_ComboBox_UpperCase) ; Создаём выпадающий список.
   ; и заполняем его названиями портов.
   ;AddGadgetItem(1, -1, "COM1")
   AddGadgetItem(1, -1, "COM2")
   ;AddGadgetItem(1, -1, "COM3")
   ;AddGadgetItem(1, -1, "COM4")
   SetGadgetState(1,0); Делаем активным нулевой пункт выпадающего списка.
   
  TextGadget(2,175,12,100,15,"") ; Здесь будет отображаться результат открытия порта.
  TextGadget(3,20,53,50,15,"Приём") ; Выводим в окно надпись "Приём".
  ;TextGadget(4,90,50,50,20,"",#PB_Text_Border) ; Здесь будет отображаться принимаемый байт в десятичном формате.
   EditorGadget(4, 90, 50, 305, 28,#PB_String_ReadOnly)
  ;TextGadget(5,20,90,50,15,"Передача") ; Выводим в окно надпись "Передача".
  ;StringGadget(6,90,87,50,20,"",#PB_String_Numeric) ; Создаём поле для ввода передаваемого байта в десятичном формате.
  ;ButtonGadget(7,170,87,70,20,"Отправить") ; Создаём кнопку.
 
  ComboBox.s=GetGadgetText(1) : CB_Temp.s=ComboBox
  Gosub SelectPort ; Открываем порт
Repeat
 
Event=WaitWindowEvent()
Gadget=EventGadget()
 
If Event=#PB_Event_Gadget ; Условие будет выполнено, если в одном из гаджетов произойдёт событие.
 Select Gadget
  ; Код после этого оператора Case будет выполняться при манипуляциях с выпадающим списком.
  Case 1
   ComboBox.s=GetGadgetText(1) ; Считываем текст из текущего пункта выпадающего списка.
   ; Код между операторами If и EndIf будет выполнен только если
   ; текст текущего пункта отличается от ранее выбранного.
    If ComboBox<>CB_Temp
     CB_Temp=ComboBox
     ; Переходим на подпрограмму, закрывающую текущий порт и открывающую выбранный.
     Gosub SelectPort
    EndIf
 EndSelect
EndIf
InCom()
 Until Event=#PB_Event_CloseWindow  
EndIf
EndIf
; Выполнение программы завершено и она закроется.
End
 
 
; Подпрограмма выбора порта
SelectPort:
; В переменную Port помещается имя порта, скорость, и др. параметры.
Port.s=ComboBox+":"+"9600,N,8,1"
; Если порт открыт, закрываем его
If ComId>0
 ComClose(ComId)
 ComId=0
EndIf
; Открываем порт
ComId=ComOpen(Port,#HandShakeModeNone,255,255)
; Выводим результат открытия порта.
If ComId>0
 SetGadgetText(2,"Порт открыт")
 SetGadgetColor(2,#PB_Gadget_FrontColor,RGB(12, 2, 202))
Else
 SetGadgetText(2,"Ошибка!")
 SetGadgetColor(2,#PB_Gadget_FrontColor,RGB(253, 4, 2))
EndIf
; Выход из подпрограммы
Return
 
 



Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Работа с байтами UART
СообщениеДобавлено: Чт июн 29, 2017 1:02 pm 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11188
Благодарил (а): 4 раз.
Поблагодарили: 416 раз.
Если нужно посмотреть что в массиве, можно воспользоваться возможностями отладчика
Код:
1
ShowMemoryViewer(@buff(), ArraySize(buff())+1)


_________________
Компьютер позволяет решать все те проблемы, которые до его изобретения не существовали. :) :)


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Работа с байтами UART
СообщениеДобавлено: Чт июн 29, 2017 1:29 pm 
Не в сети
студент

Зарегистрирован: Вт июн 27, 2017 7:13 pm
Сообщений: 5
Благодарил (а): 4 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
Пётр писал(а):
Если нужно посмотреть что в массиве, можно воспользоваться возможностями отладчика
Код:
1
ShowMemoryViewer(@buff(), ArraySize(buff())+1)



Так как я работал в основном с микроконтроллерами ( всё начиналось с Корабельников Е.А , там же и узнал про purebasic ) Тут всё по другому . Поэтому постигаю поэтапно . Сначала вывести массив на экран .
Потом уже учиться разбирать массив по частям и выполнять индикация в соответствии с полученным .


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Работа с байтами UART
СообщениеДобавлено: Чт июн 29, 2017 1:57 pm 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11188
Благодарил (а): 4 раз.
Поблагодарили: 416 раз.
Тогда нужно содержимое массива преобразовать в строковой вид, а затем вывести в окно
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
Global ComId=0 ; Объявляем переменную ComId глобальной.
Global  Potok1=192
 
; В этой процедуре осуществляется приём байта из COM порта.
Procedure InCom()
  Bufer.c
  Dim buff.a(24)
  If ComId>0                                   ; Проверяем, был ли открыт порт.    
    CoutnBute=ComInputBufferCount(ComId)
    If CoutnBute>0
      ComRead(ComId,@Bufer,1)               ; Если новый байт есть, помещаем его в переменную Bufer.
      If Bufer= Potok1
        Repeat
          If ComInputBufferCount(ComId)>=23
            ComRead(ComId,@buff(),23)               ; Если данные есть, помещаем их в массив Buff.
            Break
          EndIf
          Delay(10)
        ForEver
        ; Работа с принятыми данными.
        ;SetGadgetText(4,(buff)) ; и выводим на экран Так видимо неправильно
       
        s.s=""
       
        For i=0 To 22
          s + Str(buff(i)) +" "
        Next
       
        SetGadgetText(4, s)
       
      EndIf
    EndIf
  EndIf  
EndProcedure
 
; Открываем окно.
If OpenWindow(0, 200, 200, 400, 100,"Тестер КК",#PB_Window_MinimizeGadget)
  If CreateGadgetList(WindowID(0)) ; Создаём новый список гаджетов.
    TextGadget(0,20,12,25,15,"Порт") ; Выводим в окно надпись "Порт".
    ComboBoxGadget(1,80,10,70,30,#PB_ComboBox_UpperCase) ; Создаём выпадающий список.
                                                         ; и заполняем его названиями портов.
                                                         ;AddGadgetItem(1, -1, "COM1")
    AddGadgetItem(1, -1, "COM2")
    ;AddGadgetItem(1, -1, "COM3")
    ;AddGadgetItem(1, -1, "COM4")
    SetGadgetState(1,0); Делаем активным нулевой пункт выпадающего списка.
   
    TextGadget(2,175,12,100,15,"") ; Здесь будет отображаться результат открытия порта.
    TextGadget(3,20,53,50,15,"Приём") ; Выводим в окно надпись "Приём".
                                      ;TextGadget(4,90,50,50,20,"",#PB_Text_Border) ; Здесь будет отображаться принимаемый байт в десятичном формате.
    EditorGadget(4, 90, 50, 305, 28,#PB_String_ReadOnly)
    ;TextGadget(5,20,90,50,15,"Передача") ; Выводим в окно надпись "Передача".
    ;StringGadget(6,90,87,50,20,"",#PB_String_Numeric) ; Создаём поле для ввода передаваемого байта в десятичном формате.
    ;ButtonGadget(7,170,87,70,20,"Отправить") ; Создаём кнопку.
   
    ComboBox.s=GetGadgetText(1) : CB_Temp.s=ComboBox
    Gosub SelectPort ; Открываем порт
    Repeat
     
      Event=WaitWindowEvent()
      Gadget=EventGadget()
     
      If Event=#PB_Event_Gadget ; Условие будет выполнено, если в одном из гаджетов произойдёт событие.
        Select Gadget
            ; Код после этого оператора Case будет выполняться при манипуляциях с выпадающим списком.
          Case 1
            ComboBox.s=GetGadgetText(1) ; Считываем текст из текущего пункта выпадающего списка.
                                        ; Код между операторами If и EndIf будет выполнен только если
                                        ; текст текущего пункта отличается от ранее выбранного.
            If ComboBox<>CB_Temp
              CB_Temp=ComboBox
              ; Переходим на подпрограмму, закрывающую текущий порт и открывающую выбранный.
              Gosub SelectPort
            EndIf
        EndSelect
      EndIf
      InCom()
    Until Event=#PB_Event_CloseWindow  
  EndIf
EndIf
; Выполнение программы завершено и она закроется.
End
 
 
; Подпрограмма выбора порта
SelectPort:
; В переменную Port помещается имя порта, скорость, и др. параметры.
Port.s=ComboBox+":"+"9600,N,8,1"
; Если порт открыт, закрываем его
If ComId>0
  ComClose(ComId)
  ComId=0
EndIf
; Открываем порт
ComId=ComOpen(Port,#HandShakeModeNone,255,255)
; Выводим результат открытия порта.
If ComId>0
  SetGadgetText(2,"Порт открыт")
  SetGadgetColor(2,#PB_Gadget_FrontColor,RGB(12, 2, 202))
Else
  SetGadgetText(2,"Ошибка!")
  SetGadgetColor(2,#PB_Gadget_FrontColor,RGB(253, 4, 2))
EndIf
; Выход из подпрограммы
Return


_________________
Компьютер позволяет решать все те проблемы, которые до его изобретения не существовали. :) :)


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Работа с байтами UART
СообщениеДобавлено: Чт июн 29, 2017 11:39 pm 
Не в сети
профессор

Зарегистрирован: Пн июл 22, 2013 11:00 pm
Сообщений: 570
Благодарил (а): 2 раз.
Поблагодарили: 32 раз.
Пункты репутации: 9
Создай форму окна с текстовым полем или может не одним куда будет выводится инфа с порта.
Если хочешь отправлять что то в порт то создай к примеру кнопку отправить новые значения.
Если пакет данных известен по байтам то никаких динамических переменных ненужно выдели объём памяти и считай в неё пакет данных после чего как я приводил выше пример считывай из памяти данные в нужном количестве байт и сразу выводи их в свои текстовые окна или 1-но окно для просмотра. :roll:


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Работа с байтами UART
СообщениеДобавлено: Пт июн 30, 2017 4:46 am 
Не в сети
профессор

Зарегистрирован: Вт май 13, 2014 4:12 am
Сообщений: 624
Благодарил (а): 66 раз.
Поблагодарили: 20 раз.
Пункты репутации: 5
egorka писал(а):
не могу понять как вывести массив в окно .

есть готовые функции


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Работа с байтами UART
СообщениеДобавлено: Пт ноя 17, 2017 4:32 pm 
Не в сети
студент

Зарегистрирован: Пт ноя 17, 2017 4:20 pm
Сообщений: 8
Благодарил (а): 5 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
Здравствуйте. Вот почитал эту ветку. Решил попробовать. Не работает. Подскажите где я ошибся.
Суть та же, что и у предидущих пользователей.
Что бы было всё понятно, я хотел бы разьяснить все подробнее.
Начнем с того что приходит в компорт.
Информация идет строками.
В прошивке мк - так
Код:
1
2
3
4
5
6
 
Print 304 ;Это "идентификатор". С этого сообщения, в процедуре должны раскладываться по гатжетам значения.
Print "какие то даные в виде строки или числа"
Print "какие то даные в виде строки или числа"
Print "какие то даные в виде строки или числа"
Print "какие то даные в виде строки или числа"



И так далее, данные идут, строк более 60.

Тут я думаю все понятно. Вроде все верно, данные эти идут постоянно по кругу.

А вот как я написал процедуру, которая у меня отказывается работать.
Сразу скажу, я совсем недавно начал знакомиться с purebasic, по этому всё так страшно.
Данные которые приходят, должны распределяться в гатжеты, они прописаны. Но в них пусто...
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
 
Procedure InComStr() ; Прием строк из COM порта.
  Static InBuff.s
  Protected Bytes, Buff.a, u, n.u=0
  Static contr
 
  If IsSerialPort(#COM_Port)                            ;Если порт правильно инициализирован
    Bytes = AvailableSerialPortInput(#COM_Port)         ; В Bytes возвращается количество байт, оставшихся на входе в буфере #SerialPort.
    contr = Bytes
   EndIf
   
   
    If contr=999                                         ;Если буфер = 999
      Bytes = AvailableSerialPortInput(#COM_Port)
      For u=0 To 37                                     ;Bytes
        If ReadSerialPortData(#COM_Port, @Buff, 1)=1    ;Считывает произвольное количество данных из #SerialPort в *Buffer. В 'Result' возвращается количество считанных байт. Если входной буфер был пуст, эта функция будет блокировать выполнение программы до тех пор, пока не считает данные.
          If Buff<>#CR And Buff<>#LF                    ;Проверка начала и конца строки
            InBuff+Chr(Buff)                             ;Возвращает символ связанный с данным значением ASCII.
           
                     
          Else        
 
            SetGadgetText(n,InBuff)
            n+1
 
          EndIf
     EndIf
     Next u
EndIf
 
EndProcedure




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


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Работа с байтами UART
СообщениеДобавлено: Пт ноя 17, 2017 5:51 pm 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11188
Благодарил (а): 4 раз.
Поблагодарили: 416 раз.
Kuzmin.E писал(а):
Print "какие то даные в виде строки или числа"
Символы конца строки тоже передаются?

Kuzmin.E писал(а):
If contr=999                                         ;Если буфер = 999
Зачем нужно ждать приема 999 байт?
При открытии порта был задан буфер приема больше 999 байт?

_________________
Компьютер позволяет решать все те проблемы, которые до его изобретения не существовали. :) :)


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Работа с байтами UART
СообщениеДобавлено: Пт ноя 17, 2017 5:57 pm 
Не в сети
студент

Зарегистрирован: Пт ноя 17, 2017 4:20 pm
Сообщений: 8
Благодарил (а): 5 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
Нет, символы конца строки не передаются. Я еще не в курсе что они из себя представляют.

Зачем нужно ждать приема 999 байт? - В общем идея состояла в том, чтоб процедура при приеме этого числа, начинала раскладывать по гатжетам для отображения, остальные данные. Что то вроде стартового значения (да смешно)


При открытии порта был задан буфер приема больше 999 байт? Нет, я не знаю как это делается. Ведь только учусь. Тут не 999 байт, это просто число. В процедуре вроде все видно, я там строки прокомментировал, везде пишут что лучше это делать, особенно при обучении...


Вернуться наверх
 Профиль  
 
Показать сообщения за:  Сортировать по:  
Начать новую тему Ответить на тему  [ Сообщений: 70 ]  На страницу Пред.  1, 2, 3, 4, 5  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group (блог о phpBB)
Сборка создана CMSart Studio
Русская поддержка phpBB