Diskuze: Komunikace přes sériový port v C
V předchozím kvízu, Online test znalostí C++, jsme si ověřili nabyté zkušenosti z kurzu.


Zobrazeno 7 zpráv z 7.
K personalizaci obsahu a reklam, poskytování funkcí sociálních médií a analýze naší návštěvnosti využíváme soubory cookie. Informace o tom, jak náš web používáte, sdílíme se svými partnery pro sociální média, inzerci a analýzy. Partneři tyto údaje mohou zkombinovat s dalšími informacemi, které jste jim poskytli nebo které získali v důsledku toho, že používáte jejich služby.
Používáme nezbytné cookies pro fungování webu a s tvým souhlasem také analytické a marketingové cookies.
Zajišťují základní funkce, bezpečnost a služby, které sis vyžádal. Nelze je vypnout.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| ITnetwork | ITnetwork | Provoz webu, relace, přihlášení a uložení nastavení cookies. | PHPSESSID, auth_token, sid, itn_consent_impression, __Host-itn_consent | Relace až 1 rok |
| Google Tag Manager | Správa značek a načítání měřicích nástrojů webu. | Žádné | Neukládá se | |
| Google Fonts | Načítání typografie webu. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele | |
| Google Hosted Libraries | Načítání potřebných knihoven a stylů webu. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele | |
| Google reCAPTCHA | Ochrana formulářů a webu před zneužitím. | _GRECAPTCHA, rc::a, rc::b, rc::c, rc::f | Relace až 180 dní | |
| YouTube | Přehrávání vloženého video obsahu. | localStorage, IndexedDB; cookies after playback interaction | Relace až trvalé úložiště | |
| Vimeo | Vimeo | Přehrávání vloženého video obsahu. | __cf_bm, _cfuvid, vuid, localStorage, IndexedDB | Relace až 2 roky |
| Facebook Login | Meta | Přihlášení pomocí účtu třetí strany. | Úložiště řízené poskytovatelem | Relace až 1 rok |
| GoPay | GoPay | Zpracování uživatelem vyžádané platby. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele |
Pomáhají nám porozumět používání webu a zlepšovat ho.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| Google Analytics 4 | Měření návštěvnosti a používání webu. | _ga, _ga_* | Až 2 roky | |
| Microsoft Clarity | Microsoft | Měření návštěvnosti a používání webu. | _clck, _clsk, _cltk | Relace až 1 rok |
Slouží k měření kampaní, personalizaci reklamy a marketingové komunikaci.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| Google Ads | Měření kampaní, reklama a remarketing. | _gcl_au, _gcl_ls | Relace až 90 dní | |
| Meta Pixel | Meta | Měření kampaní, reklama a remarketing. | _fbp, _fbc, localStorage | Až 90 dní |
| Sklik | Seznam.cz | Měření kampaní, reklama a remarketing. | retargeting, sid, szn:* | Relace až trvalé úložiště |
| LinkedIn Insight | Měření kampaní, reklama a remarketing. | bcookie, li_gc, lidc, __cf_bm | Relace až 1 rok | |
| Ecomail | Ecomail.cz | Měření kampaní, reklama a remarketing. | ecmid, Úložiště řízené poskytovatelem | Dle podmínek poskytovatele |
| Atribuce kampaní ITnetwork | ITnetwork | Přiřazení návštěvy a objednávky ke kampani. | campaign_clid[*], user_session_context | Až 1 rok |
V předchozím kvízu, Online test znalostí C++, jsme si ověřili nabyté zkušenosti z kurzu.


