Com порт в excel 2010


Download Article


Download Article

This tutorial explains how to establish a bidirectional real-time communication between Microsoft Excel and your RS232 COM Port devices like a Scale, Proximity reader, Barcode reader, temperature sensor, Caliper, Micrometer, Gage. This solution uses the software «Bill Redirect» with the «Excel Plugin» to easily connect your peripheral and receive and send the data. The communication between Microsoft Excel and your device is made via a direct DDE link. An Excel Macro can be called after each data received from your device to validate the data received. This solution explains how you can send a command via VBA to your device and totally control your device. No programming or additional hardware required!

  1. Image titled Read RS232 to Excel Macro VBA Data Acquisition Step 1

    1

  2. Image titled Read RS232 to Excel Macro VBA Data Acquisition Step 2

    2

    Download and install the Excel plugin. This is at http://www.billproduction.com plugin_DDE.zip. This plugin software is used to establish the communication with Microsoft Excel via DDE

  3. Advertisement

  1. Image titled Read RS232 to Excel Macro VBA Data Acquisition Step 3

    1

    Start the software: Bill Redirect. The default password to edit the configuration is: www.billproduction.com.

  2. Image titled Read RS232 to Excel Macro VBA Data Acquisition Step 4

    2

    Disable all section except the Serial Port and Plugin.

    • In section «Serial Port» set the switch to: On.
    • In section «Plugin» set the switch to: On.
  3. Advertisement

  1. Image titled Read RS232 to Excel Macro VBA Data Acquisition Step 5

    1

    Click on: Serial Port Configuration.

  2. Image titled Read RS232 to Excel Macro VBA Data Acquisition Step 6

    2

    Enter the Serial Port Number where your device is connected.

    • If the background color is green, it means that the serial port works and the port is open.

      • Select the Bauds, Parity and Databits configured in your device.
  3. Image titled Read RS232 to Excel Macro VBA Data Acquisition Step 7

    3

    Click on button: Save Configuration

    • If you use a RS-232 to USB converter to connect your device on the computer, it is important to use a converter with FTDI chipset for a good stability !
  4. Advertisement

  1. Image titled Read RS232 to Excel Macro VBA Data Acquisition Step 8

    1

    Start: Microsoft Excel
    . This solution is compatible with all Excel version and language !

  2. Image titled Read RS232 to Excel Macro VBA Data Acquisition Step 9

    2

    Create a in Excel a: new blank document.

  3. Image titled Read RS232 to Excel Macro VBA Data Acquisition Step 10

    3

    Make sure that the sheet name is: Sheet1.

  4. Image titled Read RS232 to Excel Macro VBA Data Acquisition Step 11

    4

    Save your Excel document to: C:BillProduction.CFGMyFile.xlsx.

  5. Advertisement

  1. Image titled Read RS232 to Excel Macro VBA Data Acquisition Step 12

    1

    Start the Excel Plugin
    .
    The default password to edit the configuration is: www.billproduction.com.

    • Important: The TCP Connection Status must indicate: Connect. If it is not to Connect then make sure that Bill Redirect Software is open.
    • In trial mode you must restart the software Bill Redirect after each 15 minutes to continue your test.»
  2. Image titled Read RS232 to Excel Macro VBA Data Acquisition Step 13

    2

    In the Excel Plugin click on the folder icon and select your Excel File created at step before.

    • If all is okay, the DDE Connection Status indicate: Connect.
    • At this point the communication is establish with your Device via Excel. The data received from your device is sent in Excel.
  3. Image titled Read RS232 to Excel Macro VBA Data Acquisition Step 14

    3

    Test your communication with Excel. Use the button: Test DDE. To see what your device sends or receive, use the section Debugger in Bill Redirect.

  4. Advertisement

  1. Image titled Read RS232 to Excel Macro VBA Data Acquisition Step 15

    1

    Consider example #1:’ Call an Excel Macro after each data received:

    • Simply enter your macro name in the field «Run macro:«
    • To test the call of your macro use the button at right.
  2. Image titled Read RS232 to Excel Macro VBA Data Acquisition Step 16

    2

    Consider example #2:’ Send a command to your device via VBA:

  3. Image titled Read RS232 to Excel Macro VBA Data Acquisition Step 17

    3

    To send data command from Excel to your device use this VBA Excel source code:

    • ChannelNumber = DDEInitiate(«BPEXCEL», «BPEXCEL»)
    • DDEExecute ChannelNumber, «{TX_SERIAL[Hello Word !{ASCII:13}]}»
    • DDETerminate ChannelNumber
    • Replace the command Hello Word !{ASCII:13} by the command you want.
    • Supplemental documentation.
    • Excel Plugin full manual with all explanation: http://www.billproduction.com
    • /Bill_DDE_over_Ethernet.pdf.
    • Bill Redirect Software full manual with all command:
      http://www.billproduction.com
    • /Bill_Redirect_Manual.pdf.
  4. Advertisement

