RS232 do excelu nebo do .txt

Software potřebné k práci s elektronikou

Moderátor: Moderátoři

Zpráva
Autor
Uživatelský avatar
vohrablo
Příspěvky: 24
Registrován: 24 dub 2009, 00:00

RS232 do excelu nebo do .txt

#1 Příspěvek 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.
Uživatelský avatar
Zmije
Příspěvky: 1691
Registrován: 30 čer 2005, 00:00
Bydliště: Pardubický kraj

#2 Příspěvek od Zmije »

Pro jaký operační systém to má být ?
Uživatelský avatar
vohrablo
Příspěvky: 24
Registrován: 24 dub 2009, 00:00

#3 Příspěvek od vohrablo »

Pro WinXP.
Na excelu netrvam (ale bylo by to nejpohodlnejsi).
Uživatelský avatar
zdenoeddie
Příspěvky: 2579
Registrován: 31 říj 2007, 00:00
Bydliště: uz len Presov :)
Kontaktovat uživatele:

#4 Příspěvek 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
Uživatelský avatar
Zmije
Příspěvky: 1691
Registrován: 30 čer 2005, 00:00
Bydliště: Pardubický kraj

#5 Příspěvek 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;

}
Uživatelský avatar
vohrablo
Příspěvky: 24
Registrován: 24 dub 2009, 00:00

#6 Příspěvek 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
Uživatelský avatar
Zmije
Příspěvky: 1691
Registrován: 30 čer 2005, 00:00
Bydliště: Pardubický kraj

#7 Příspěvek 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.
Uživatelský avatar
Yarda1
Příspěvky: 2748
Registrován: 11 úno 2009, 00:00

#8 Příspěvek 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.
Uživatelský avatar
brtnik
Příspěvky: 329
Registrován: 05 říj 2004, 00:00
Bydliště: Ostrava
Kontaktovat uživatele:

#9 Příspěvek od brtnik »

k některému nářadí :arrow: , 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...
Jirka
Příspěvky: 2034
Registrován: 01 črc 2005, 00:00
Bydliště: zbídačený kraj
Kontaktovat uživatele:

#10 Příspěvek 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
*****
Uživatelský avatar
vohrablo
Příspěvky: 24
Registrován: 24 dub 2009, 00:00

#11 Příspěvek 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).
hakamusai
Příspěvky: 939
Registrován: 17 dub 2007, 00:00

#12 Příspěvek 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 ?
Uživatelský avatar
vohrablo
Příspěvky: 24
Registrován: 24 dub 2009, 00:00

#13 Příspěvek 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.
hakamusai
Příspěvky: 939
Registrován: 17 dub 2007, 00:00

#14 Příspěvek 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
Uživatelský avatar
vohrablo
Příspěvky: 24
Registrován: 24 dub 2009, 00:00

#15 Příspěvek 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!!!
Odpovědět

Zpět na „Software“