Stránka 1 z 2
RS232 do excelu nebo do .txt
Napsal: 25 dub 2009, 22:17
od vohrablo
Ahoj,
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.
Napsal: 25 dub 2009, 23:52
od Zmije
Pro jaký operační systém to má být ?
Napsal: 26 dub 2009, 10:15
od vohrablo
Pro WinXP.
Na excelu netrvam (ale bylo by to nejpohodlnejsi).
Napsal: 26 dub 2009, 10:31
od zdenoeddie
Ak mozem poradit, pouzij textovy subor .csv , je otvoritelny aj excelom a udaje ktore don zapises ak sa dobre pamatam oddelene ciarkou a medzerou nacita ako tabulku. Novy riadok je klasika \r \n
Napsal: 26 dub 2009, 11:50
od Zmije
Ve win na to existují api funkce, v C by se dalo to ukládání do txt napsat odhadem na nějakých 50 řádků, já jsem komunikaci přes RS232 programoval podle tohoto příkladu:
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;
}
Napsal: 26 dub 2009, 16:31
od vohrablo
Diky za to, nicmene v ccku vubec neumim. Mozna jen trochu VBA zvladnu.
V cem bych to mel zkompilovat, aby to neco delalo?
Diky
Napsal: 26 dub 2009, 16:43
od Zmije
Já jsem tohle dělal v CodeBlocks, kompiloval jsem to pomocí gcc, ale není to kompletní funkční příklad, je to jen ukázka jednoduchých funkcí na nastavení, čtení a zápis RS232, doporučil bych udělat si z odesílaných dat jednoduchý rámec zakončený třeba 8bit cyklickým součtem, protože se při přenosu čas od času může vyskytnout chyba. Jinak základy C není těžké si osvojit a při programování aplikací s jednočipy, se ti navíc bude hodit.
Napsal: 27 dub 2009, 08:28
od Yarda1
Pokud ten PIC jen vysílá a nechce komunikovat, na to jsem si kdysi napsal prográmek v PWBasicu (hyperterminál snad některé znaky nepřepíše ale interpretuje je jako řídicí např. že má ukončit čtení sériového portu). Jinak se prý na to používají nějaké zachytávací programy - psalo se o tom snad na hw.cz, osobně jsem to nezkoušel.
Napsal: 27 dub 2009, 10:37
od brtnik
k některému nářadí

, které umí komunikovat po RS232 mám prográmek, který vypadá jako malé okénko s logem a možností nastavení parametrů COM portu. Po spuštění se uklidí někam bokem a vše, co přijde po RS232 dává na místo kurzoru ve Windows (takže třeba sype data do Excelu, vypisuje protokol do Wordu atd, vše jednosměrně a včetně řídicích znaků). Dělali jsme něco podobného i v Lab- Wiew a taky to šlapalo. Napiš SZ...
Napsal: 28 dub 2009, 01:08
od Jirka
Napadlo mě, že se staví teploměry pro PC s připojení přes RS232, který používají logovací program pro ukládání teplot do txt souborů.
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
Napsal: 28 dub 2009, 20:08
od vohrablo
Zkousel jsem vsechno mozne, bohuzel vetsina nefunkcni.
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).
Napsal: 28 dub 2009, 22:40
od hakamusai
Pokud by stačilo napsat program "na míru",mohl bych pomoct.
Pro čtení dat z PICu by bylo ideální posílat pro oddělení #13#10
Na co to má vlastně sloužit ?
Napsal: 29 dub 2009, 05:06
od vohrablo
Má to merit prubeh napeti na jednom zarizeni. Nadela to vzorky, ulozi do EEPROM a pak je po lince posle do PC ke zpracovani. Nepotrebuji oboustranou komunikaci, v PC mi staci pouze cekat na data (tzn. ze nepotrebuji ani zadne periodicke nacitani z portu, proste tam z PICu prijde balik hodnot, s nejak oddelenymi daty (Hserout cas , #napeti, CrLf)). Ikdyz, oboustranou komunikaci bych si o ty data mohl jeste rict, kdyz by bylo vse ready - ale netrvam na tom.
Napsal: 29 dub 2009, 21:01
od hakamusai
Narychlo jsem něco spíchnul (je to podobný terminalu),koukni na to a napiš co a jak bude třeba.
Konfigurace portu: 9600,8,'N',0,false,false
http://uloz.to/1699150/Project1.rar
Napsal: 30 dub 2009, 05:27
od vohrablo
Diky, data to prijima, ale vypisuje to porad
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!!!