Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.95/20: Рейтинг темы: голосов - 20, средняя оценка - 4.95
1 / 1 / 2
Регистрация: 01.06.2011
Сообщений: 161

График

21.06.2011, 10:51. Показов 4463. Ответов 45
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день ув. форумчане , собственно есть график , есть ком порт который принимает данные и выводит на график. Мне пришел 1 байт к примеру "1" записываем его как temp , потом пришло "2" записываем как temp2 , после того как мне пришёл 2 байт , он должен считать по формуле
"Z = (256 х temp2) + temp1"
После этого выводить на график то что мы получили в Z.
Подскажите как реализовать , на данный момент реализовано только получение пакетов , и вывод пакетов на график.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
21.06.2011, 10:51
Ответы с готовыми решениями:

Построить график функции y=x^2. График строится из отрезков и алгоритма Брезенхема
Построить график функции y=x^2. График строится с помощью отрезков. Для построения отрезков использовать алгоритм Брезенхема.

График
Добрый день ув. Форумчане , вот такой вопрос: Как мне построить график , который будет строится от принятых пакетов , т.е. от байтов от...

График
Помогите с задачей, я ввожу в один text.box координату Х а во второй text.box координату У. и нужно чтоб провелась прямая по графику с...

45
1 / 1 / 2
Регистрация: 01.06.2011
Сообщений: 161
22.06.2011, 14:37  [ТС]
Студворк — интернет-сервис помощи студентам
Этот вариант не работает , я уже пробовал , там тоже самое Temp[0] и Temp[1] принимают одинаковые значения
0
 Аватар для XAHOK
273 / 266 / 20
Регистрация: 27.02.2009
Сообщений: 694
Записей в блоге: 7
22.06.2011, 14:46
После чтения размер буфера ком порта уменьшается? Входящие данные изменяются или постоянные? Возможно после считывания из буфера он не очищается. Через C# с комом просто не работал, но VISA ком очищает после считывания.
0
1 / 1 / 2
Регистрация: 01.06.2011
Сообщений: 161
22.06.2011, 14:53  [ТС]
Temp[0]и Temp[1] принимают значения 0 , и так постоянно , вот лог (маленький отрывок)
C#
1
148 148  0 0  0 0  0 0  0 0  0 0  0 0  76 76  0 0  0 0  0 0  0 0  0 0  0 0  0 0  0 0  0 0  0 0  0 0  0 0  0 0  0 0  0 0  0 0  0 0  0 0  0 0  0 0  0 0  0 0  87 87
а вот с помощью чего я это вывол
C#
1
Log2(LogMsgType.Incoming, Temp[0]  + " " + Temp[0] + "  ");
Добавлено через 2 минуты
а нет прошу прощения , это у меня ошибка была , в выводе лога , я там 2 раза Temp[0] вписал , но изменив на Temp[1] я всё равно получаю одни нули.
C#
1
70 0  0 0  0 0  0 0  0 0  0 0  0 0  42 0  0 0  0 0  0 0  0 0  0 0  0 0  0 0  0 0  0 0  0 0  0 0  0 0  0 0  0 0  0 0  0 0  0 0  0 0  0 0  0 0  0 0  61 0  0 0  0 0  0 0  0 0  0 0  0 0  0 0  0 0  0 0  0 0  0 0  0 0  0 0  0 0  0 0  0 0  0 0  0 0  0 0  0 0  0 0  0 0  0 0  0 0  0 0  0 0  0 0  0 0  0 0  0 0  0 0  0 0  0 0  0 0  0 0  0 0  0 0  0 0  0 0  0 0  0 0  0 0  0 0  0 0  0 0  0 0  0 0  0 0  0 0  0 0  0 0  0 0  0 0  0 0
0
 Аватар для XAHOK
273 / 266 / 20
Регистрация: 27.02.2009
Сообщений: 694
Записей в блоге: 7
22.06.2011, 15:04
Можешь лог буфера в файл скинуть и выложить? Желательно каждое сообщение на новой строке.
Тогда будет видно что именно приходит. Пока сказать не могу в чем проблема.

Добавлено через 2 минуты
Хотя не нужно. На ком куча нулей приходит. Это что за устройство данные шлет?
0
1 / 1 / 2
Регистрация: 01.06.2011
Сообщений: 161
22.06.2011, 15:05  [ТС]
Вот , сделал так чтобы вы разобрались , значит первые 2 числа это Temp[0] и Temp[1]
Вложения
Тип файла: txt test.txt (5.1 Кб, 10 просмотров)
0
1 / 1 / 2
Регистрация: 01.06.2011
Сообщений: 161
22.06.2011, 15:10  [ТС]
да , но устройство не должен слать нули ... он их вообще ну не как не должен слать , с устройством всё норм ибо я проверяю его через wterm , и там пакеты норм приходят без нулей.
0
 Аватар для XAHOK