Ask a Question

200 characters left

Include your email address to get a message when this question is answered.

Submit

Advertisement

Thanks for submitting a tip for review!

References

About This Article

Thanks to all authors for creating a page that has been read 31,754 times.

Is this article up to date?

Знаток

 

Регистрация: 13.07.2007

Сообщений: 652

Репутация: 117



Здравствуйте,уважаемые форумчане.
Мне необходимо передать в таблицу 255 строк(Начало конец строки, разделители и 5 параметров) из своего устройства.
Пользовался
Advanced Serial Data Logger ( платный) и настроить его непросто,тем кто не в теме. Деньги небольшие и последнее является определяющим.
Последнее меня тревожит более всего, заказчик очень своеобразен.
Куплю ему, а потом и вопли с выносом мозга.
Вопрос кто виноват понятно, что делать?
Задач у меня немеряно и советы по изучению в лучшем случае к сведению.
Работа свалилась внезапно вне расписания.
Цифру вопроса можно как-то озвучить, чтобы принять решение.


Оценка

Banned

 

Регистрация: 21.04.2012

Адрес: южнее Дуная

Сообщений: 4,318

Репутация: 416



Цитата:

Сообщение от Sergey57

…. Деньги небольшие и последнее является определяющим… заказчик очень своеобразен….Куплю ему, а потом и вопли с выносом мозга……Вопрос кто виноват понятно, что делать? Задач у меня немеряно ….чтобы принять решение.

Нуууу, раз дело такое, то отправьте Вашего мосью Клиента в Ямальскую тундру….. А если Вам задачка по душе, то займитесь ею как хобби, имхо… А если Ваш заказчик аппетитная Дамма, то озвучте ее телефон !!!!… Созвонимся, обсъдим на тощак !!!…..

ПП: что за массив данних нужно передать?…


Оценка

Приглашаем всех желающих принять участие в вебинаре, посвященном LED-драйверам. На мероприятии мы рассмотрим существующую и новую продукцию из линейки поставок Компэл для интерьерного, архитектурно-декоративного, наружного и промышленного освещения, а также специальные драйверы с повышенной выходной мощностью для освещения площадей, стадионов и теплиц. Будут представлены LED-драйверы производителей MEAN WELL, MOSO, Snappy, а также драйверы для аварийного освещения (ISSATA). Рассмотрим их особенности и преимущества; узнаем, какая новая продукция появилась у MEAN WELL за прошедший год, и чего нам ждать в будущем.

Новичок

 

Регистрация: 01.08.2012

Сообщений: 6

Репутация: 10



Отправить сообщение для xmailer с помощью Skype™

Цитата:

Сообщение от Sergey57

Пользовался
Advanced Serial Data Logger ( платный) и настроить его непросто,тем кто не в теме. Деньги небольшие и последнее является определяющим.

1. напишите как Вам нужно работать с com портом: в порт что-то валится от железки; нужно захватывать данные; нужно работать одновременно с несколькими com
2. формат того что валится: простые данные или может у Вас там modbus
—— резюме ———
3. могу написать десктопное win приложение или сервис по логированию данных от железки. Взамен мне нужны консультации по STM32, точнее по таймерам. Если у Вас есть опыт работы с STM32, давайте попробуем.


Оценка

Знаток

 

Аватар для dimmich

 

Регистрация: 12.11.2010

Адрес: Владимир

Сообщений: 229

Репутация: 101



Помню давно тоже интересовался подобной задачей. Только необходимость отпала, так и не реализовал. И помню что гугль вполне может помочь в Вашем вопросе.


Оценка

Новичок

 

Регистрация: 04.11.2008

Сообщений: 438

Репутация: 37



Самым простым путем, ИМХО, который я уже реализовывал не один раз, будет запись всех принимаемых данных в текстовом формате ( с небольшой ообработкой) в файл VB-скрипта. По окончанию приема всех данных этот файл запускается на выполнение через wscript.exe и вуа-ля, таблица готова. Примеры подобных скриптов можно без труда нарыть в Интернете или могу скинуть образец. Если надо — пишите


Оценка

Знаток

 

Регистрация: 13.07.2007

Сообщений: 652

Репутация: 117



