Member 12659926 Ответов: 1

Как непрерывно регистрировать данные в excel-файл со скоростью 4000 значений в секунду в vb.


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

Temp1 Temp2 С1 С2 С3.............C3999 Конвертера C4000

для бывших:
Для I = От 3 До 4002
Приложение.Функция doevents()
h4kworksheet.Ячейки (1, I) = " C " & I-2
h4kworksheet.Ячейки (2, 1) = temp1_horizontal
h4kworksheet.Ячейки (2, 2) = temp2_horizontal
h4kworksheet.Ячейки (2, I) = rf_data_horizontal

h4ksave.Значение = Я
Следующий

здесь в приведенном выше коде значение temp1_horizontal должно быть помещено в 1 coloumn,temp2_horizontal должно быть помещено в 2 coloumn, а rf_data_horizontal должно быть помещено от c1 до c4000
если temp1_horizontal=20
temp2_horizontal=30
rf_data_horizontal=2,5

значения должны быть помещены в excel следующим образом
Temp1 Temp2 С1 С2 С3.............C3999 Конвертера C4000
20 30 2.5 2.5 2.5 2.5 2.5
20 30 2.5 2.5 2.5 2.5 2.5

Что я уже пробовал:

Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click

        Application.DoEvents()
        bt_count2 = bt_count2 + 1
        If bt_count2 <= 1 Then
            h4klog.FileName = DateTime.Now.ToString("ddMMyyyy") & "_" & DateTime.Now.ToString("HHmmss") & "h4k.xls"
            If h4klog.ShowDialog() = Windows.Forms.DialogResult.OK Then
                h4klogfile_name = h4klog.FileName
                nc = 0
                nr = 2
                h4kworkbook = xlapp1.Workbooks.Add(1)
                h4kworksheet = h4kworkbook.Sheets("sheet1")
                h4kworksheet.Cells(1, 1) = "TR1"
                h4kworksheet.Cells(1, 2) = "TR2"

                file1_count = 0
                Button2.Text = "STOP"
                Button2.ForeColor = Color.Red
                enable_h4k = True
            End If
        End If
        If bt_count2 >= 2 Then
            Button2.Enabled = False
            Button2.Text = "START"
            Button2.ForeColor = Color.Green
            bt_count2 = 0
            If enable_h4k = True Then
                enable_h4k = False
                h4ksave.Visible = True
                lbh4ksave_status.Visible = True
                For I = 3 To 4002
                    Application.DoEvents()
                    h4kworksheet.Cells(1, I) = "C" & I - 2
                    h4kworksheet.Cells(2, 1) = temp1_horizontal
                    h4kworksheet.Cells(2, 2) = temp2_horizontal
                    h4kworksheet.Cells(2, I) = rf_data_horizontal

                    h4ksave.Value = I
                Next

                h4ksave.Visible = False
                For t = 1 To 10
                    lbh4ksave.Visible = True
                    delay1(1)
                    lbh4ksave.Visible = False
                    delay1(1)
                Next
                lbh4ksave_status.Visible = False
                Button2.Enabled = True
                h4kworksheet.Range("A1:EWX1").HorizontalAlignment = Microsoft.Office.Interop.Excel.Constants.xlCenter
                h4kworkbook.SaveAs(h4klogfile_name)
                h4kworkbook.Close()
                xlapp1.Quit()
            End If
            MsgBox("Done")
        End If

Patrice T

Какова скорость вашего последовательного соединения ?
Каков размер значения, которое Вы читаете ?

1 Ответов

Рейтинг:
2

CPallini

Если вам нужен статический анализ данных, то используйте свой VB программа для сбора данных с последовательного порта (хранения их в памяти). В конце такого процесса "сбора данных" создайте лист с данными и наслаждайтесь силой Excel.

Есть, конечно, и предостережения. Ваш VB приложение должно быть в состоянии идти в ногу со скоростью передачи данных по последовательному порту, и у него должно быть достаточно памяти, чтобы временно хранить нужный объем данных.


Garth J Lancaster

да - это то, что я называю проблемой несоответствия импеданса - что-то производящее быстрее, чем непосредственно связанный потребитель может справиться с этим - я почти всегда выбираю "развязку" - хранение данных в "буфере памяти" /очереди и использование второго процесса для обработки статистики и в данном случае записи в Excel. В зависимости от того, какую статистику хочет ОП, они могут быть сделаны "на лету", то есть "скользящая средняя" , стандартное отклонение и т. д.

Member 12659926

Спасибо за ответ,
можете ли вы привести какой-нибудь пример того, как это сделать