Ahoj,
pokud nepožaduješ multiplatformnost a stačí ti, aby komunikující
program běžel na Windows, mrkni sem:
https://msdn.microsoft.com/…f802693.aspx
V zásadě se se sériovým portem pracuje jako s libovolným jiným souborem (uvážíme-li, že ti ke štěstí stačí jen zápis a čtení a na seekování si necháš zajít chuť). To znamená, že jej otevřeš (název zařízení je COMX, kde X je číslo portu. Pokud používáš k otevření fce CreateFile/OpenFile, uváděj jméno jako \\.\COMX), provádíš čtení a zápisy... a pak daný "soubor" zavřeš (na Windows přes fci CloseHandle).
Obvykle je před prvním čtením/zápisem nutné nastavit baudrate, paritu, počet stop bitů, počet datových bitů (možná ještě něco, teď zhlavy nevím). K tomu lze na Windows využít buď příslušné funkce (CommXXX), nebo poslat danému souboru (ve skutečnosti to je zařízení) příslušné IOCTL (DeviceIoControl).
Je problém zařízení na druhém konci portu, aby mělo parametry nastavené stejně jako ty (resp. je to také tvůj problém. Podle mě se nedá na dálku poznat, s jakými parametry určité zařízení komunikuje, pokud je nenatipuješ).
Děkuji za odpověď, ale moc chytrý z toho nejsem.
Já hledám nějaký návod, jak pomocí jazyka C navázat komunikaci s
externím zařízením pomocí komunikační linky RS485 a protokolem MODBUS.
Základy jazyka C mám, ale mám je získané spíše na učebnicových
příkladech, než na něčem užitečném, jako je zmiňovaná komunikace s
externími zařízeními. Tebou popisované funkce budou asi spíše z C++, nebo
C# než C. A mě jde momentálně pouze o řešení pomocí jazyka C.
Pravda je, že mnou popisované funkce v žádné normě jazyka C nenajdeš. Jesou součástí knihoven Windows API a v prostředí Windows jsou dostupné primárně z C, ale je možné je použít i v C++, C# a dalších jazycích.
Obecně se ale dá říci, že operační systém ti dané rozhraní (pro tebe to RS485) zpřístupňuje jako zařízení (soubor) s určitým názvem. Podle toho, jak s tím zařízením budeš komunikovat, tak se budou posílat data na druhý konec linky (popř. se odtamtud přijímat). Jak příslušné rozhraní nastavit a jak přes něj posílat/příjímat data, buď musíš vědět ty (popř. si to někde přečíst), nebo si najít nějakou knihovnu, která nad daným rozhraním staví abstrakci.
To RS232 (COM) je to tak, že zápisem na daném zařízení (asi by bez větších problémů šlo použít i Cčkové fwrite) se data posílají, při čtení se data přijímají (zase, asi by nebyl problém použít fread) a pak už je nutné jen nastavit parametry přenosu, na což WIndows mají speciální funkce, nebo je můžeš nastavit přímým zasláním požadavku(ů) ovladači zodpovědnému za daný sériový port (odpovídá zaslání požadavku na dané zařízení... ty speciální Windowsí funkce stejně nedělají nic jiného).
Kdybys ale chtěl komunikovattřeba přes TWI (I2C), tak, alespoň podle toho, jak vypadá GUI aplikací, které tuto komunikaci umožňují, je třeba postupovat trochu jinak (bude třeba nastavit, zda-li jsi master či slave, popř. nastavit adresu druhého zařízení atd.).
P.S.
Jelikož je rozhraní (RS232, popř. to tvoje) reprezentováno jako
zařízení/soubor, asi nebude problém, pokud trváš na čistém C, k němu
získat přístup třeba i přes fopen, ale možná existuje nějaká lepší
cesta.
Možná bude nejlepší, když napíšeš, jak bysis tu komunikaci představoval...
Mám převodník USB na RS485 pomocí kterého se připojím k určitému zařízení, například nn vypínači s komunikací po lince RS485 a protokolem Modbus. V manuálu k tomuto vypínači je popis adres, ze kterých lze číst, nebo do nich zapisovat. Pomocí různých nástrojů typu viz obrázek, které reprezentují Modbus master zařízení se pak mohu dotazovat na stav vypínače, nebo pomocí zápisu ho ovlátat atd. To již mám odzkoušené. A já chci docílit toho, abych dokázal to samé, ale bez toho programu, ten chci nahradit vlastním kódem v céčku.
Převodník USB - RS485 je v počítači reprezentován jako virtuální COM port. Komunikace probíhá jako na standartním COM portu. Nastavení toho portu je na tom tvém obrázku vlevo dole černým písmem. Vlastní komunikaci ti neporadím, je dána popisem protokolu Modbus. Jinak existují prográmky, které umí odposlouchávat komunikaci na Com portu a ukládat do souboru. Tak bys mohl pomocí toho prográmku co máš vyzkoušet všechny příkazy a vysledovat co a jak. Já jsem dělal program na ovládání světel (divadlo) přes RS485 a protokol DMX. Komunikace je ale jen jednosměrná, pouze vysílám. Pokud budeš chtít tak to někde uložím a pošlu Ti odkaz. Je to ale děláno v programovacím jazyku Petr. Jestli jsem pochopil tak se snažíš o inteligentní domácnost nebo něco podobného. Pokud netrváš na C, tak v Petrovi by to to šlo udělat taky.
Zobrazeno 7 zpráv z 7.