purebasic.info

PureBasic forum
Текущее время: Пн дек 11, 2017 4:38 pm

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




Начать новую тему Ответить на тему  [ Сообщений: 70 ]  На страницу Пред.  1, 2, 3, 4, 5
Автор Сообщение
 Заголовок сообщения: Re: Работа с байтами UART
СообщениеДобавлено: Пт ноя 17, 2017 6:19 pm 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11069
Благодарил (а): 4 раз.
Поблагодарили: 381 раз.
Kuzmin.E писал(а):
Нет, символы конца строки не передаются.
Тогда строки будут приняты в виде
Цитата:
"какие то даные в виде строки или числакакие то даные в виде строки или числакакие то даные в виде строки или числакакие то даные в виде строки или числакакие то даные в виде строки или числакакие то даные в виде строки или числакакие то даные в виде строки или числакакие то даные в виде строки или числа"
Нужно передавать символ окончания строки.

Kuzmin.E писал(а):
Нет, я не знаю как это делается.
В функции OpenSerialPort это параметр InputBufferSize.

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


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

Зарегистрирован: Пт ноя 17, 2017 4:20 pm
Сообщений: 8
Благодарил (а): 5 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
Kuzmin.E писал(а):
Нет, я не знаю как это делается.
В функции OpenSerialPort это параметр InputBufferSize.[/quote]

Нет. Секундочку Пётр) Вы имеете в виду символ конца строки в purebasic коде или в коде микроконтроллера?)))

OpenSerialPort(#COM_Port,Port,19200,#PB_SerialPort_NoParity,8,1,#PB_SerialPort_NoHandshake,255,255)
Тут я так понимаю это 2 последних значения судя по справке, но в справке написано - 'InputBufferSize' определяет размер в байтах буфера ввода. 'OutputBufferSize' определяет размер в байтах буфера вывода.

Значит мне нужно уменьшить нужное значение так, чтоб всё приходило построчно, я правильно понял?
Если да, то думаю возникнут проблемы, ведь данные которые приходят, это и строки типа 350c "Temperature" и просто 1 и 0...

Разьясните пожалуйста, как правильно сделать...


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

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11069
Благодарил (а): 4 раз.
Поблагодарили: 381 раз.
Kuzmin.E писал(а):
меете в виду символ конца строки в purebasic коде или в коде микроконтроллера?
Передает данные микроконтроллер и про него речь.

Kuzmin.E писал(а):
но в справке написано - 'InputBufferSize' определяет размер в байтах буфера ввода.
Все правильно. В вашем коде сначала ожидается поступление 999 байт, а затем их чтение из буфера порта. А т. к. размер буфера 255 байт, то часть данных будет потеряна.

Kuzmin.E писал(а):
Значит мне нужно уменьшить нужное значение так, чтоб всё приходило построчно, я правильно понял?
Зачем вообще ждать определенного числа символов? В коде предусмотрено разделение потока данных на строки, но для этого микроконтроллер в конце строки должен отсылать символ ее окончания.

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


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

Зарегистрирован: Пт ноя 17, 2017 4:20 pm
Сообщений: 8
Благодарил (а): 5 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
Нет) Я почитал внимательно про открытие порта, нашел скудное описание на другом форуме на русском языке, по этому у меня в коде так - If OpenSerialPort(#COM_Port,Port,38400,#PB_SerialPort_NoParity,8,1,#PB_SerialPort_NoHandshake,1024,1024)

По этому не должно ничего теряться :)

Хм, а вот про разделение потока на строки не знал, то есть у меня сейчас куча строк с каким либо значением, и в каждую надо добавить какой то символ окончания строки, Пётр подскажите как правильно отправить этот загадочный символ окончания строки? Я в bascom такой функции не встречал.

Согласен с вами абсолютно, если не нужно отправлять ни каких специальных 999 я только рад буду, это для меня упрощает задачу как для человека который только начинает работу с purebasic.

