Получение данных в Excel через интерфейс DDE с помощью модуля DDE Server
Сценарий проблемы:
Лабораторный инструмент имеет RS232 порт, через который выводятся данные каждые 10 минут. Я хотел бы использовать значения из выводимых данных в формах, формулах и моих скриптах VBA в документах Microsoft Excel.
Требования:
- Advanced Serial Data Logger (ASDL) Professional или пробная версия;
- Модуль "ASCII data parser and query" для логгера;
- Модуль "DDE server" для Advanced Serial
Data Logger.
Подразумевается что:
Вы настроили параметры связи с устройством (скорость, количество бит данных, контроль передачи и т.п.) в логгере и можете принимать данные без каких либо ошибок.
Вы можете работать в Microsoft Excel, в частности создавать и использовать формы.
Решение:
Замечание: Этот пример базируется на предыдущем примере с именем "Данные из последовательного порта и Excel. Рисование графиков в реальном времени". Этот пример будет использовать настройки парсера и пример данных их этого примера. Поэтому вы можете прочитать этот обучающий пример перед продолжением чтения этого примера.
Парсер готов и мы протестировали его в предыдущем примере. Если парсер верно настроен, то в окне DDE сервера будут отображены наши переменные и их значения (рис.1).
![Данные из COM порта, Excel и DDE. Окно DDE сервера.](/serial-data-logger/tutorials/excel-real-time-charting/data-logger-dde-server-window.png)
Рис.1. Данные из COM порта, Excel и DDE. Окно DDE сервера.
Все переменные теперь готовы для использования в Microsoft Excel. Имя переменной отображается в колонке "Имя". Вы должны знать имя DDE сервера и имя топика для того, чтобы получать данные через DDE. Эта информация представлена на следующем рисунке (рис.2 поз.1). Пожалуйста, обратите внимание, что имя сервера может отличаться на вашем компьютере.
![Данные из COM порта, Excel и DDE. Параметры сервера DDE.](/serial-data-logger/tutorials/excel-read-via-dde/data-logger-dde-server.png)
Рис.2. Данные из COM порта, Excel и DDE. Параметры сервера DDE.
Кликните на кнопке "OK" и закройте окно настройки модуля сервера DDE, а затем кликните кнопку "OK" в окне настройки конфигурации.
Поскольку мы хотим рисовать графики в реальном времени, то мы должны подготовить файл Excel перед следующим шагом. В этом примере мы создали диаграмму с тремя графиками. Каждый график базируется на данных их колонок A, B или C. Мы будет помещать значения переменных FLOW1, VOLW1 и TEMP1 в соответствующую колонку, а Excel будет автоматически обновлять нашу диаграмму. Мы будем использовать только последние 30 значений на нашей диаграмме. В этом примере мы поместили 3 ссылки на DDE переменные в ячейки D21-F21 вида: "=testcore|ddesrv!srviFLOW1" (без кавычек) (рис.3 и 4). Как вы можете видеть, имя сервера, имя топика и имя переменной указаны в этой ссылке на данные DDE.
![Данные из COM порта, Excel и DDE. Ссылки на данные DDE.](/serial-data-logger/tutorials/excel-read-via-dde/direct-excel-file-before.png)
Рис.3. Данные из COM порта, Excel и DDE. Ссылки на данные DDE.
После того, как вы создали ссылки на данные DDE в вашем документе, Microsoft Excel автоматически запустит логгер и получит данные. Если логгер уже запущен, то Microsoft Excel попробует считать данные из запущенной программы. Если логгер еще не получил и не обработал никаких данных, то Microsoft Excel отобразит информацию о неверной ссылке, но считает значения, как только данные будут получены и обработаны логгером.
Теперь мы готовы для создания кода VBA, который будет обрабатывать наши DDE данные. Этот код будет копировать значения DDE в колонки, передвигать старые значения и добавлять строки в историю значений (рис.4, 5).
![Данные из COM порта, Excel и DDE. Исходный документ Excel.](/serial-data-logger/tutorials/excel-read-via-dde/direct-excel-file-before2.png)
Рис.4. Данные из COM порта, Excel и DDE. Исходный документ Excel.
Рисунок выше содержит следующие элементы:
- Данные DDE будут помещаться здесь, и будут служить источником данных для графиков;
- График;
- История данных.
Код VBA из файла Excel
Private Sub btnClear_Click()
lbHistory.Clear
'MsgBox (CStr(Target.Row) + ":" + CStr(Target.Column))
End Sub
Public Sub Process_Value(ByVal X_Coord As Long, ByVal ValueName As String, ByVal Value As Variant)
Dim TmpValue As Variant
Dim LastIndex As Long
' if we've read and non-numeric value, then replace it by ### in the grid
If IsNumeric(Value) Then
TmpValue = Value
Else
TmpValue = "####"
End If
' search for an empty cell
LastIndex = 0
For I = 1 To 30
If Cells(I, X_Coord).Value = "" Then
LastIndex = I
Exit For
End If
Next
' if we did not find an empty cell the move old value
If LastIndex = 0 Then
LastIndex = 30
For I = 2 To 30
Cells(I - 1, X_Coord).Value = Cells(I, X_Coord).Value
Next
End If
' place new value to the cell
Cells(LastIndex, X_Coord).Value = TmpValue
' add new value to the history list
lbHistory.AddItem (ValueName + ": " + CStr(TmpValue))
End Sub
Private Sub btnClearData_Click()
For I = 1 To 30
Cells(I, 1).Value = ""
Cells(I, 2).Value = ""
Cells(I, 3).Value = ""
Next
End Sub
Private Sub btnClearHistory_Click()
lbHistory.Clear
End Sub
Private Sub Worksheet_Calculate()
On Error GoTo ErrHandler
Application.EnableEvents = False
Call Process_Value(1, "FLOW1", Cells(21, 4).Value)
Call Process_Value(2, "VOLW1", Cells(21, 5).Value)
Call Process_Value(3, "TEMP1", Cells(21, 6).Value)
Application.EnableEvents = True
ErrHandler:
Application.EnableEvents = True
End Sub
Файл Excel, который мы создали, вы можете скачать здесь и использовать в вашей работе.
Хорошо. Процедура настройки завершена и пришло время попробовать получить данные в Excel.
Подсоедините ваше устройство или включите его, если это необходимо. Попробуйте принять пакет данных от устройства. Если парсер верно настроен, то в Excel будут отображены наши DDE переменные и их значения (рис.5).
![Данные из COM порта, Excel и DDE. Результаты.](/serial-data-logger/tutorials/excel-read-via-dde/direct-excel-file-after.png)
Рис.5 Данные из COM порта, Excel и DDE. Результаты.
Рисунок выше содержит следующее:
- Последние 30 значений DDE данных;
- Последние значения переменных DDE сервера;
- История данных DDE.
Файл Excel со всеми значениями и графиками вы можете скачать здесь.
Этот метод получения данных сложен и может быть непонятен для неподготовленного пользователя, но позволяет вам обрабатывать и отображать данные как вам хочется. Позднее, вы можете сделать следующие улучшения:
- Помечать некоторые значения цветом;
- Добавлять метку даты/времени в историю и автоматически очищать историю;
- Использовать формулы и вычисления.
Сопутствующие статьи: