ITEAD bringt neue erweiterte Produktreihe seiner Nextion-HMI-Panels auf den Markt Vertreter des Unternehmens stellten mir eine Kopie dieser Linie zur Verfügung, um neue Panel-Funktionen in das FLProg-Programm zu integrieren. In Version 2.2 wurde dies implementiert. In dieser Lektion werden wir die neuen Funktionen des Panels betrachten und beispielsweise einen programmierbaren Timer für fünf Kanäle erstellen.Berücksichtigen Sie zunächst die Eigenschaften des Panels. Die erweiterte Leitung verfügt über eine integrierte Echtzeituhr, 1024 Byte nichtflüchtigen Speicher und 8 digitale Ein- / Ausgänge. Jeder von ihnen kann als Eingang oder als Ausgang konfiguriert werden. Vier davon (vom 4. bis zum 7.) können als PWM-Ausgänge konfiguriert werden.
Neben der Nextion HMI Enhanced-Reihe selbst wurde auch die Erweiterungskarte veröffentlicht. Auf
dem GPIO-Panel sind Bedienelemente und Anzeigen angebracht.
Solche Möglichkeiten ermöglichen es, ein fast vollständiges Gerät basierend auf diesem Panel zu erstellen. In dieser Lektion werde ich mich auf die Programmierung des Panels selbst konzentrieren, da es zu diesem Thema nur wenige Informationen gibt, aber viele Fallstricke gibt. Ein Link zum Projekt für das Nextion Editor-Programm befindet sich am Ende des Beitrags.Der Beginn der Arbeit mit dem Nextion-Editor, sein Start, die anfängliche Auswahl der Codierung und der Art des Panels wurden in meinen vorherigen Beiträgen tyts , tyts und tyts erörtert . Deshalb werden wir nicht weiter darauf eingehen.Das Programm besteht aus drei Panel Home - Bildschirm ( das Haupt ), Einstellen den Timers ( der SetTimer ) und Zeiteinstellung ( SetCurrentTime ).Beginnen wir mit dem Hauptbildschirm.
Dieser Bildschirm zeigt die Einstellungen zum Ein- und Ausschalten, den Status jedes Kanals, die Schaltfläche zum Ändern des Status der Kanäle und die Schaltfläche zum Umschalten auf den Bildschirm zum Einstellen der aktuellen Uhrzeit an. Wenn Sie auf den Text klicken, in dem die Einstellungen des Kanals angezeigt werden, wechseln Sie zur Einstellung dieses Kanals. Darüber hinaus werden auf diesem Bildschirm vier versteckte Schaltflächen benötigt, um an die physischen Schaltflächen auf der Erweiterungskarte zu binden . .
Betrachten Sie den Code auf dem Hauptbildschirm.Ereignis Preinitialilize das Ereignis (der Bildschirm vor der Initialisierung genannt wird).cfgpio 0,1,b0
cfgpio 2,1,b8
cfgpio 3,1,b7
cfgpio 4,1,b6
cfgpio 5,1,b9
SelTim.val=1
Hier binden wir die physischen Tasten auf der Erweiterungskarte an die virtuellen Tasten auf dem Bildschirm.Weitere Informationen zum Befehl cfgpio - Einrichten der physischen Ein- und Ausgänge des Bedienfelds (nur erweiterte Bedienfelder verfügen über diesen Befehl).:
cfgpio id,state,cmp:
id: / (0-7)
state: (0-4)
cmp: ( 1, — 0).
.
cfgpio .
:
| | |
---|
0 | + 5 ( 50 ). pio0 – pio7 ( 0- 7 / | cfgpio 0,0,0 / GPIO0 , +5. : n0.val = pio0
|
1 | + 5 ( 50 ) . pio0 – pio7 ( 0- 7 / ). . 1 , . 0 . Preinitialilize Event , , . | cfgpio 2,1,b0 / GPIO2 , +5 b0. , b0 , – .
|
2 | . pio0 – pio7 ( 0- 7 / ). | cfgpio 1,2,0 / GPIO1 . : pio1=1
|
3 | . 4-7 /. 0 100. – 50. pwm4- pwm7 ( 4- 7 / ). pwmf . 1 65536. – 1000. | cfgpio 4,3,0 / GPIO4 . : pwm4=20 – 2000 . pwmf=2000
|
4 | . pio0 – pio7 ( 0- 7 / ). | cfgpio 5,4,0 / GPIO5 . : pio5=1
|
Ereignis - Touch Press Event Taste b0 - «Set Zeit»page 2
Es ist alles selbsterklärendEreignis - Touch Press Event - Tasten b1 - «Schaltzustand des ersten Kanals“repo TempB.val,0
if(TempB.val==1)
{
if(tsr1.val==1)
{
tsr1.val=2
}else
{
tsr1.val=1
}
}
Zuerst lesen wir die Kanalaktivität aus dem EEPROM. Jeder Kanal kann auf der Seite mit den Kanaleinstellungen von der Arbeit ausgeschlossen werden. Der Repo- Befehl "Lesen aus dem EEPROM" wird nachstehend ausführlicher erläutert. Wenn der Kanal dann aktiv ist, wechseln Sie seinen Status. Der aktuelle Zustand der Kanäle wird in den Variablen tsr1 - tsr5 für jeden der Kanäle gespeichert .Funktionen in der Syntax des if else-Ausdrucksif(TempB.val==1) – .
. .
}else
, . , else , .
Für die verbleibenden Tasten zum Ändern des Kanalstatus ( b2 - b5 ) ist der Touch Press-Ereigniscode identisch. Nur die Adresse im EEPROM und die Kanalzustandsvariable werden geändert.Ereignis - Touch Press Event Taste b6 - «den vorherigen Kanal auswählen„. Die Schaltfläche ist unsichtbar. Rendering-Modus ( sta ) - Bild zuschneiden (zugeschnittenes Bild). Als Bild im nicht gedrückten Zustand ( picc ) und im gedrückten Zustand ( picc2 ) wird das Hintergrundbild des Fensters ausgewählt. Aus diesem Grund wird die Schaltfläche nicht angezeigt, funktioniert aber. Diese Schaltfläche auf diesem Bildschirm ist mit der physischen Aufwärts- Schaltfläche (IO4) auf der Erweiterungskarte verbunden .if(SelTim.val<2)
{
SelTim.val=5
}else
{
SelTim.val=SelTim.val-1
}
Die Variable SelTim enthält die Nummer des aktuell ausgewählten Timers. Alles andere, denke ich, geht aus den Kommentaren hervor. Ereignis - Touch Press Event Taste b7 - «den nächsten Kanal wählen„. Die Schaltfläche ist unsichtbar. Diese Schaltfläche auf diesem Bildschirm ist mit der physischen Down- Schaltfläche (IO3) auf der Erweiterungskarte verbunden . if(SelTim.val>4)
{
SelTim.val=1
}else
{
SelTim.val=SelTim.val+1
}
Hier denke ich, dass das Gleiche klar ist.Ereignis - Touch Press Event Taste b8 - «Bearbeiten Sie den gewählten Kanal„. Die Schaltfläche ist unsichtbar. Diese Schaltfläche auf diesem Bildschirm ist mit der rechten physischen Schaltfläche (IO2) auf der Erweiterungskarte verbunden .if(SelTim.val==1)
{
click TimerText1,1
}
if(SelTim.val==2)
{
click TimerText2,1
}
if(SelTim.val==3)
{
click TimerText3,1
}
if(SelTim.val==4)
{
click TimerText4,1
}
if(SelTim.val==5)
{
click TimerText5,1
}
Klicken Sie auf Befehlsdetails - simulieren Sie das Klicken oder Freigeben eines Elements:
click cmpID,event
:
cmpID: ID .
event: 0 – ; 1 –
. click .
Ereignis - Touch Press Event Taste B9 - «Schaltzustand des gewählten Kanals„. Die Schaltfläche ist unsichtbar. Diese Schaltfläche auf diesem Bildschirm ist mit der linken physischen Schaltfläche (IO5) auf der Erweiterungskarte verbunden .if(SelTim.val==1)
{
click b1,1
}
if(SelTim.val==2)
{
click b2,1
}
if(SelTim.val==3)
{
click b3,1
}
if(SelTim.val==4)
{
click b4,1
}
if(SelTim.val==5)
{
click b5,1
}
Ereignis - Touch Press Event der Textbox TimerText1 - «Anzeige Kanalstatus 1" .sys0=1
sys1=1
page 1
Für andere Textfelder ( TimerText2 - TimerText5 ) ist der Touch Press-Ereigniscode identisch. Nur in der Systemvariablen sys0 wird die entsprechende Kanalnummer eingegeben.sys0, sys1, sys2 sind globale numerische Variablen, die nicht erstellt oder definiert werden müssen. Sie können auf jedem Bildschirm verwendet werden. Der Standardwert für diese drei Variablen ist 0, sie können gelesen und geschrieben werden, ihr Wertebereich ist 0 ~ 4294967295. Empfohlen für die Übergabe von Werten zwischen Seiten.Der tm0- Timer wird auf diesem Bildschirm eingestellt . Dieser Timer wird alle 200 Millisekunden ausgelöst (Parameter tim), wenn die Seite aktiv ist. Der Code zum Überwachen des Status von Timern und zum Neuzeichnen der Komponenten auf der Seite befindet sich im Timer-Ereignis dieses Timers.Code unter Spoler
temp.val=rtc2
tempText.txt=""
if(temp.val<10)
{
tempText.txt="0"
}
cov temp.val,TT1.txt,0
CurrentTime1.txt=tempText.txt+TT1.txt
temp.val=rtc1
tempText.txt=""
if(temp.val<10)
{
tempText.txt="0"
}
cov temp.val,TT1.txt,0
CurrentTime1.txt=CurrentTime1.txt+"-"+tempText.txt+TT1.txt
temp.val=rtc0
cov temp.val,TT1.txt,0
CurrentTime1.txt=CurrentTime1.txt+"-"+TT1.txt
temp.val=rtc3
tempText.txt=""
if(temp.val<10)
{
tempText.txt="0"
}
cov temp.val,TT1.txt,0
CurrentTime1.txt=CurrentTime1.txt+" "+tempText.txt+TT1.txt
temp.val=rtc4
tempText.txt=""
if(temp.val<10)
{
tempText.txt="0"
}
cov temp.val,TT1.txt,0
CurrentTime1.txt=CurrentTime1.txt+":"+tempText.txt+TT1.txt
temp.val=rtc5
tempText.txt=""
if(temp.val<10)
{
tempText.txt="0"
}
cov temp.val,TT1.txt,0
CurrentTime1.txt=CurrentTime1.txt+":"+tempText.txt+TT1.txt
for(i.val=0;i.val<5;i.val++)
{
temp.val=i.val*52
temp2.val=temp.val+4
Var0txt.txt=""
repo temp1.val,temp2.val
if(temp1.val==10000)
{
ts1.val=1
tempText.txt="X"
}else
{
if(temp1.val==rtc2)
{
ts1.val=1
}else
{
ts1.val=2
}
cov temp1.val,tempText.txt,0
if(temp1.val<10)
{
Var0txt.txt="0"
}
}
TT1.txt=Var0txt.txt+tempText.txt+"-"
temp2.val=temp.val+8
Var0txt.txt=""
repo temp1.val,temp2.val
if(temp1.val==10000)
{
ts2.val=1
tempText.txt="X"
}else
{
if(temp1.val==rtc1)
{
ts2.val=1
}else
{
ts2.val=2
}
cov temp1.val,tempText.txt,0
if(temp1.val<10)
{
Var0txt.txt="0"
}
}
TT1.txt=TT1.txt+Var0txt.txt+tempText.txt+"-"
temp2.val=temp.val+12
repo temp1.val,temp2.val
if(temp1.val==10000)
{
ts3.val=1
tempText.txt="X"
}else
{
if(temp1.val==rtc0)
{
ts3.val=1
}else
{
ts3.val=0
}
cov temp1.val,tempText.txt,0
}
TT1.txt=TT1.txt+tempText.txt+" "
temp2.val=temp.val+16
Var0txt.txt=""
repo temp1.val,temp2.val
if(temp1.val==10000)
{
ts4.val=1
tempText.txt="X"
}else
{
if(temp1.val==rtc3)
{
ts4.val=1
}else
{
ts4.val=0
}
cov temp1.val,tempText.txt,0
if(temp1.val<10)
{
Var0txt.txt="0"
}
}
TT1.txt=TT1.txt+Var0txt.txt+tempText.txt+":"
temp2.val=temp.val+20
Var0txt.txt=""
repo temp1.val,temp2.val
if(temp1.val==10000)
{
ts5.val=1
tempText.txt="X"
}else
{
if(temp1.val==rtc4)
{
ts5.val=1
}else
{
ts5.val=0
}
cov temp1.val,tempText.txt,0
if(temp1.val<10)
{
Var0txt.txt="0"
}
}
TT1.txt=TT1.txt+Var0txt.txt+tempText.txt+":"
temp2.val=temp.val+24
Var0txt.txt=""
repo temp1.val,temp2.val
if(temp1.val==10000)
{
ts6.val=1
tempText.txt="X"
}else
{
if(temp1.val==rtc5)
{
ts6.val=1
}else
{
ts6.val=0
}
cov temp1.val,tempText.txt,0
if(temp1.val<10)
{
Var0txt.txt="0"
}
}
TT1.txt=TT1.txt+Var0txt.txt+tempText.txt+" / "
temp2.val=temp.val+28
Var0txt.txt=""
repo temp1.val,temp2.val
if(temp1.val==10000)
{
ts7.val=1
tempText.txt="X"
}else
{
if(temp1.val==rtc2)
{
ts7.val=1
}else
{
ts7.val=0
}
cov temp1.val,tempText.txt,0
if(temp1.val<10)
{
Var0txt.txt="0"
}
}
TT1.txt=TT1.txt+Var0txt.txt+tempText.txt+"-"
temp2.val=temp.val+32
Var0txt.txt=""
repo temp1.val,temp2.val
if(temp1.val==10000)
{
ts8.val=1
tempText.txt="X"
}else
{
if(temp1.val==rtc1)
{
ts8.val=1
}else
{
ts8.val=0
}
cov temp1.val,tempText.txt,0
if(temp1.val<10)
{
Var0txt.txt="0"
}
}
TT1.txt=TT1.txt+Var0txt.txt+tempText.txt+"-"
temp2.val=temp.val+36
repo temp1.val,temp2.val
if(temp1.val==10000)
{
ts9.val=1
tempText.txt="X"
}else
{
if(temp1.val==rtc0)
{
ts9.val=1
}else
{
ts9.val=0
}
cov temp1.val,tempText.txt,0
}
TT1.txt=TT1.txt+Var0txt.txt+tempText.txt+" "
temp2.val=temp.val+40
Var0txt.txt=""
repo temp1.val,temp2.val
if(temp1.val==10000)
{
ts10.val=1
tempText.txt="X"
}else
{
if(temp1.val==rtc3)
{
ts10.val=1
}else
{
ts10.val=0
}
cov temp1.val,tempText.txt,0
if(temp1.val<10)
{
Var0txt.txt="0"
}
}
TT1.txt=TT1.txt+Var0txt.txt+tempText.txt+":"
temp2.val=temp.val+44
Var0txt.txt=""
repo temp1.val,temp2.val
if(temp1.val==10000)
{
ts11.val=1
tempText.txt="X"
}else
{
if(temp1.val==rtc4)
{
ts11.val=1
}else
{
ts11.val=0
}
cov temp1.val,tempText.txt,0
if(temp1.val<10)
{
Var0txt.txt="0"
}
}
TT1.txt=TT1.txt+Var0txt.txt+tempText.txt+":"
temp2.val=temp.val+48
Var0txt.txt=""
repo temp1.val,temp2.val
if(temp1.val==10000)
{
ts12.val=1
tempText.txt="X"
}else
{
if(temp1.val==rtc5)
{
ts12.val=1
}else
{
ts12.val=0
}
cov temp1.val,tempText.txt,0
if(temp1.val<10)
{
Var0txt.txt="0"
}
}
TT1.txt=TT1.txt+Var0txt.txt+tempText.txt
repo temp1.val,temp.val
tsrOn.val=0
if(temp1.val==1)
{
if(ts1.val==1)
{
if(ts2.val==1)
{
if(ts3.val==1)
{
if(ts4.val==1)
{
if(ts5.val==1)
{
if(ts6.val==1)
{
tsrOn.val=1
}
}
}
}
}
}
}
tsrOf.val=0
if(temp1.val==1)
{
if(ts7.val==1)
{
if(ts8.val==1)
{
if(ts9.val==1)
{
if(ts10.val==1)
{
if(ts11.val==1)
{
if(ts12.val==1)
{
tsrOf.val=1
}
}
}
}
}
}
}else
{
tsrOf.val=1
}
if(i.val==0)
{
if(tsr1.val==1)
{
if(tsrOf.val==1)
{
tsr1.val=2
}
}else
{
if(tsrOn.val==1)
{
tsr1.val=1
}
}
if(tsr1.val==1)
{
TimerText1.pco=63488
}else
{
if(temp1.val==1)
{
TimerText1.pco=65504
}else
{
TimerText1.pco=50712
}
}
TimerText1.txt=TT1.txt
}
if(i.val==1)
{
if(tsr2.val==1)
{
if(tsrOf.val==1)
{
tsr2.val=2
}
}else
{
if(tsrOn.val==1)
{
tsr2.val=1
}
}
if(tsr2.val==1)
{
TimerText2.pco=63488
}else
{
if(temp1.val==1)
{
TimerText2.pco=65504
}else
{
TimerText2.pco=50712
}
}
TimerText2.txt=TT1.txt
}
if(i.val==2)
{
if(tsr3.val==1)
{
if(tsrOf.val==1)
{
tsr3.val=2
}
}else
{
if(tsrOn.val==1)
{
tsr3.val=1
}
}
if(tsr3.val==1)
{
TimerText3.pco=63488
}else
{
if(temp1.val==1)
{
TimerText3.pco=65504
}else
{
TimerText3.pco=50712
}
}
TimerText3.txt=TT1.txt
}
if(i.val==3)
{
if(tsr4.val==1)
{
if(tsrOf.val==1)
{
tsr4.val=2
}
}else
{
if(tsrOn.val==1)
{
tsr4.val=1
}
}
if(tsr4.val==1)
{
TimerText4.pco=63488
}else
{
if(temp1.val==1)
{
TimerText4.pco=65504
}else
{
TimerText4.pco=50712
}
}
TimerText4.txt=TT1.txt
}
if(i.val==4)
{
if(tsr5.val==1)
{
if(tsrOf.val==1)
{
tsr5.val=2
}
}else
{
if(tsrOn.val==1)
{
tsr5.val=1
}
}
if(tsr5.val==1)
{
TimerText5.pco=63488
}else
{
if(temp1.val==1)
{
TimerText5.pco=65504
}else
{
TimerText5.pco=50712
}
}
TimerText5.txt=TT1.txt
}
}
if(SelTim.val==1)
{
b1.txt="+"
}else
{
b1.txt=""
}
if(SelTim.val==2)
{
b2.txt="+"
}else
{
b2.txt=""
}
if(SelTim.val==3)
{
b3.txt="+"
}else
{
b3.txt=""
}
if(SelTim.val==4)
{
b4.txt="+"
}else
{
b4.txt=""
}
if(SelTim.val==5)
{
b5.txt="+"
}else
{
b5.txt=""
}
Funktionen in der Syntax eines for-Ausdrucksfor(n0.val=0; n0.val<100; n0.val++) — .
. .
Lesen Sie mehr ĂĽber den Befehl cov - Konvertierung zwischen Zeichenfolge und numerischen Daten.:
cov att1,att2,lenth
:
att1:
att2:
lenth: ( 0 – )
:
cov number.val,text.txt,0
number text.
cov text.txt,number.val,5
text.
. cov .
BerĂĽcksichtigen Sie die Position der Daten im EEPROM-Bereich. Jedem Kanal sind 52 Bytes zugeordnet. FĂĽr jeden Wert - 4 Bytes.EEPROM-Adresse Startoffset = (Kanalnummer ab 0) * 52
| Wert |
---|
Offset starten | Kanalaktivität (0 - Kanal deaktiviert, 1 - Kanal aktiviert) |
Startoffset + 4 | Tag der Kanaleinbeziehung. Wenn nicht berĂĽcksichtigt - 10.000 |
Startoffset + 8 | Kanaleinschlussmonat. Wenn nicht berĂĽcksichtigt - 10.000 |
Startoffset + 12 | . — 10000 |
+ 16 | . — 10000 |
+ 20 | . -10000 |
+ 24 | . – 10000 |
+ 28 | . — 10000 |
+ 32 | . – 10000 |
+ 36 | . -10000 |
+ 40 | . -10000 |
+ 44 | . -10000 |
+ 48 | Kanal aus zweiter Sekunde. Wenn nicht berĂĽcksichtigt -10000 |
Von dem Hauptbildschirm fertig sind, bewegen sich auf dem Bildschirm, die Timer - Einstellung ( die SetTimer ID = 1 )
Ereignis Preinitialilize das Ereignis (der Bildschirm vor der Initialisierung genannt).cfgpio 0,1,b2
cfgpio 1,1,BYE
cfgpio 2,1,b0
cfgpio 3,1,BYM
cfgpio 4,1,BYP
cfgpio 5,1,b1
StAddr.val=sys0-1
StAddr.val=StAddr.val*52
repo Enable.val,StAddr.val
Hier definieren wir die Bindung der physischen Tasten auf der Erweiterungskarte an die Anforderungen dieses Bildschirms neu und lesen die Daten vor.Ereignis - Touch Press Event Taste b0 - «Gehen Sie zum nächsten Feld„. Die Schaltfläche ist unsichtbar. Diese Schaltfläche auf diesem Bildschirm ist mit der rechten physischen Schaltfläche (IO2) auf der Erweiterungskarte verbunden .if(sys1>11)
{
sys1=1
}else
{
sys1=sys1+1
}
Ereignis - Touch Press Event Tasten b1 - «Gehen Sie zum vorherigen Feld„. Die Schaltfläche ist unsichtbar. Diese Schaltfläche auf diesem Bildschirm ist mit der linken physischen Schaltfläche (IO5) auf der Erweiterungskarte verbunden .if(sys1<2)
{
sys1=12
}else
{
sys1=sys1-1
}
Ereignis - Touch Press Event - Taste b2 - "Aktivieren / Deaktivieren Kanal" oder "Exit" (Hold 2 sec). Die Schaltfläche ist unsichtbar. Diese Schaltfläche auf diesem Bildschirm ist mit der physischen Esc- Schaltfläche (IO0) auf der Erweiterungskarte verbunden.tm1.en=1
Hier starten wir den Hilfstimer. Wenn Sie die physische Esc- Taste (IO0) auf der Erweiterungskarte 2 Sekunden lang gedrückt halten ( Timer- Tim- Eigenschaft ), wird der Timer ausgelöst ( Timer-Ereignis des tm1- Timers aufrufen ). Wenn Sie die Taste früher loslassen , wird das Touch-Release-Ereignis der Taste b2 ausgelösttm1.en=0
if(Enable.val==1)
{
Enable.val=0
}else
{
Enable.val=1
}
Event - Timer Event Timer TM1 click b11,1 // b11 ("")
Ereignis - Touch Press Event - Taste ein BYE - «Aktivieren / Deaktivieren Registry bei der Operation“ des ausgewählten Feldes.if(sys1==1)
{
temp2.val=rtc2
}
if(sys1==2)
{
temp2.val=rtc1
}
if(sys1==3)
{
temp2.val=rtc0
}
if(sys1==4)
{
temp2.val=rtc3
}
if(sys1==5)
{
temp2.val=rtc4
}
if(sys1==6)
{
temp2.val=rtc5
}
if(sys1==7)
{
temp2.val=rtc2
}
if(sys1==8)
{
temp2.val=rtc1
}
if(sys1==9)
{
temp2.val=rtc0
}
if(sys1==10)
{
temp2.val=rtc3
}
if(sys1==11)
{
temp2.val=rtc4
}
if(sys1==12)
{
temp2.val=rtc5
}
temp3.val=sys1*4
temp.val=StAddr.val+temp3.val
repo temp1.val,temp.val
if(temp1.val==10000)
{
temp1.val=temp2.val
}else
{
temp1.val=10000
}
wepo temp1.val,temp.val
Lesen Sie mehr ĂĽber wepo-Befehle - schreiben Sie in das EEPROM und repo - lesen Sie aus dem EEPROM (nur erweiterte Bedienfelder verfĂĽgen ĂĽber diese Befehle).wepo
:
wepo att,add
:
att:
add: EEPROM
:
wepo number.val,10
number EEPROM 10. EEPROM 0. . wepo .
repo
:
repo att,add
:
att:
add: EEPROM
:
repo number.val,10
number EEPROM , 10. , 4 , . – txt_maxl att +1
. repo .
Ereignis - Touch Press Event Taste BYP - «1 auf den ausgewählten Bereich hinzufügen„.if(sys1==1)
{
temp2.val=31
}
if(sys1==2)
{
temp2.val=12
}
if(sys1==3)
{
temp2.val=9999
}
if(sys1==4)
{
temp2.val=23
}
if(sys1==5)
{
temp2.val=59
}
if(sys1==6)
{
temp2.val=59
}
if(sys1==7)
{
temp2.val=31
}
if(sys1==8)
{
temp2.val=12
}
if(sys1==9)
{
temp2.val=9999
}
if(sys1==10)
{
temp2.val=23
}
if(sys1==11)
{
temp2.val=59
}
if(sys1==12)
{
temp2.val=59
}
temp3.val=sys1*4
temp.val=StAddr.val+temp3.val
repo temp1.val,temp.val
if(temp1.val!=10000)
{
if(temp1.val!=temp2.val)
{
temp1.val=temp1.val+1
wepo temp1.val,temp.val
}
}
Ereignis - Touch Press Event Taste BYM - «1 werden abgezogen gewähltes Feld„.temp2.val=0
if(sys1==1)
{
temp2.val=1
}
if(sys1==2)
{
temp2.val=1
}
if(sys1==3)
{
temp2.val=2016
}
if(sys1==7)
{
temp2.val=1
}
if(sys1==8)
{
temp2.val=1
}
if(sys1==9)
{
temp2.val=2016
}
temp3.val=sys1*4
temp.val=StAddr.val+temp3.val
repo temp1.val,temp.val
if(temp1.val!=10000)
{
if(temp1.val!=temp2.val)
{
temp1.val=temp1.val-1
wepo temp1.val,temp.val
}
}
Ereignis - Touch Press Event Taste b11 - «Zurück zur Startseite„.wepo Enable.val,StAddr.val
sys0=0
sys1=0
page 0
Das Touch Press-Ereignis des StartD- Textfelds lautet " Tagessollwertauslöser ".sys1=1
Bei Textfeldern mit anderen Einstellungen ist der Ereigniscode für Touch Press bis auf die Feldnummer identisch.Die Nummern der Einstellwertfelder sind:StartMo - 2 („Monat des Betriebssollwerts“).StartY - 3 („Jahr der Sollwertauslösung“).StartH - 4 ("Stunde der Betriebseinstellung").StartMi - 5 („Sollwert für die Betriebsminute“).StartS - 6 („Sekunde des Betriebssollwerts“).StopD - 7 (Einstellung „Tag der Reise“).StopMo - 8 ("Monat der Reiseeinstellung ").StopY - 9 ("Jahr der Reiseeinstellung ").StopH - 10 ("Stunden der Reiseeinstellung ").Stopmi- 11 („Minutenauslöseeinstellung„).Stopps - 12 („Sekunden des Auslösesollwerts„).Auf diesem Bildschirm wird auch der tm0-Timer mit einer Auslösezeit von 200 Millisekunden eingestellt. Im Timer-Ereignis dieses Timers werden die Werte der Einstellungsfelder aktualisiert.Code unter dem Spoiler
temp1.val=StAddr.val+4
repo temp.val,temp1.val
cov temp.val,tempStr.txt,0
if(temp.val<10)
{
tempStr1.txt="0"+tempStr.txt
}else
{
tempStr1.txt=tempStr.txt
}
if(temp.val==10000)
{
if(sys1==1)
{
vis BYP,0
vis BYM,0
}
StartD.txt="X"
}else
{
if(sys1==1)
{
vis BYP,1
vis BYM,1
}
StartD.txt=tempStr1.txt
}
temp1.val=StAddr.val+8
repo temp.val,temp1.val
cov temp.val,tempStr.txt,0
if(temp.val<10)
{
tempStr1.txt="0"+tempStr.txt
}else
{
tempStr1.txt=tempStr.txt
}
if(temp.val==10000)
{
if(sys1==2)
{
vis BYP,0
vis BYM,0
}
StartMo.txt="X"
}else
{
if(sys1==2)
{
vis BYP,1
vis BYM,1
}
StartMo.txt=tempStr1.txt
}
temp1.val=StAddr.val+12
repo temp.val,temp1.val
cov temp.val,tempStr.txt,0
if(temp.val<10)
{
tempStr1.txt="0"+tempStr.txt
}else
{
tempStr1.txt=tempStr.txt
}
if(temp.val==10000)
{
if(sys1==3)
{
vis BYP,0
vis BYM,0
}
StartY.txt="X"
}else
{
if(sys1==3)
{
vis BYP,1
vis BYM,1
}
StartY.txt=tempStr1.txt
}
temp1.val=StAddr.val+16
repo temp.val,temp1.val
cov temp.val,tempStr.txt,0
if(temp.val<10)
{
tempStr1.txt="0"+tempStr.txt
}else
{
tempStr1.txt=tempStr.txt
}
if(temp.val==10000)
{
if(sys1==4)
{
vis BYP,0
vis BYM,0
}
StartH.txt="X"
}else
{
if(sys1==4)
{
vis BYP,1
vis BYM,1
}
StartH.txt=tempStr1.txt
}
temp1.val=StAddr.val+20
repo temp.val,temp1.val
cov temp.val,tempStr.txt,0
if(temp.val<10)
{
tempStr1.txt="0"+tempStr.txt
}else
{
tempStr1.txt=tempStr.txt
}
if(temp.val==10000)
{
if(sys1==5)
{
vis BYP,0
vis BYM,0
}
StartMi.txt="X"
}else
{
if(sys1==5)
{
vis BYP,1
vis BYM,1
}
StartMi.txt=tempStr1.txt
}
temp1.val=StAddr.val+24
repo temp.val,temp1.val
cov temp.val,tempStr.txt,0
if(temp.val<10)
{
tempStr1.txt="0"+tempStr.txt
}else
{
tempStr1.txt=tempStr.txt
}
if(temp.val==10000)
{
if(sys1==6)
{
vis BYP,0
vis BYM,0
}
StartS.txt="X"
}else
{
if(sys1==6)
{
vis BYP,1
vis BYM,1
}
StartS.txt=tempStr1.txt
}
temp1.val=StAddr.val+28
repo temp.val,temp1.val
cov temp.val,tempStr.txt,0
if(temp.val<10)
{
tempStr1.txt="0"+tempStr.txt
}else
{
tempStr1.txt=tempStr.txt
}
if(temp.val==10000)
{
if(sys1==7)
{
vis BYP,0
vis BYM,0
}
StopD.txt="X"
}else
{
if(sys1==7)
{
vis BYP,1
vis BYM,1
}
StopD.txt=tempStr1.txt
}
temp1.val=StAddr.val+32
repo temp.val,temp1.val
cov temp.val,tempStr.txt,0
if(temp.val<10)
{
tempStr1.txt="0"+tempStr.txt
}else
{
tempStr1.txt=tempStr.txt
}
if(temp.val==10000)
{
if(sys1==8)
{
vis BYP,0
vis BYM,0
}
StopMo.txt="X"
}else
{
if(sys1==8)
{
vis BYP,1
vis BYM,1
}
StopMo.txt=tempStr1.txt
}
temp1.val=StAddr.val+36
repo temp.val,temp1.val
cov temp.val,tempStr.txt,0
if(temp.val<10)
{
tempStr1.txt="0"+tempStr.txt
}else
{
tempStr1.txt=tempStr.txt
}
if(temp.val==10000)
{
if(sys1==9)
{
vis BYP,0
vis BYM,0
}
StopY.txt="X"
}else
{
if(sys1==9)
{
vis BYP,1
vis BYM,1
}
StopY.txt=tempStr1.txt
}
temp1.val=StAddr.val+40
repo temp.val,temp1.val
cov temp.val,tempStr.txt,0
if(temp.val<10)
{
tempStr1.txt="0"+tempStr.txt
}else
{
tempStr1.txt=tempStr.txt
}
if(temp.val==10000)
{
if(sys1==10)
{
vis BYP,0
vis BYM,0
}
StopH.txt="X"
}else
{
if(sys1==10)
{
vis BYP,1
vis BYM,1
}
StopH.txt=tempStr1.txt
}
temp1.val=StAddr.val+44
repo temp.val,temp1.val
cov temp.val,tempStr.txt,0
if(temp.val<10)
{
tempStr1.txt="0"+tempStr.txt
}else
{
tempStr1.txt=tempStr.txt
}
if(temp.val==10000)
{
if(sys1==11)
{
vis BYP,0
vis BYM,0
}
StopMi.txt="X"
}else
{
if(sys1==11)
{
vis BYP,1
vis BYM,1
}
StopMi.txt=tempStr1.txt
}
temp1.val=StAddr.val+48
repo temp.val,temp1.val
cov temp.val,tempStr.txt,0
if(temp.val<10)
{
tempStr1.txt="0"+tempStr.txt
}else
{
tempStr1.txt=tempStr.txt
}
if(temp.val==10000)
{
if(sys1==12)
{
vis BYP,0
vis BYM,0
}
StopS.txt="X"
}else
{
if(sys1==12)
{
vis BYP,1
vis BYM,1
}
StopS.txt=tempStr1.txt
}
if(sys1==1)
{
StartD.pco=63488
}else
{
StartD.pco=65535
}
if(sys1==2)
{
StartMo.pco=63488
}else
{
StartMo.pco=65535
}
if(sys1==3)
{
StartY.pco=63488
}else
{
StartY.pco=65535
}
if(sys1==4)
{
StartH.pco=63488
}else
{
StartH.pco=65535
}
if(sys1==5)
{
StartMi.pco=63488
}else
{
StartMi.pco=65535
}
if(sys1==6)
{
StartS.pco=63488
}else
{
StartS.pco=65535
}
if(sys1==7)
{
StopD.pco=63488
}else
{
StopD.pco=65535
}
if(sys1==8)
{
StopMo.pco=63488
}else
{
StopMo.pco=65535
}
if(sys1==9)
{
StopY.pco=63488
}else
{
StopY.pco=65535
}
if(sys1==10)
{
StopH.pco=63488
}else
{
StopH.pco=65535
}
if(sys1==11)
{
StopMi.pco=63488
}else
{
StopMi.pco=65535
}
if(sys1==12)
{
StopS.pco=63488
}else
{
StopS.pco=65535
}
Weitere Informationen zum Befehl vis - Ändern der Sichtbarkeit von Elementen:
vis obj,state
:
obj: ID .
state: 1- , 0 –
. vis .
Wechseln
Sie nach Abschluss des Bildschirms mit den Kanaleinstellungen zum Bildschirm mit den aktuellen Zeiteinstellungen ( SetCurrentTime ID = 2 ).
Hier, wie auf anderen Bildschirmen im Preinitialilize-Ereignis (aufgerufen, bevor der Bildschirm initialisiert wird), binden wir die physischen Schaltflächen erneut an die virtuellen Schaltflächen auf diesem Bildschirm.cfgpio 0,1,b11
cfgpio 1,1,b10
cfgpio 2,1,b14
cfgpio 3,1,b13
cfgpio 4,1,b12
cfgpio 5,1,b15
sel.val=1
Ereignis - Touch Press Event Taste b0 - «zur aktuellen Tageszeit hinzufügen„.if(rtc2<31)
{
rtc2=rtc2+1
}
Ereignis - Touch Press Event - Taste b2 - «Monat auf die aktuelle Zeit hinzufügen„.if(rtc1<12)
{
rtc1=rtc1+1
}
Ereignis - Touch Press Event Taste b4 - «das Jahr auf die aktuelle Zeit hinzufügen„.rtc0=rtc0+1
Ereignis - Touch Press Event Taste b6 - «eine Stunde auf die aktuelle Zeit hinzufügen„. if(rtc3<23)
{
rtc3=rtc3+1
}
Ereignis - Touch Press Event Taste b8 - «zum aktuellen Moment der Zeit hinzufügen„.if(rtc4<59)
{
rtc4=rtc4+1
}
Ereignis - Touch Press Event Tasten b1 - «den Tag von der aktuellen Zeit zum Mitnehmen„.if(rtc2>1)
{
rtc2=rtc2-1
}
Das Touch-Press-Ereignis der Taste b3 lautet "Subtrahieren Sie den Monat von der aktuellen Zeit".if(rtc1>1)
{
rtc1=rtc1-1
}
Das Touch-Press-Ereignis der Taste b5 lautet "Subtrahieren Sie das Jahr von der aktuellen Zeit".if(rtc0>2016)
{
rtc0=rtc0-1
}
Das Touch-Press-Ereignis der Taste b7 lautet "Eine Stunde von der aktuellen Zeit abziehen".if(rtc3>0)
{
rtc3=rtc3-1
}
Ereignis - Touch Press Event Taste B9 - «die Minute von der aktuellen Zeit zum Mitnehmen„.if(rtc4>0)
{
rtc4=rtc4-1
}
Das Touch Press-Ereignis der Taste b10 lautet „Sekunden auf 0 setzen“.rtc5=0
Ereignis - Touch Press Event Taste b11 - «Beenden».page 0
Das Touch-Press-Ereignis der Taste b12 lautet "Zum vorherigen Feld wechseln ". Die Schaltfläche ist unsichtbar. Diese Schaltfläche auf diesem Bildschirm ist mit der physischen Aufwärts- Schaltfläche (IO4) auf der Erweiterungskarte verbunden .if(sel.val<2)
{
sel.val=5
}else
{
sel.val=sel.val-1
}
Ereignis - Touch Press Event Taste b13 - «Gehen Sie zum nächsten Feld„. Die Schaltfläche ist unsichtbar. Diese Schaltfläche auf diesem Bildschirm ist mit der physischen Down- Schaltfläche (IO3) auf der Erweiterungskarte verbunden .if(sel.val>4)
{
sel.val=1
}else
{
sel.val=sel.val+1
}
Ereignis - Touch Press Event Taste b14 - «1 auf den Wert des gewählten Feld hinzufügen„. Die Schaltfläche ist unsichtbar. Diese Schaltfläche auf diesem Bildschirm ist mit der rechten physischen Schaltfläche (IO2) auf der Erweiterungskarte verbunden .if(sel.val==1)
{
click b0,1
}
if(sel.val==2)
{
click b2,1
}
if(sel.val==3)
{
click b4,1
}
if(sel.val==4)
{
click b6,1
}
if(sel.val==5)
{
click b8,1
}
Ereignis - Touch - Freigabe - Ereignis - Taste b14if(sel.val==1)
{
click b0,0
}
if(sel.val==2)
{
click b2,0
}
if(sel.val==3)
{
click b4,0
}
if(sel.val==4)
{
click b6,0
}
if(sel.val==5)
{
click b8,0
}
Das Touch-Press-Ereignis der Taste b15 lautet "Subtrahieren Sie 1 vom Wert des ausgewählten Felds". Die Schaltfläche ist unsichtbar. Diese Schaltfläche auf diesem Bildschirm ist mit der linken physischen Schaltfläche (IO5) auf der Erweiterungskarte verbunden . if(sel.val==1)
{
click b1,1
}
if(sel.val==2)
{
click b3,1
}
if(sel.val==3)
{
click b5,1
}
if(sel.val==4)
{
click b7,1
}
if(sel.val==5)
{
click b9,1
}
Ereignis - Touch - Freigabe - Ereignis - Taste b15if(sel.val==1)
{
click b1,0
}
if(sel.val==2)
{
click b3,0
}
if(sel.val==3)
{
click b5,0
}
if(sel.val==4)
{
click b7,0
}
if(sel.val==5)
{
click b9,0
}
Nun, wie in den anderen Fenstern wird der tm0- Timer in diesem Fenster mit einer Antwortzeit von 200 Millisekunden eingestellt. Im Timer-Ereignis dieses Timers werden die Werte der Textfelder aktualisiert.Code unter dem Spoiler
temp.val=rtc2
tempText.txt=""
if(temp.val<10)
{
tempText.txt="0"
}
cov temp.val,TT1.txt,0
CurrentTime1.txt=tempText.txt+TT1.txt
temp.val=rtc1
tempText.txt=""
if(temp.val<10)
{
tempText.txt="0"
}
cov temp.val,TT1.txt,0
CurrentTime1.txt=CurrentTime1.txt+"-"+tempText.txt+TT1.txt
temp.val=rtc0
tempText.txt=""
if(temp.val<10)
{
tempText.txt="0"
}
cov temp.val,TT1.txt,0
CurrentTime1.txt=CurrentTime1.txt+"-"+tempText.txt+TT1.txt
temp.val=rtc3
tempText.txt=""
if(temp.val<10)
{
tempText.txt="0"
}
cov temp.val,TT1.txt,0
CurrentTime1.txt=CurrentTime1.txt+" "+tempText.txt+TT1.txt
temp.val=rtc4
tempText.txt=""
if(temp.val<10)
{
tempText.txt="0"
}
cov temp.val,TT1.txt,0
CurrentTime1.txt=CurrentTime1.txt+":"+tempText.txt+TT1.txt
temp.val=rtc5
tempText.txt=""
if(temp.val<10)
{
tempText.txt="0"
}
cov temp.val,TT1.txt,0
CurrentTime1.txt=CurrentTime1.txt+":"+tempText.txt+TT1.txt
if(sel.val==1)
{
t1.pco=63488
}else
{
t1.pco=65535
}
if(sel.val==2)
{
t2.pco=63488
}else
{
t2.pco=65535
}
if(sel.val==3)
{
t3.pco=63488
}else
{
t3.pco=65535
}
if(sel.val==4)
{
t4.pco=63488
}else
{
t4.pco=65535
}
if(sel.val==5)
{
t5.pco=63488
}else
{
t5.pco=65535
}
Damit sind wir mit dem Panel fertig. Im Prinzip stellte sich heraus, dass es sich um ein autonomes System handelt, das ohne zusätzliche Ausrüstung arbeiten kann. Wir können die Kanalantworten jedoch nicht verwenden. Wir haben nur zwei freie Ein- und Ausgänge. Hier wird die Arduinka zur Rettung kommen.In Version 2.2 von FLProg wurde die Unterstützung für Nextion HMI-Panels aktualisiert. Es gibt neue Blöcke für sie.- Block " Klicken auf ein Element " - Mit dieser Option können Sie ein Klicken simulieren und auf ein Element auf dem Bedienfeldbildschirm loslassen.
- Mit den Blöcken „ Abrufen des Werts der Systemvariablen “ und „ Festlegen des Werts der Systemvariablen “ können Sie die Werte fast aller Systemvariablen des Bedienfelds lesen und schreiben
- Mit dem Block „ GPIO-Einstellungen “ können Sie die E / A-Betriebsmodi des Panels jederzeit konfigurieren
Nun, in dieser Lektion (da es immer noch mehr um die Programmierung des Panels selbst geht) lesen wir einfach den Status der Timer-Kanäle (Variablen tsr1 - tsr5 ) und geben ihn an die LEDs aus.Projektübersicht für Arduino im FLProg-Programm.
Ein kleines Video über den Betrieb des Geräts (Dies ist noch ein Schulungsprojekt, daher wird es vorübergehend zusammengestellt.)Anwendungen:- Projekt für Nextion Editor (Firmware für das Panel)
- Projekt fĂĽr das FLProg-Programm (Firmware fĂĽr Arduino)