А так вообще получается что я правильно код написал? Но почему же тогда ничего не принимается? :shock:


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

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11069
Благодарил (а): 4 раз.
Поблагодарили: 381 раз.
Kuzmin.E писал(а):
Я в bascom такой функции не встречал.
Она там по умолчанию.


Вложения:
COM порт.zip [5.82 KiB]
Скачиваний: 10

_________________
Компьютер позволяет решать все те проблемы, которые до его изобретения не существовали. :) :)
Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Работа с байтами UART
СообщениеДобавлено: Вс ноя 19, 2017 5:43 am 
Не в сети
студент

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

Попробовал привести данные к строчному значению и разложить в гатжеты так
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
 
Procedure InComStr() ; Прием строк из COM порта.
  Static InBuff.s
  Protected Bytes, Buff.a, i, n.i=0
 
  Bytes = AvailableSerialPortInput(#Com_Port)
  If Bytes>0
    For i=1 To Bytes
      If ReadSerialPortData(#Com_Port, @Buff, 1)=1
        If Buff<>#CR And Buff<>#LF
          InBuff+Chr(Buff)
        Else
          If InBuff<>""
            SetGadgetText(n,Str(buff)) ;PrintN(CharToOem(InBuff))
            n+1
            InBuff=""
          EndIf
        EndIf
      EndIf
    Next i
  EndIf
 
EndProcedure



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

Если заменить SetGadgetText(n,Str(buff)) на SetGadgetText(n,(InBuff)) данные идут в гатжеты. Но они постоянно меняются местами, прыгают... Что у меня не правильно не могу ни как пока понять....


Последний раз редактировалось kvitaliy Вс ноя 19, 2017 7:13 am, всего редактировалось 1 раз.
Используйте для кода специальные теги [code][/code]


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

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11069
Благодарил (а): 4 раз.
Поблагодарили: 381 раз.
Kuzmin.E писал(а):
Нужно заставить программу правильно, по очереди их раскладывать
Нужно чтобы микроконтроллер сообщал программе что и куда следует поместить.
В простейшем случае, нужно ловить пакет со строкой 304, который как я понял обозначает начало посылки и если он принят, обнулять переменную n. Её нужно объявить как static, т. е. поместить в той же строке после InBuff.
Код:
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
Procedure InComStr() ; Прием строк из COM порта.
  Static InBuff.s, n.i=0
  Protected Bytes, Buff.a, i
 
  Bytes = AvailableSerialPortInput(#Com_Port)
  If Bytes>0
    For i=1 To Bytes
      If ReadSerialPortData(#Com_Port, @Buff, 1)=1
        If Buff<>#CR And Buff<>#LF
          InBuff+Chr(Buff)
        Else
          If InBuff<>""
            If InBuff="304"
              n=0
            Else
              If IsGadget(n)
                SetGadgetText(n, InBuff)
              EndIf
              n+1
            EndIf
            InBuff=""
          EndIf
        EndIf
      EndIf
    Next i
  EndIf
 
EndProcedure


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


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

Зарегистрирован: Пт ноя 17, 2017 4:20 pm
Сообщений: 8
Благодарил (а): 5 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
Пётр спасибо вам огромное! Теперь разобрался, для меня это очень ценный урок. Теперь мне более менее ясно как строятся функции при программировании на purebasic. Лучшее изучение это практика. Дальше учиться мне будет проще! Очень вам благодарен!!! :shock: :D :D :D


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

Зарегистрирован: Пт ноя 17, 2017 4:20 pm
Сообщений: 8
Благодарил (а): 5 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
Вот еще хочу глупый вопрос задать.
Хочу прочитать данные из гатжета. Данные представляют из себя строку как в примере выше.
В справке нашел это String$ = GetGadgetText(#Gadget)
Делаю так dann.s = GetGadgetText(59)
Но судя по окну отладчика, в переменной dann ничего нет...
Кто подскажет что я не так делаю? Судя по справке пурика, вроде все верно и компилятор не ругается.....


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

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


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

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


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

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


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

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