Спасибо за исчерпывающие ответы xmailer и AkaU.
Вот опять всплыла тема, серию заказали.

В прошлый раз это всё сам точил и фрезеровал на своём ЧПУ , а в этот раз напечатаю на 3д принтере.
Так исторически сложилось , что дальше выдачи в компьютер я не лезу.
Нет времени и задач. Под STM32 нет задач. С моими задачами справляются 18 и 33 пики, если нужно ещё что-то круче, то ПЛК с панелью оператора.

Будет регулярная строка :начало строки, № по порядку(3р),№ строки (3р),
Угол 1 (4р),Угол 2 (4р),Дальность (4р), конец строки.
Виртуальный СОМ-порт.
Берегу ваше время Посему Цифру вопроса можно как-то озвучить, чтобы принять решение.


Оценка

Новичок

 

Регистрация: 01.08.2012

Сообщений: 6

Репутация: 10



Отправить сообщение для xmailer с помощью Skype™

Цитата:

Сообщение от Sergey57

Будет регулярная строка :начало строки, № по порядку(3р),№ строки (3р),
Угол 1 (4р),Угол 2 (4р),Дальность (4р), конец строки.
Виртуальный СОМ-порт.

Написал приложение по логированию данных по указанному формату из com порта в указанный excel файл. Для эмуляции поступление данных в com порт по формату написали нехитрый arduino скетч:

Код:

int npp = 1;   
int nstr = 10;
char buffer[18];

void setup() {
  Serial.begin(9600); 
}

void loop() {
   /*№ по порядку(3р),№ строки (3р), Угол 1 (4р),Угол 2 (4р),Дальность (4р)*/

   sprintf(buffer,"%3d%3d%4d%4d%4d",npp,nstr,random(0,360),random(0,360),random(0,9999));
   Serial.println(buffer);
   delay(5000); 

   if(npp > 32000){
      npp=1;
   }
   if(nstr > 32000){
      nstr=10;
   }
   nstr++;
   npp++;
}

Приложение можно скачать здесь
Настройка параметров

Журнал


Оценка

Новичок

 

Регистрация: 01.08.2012

Сообщений: 6

Репутация: 10



Отправить сообщение для xmailer с помощью Skype™

Sergey57 если приложение Вам подойдет, может правки какие, найдите пож-та для меня время.


Оценка

Знаток

 

Регистрация: 13.07.2007

Сообщений: 652

Репутация: 117



Спасибо за заботу и разъяснения.
Но вот кроме всех приколов сегодня целый день пытаюсь
подковать блоху. Занимаюсь механикой.
Разработал в содружестве с товарищами систему.
Радиоканалы и первичные датчики моя сфера ответсвенности.
Там ещё лазеры,СинхроДонесения и очень мудрённый обмен по радиоканалу. И для полного счастья пневматика.

Цитата:

Будет регулярная строка :начало строки, № по порядку(3р),№ строки (3р),
Угол 1 (4р),Угол 2 (4р),Дальность (4р), конец строки.
Виртуальный СОМ-порт.
Берегу ваше время Посему Цифру вопроса можно как-то озвучить, чтобы принять решение заранее .Сроки у меня будут очень жёсткие.
Начало работ и финансирования 20 октября.

И напоследок , чтобы прояснить ситуацию.

Нанимают киллера взорвать квартиру.
Называют город,Улицу,дом….
Он _А сколько за работу?
— Миллион баксов.
Он-Номер квартиры не нужен.


Оценка

Новичок

 

Регистрация: 01.08.2012

Сообщений: 6

Репутация: 10



Отправить сообщение для xmailer с помощью Skype™

Цитата:

Сообщение от Sergey57

Занимаюсь механикой.
Разработал в содружестве с товарищами систему.
Радиоканалы и первичные датчики моя сфера ответсвенности.
Там ещё лазеры,СинхроДонесения и очень мудрённый обмен по радиоканалу. И для полного счастья пневматика.

Данную программу я сделал быстро, поскольку работаю прикладным программистом, если нужно отдам исходники. У меня период перехода с avr на smt32, и свой живой проект. Насколько я понял — Вы профессионально занимаетесь микроэлектроникой, возможно Вы могли бы ответить на несколько конкретных вопросов и не особо важно на какой архитектуре. В данном случае — деньги меня не интересуют, нужен спец по микроэлектронике. Мой скайп gserg51 или свой скажите


Оценка

Есть желание отправлять смс из Ms Excel (в день в среднем 30 смс не рекламного характера, информация о заказе), в наличии имеется 3g модем и нашел статью

Цитата
Через GSM модем отправляю смс. В текстовом режиме все нормально, но там латынь!!!

