1 / 1 / 2
Регистрация: 01.06.2011
Сообщений: 161

График

21.06.2011, 10:51. Показов 4475. Ответов 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
Ответ Создать тему
Опции темы

Новые блоги и статьи
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
Как у меня протекала болезнь
zorxor 27.08.2026
Здравствуйте, друзья! Эта запись блога предназначена именно для вас - для моих дорогих друзей, которые знали меня лично. Чтобы ответить на вопрос - а что же со мной произошло на самом деле? Я учился. . .
Нашел вот забавное видео о измерениях. Лучшее что я видел на эту тему
kumehtar 26.08.2026
ILETXiw9bMQ Основная суть и тезисы по измерениям: 0D (Нулевое измерение): точка, не имеющая длины, ширины, высоты или объема. Объект не может перемещаться в 0D. 1D (Первое измерение):. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru