Fórum témák
» Több friss téma |
A HMi programját írd át úgy, hogy minden gombnyomásra "A0", "A1" ... "A9", "B0", "B1", "B2" stb. adatot küldjön, semmi mást.
Az RX makrót is átírtam a mellékletben látható komoly veszély miatt. Megszakításban nem szabad a gyári vételi makrót használni, van benne késletetés.
Köszönöm, ma már nem de holnap nekiugrok és megfaragom a programot, hogy megfelelő legyen. 9 gombom van összesen, és 5 darab kijelzésem, a többit mint számítás, hmi ikonok cseréje már a PIC része lesz.
Hálás köszönet és igazán nagy elismerés, hogy a gordiuszi Kovács csomót is kibogoztad.
Mondjuk azt hogy értem a programot, de a vett adatok feldolgozása nem tiszta.
Ez mit csinál nekem az adatok vételével?
Amikor érkezik egy bájt a kijelzőtől, lefut a megszakítási makró, az érkezett bájtokat két változóban tárolja a program: hmi_b1 és hmi_b0. Kezdetben mindkét változó nulla. Jön egy bájt (pl. "A"), b0 értéke átkerül b1-be, az érkezett bájt bekerül b0-ba.
b1=0 b0=65 (az A betű ASCII kódja) Jön a következő bájt, pl. "4". b0 érétke bekerül b1-be, b0-ba bekerül az új jövevény. b1=65 b0=48 ("0" ASCII kódja) A többirányú elágazás a hmi_b1 változót vizsgálja. Ha a b1-ben 65 ("A" betű) vagy 66 ("B") vagy 67 ("C") van, akkor a b0 értékéből levon 38-at, 28-at vagy 18-at. Nézzük a "B" (66) ágat. Ha a másodikként érkezett bájtból kivonsz 28-at, ami normál esetben 48-tól 57-ig terjed ("0" - "9" ASCII kódjai), akkor a kapott eredmény két számjegyű. A számban az egyes helyiérték adja a 0-9 megfelelőjét, itt konkrétan 0-9 -ig, a tizes helyiérték pedig a betű értékét, ami a programban 1, 2 vagy 3 lehet. A hmi_int változó értéke a kapott adattól függően 10 - 39 lehet. "A0" - "A9" --> 10 - 19 "B0" - "B9" --> 20 - 29 "C0" - "C9" --> 30 - 39 A hmi_int nevű változó mutaja, milyen adat érkezett a kijelzőtől, a főprogramban már elég csak ezt az egy változót vizsgálni akkkor, amikor van rá idő. Akkor van rá idő, amikor a hőmérőszenzorral nem beszélgetsz. Ez okoz némi késést a reagálásban de szemmel nem nagyon látható a dolog.
Köszönöm a kimerítő választ.
Még két három alkalommal el kell olvasnom de volt amit már elsőre felfogtam Nézd a folyamatábrát és gondolatban küldj a rednszerbe egy bájtot (pl. "A"). Végigmész a lépéseken. Aztán küldj még egy bájtot, pl. "3", ismét végigmész a lépéseken. Az a fontos, hogy mindig a kapott karater ASCII kódjával számolj.
Feldolgoztam nagyvonalakban az infót.
Viszont egy kérdés merűl fel, több infót szeretnék adni a HMI-nek, ezt hogy érdemes megvalósítani? Gombnyomás után különböző RS232 adás makrót csináljak vagy csak a makrón belül legyen egy számlálás és a szerint több irányú elágazás?
Küldd akkor az infót, amikor kell/rendelkezésre áll. Ha gombnyomásra valaminek változnia kell a kijelzőn, akkor a gombnyomás érzékelése után azonnal. Ha a hőmérsékletre kell reagálni, pl. bekapcsolni a fűtést, akkor onnan küldd a parancsot, valamint az infót a kijelző felé, ahol rendelkezésre áll a hőmérsékleti adat.
Ha csak egy-két ikon kell, akkor én nem szoktam külön makrót csinálni neki, egyébként igen, különben teljesen átláthatatlan lesz a program. Tudsz spórólni a programmemóriával, ha a többször használt dolgokat makróba rakod, pl. a parancslezáró három 255-ös karakter biztos, hogy többször fog kelleni.
Megcsináltam de nem azt csinálja amit akarok.
Mi mellett megyek el? A hozzászólás módosítva: Szept 30, 2020
Melyik Flowcode verziót használjátok? Melyik az aktuális és jól használható?
Az 5 öt használjuk ,de már kijött a 6- és a 8 is ...
Melyik része nem csinálja azt, amit akarsz? Egy-két kis hibától eltekintve jónak tűnik a program.
A Main makróban a hmi_int változó vizsgálatánál a többirányú elágazásokban kétszer szerepel a 20. C0 - C9 érkezésekor a hmi_int változó tartalma 30 - 39 lesz. Bekapcsoláskor a 'kivant' változó értéke 0. Ha ilyenkor egyel csökkented, a változó értéke 255 lesz. A hőmérséklet kiolvasása le van tiltva a t=1 időpontban.
Szia
Igazából semmit nem csinál a gombnyomásokra, kéne értéket visszaküldeni a t7-nek de csak a t6-nak küldi a hőmérsékletet, most persze a 255-öt. Az RX makoróban nem kell a többirányúnál a számokat is megadni? A hozzászólás módosítva: Okt 1, 2020
Ha nem titkos, töltsd fel a kijelző programját is, úgy tudom élőben tesztelni.
Nem titkos, nem fogok erről cikket készíteni pedig lehet érdemes lenne.
Köszi. Azért kérdem, mert láttam a 6-ot és a 7-et. Na azokhoz már pilóta vizsga kell.
Megvan a nyavajás. Az a baj, hogy a kijelző bekapcsoláskor 10-11 bájnyi adatot kilök magából és ha a kontroller (vagy ami a kijelzőhöz van csatlakoztatva) nincs erre felkészítve, dobhat egy hátast, mint a mellékelt ábra is mutatja. Igazábol az UART modul vevő része fut hibára, mivel a program elején még nincs kezelve a vétel. Amíg a hiba nincs elhárítva, nem hajlandó működni. Workaround:
Flowcode-ban RSR232 modul -> Egyedi kód -> Initialization. Itt egy sort kell beiktatni:
Köszönöm
Hamarosan tesztelem és jelentkezem a fejleményekkel. Mire jó a frissités ha csak elcseszik a dolgokat? Mindegy is, de lassan jobb ha megtanulom a C nyelvet forgatni mert a flowcode már csak egy kezelő felület lesz.
nem javult a helyzet, viszont a HMI A-nak 0x41 et küld, míg a 3-as 0x33.
Nekem így nem jün ki a matek, hogy az A 68.
0x41 = 65
Az egyenlőség bal oldalán hexadecimális, a jobb oldalon decimális szám áll. A PIC program decimális számokkal operál. A hozzászólás módosítva: Okt 1, 2020
Akkor valami más lesz.
Próbálom rábírni, hogy küldjön más adatot is de nem tesz semmit a PIC csak a hőmérsékeltet küldi.
A program kezdődjön így:
Módosítottam, 10k elhelyezve, de semmi változás.
Most van baj, mert nálam működik. A 70, 80, 90 és 100 feliratú gombok akkor küldenek adatot, ha előtte a középső gombbal bekapcsolod a fűtést(?). Nekem a "Szauna" alatti mezőbe a mérés hiánya miatt 512-t ír a kontroller programja. Ha neked nem ennyit, ellenőzid, milyen senességgel küld adatot a HMI. A PIC programban 9600 Baud van beállítva.
Találkoztam már olyannal, hogy a HMI alapból nem 9600-ra volt állítva, hanem valami másra. Ezt a lehetséges hibát ki lehet küszöbölni, ha a kijelzőt eleve ennyire állítod be már induláskor.
Az az érdekes, hogy nekem is 512-őt mutat, de most rátettem a hőmérőt és megfelelően mutatja is.
Lehet visszalépek 3-at és megpróbálom a HMI adatokat direktbe figyelni mint az alap programban. A HMI jól küldi azu adatokat, és a PIC is. Az analizátor szerint mind a két vonal 9600. A hozzászólás módosítva: Okt 1, 2020
Tényleg érdemes lenne, mert én végig követtem a beszélgetést, meg a programokat is átnéztem. Én sokat tanultam belőle... a kmmunikácó ezen a platformon eddig soha nem ment, meg sme próbáltam, de már van egy alap, ahol elindulhatok kommunikáció téren!
Ha már itt vagyok feltenném én is a kérdésem!
Egy motorvezérlőről lenne szó, gyújtást nem változtatja, csak az injektor befecskendezési idejét, viszont elég sűrűn kihagy.. a leválasztás tökéletes, ha fordulatszámmérőt írok rá, akkor hibátlan. Esetleg valami erre lenne valami ötlet? A hiba ott van, hogy lassabban fut a program, mint ahogy jön a jel..
Látatlanban nem nagyon tudok mit mondani erre. Talán túl sok időt tölt a program a megszakításban, nem megszakításban van kezelve a start jel, nem jól van kezelve stb.
Szia
Még mindig a baj áll fen. Esetleg a te HEX file-dat át tudnád küldeni! Lehet hogy én vagy a flowcode csesz el valamit.
Parancsolj, mellékletek. ...K50 helyett én ...K22-t hazsnáltam, az van kéznél. Az USB modul kivételével egyezik a két kontroller. A program elején lévő
A program nem tér el semmiben a két kontroller között, csak a PIC típusa van átkapcsolva és konfigurálva. A HMI programján annyit változtattam, hogy alapból 45 °C-t írtam egy txt mezőbe és az elején beállítottam a 9600-as UART sebességet. |
Bejelentkezés
Hirdetés |