Visual BasicВыделить код
1
2
3
comm.Output = «AT+CMGF=1» & vbCrLf
comm.Output = «AT+CMGS=» & Chr(34) & «+79502159320» & Chr(34) & vbCrLf ‘ Г*îìåð òåëåôîГ*Г* (êîìó)
comm.Output = «ALARM:» & Time & Chr(26) & vbCrLf ‘ ГІГҐГЄГ±ГІ ñîîáùåГ*ГЁГї

Хочется на русском. для этого перевожу в режим PDU:

Visual BasicВыделить код
1
2
3
comm.Output = «AT+CMGF=0» & vbCrLf
comm.Output = «AT+CMGS=31» & Chr(34) & vbCrLf
comm.Output = «07919730071111f101000b919705129523f0000812041a0420041004210­410041204270418041A» & Chr(26) & vbCrLf

Ничего не отсылается???!!! Может в коде что-то не то???
Пробовал в HyperTerminal все отсылается:
AT+CMGF=0
AT+CMGS=31
> 07919730071111f101000b919705129523f0000812041a04200410042104­10041204270418041A

В данном способе исользуется библиотека mscomm32.ocx, но в 10 офисе ее видимо уже убрали.

http://www.pencomdesign.com/support/relay_software/vba_software_example.htm

Вопрос: как можно осуществить отправку смс через Excel? Буду благодарен любой помощи
Пробовал готовые решения, а именно сервис

https://go.intistele.com/external/client/support/

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

  • Remove From My Forums
  • Question

  • Question, I have a need to send a text string «Measure» to a device on com1 baud(4800,7,E,2) and capture the response into cell A1. Then pause for 3 seconds, and repeat for a total of 10 times. Each time populating the next empty row. A1,A2,A3,A4?

    Is this possible? Thank you


    heads up

Answers

  • Hi texastwostep,

    You need to create a SerialPort object in the VBA code, then use the write method to write the string into the COM port. Try it:

    How to: Send Strings to Serial Ports in Visual Basic

    Step by step example found in this article, this may help you a lot:

    Serial Port Communication in Excel (VBA)


    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.

    Click
    HERE to participate the survey.

    • Marked as answer by

      Wednesday, April 16, 2014 12:16 PM

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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
// TestSerial.cpp : main project file.
 
#include "stdafx.h"
#include "windows.h"
#include <string>
#include <iostream>
#include <exception>
 
using namespace std;
 
using namespace System;
 
#define READ_TIMEOUT_MSEC 100
 
