Fórum témák
» Több friss téma |
Fórum » Nextion érintőképernyős HMI, UART kommunikációval
Témaindító: Lamprologus, idő: Máj 5, 2016
Témakörök:
PIC.
Nyilván meg lehet oldani a PIC oldalon is, de kiváncsi vagyok, hogy lehet-e orvosolni a HMI-ben?
Én mondjuk létrehoznék egy timer, és egy változót, a változóba átküldeném az értéket, utána indítanám a timert ( amit a lehető legkisebbre állítanák). a Timer meg kiértékeli a változó értéket és megjeleníti egy szövegmezőben.
Azt, hogy lehet megcsinálni, hogy akkor induljon a timer, amikor megérkezik az érték a változóba?
tm0.en=1
Miután átküldted az értéket. Csak halkan jegyzem meg, már rég túllehetnél a problémán ha eleve a szövegmező tartlamát módosítod arra, amit látni szeretnél. Pl.: t0.txt="365" t0.txt="4700" t0.txt="----" Nem kell se timer, se változó, se bűvészkedés.
Így oldottam meg végül, de assembly-ben meg akartam úszni annak leprogramozását, hogy a vezető nullák ne jelenjenek meg. Nem nagy ügy, megírtam azt is.
Köszi mindenkinek!
Az adatokat nem abba a változóba küldeném át, amit látni szeretnék, hanem egy másodlagosba, amit a timer lejártakor tudok kezelni, felülírni, áttölteni.
Minek az a timer. Bakman leírta a megoldást. Egy BCD átalakítás nem nagy ügy.
Igazad van! Ha nem akarok vesződni BCD átalakítással, vezető nullák kiiktatásával a PIC oldalán, akkor teljesen jó megoldás amit írtál. Átírom, nem árt ha egyszerűsödik a program... Köszi!
A 10-es számrendszerben való osztás és 0x30 hozzáadása annyira bonyolult?
Persze ha a PIC-nek korlátozott erőforrásai vannak akkor nem szóltam A hozzászólás módosítva: Jan 28, 2019
Nem bonyolult, mint írtam jelenleg így van megoldva. Igazából jó hosszú már a kód, ami feladatot tudok inkább átadok a HMI-nek, jobban átlátható marad a program. Illetve jobban meg akarom ismerni a HMI-t...
Sziasztok!
Van a Nextion HMI-ben WatchDog Timer? Elvileg kéne lennie, mivel microprocesszor alapú, de nem találok róla információt, hogyan lehete aktiválni vagy kezelni.
Hát a cortexben biztos van, de ahhoz nincs hozzáférésed, úgyhogy felejtsd el. Minek az neked? A sima timer nem elég?
Ha lenne a cortexben, akkor nem fagyna le, hanem Reset-elné önmagát.
Azért lenne szükségem rá, mert hajlamos a hálózati zararoktól lefagyni. Ilyenkor csak áramtalanítását és újbóli tápellátását követően képes újra felébredni.
Azt nem mondtam, hogy be van kapcsolva.
Nálam még nem fagyott le. Milyen környezetben használod?
Melóhelyen van állandó aktív állapotban, csak aludni megy el, ha éppen nem használjuk. Viszont egy körön van a mikróval és valószínűleg az zavarja nagy interferenciával a hálózatot, amiért ez történik.
És valahogy be lehet kapcsolni?
Milyen tápegységről megy? Onnan egyszerűbb lesz megfogni a zavart. A Nextion Editor leírásában semmilyen infó nincs WatchDog-ról.
3 darab működik belőle, amiből csak az egyik vagy le 3-4 naponta. Ugyan az a táp, program, minden. Egy egyszerű reset ezt megoldaná, azért volna jó a WDT.
Nem számít, hogy látszólag egyformák, különbségek biztos hogy vannak, ha másban nem, akkor a környezetükben. Továbbra is fenntartom, hogy egy másik/jobb tápegységgel orvosolni lehetne a problémát, lévén azt írtan, a mikróval egy körön lévő rendetlenkedik.
Sziasztok!
Szépen körvonalazódik nálam is az időjárásállomás és lakásautomatizáció. PC-n és Web-en kész szoftvert használok egy kis Node-Red-el megbolondítva, de most elkezdtem tervezni a "Beltéri központot" Egy Nextiont tervezek NodeMCU-ról meghajtva, de ezen a téren még nagyon el vagyok veszve. vegyünk egy olyan esetet hogy van két képernyőoldal mind a kettőn hőmérsékleti adatokkal. Hogy célszerűbb csinálni, hogy egyszerre ( egymás után) elküldi a Node a Nextionnak és amikor betölt a képernyő ( egyik vagy másik oldal) akkor saját memóriából tölti be a változók értékeit, vagy amikor egyik oldalról a másikra betölt akkor az uj oldalon lévő változókat kérdezi le és úgymond a Node-bol írja ki a képernyőre?
Az irányító egység, perpillanat a NodeMCU végzi el az oldalváltást. Ha azzal megvagy, küldöd a hőmérsékletadatokat.
Kb. így a legegyszerűbb.
Szerintem meg ha szépen akarod megoldani, akkor van erre sokkal elegánsabb megoldás is, amivel érdemes kihasználni azt, hogy a Nextion-on egy csomó feladatot meg lehet oldani nem terhelve a uControllert:
1. ha nem kell/nem akarsz a Nextion-on konvertálgatni, akkor a kijelzőn a hőmérsékletet megjelenítő text vagy number objektumot mind a két oldalon globálissá teszed. Legyen a két oldal neve: 'o1' és 'o2'. A hőmérsékletet megjelenítő objektum meg mondjuk text típusú és a neve 'temp' mind a két oldalon (egy oldalon belül nem, de különböző oldalakon használhatsz ugyanolyan objektum neveket). Így amikor van új hőmérsékleti adatod, akkor egyszerűen frissítheted a Nextionon, mindegy hogy melyik lap aktív. A NodeRed köv. módon frissítheti az adatokat az 1. oldalon: 'o1.temp.txt="23C" ', a 2. oldalon: 'o2.temp.txt="12C" '. Az oldalak váltását pedig a Nextion-on belül bármikor elintézheted, nem fog függeni a lapváltás a NodeRed-tól. Nem is kell elküldeni, hogy épp melyik oldal az aktív. 2.Ha pl. konvertálgatni kell a forrás adaton (pl. tizedest megjeleníteni, vagy a 'C°' stringet a Nextion-on akarod hozzáfűzni, akkor hozz létre annyi globális változót, amennyi hőmérséklet meg kell jeleníteni az összes lapon. Ehhez a globális változókhoz én azt ajánlom hozz létre egy külön lapot pl. 'v' névvel. A hőm. megjelenítéshez ugyanúgy létrehozod a két lapodat 'o1' és 'o2' névvel. A globális változók neve a 'v' lapon legyen mondjuk 'temp1' és 'temp2'. Itt is igaz, hogy amikor van új hőmérsékleti adatod, akkor egyszerűen frissítheted a Nextion-on, mindegy hogy éppen melyik lap aktív. Ebben az esetben NodeRed köv. módon frissítheti az adatokat: 'v.temp1.txt="23" ', ill. 'v.temp2.txt="12" '. A két oldalon a fenti példánál maradva a hőmérsékletet megjelenítő objektum legyen text típusú és a neve 'temp'. Amikor a Nextion-on lapot váltasz, akkor az adott lapon (o1 és o2) a Preinitialize Event-nél beírod a következőket: o1 lap esetén (pl. hozzáfűzöd az átküldött hőm. adatokhoz a 'C°'-ot): temp.txt=v.temp1.txt+"C°", o2 lap esetén pedig temp.txt=v.temp2.txt+"C°". Így nem kell figyelned és számon tartanod a NodeMCU-n, hogy melyik lap akítv a Nextion-on, ott bármikor válthatsz lapot, akár egy harmadikra is, amin meg más infót jelenítesz meg, közben pedig ha van új hőm. adatod, akkor azt a háttérbe frissíted a globális változókba, így amikor valamely hőm. oldalra váltasz, mindig a legfrissebb adatokat látod. Így a két egység teljesen állapotfüggetlen lesz egymástól. Mondjuk a függőség két lap esetében és hőm. adat megjelenítésnél még nem gond, de ha már van 40+ lapod és laponként 30-50 megjelenítendő adatod, akkor a uControlleren a program feleslegesen bonyolult és átláthatatlan lesz. Márpedig, ha egy komolyabb beltéri központot szeretnél, akkor könnyen el fogod érni ezeket a számokat. Amúgy a Nextion-ra a fentinél (string hozzáfűzés egy változóhoz) sokkal bonyolultabb dolgokat is rá lehet bízni, tehermentesítve a uControllert. A hozzászólás módosítva: Feb 2, 2019
Ez mind szép, de akkor még tedd hozzá, hogy ez csak akkor működik, ha időnként frissíti az adatokat egy timerrel, különben a változóba írt adat nem kerül át a megjelenítendő adatba csak lapváltáskor.
Üdv!
Kérdés: Ha lebegőpontos számokat szeretnék növelni csökkenteni, és kiíratni, azt hogy a legegyszerűbb megcsinálni. Vizsgálatokkal meg tudom oldani, de hátha valaki másképp gondolkodik mint én, és egy rakat "if" helyett egyszerűbb megoldása is van. Van egy kijelzendő mennyiségem. Mondjuk 0.1-esével akarom csökkenteni növelni egy-egy gombbal, és ezt kiíratni. A kérdés konkrétan az egész szám elérésekor van. +-0,9-ből kellene -+1,0-et kiíratni.
Na ezt megoldottam 14 sorban kapcsos zárójeleket nem tekintve.
Új kérdés. A negatív számokat hogy szoktátok elküldeni kijelzőről? A probléma az, hogy az UART puffert ellenőrző rutinom jelenleg keresi 3db xFF lezáró karaktert. Negatív számok esetén pedig a nextion elküld még 1-3db másik ilyen karaktert. A hozzászólás módosítva: Feb 3, 2019
Másik dolog, ha azonosítót akarok hozzáadni a 32 bites számhoz, akkor negatív szám esetén szintén eltolja a végeredményt. Bitenkénti negálás meg nincs benne.
A számok fix hosszúságúak (4 karakter), ha tudom hogy szám jött, akkor beolvasok annyi karaktert, majd utána ellenőrzöm a lezáró karaktereket.
|
Bejelentkezés
Hirdetés |