273 / 266 / 20
Регистрация: 27.02.2009
Сообщений: 694
Записей в блоге: 7
22.06.2011, 15:16
попробуй заменить
C#
1
tmp.AddRange(buffer);
на
C#
1
tmp.AddRange(buffer.ToList().GetRange(0,Z));
Потому что в MSDN нашел следующее:
Поскольку класс SerialPort предусматривает буферизацию данных, в отличие от потока, задаваемого свойством BaseStream, между ними возможен конфликт при определении числа байтов, доступных для чтения. Свойство BytesToRead может показывать, что байты для чтения имеются, однако они могут оказаться недоступными для потока, определенного свойством BaseStream, поскольку помещены в буфер для SerialPort.
1
1 / 1 / 2
Регистрация: 01.06.2011
Сообщений: 161
22.06.2011, 15:28  [ТС]
C#
1
tmp.AddRange(buffer.ToList().GetRange(0,Z));
А вы уверены что должно стоять GetRange (0, Z) , у меня на Z орёт мол нету такой переменной , поставил вместо Z , 2 он орёт
"Offset and length were out of bounds for the array or count is greater than the number of elements from index to the end of the source collection."
0
 Аватар для XAHOK
273 / 266 / 20
Регистрация: 27.02.2009
Сообщений: 694
Записей в блоге: 7
22.06.2011, 15:46
Цитата Сообщение от gslim921 Посмотреть сообщение
C#
1
tmp.AddRange(buffer.ToList().GetRange(0,Z));
А вы уверены что должно стоять GetRange (0, Z) , у меня на Z орёт мол нету такой переменной , поставил вместо Z , 2 он орёт
"Offset and length were out of bounds for the array or count is greater than the number of elements from index to the end of the source collection."
Z = comport.Read(buffer,0,bytes). Вот эту Z я и имел ввиду.
0
1 / 1 / 2
Регистрация: 01.06.2011
Сообщений: 161
22.06.2011, 16:05  [ТС]
Спасибо большое , работает , но почему то пакеты он очччень долго принимает , и из-за этого график очень медленно строится , а мне надо в реальном времени , т.е. я вывожу пульс на график , а пакеты очень медленно принимаются , не могли бы вы подсказать что может мне помочь ?
0
 Аватар для XAHOK
273 / 266 / 20
Регистрация: 27.02.2009
Сообщений: 694
Записей в блоге: 7
22.06.2011, 16:23
попробуйте Portmon'ом или любым аналогичным сканером порта посмотреть на какие именно операции большие задержки происходят. По собственному опыту могу сказать, что на прием одного пакета с двумя сменами бита паритетности тратится порядка 40-60 мсек. Наиболее критические участки по времени это конфигурирование и открытие порта. Так же если возникают TimeOut ошибки. С физическим ком портом задержка составляет примерно до 500 мсек, а если использовать USB адаптер MOXA, то время считывания увеличивается в 1.7 раза, а задержка может составить более двух секунд. Честно говоря не зная программы сложно сказать где именно утечки возникают.
В качестве метода локализации места могу посоветовать вычислять время, необходимое на выполнение той или иной операции с портом и вести лог. Вообще странно что пульс строится нормально. А пульс строится по какому параметру?
0
1 / 1 / 2
Регистрация: 01.06.2011
Сообщений: 161
22.06.2011, 16:28  [ТС]
Мои предположения что трабла здесь
C#
1
Temp.AddRange(buffer.ToList().GetRange(0, Z));
а именно в Z , т.е он ждёт пока ком порт не прочитает все данные , а после того как он прочитал он их начинает выводить =\

Добавлено через 2 минуты
Есть дивайс , который мериет пульс , вот он отсылает пакеты ком порту , он принимает и выводит на график , это всё должно быть в режиме реального времени , пульс строится по параметру
C#
1
lst.Add((long)Result);
lst - график
C#
1
Result - Temp[1] * 256 + Temp[0]
0
 Аватар для XAHOK