const DWORD READ_BUF_SIZE = 20;
 
 
BOOL WriteComPort(HANDLE hComm, char * lpBuf, DWORD dwToWrite, DWORD &dwWritten)
{
    OVERLAPPED osWrite = { 0 };
    DWORD dwRes;
    BOOL fRes = FALSE;
 
    // Create this write operation's OVERLAPPED structure's hEvent.
    osWrite.hEvent = ::CreateEvent(NULL, TRUE, FALSE, NULL);
 
    if (osWrite.hEvent == NULL) {
    
        // error creating overlapped event handle
        return FALSE;
    }
 
    // Issue write.
    if (!::WriteFile(hComm, lpBuf, dwToWrite, &dwWritten, &osWrite)) {
 
        if (::GetLastError() != ERROR_IO_PENDING) {
            
            // WriteFile failed, but isn't delayed. Report error and abort.
            fRes = FALSE;
        }
        else {
 
            // Write is pending.
            dwRes = ::WaitForSingleObject(osWrite.hEvent, INFINITE);
 
            switch (dwRes)
            {
                // OVERLAPPED structure's event has been signaled. 
                case WAIT_OBJECT_0:
 
                    if (!::GetOverlappedResult(hComm, &osWrite, &dwWritten, TRUE))
                        fRes = FALSE;
                    else
                        // Write operation completed successfully.
                        fRes = TRUE;
                    break;
 
                default:
 
                    // An error has occurred in WaitForSingleObject.
                    // This usually indicates a problem with the
                    // OVERLAPPED structure's event handle.
                    fRes = FALSE;
                    break;
                }
            }
    }
    else {
    
        // WriteFile completed immediately.
        fRes = TRUE;
    }
 
    if (osWrite.hEvent != NULL) ::CloseHandle(osWrite.hEvent);
 
    return fRes;
}
 
 
BOOL ReadComPort(HANDLE hComm, char * lpBuf, DWORD &dwRead) {
 
    BOOL fRes = FALSE;
    OVERLAPPED osReader = { 0 };
 
    // Create the overlapped event. Must be closed before exiting
    // to avoid a handle leak.
    osReader.hEvent = ::CreateEvent(NULL, TRUE, FALSE, NULL);
 
    if (osReader.hEvent == NULL) {
 
        // error creating overlapped event handle
        return FALSE;
    }
 
    // Issue read operation.
    DWORD fSuccess = ::ReadFile(hComm, lpBuf, READ_BUF_SIZE, &dwRead, &osReader);
    
    DWORD dwErr = GetLastError();
 
    if (!fSuccess) {
            
        //if (::GetLastError() != ERROR_IO_PENDING) {
        if (false) {
 
            // WriteFile failed, but isn't delayed. Report error and abort.
            fRes = FALSE;
        }
        else {
 
            DWORD dwRes = ::WaitForSingleObject(osReader.hEvent, READ_TIMEOUT_MSEC);
 
            switch (dwRes) {
 
                // Read completed.
                case WAIT_OBJECT_0:
 
                    if (!::GetOverlappedResult(hComm, &osReader, &dwRead, FALSE)) {
 
                        // Error in communications; report it.
                        throw new exception("Error in communications");
 
                    }
                    else {
 
                        // Read completed successfully.
                        fRes = TRUE;
                    }
 
                    break;
 
                case WAIT_TIMEOUT:
 
                    // Operation isn't complete yet. fWaitingOnRead flag isn't
                    // changed since I'll loop back around, and I don't want
                    // to issue another read until the first one finishes.
                    //
                    // This is a good time to do some background work.
                    fRes = FALSE;
                    break;
 
                default:
                    // Error in the WaitForSingleObject; abort.
                    // This indicates a problem with the OVERLAPPED structure's
                    // event handle.
                    fRes = FALSE;
                    break;
            }
 
        }
 
    }
 
    if (osReader.hEvent != NULL) ::CloseHandle(osReader.hEvent);
}
 
 
int main(array<System::String ^> ^args)
{
    wstring name;
    HANDLE hComm = NULL;
    char * buff = new char[21];
 
    try {
 
        name = L"COM1";
 
        hComm = ::CreateFile( name.c_str(),
            GENERIC_READ | GENERIC_WRITE,
            0,
            NULL,
            OPEN_EXISTING,
            FILE_FLAG_OVERLAPPED,
            NULL);
 
        if ( hComm == INVALID_HANDLE_VALUE ) {
            
            throw new exception("INVALID_HANDLE_VALUE");
        }
 
        DCB dcb;
        
        ::FillMemory(&dcb, sizeof(dcb), 0);
 
        DWORD fSuccess = ::GetCommState(hComm, &dcb);
        
        if (!fSuccess){
            
            throw new exception("GetCommState()");
        }
 
        dcb.DCBlength = sizeof(DCB);
        
        if (!::BuildCommDCB(L"9600,n,8,1", &dcb)) {
 
            // Couldn't build the DCB. Usually a problem
            // with the communications specification string.
            throw new exception("BuildCommDCB()");
        }
 
        fSuccess = ::SetCommState(hComm, &dcb);
        
        if (!fSuccess){
 
            throw new exception("SetCommState()");
        }
 
        // Contains various COM timeouts 
        COMMTIMEOUTS CommTimeouts;       
 
        // Timeouts in msec.
        CommTimeouts.ReadIntervalTimeout = MAXDWORD;
        CommTimeouts.ReadTotalTimeoutMultiplier = 10;
        CommTimeouts.ReadTotalTimeoutConstant = 100;
        CommTimeouts.WriteTotalTimeoutMultiplier = 0;
        CommTimeouts.WriteTotalTimeoutConstant = 0;
 
        // Set COM timeouts.
        fSuccess = ::SetCommTimeouts(hComm, &CommTimeouts);
 
        if (!fSuccess){
        
            throw new exception("SetCommTimeouts()");
        }
 
        // Посылаем команду чтения данных.
        string cmd = "AT02R";
        DWORD dwWritten;
 
        WriteComPort(hComm, (char *)cmd.c_str(), cmd.length(), dwWritten);
 
        // Принимаем ответ.       
        DWORD dwRead;
 
        ReadComPort(hComm, buff, dwRead);
        
    }
    catch ( exception &ex ) {
        
        cout << "[ERROR] " << ex.what() << endl;
    }
 
    if (hComm != NULL)  ::CloseHandle(hComm);
 
    return 0;
}

Понравилась статья? Поделить с друзьями:
  • Combined characters in word
  • Com объекты excel что это
  • Combined cells in excel
  • Com объекты excel для 1с
  • Combine word to pdf