RS232 do excelu nebo do .txt
Moderátor: Moderátoři
RS232 do excelu nebo do .txt
dokazal by mi nekdo poradit, jak dostat data z PICu do excelu po RS232 jinak, nez pres terminal? Nebo aspon do .txt souboru, kde si je pak excel makrem vyzvedne?
Na strane PICu muzu posilat cokoliv (ale idealni by bylo na řádku: data1, data2, data3, znak dalsiho radku).
Diky moc.
- zdenoeddie
- Příspěvky: 2579
- Registrován: 31 říj 2007, 00:00
- Bydliště: uz len Presov :)
- Kontaktovat uživatele:
Kód: Vybrat vše
#include <windows.h>
#include <stdio.h>
HANDLE m_hCom = 0;
void CloseCommunication() // ukoncuje komunikaci (asi se nemusi volat, windows to pri konci programu mozna zavrou)
{
if(m_hCom) {
CloseHandle(m_hCom);
m_hCom = 0;
}
}
unsigned char SetCommunication(const char *m_sComPort) // otevre komunikaci, parametr je jmeno portu ("Com1")
{
if(m_hCom)
CloseCommunication();
// ...
DCB m_dcb;
COMMTIMEOUTS m_CommTimeouts;
if(!(m_hCom = CreateFile(m_sComPort, GENERIC_READ | GENERIC_WRITE, 0,
NULL, OPEN_EXISTING, 0, NULL)))
return 0;
if(!SetupComm(m_hCom, 128, 128) || !GetCommState(m_hCom, &m_dcb)) {
CloseCommunication();
return 0;
}
// otevre com a nastavi i/o fronty
m_dcb.BaudRate = 9600;
m_dcb.ByteSize = 8;
m_dcb.Parity = NOPARITY;
m_dcb.StopBits = ONESTOPBIT;
m_dcb.fAbortOnError = TRUE;
if(!SetCommState(m_hCom, &m_dcb) ||
!GetCommTimeouts(m_hCom, &m_CommTimeouts)) {
CloseCommunication();
return 0;
}
// nastavi rychlost, pocet bitu, paritu a stop bit
m_CommTimeouts.ReadIntervalTimeout = 50;
m_CommTimeouts.ReadTotalTimeoutConstant = 50;
m_CommTimeouts.ReadTotalTimeoutMultiplier = 10;
m_CommTimeouts.WriteTotalTimeoutConstant = 50;
m_CommTimeouts.WriteTotalTimeoutMultiplier = 10;
if(!SetCommTimeouts(m_hCom, &m_CommTimeouts)) {
CloseCommunication();
return 0;
}
// nastavi timeouty (cas cekani na data)
return 1;
}
int Transmit(unsigned char sBuffer) // vysle jeden bajt. funkce vraci -1 pri chybe, nebo pocet zapsanych bajtu (1)
{
DWORD iBytesWritten;
if(!WriteFile(m_hCom, &sBuffer, 1, &iBytesWritten, NULL))
return -1;
return iBytesWritten;
}
int Receive(unsigned char *sBuffer) // precte jeden bajt. funkce vraci -1 pri chybe, nebo pocet prectenych bajtu (1)
{
DWORD iBytesRead;
if(!ReadFile(m_hCom, sBuffer, 1, &iBytesRead, NULL))
return -1;
return iBytesRead;
}-
Jirka
- Příspěvky: 2034
- Registrován: 01 črc 2005, 00:00
- Bydliště: zbídačený kraj
- Kontaktovat uživatele:
Nešel by ten program použít i pro tvůj účel, když ukládá to, co mu přijde na sériový port?
např. : http://teplomer.sh.cvut.cz/dokumentace/
a zkus pohledat: http://www.google.cz/search?hl=cs&q=tep ... lr=lang_cs
Nasel jsem http://dev.emcelettronica.com/serial-po ... -excel-vba , ale to taky nic nedela (i kdyz to vypadalo docela slibne).
Presto vsem diky za snahu pomoci (ale tema je to pro mne stale aktualni, dokud se to nepodari - pak se podelim o vysledek).
Konfigurace portu: 9600,8,'N',0,false,false
http://uloz.to/1699150/Project1.rar
TX47/T
TX47/T
TX47/T
TX47/T
ale to bude tim, ze jsem do PICu nedal ty znaky pro oddeleni, jak jsi psal, nemel jsem cas. Vecer to kusim jeste nejak poladit a pisnu ti.
Mohl by jsi mi napsat, v cem jsi to delal? Kdybych to potreboval upravit, nerad bych otravoval. Preci jen bude lepsi, kdyz se to naucim, bude to + pro mne, urcite se to hodi. A funkcni priklad je to nejlepsi na zkoumani.
Diky moc!!!