273 / 266 / 20
Регистрация: 27.02.2009
Сообщений: 694
Записей в блоге: 7
22.06.2011, 16:30
Цитата Сообщение от gslim921 Посмотреть сообщение
Мои предположения что трабла здесь
Temp.AddRange(buffer.ToList().GetRange(0 , Z));
а именно в Z , т.е он ждёт пока ком порт не прочитает все данные , а после того как он прочитал он их начинает выводить =\
Точно не в этом месте, т.к. пока он данные не считает эта строка выполнятся не будет. А время таких преобразований в список, извлечение из него подсписка и добавление его в третий список занимает много времени при размерах исходного массива в несколько десятков тысяч значений. И то больше всего будет нагибать процессор. Даже копирование списков массивов размерами примерно 100 тыс х 254 занимает примерно 100 мсек на буковской корке 3ГГц.
0
1 / 1 / 2
Регистрация: 01.06.2011
Сообщений: 161
22.06.2011, 16:32  [ТС]
как не в этом месте ? построение графика идёт после того как он получает данные из ком порта , а так как у меня он тормозит с выводом пакетов , то и график тормозит
0
 Аватар для XAHOK
273 / 266 / 20
Регистрация: 27.02.2009
Сообщений: 694
Записей в блоге: 7
22.06.2011, 16:46
Цитата Сообщение от gslim921 Посмотреть сообщение
как не в этом месте ? построение графика идёт после того как он получает данные из ком порта , а так как у меня он тормозит с выводом пакетов , то и график тормозит
Это место только добавляет в список считанные данные. Так что тормозит не здесь. А вот при вызове метода Read запросто может. Чтобы тормозило в этом месте скорости ком порта не хватит. Для интереса добавьте следующие строчки кода:

C#
1
2
3
DateTime start = DateTime.Now;
Temp.AddRange(buffer.ToList().GetRange(0, Z));
double dt = (start - DateTime.Now).TotalMilliseconds;
И параметр dt выведите куда нибудь, хоть в файл.

Добавлено через 7 минут
При размере буфера 50 тыс и добавляемых 25 тыс с последующим удалением по два значения время обработки 40-50 мсек, а про буфере 10 тыс и 5 тыс добавляемых значений 2 мсек. Так что не в этом месте тормоза.
0
1 / 1 / 2
Регистрация: 01.06.2011
Сообщений: 161
22.06.2011, 16:49  [ТС]
эм , dt выдаёт 0000000000
но прикол в следующим ...
C#
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
if(bytes!=0)
                {
                    // Считываем данные из буфера ком порта
                    buffer = new byte[bytes];
 
                    int Z = comport.Read(buffer, 0, bytes);
                    DateTime start = DateTime.Now;
                    Temp.AddRange(buffer.ToList().GetRange(0, Z));
                    double dt = (start - DateTime.Now).TotalMilliseconds;
                 //Добавляем данные в конец буфера необработанных данных
                    Temp.AddRange(buffer.ToList().GetRange(0, Z));
                        // Пока в нашем буфере больше 1 байта
                        while (Temp.Count == 2)
                        {
                            //Из первых 2-х байтов вычисляем Z
                            long Result = Temp[1] * 256 + Temp[0];
                            lst.Add((long)Result);
                            if (checkBox1.Checked == true)
                            {
                                Log2(LogMsgType.Incoming, Temp[0] + " " + Temp[1] + " ");
                            }
 
                            /// Удалить обработанный пакет, т.е. первые два байта
                            Temp.RemoveRange(0, 2);
                        }
                }
видите там Temp.AddRange(buffer......
2 раза повторяется ... так вот , если удалить один из них программа будет подвесать , но если их оставить то программа не будет виснуть НО значения Temp[0] и Temp[1] будут одинаковы - дилемма однако....
0
 Аватар для XAHOK
273 / 266 / 20
Регистрация: 27.02.2009
Сообщений: 694
Записей в блоге: 7
22.06.2011, 16:56
Цитата Сообщение от gslim921 Посмотреть сообщение
эм , dt выдаёт 0000000000
но прикол в следующим ...

видите там Temp.AddRange(buffer......
2 раза повторяется ... так вот , если удалить один из них программа будет подвесать , но если их оставить то программа не будет виснуть НО значения Temp[0] и Temp[1] будут одинаковы - дилемма однако....
C#
1
while (Temp.Count == 2)
Это что? Нужно Temp.Count>1. И по моему проблема именно в этом условии. Если за 1 раз придет пакет длинной больше чем два байта, то программа туда больше никогда не зайдет.
Второй повтор удалить однозначно.
ЗЫ. Выложите пожалуйста код с реализацией цикличного считывания пожалуйста. Проблема возможно кроется где-то там. Хотя отвечу я не раньше 9 по Москве. Через 5 минут домой ухожу.
0
1 / 1 / 2
Регистрация: 01.06.2011
Сообщений: 161
22.06.2011, 17:00  [ТС]
Temp.Count > 1 - это я экспериментировал , что с ==2 что с >1 одно и то же =\

Добавлено через 2 минуты
график строится , и пакеты приходят , но дело в том что ждать долго нужно , нужно ускорить процесс ... 1 точка где то за 10-15 сек ставится... а 1 точка = 1 Result , 1 Result = Temp[0] and Temp[1]
0
 Аватар для XAHOK
273 / 266 / 20
Регистрация: 27.02.2009
Сообщений: 694
Записей в блоге: 7
22.06.2011, 17:01
Цитата Сообщение от gslim921 Посмотреть сообщение
Temp.Count > 1 - это я экспериментировал , что с ==2 что с >1 одно и то же =\
Выложите пожалуйста код всей процедуры. Домой приеду посмотрю из за чего это может быть. И протестируйте каждый участок кода на время выполнения. Таким методом вы локализуете проблемный участок быстрее чем я до дома доберусь.
0
1 / 1 / 2
Регистрация: 01.06.2011
Сообщений: 161
22.06.2011, 17:05  [ТС]
эм каким образом я проверю время выполнения всего процесса ? я уверен на 80% что проблема заключается
C#
1
2
Temp.AddRange(buffer.ToList().GetRange(0, Z)); //здесь и 
int Z = comport.Read(buffer, 0, bytes);  //здесь
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
22.06.2011, 17:05

График
Есть список. При нажатии на кнопку строится график (ось ОХ-номер элемента, ОУ-значение элемента)

График на C#
Нужно нарисовать график функции любой, координатную сетку сделал с помощью GDI+, теперь проблема нарисовать график. Как это проще сделать с...

График!
Есть список, в него задаются числовые значения. По нажатию кнопки строится график (ОХ-порядковый номер элемента, ОУ-значение элемента)...

График эллипса
Доброго времени суток. Мне нужно получить все натуральные точки, удовлетворяющим условию: x2/a2+y2/b2 =1 Проблема в том, что я не могу...

Построить график!
Можно ли стандартными средствами или другими построить график в С#? Точечный... помогите плз!!


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Как у меня протекала болезнь
zorxor 27.08.2026
Здравствуйте, друзья! Эта запись блога предназначена именно для вас - для моих дорогих друзей, которые знали меня лично. Чтобы ответить на вопрос - а что же со мной произошло на самом деле? Я учился. . .
Нашел вот забавное видео о измерениях. Лучшее что я видел на эту тему
kumehtar 26.08.2026
ILETXiw9bMQ Основная суть и тезисы по измерениям: 0D (Нулевое измерение): точка, не имеющая длины, ширины, высоты или объема. Объект не может перемещаться в 0D. 1D (Первое измерение):. . .
[EasyBuilder Pro] Памятка по разработке для панелей Weintek
ФедосеевПавел 26.08.2026
Памятка по разработке для панелей Weintek ВВЕДЕНИЕ Ранее, при реализации проектов основное внимание уделял разработке управляющей программы для контроллера, а панели оператора доставалось время. . .
Модель по догадкам
anaschu 25.08.2026
Прошло две недели. Я уже рассказывал, как разговаривал с сотрудниками у сортировки и как понял, что главная ветка — не про приёмку, а про отбор. Но тогда я думал, что понял механику. На этой неделе я. . .
Запись в регистр сведений независимо от заполненности табличной части
Maks 25.08.2026
Реализация из решения ниже выполнена на нетиповом документе с несколькими табличными частями, разработанного в КА2. Задача: Обеспечить запись документа в регистр сведений независимо от. . .
Ноутбук Альфария
kumehtar 24.08.2026
Встретился тут в сети ноутбук Альфария, примарха Альфа-Легиона. Хотя возможно, это ноутбук Омегона, разумеется. Ну как вам?
Мастера простых решений
DevAlt 23.08.2026
В сишарп стэках winforms, да и wpf существует сложная система связывания источниках данных и элементов формы(текстовые поля и метки), опирается все это на технологию событий и мета. . .
Цена ошибки
DevAlt 23.08.2026
Человек я беспокойный и потому заинтересовался OCaml, в чате форсили функторы модулей как суперфичу. Пытаясь отдуплить концепт, наткнулся на тутор с простым примером. А главный принцип обучения от. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru