ITEAD تطلق خطًا جديدًا محسنًا من لوحات HMI التالية قدم لي ممثلو الشركة نسخة من هذا الخط لدمج ميزات اللوحة الجديدة في برنامج FLProg. في الإصدار 2.2 ، تم تنفيذ ذلك. في هذا الدرس ، سننظر في الميزات الجديدة للوحة ، على سبيل المثال ، قم بإنشاء مؤقت قابل للبرمجة لخمس قنوات.للبدء ، ضع في اعتبارك خصائص اللوحة. يحتوي الخط المحسّن على ساعة مدمجة في الوقت الفعلي ، و 1024 بايت من الذاكرة غير المتطايرة ، و 8 مدخلات / مخرجات رقمية. يمكن تكوين كل منهم كمدخل أو كمخرج. يمكن تكوين أربعة منهم (من الرابع إلى السابع) كمخرجات PWM.
بالإضافة إلى خط Nextion HMI المحسن نفسه ، تم إصدار لوحة التوسعة أيضًا
، وتحتوي على عناصر تحكم وشاشات متصلة بلوحة GPIO.
تسمح هذه الفرص بعمل جهاز كامل تقريبًا استنادًا إلى هذه اللوحة. في هذا الدرس ، سأركز على برمجة اللوحة نفسها ، نظرًا لوجود القليل من المعلومات حول هذا الموضوع ، ولكن هناك الكثير من العثرات. يوجد رابط للمشروع لبرنامج Nextion Editor في نهاية المنشور.تمت مناقشة بداية العمل مع محرر Nextion ، وإطلاقه ، والاختيار الأولي للترميز ، ونوع اللوحة في مشاركاتي السابقة tyts ، tyts ، و tyts . لذلك ، لن نتطرق إلى هذا الأمر.ويتكون البرنامج من ثلاث الشاشة لوحة الصفحة الرئيسية ( نهر الماين )، إعداد مؤقت ( لSetTimer ) وتحديد الوقت ( SetCurrentTime ).لنبدأ من الشاشة الرئيسية.
تعرض هذه الشاشة إعدادات التشغيل والإيقاف وحالة كل قناة وزر تغيير حالة القنوات وزر التبديل إلى الشاشة لضبط الوقت الحالي. عند النقر فوق النص الذي يعرض إعدادات القناة ، انتقل إلى إعداد هذه القناة. بالإضافة إلى ذلك ، في هذه الشاشة ، هناك أربعة أزرار مخفية مطلوبة للربط بالأزرار المادية الموجودة على لوحة التوسيع. .
خذ بعين الاعتبار الرمز الموجود على الشاشة الرئيسية.حدث Preinitialilize الحدث (تسمى الشاشة قبل التهيئة).cfgpio 0,1,b0
cfgpio 2,1,b8
cfgpio 3,1,b7
cfgpio 4,1,b6
cfgpio 5,1,b9
SelTim.val=1
هنا نربط الأزرار المادية الموجودة على لوحة التوسيع بالأزرار الافتراضية على الشاشة.المزيد عن أمر cfgpio - إعداد المدخلات والمخرجات المادية للوحة (فقط اللوحات المحسنة لها هذا الأمر).:
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
|
حدث اللمس الصحافة الحدث زر B0 - «الوقت المحدد»page 2
كل شيء تحتاج إلى شرحالحدث اللمس الصحافة الحدث أزرار B1 - دولة «تبديل القناة الأولى"repo TempB.val,0
if(TempB.val==1)
{
if(tsr1.val==1)
{
tsr1.val=2
}else
{
tsr1.val=1
}
}
نقرأ أولاً نشاط القناة من EEPROM. يمكن إيقاف تشغيل كل قناة على صفحة إعدادات القناة. سيتم مناقشة أمر الريبو "القراءة من EEPROM" بمزيد من التفصيل أدناه. ثم ، إذا كانت القناة نشطة ، قم بتبديل حالتها. يتم تخزين الحالة الحالية للقنوات في المتغيرات tsr1 - tsr5 لكل من القنوات ، على التوالي.الميزات الموجودة في بناء جملة تعبير if elseif(TempB.val==1) – .
. .
}else
, . , else , .
بالنسبة للأزرار المتبقية لتغيير حالة القناة ( b2 - b5 ) ، يكون رمز Touch Press Event هو نفسه. يتم تغيير العنوان في EEPROM ومتغير حالة القناة فقط.حدث اللمس الصحافة الحدث زر B6 - «اختر القناة السابقة". الزر غير مرئي. وضع التقديم ( sta ) - صورة الاقتصاص (صورة مقطوعة). كصورة في حالة غير مضغوطة ( picc ) وحالة مضغوطة ( picc2 ) ، يتم تحديد صورة خلفية النافذة. ونتيجة لذلك ، لا يتم عرض الزر ، ولكنه يعمل. يرتبط هذا الزر الموجود على هذه الشاشة بالزر الفعلي لأعلى (IO4) الموجود على لوحة التوسيع .if(SelTim.val<2)
{
SelTim.val=5
}else
{
SelTim.val=SelTim.val-1
}
يحتوي
متغير SelTim على عدد المؤقت المحدد حاليًا. أعتقد أن كل شيء آخر واضح من التعليقات. حدث اللمس الصحافة الحدث زر B7 - «لتحديد قناة المقبلة". الزر غير مرئي. يرتبط هذا الزر في هذه الشاشة بالزر الفعلي للأسفل (IO3) الموجود على لوحة التوسيع . if(SelTim.val>4)
{
SelTim.val=1
}else
{
SelTim.val=SelTim.val+1
}
هنا أعتقد أن نفس الشيء واضح.حدث اللمس الصحافة الحدث زر B8 - «تحرير القناة المختارة". الزر غير مرئي. يرتبط هذا الزر الموجود على هذه الشاشة بالزر الفعلي الأيمن (IO2) الموجود على لوحة التوسيع .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
}
انقر فوق تفاصيل الأمر - محاكاة النقر فوق عنصر أو تحريره:
click cmpID,event
:
cmpID: ID .
event: 0 – ; 1 –
. click .
حدث اللمس الصحافة الحدث زر B9 - «وضع التبديل من القناة المختارة". الزر غير مرئي. يرتبط هذا الزر الموجود على هذه الشاشة بالزر الأيسر المادي (IO5) على لوحة التوسيع .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
}
حدث اللمس الحدث الصحافة مربع النص TimerText1 - «عرض حالة القناة 1".sys0=1
sys1=1
page 1
بالنسبة لحقول النص الأخرى ( TimerText2 - TimerText5 ) ، يكون رمز Touch Press Event هو نفسه. يتم إدخال رقم القناة المقابل فقط في متغير النظام sys0 .sys0 و sys1 و sys2 هي متغيرات رقمية عامة لا تحتاج إلى إنشائها أو تعريفها. يمكن استخدامها على أي شاشة. القيمة الافتراضية لهذه المتغيرات الثلاثة هي 0 ، ويمكن قراءتها وكتابتها ، ونطاق قيمها هو 0 ~ 4294967295. يوصى بتمرير القيم بين الصفحات.تم ضبط مؤقت tm0 على هذه الشاشة . ينطلق هذا المؤقت كل 200 مللي ثانية (معلمة tim) ، عندما تكون الصفحة نشطة. يوجد رمز لرصد حالة المؤقتات وإعادة رسم المكونات على الصفحة في حدث المؤقت لهذا المؤقت.كود تحت 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=""
}
الميزات في بناء الجملة للتعبيرfor(n0.val=0; n0.val<100; n0.val++) — .
. .
اقرأ المزيد عن الأمر cov - التحويل بين بيانات السلسلة والبيانات الرقمية.:
cov att1,att2,lenth
:
att1:
att2:
lenth: ( 0 – )
:
cov number.val,text.txt,0
number text.
cov text.txt,number.val,5
text.
. cov .
ضع في اعتبارك موقع البيانات في لوحة EEPROM. يتم تخصيص 52 بايت لكل قناة. لكل قيمة - 4 بايت.عنوان EEPROM إزاحة البدء = (رقم القناة يبدأ من 0) * 52
| القيمة |
---|
ابدأ الإزاحة | نشاط القناة (0 - القناة معطلة ، 1 - القناة ممكّنة) |
تبدأ الإزاحة + 4 | يوم تضمين القناة. إذا لم تؤخذ في الاعتبار - 10000 |
تبدأ الإزاحة + 8 | شهر تضمين القناة. إذا لم تؤخذ في الاعتبار - 10000 |
تبدأ الإزاحة + 12 | . — 10000 |
+ 16 | . — 10000 |
+ 20 | . -10000 |
+ 24 | . – 10000 |
+ 28 | . — 10000 |
+ 32 | . – 10000 |
+ 36 | . -10000 |
+ 40 | . -10000 |
+ 44 | . -10000 |
+ 48 | القناة خارج الثانية. إذا لم تؤخذ في الاعتبار -10000 |
من الشاشة الرئيسية قد انتهت، ونقل إلى الشاشة، وإعداد الموقت ( معرف SetTimer = 1 )
حدث Preinitialilize الحدث (تسمى الشاشة قبل التهيئة).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
هنا نعيد تعريف ربط الأزرار المادية الموجودة على لوحة التوسيع باحتياجات هذه الشاشة ، ونقرأ البيانات مسبقًا.حدث اللمس الصحافة الحدث زر B0 - «العودة إلى الحقل التالي". الزر غير مرئي. يرتبط هذا الزر الموجود على هذه الشاشة بالزر الفعلي الأيمن (IO2) الموجود على لوحة التوسيع .if(sys1>11)
{
sys1=1
}else
{
sys1=sys1+1
}
حدث اللمس الصحافة الحدث أزرار B1 - «الذهاب إلى الحقل السابق". الزر غير مرئي. يرتبط هذا الزر الموجود على هذه الشاشة بالزر الأيسر المادي (IO5) على لوحة التوسيع .if(sys1<2)
{
sys1=12
}else
{
sys1=sys1-1
}
حدث اللمس الصحافة الحدث زر B2 - "قناة تفعيل / تعطيل" أو "إنهاء" (عقد 2 ثانية). الزر غير مرئي. هذا الزر في هذه الشاشة مرتبط بزر Esc الفعلي (IO0) على لوحة التوسيع.tm1.en=1
هنا نبدأ الموقت المساعد. إذا قمت بالضغط على زر المادي خروج (IO0) على التوسع المجلس لمدة 2 ثانية (الملكية تيم الموقت)، وسحب يحدث الموقت (نداء الحدث الموقت الحدث الموقت TM1 )، إذا تم الإفراج عن زر قبل الحدث يرجع اللمس الإصدار الحدث زر B2tm1.en=0
if(Enable.val==1)
{
Enable.val=0
}else
{
Enable.val=1
}
الحدث الموقت الحدث الموقت TM1 click b11,1 // b11 ("")
حدث اللمس الصحافة الحدث زر على BYE - «تمكين / تعطيل التسجيل في عملية" من الحقل المحدد.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
اقرأ المزيد عن أوامر wepo - اكتب إلى EEPROM و repo - اقرأ من EEPROM (فقط اللوحات المحسنة لها هذه الأوامر).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 .
حدث اللمس الصحافة الحدث زر BYP - «إضافة 1 إلى الحقل المحدد".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
}
}
حدث اللمس الصحافة الحدث زر BYM - «طرح 1 من الحقل المختار".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
}
}
حدث اللمس الصحافة الحدث زر B11 - «العودة إلى الصفحة الرئيسية".wepo Enable.val,StAddr.val
sys0=0
sys1=0
page 0
حدث اللمس الصحافة الحدث في مربع النص startd - «يوم من قيمة بيك اب".sys1=1
بالنسبة إلى الحقول النصية ذات الإعدادات الأخرى ، يكون رمز Touch Press Event هو نفسه باستثناء رقم الحقل.أرقام حقول قيمة الإعداد هي:StartMo - 2 ("شهر تعيين نقطة التشغيل").StartY - 3 ("سنة الرحلة المحددة").StartH - 4 ("ساعة الإعداد للعملية").StartMi - 5 (" نقطة ضبط دقيقة للتشغيل").يبدأ - 6 ("الثانية من نقطة ضبط العملية").StopD - 7 ("يوم الرحلة").StopMo - 8 ("إعداد شهر الرحلة").StopY - 9 ("سنة الرحلة").StopH - 10 ("إعداد ساعة الرحلة").Stopmi- 11 ("إعداد رحلة دقيقة").محطات توقف - 12 ("ثواني نقطة ضبط الرحلة").يتم ضبط مؤقت tm0 أيضًا على هذه الشاشة بفترة رحلة تبلغ 200 مللي ثانية. في حدث المؤقت لهذا المؤقت ، يتم تحديث قيم حقول الإعداد.كود تحت المفسد
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
}
المزيد عن الأمر - تغيير رؤية العنصر:
vis obj,state
:
obj: ID .
state: 1- , 0 –
. vis .
بعد الانتهاء من شاشة إعدادات القناة ، انتقل إلى شاشة إعدادات الوقت الحالي ( SetCurrentTime ID = 2 ).
هنا ، كما هو الحال في الشاشات الأخرى في حدث Preinitialilize Event (الذي تم استدعاؤه قبل تهيئة الشاشة) ، فإننا نعيد ربط الأزرار الفعلية بالأزرار الافتراضية على هذه الشاشة.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
حدث اللمس الصحافة الحدث زر B0 - «إضافة إلى الوقت اليوم الحالي".if(rtc2<31)
{
rtc2=rtc2+1
}
حدث اللمس الصحافة الحدث زر B2 - «إضافة الشهر إلى الوقت الحالي".if(rtc1<12)
{
rtc1=rtc1+1
}
حدث اللمس الصحافة الحدث زر B4 - «إضافة العام إلى الوقت الحالي".rtc0=rtc0+1
حدث اللمس الصحافة الحدث زر B6 - «إضافة ساعة إلى الوقت الحالي". if(rtc3<23)
{
rtc3=rtc3+1
}
حدث اللمس الصحافة الحدث زر B8 - «إضافة إلى اللحظة الراهنة من الزمن".if(rtc4<59)
{
rtc4=rtc4+1
}
حدث اللمس الصحافة الحدث أزرار B1 - «يسلب يوم من الوقت الحالي".if(rtc2>1)
{
rtc2=rtc2-1
}
حدث اللمس الصحافة الحدث زر B3 - «يسلب الشهر الماضي من الوقت الحالي".if(rtc1>1)
{
rtc1=rtc1-1
}
حدث اللمس الصحافة الحدث زر B5 - «يسلب عام من الوقت الحالي".if(rtc0>2016)
{
rtc0=rtc0-1
}
حدث اللمس الصحافة الحدث زر B7 - «يضيع ساعة من الوقت الحالي".if(rtc3>0)
{
rtc3=rtc3-1
}
حدث اللمس الصحافة الحدث زر B9 - «ارفعوا دقيقة من الوقت الحالي".if(rtc4>0)
{
rtc4=rtc4-1
}
حدث اللمس الصحافة الحدث زر B10 - «ضبط 0 ثانية".rtc5=0
حدث اللمس الصحافة الحدث زر B11 - «الخروج».page 0
حدث اللمس الصحافة الحدث زر B12 - «الذهاب إلى الحقل السابق". الزر غير مرئي. يرتبط هذا الزر الموجود على هذه الشاشة بالزر الفعلي لأعلى (IO4) الموجود على لوحة التوسيع .if(sel.val<2)
{
sel.val=5
}else
{
sel.val=sel.val-1
}
حدث اللمس الصحافة الحدث زر B13 - «العودة إلى الحقل التالي". الزر غير مرئي. يرتبط هذا الزر في هذه الشاشة بالزر الفعلي للأسفل (IO3) الموجود على لوحة التوسيع .if(sel.val>4)
{
sel.val=1
}else
{
sel.val=sel.val+1
}
حدث اللمس الصحافة الحدث زر B14 - «إضافة 1 إلى قيمة الحقل المختار". الزر غير مرئي. يرتبط هذا الزر الموجود على هذه الشاشة بالزر الفعلي الأيمن (IO2) الموجود على لوحة التوسيع .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
}
حدث اللمس الإصدار الحدث زر 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
}
حدث اللمس الصحافة الحدث زر B15 - «طرح 1 من قيمة الحقل المحدد" الزر غير مرئي. يرتبط هذا الزر الموجود على هذه الشاشة بالزر الأيسر المادي (IO5) على لوحة التوسيع . 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
}
حدث اللمس الإصدار الحدث زر 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
}
حسنًا ، كما هو الحال في النوافذ الأخرى ، يتم ضبط مؤقت tm0 في هذه النافذة بفترة استجابة تبلغ 200 مللي ثانية. في حدث المؤقت لهذا المؤقت ، يتم تحديث قيم الحقول النصية.كود تحت المفسد
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
}
على هذا انتهينا مع اللوحة. من حيث المبدأ ، تحول إلى نظام مستقل يمكنه العمل بدون معدات إضافية. لكن لا يمكننا استخدام ردود القناة. لدينا فقط مدخلين - مخارج. هنا يأتي اردوينكا إلى الإنقاذ.في الإصدار 2.2 من FLProg ، تم تحديث دعم لوحات Nextion HMI. هناك كتل جديدة لها.- حظر " النقر على عنصر " - يسمح لك بمحاكاة النقر والتحرير على أي عنصر على شاشة اللوحة.
- تسمح لك كتل " الحصول على قيمة متغير النظام " و " تعيين قيمة متغير النظام " بقراءة قيم جميع متغيرات النظام في اللوحة وكتابتها تقريبًا
- تتيح لك كتلة " إعدادات GPIO " تكوين أوضاع تشغيل لوحة الإدخال / الإخراج في أي وقت
حسنًا ، في هذا الدرس (نظرًا لأنه لا يزال مخصصًا أكثر لبرمجة اللوحة نفسها) ، فإننا ببساطة نقرأ حالة قنوات المؤقت (المتغيرات tsr1 - tsr5 ) ونخرجها إلى مصابيح LED.مخطط المشروع لاردوينو في برنامج FLProg.
فيديو صغير لتشغيل الجهاز (هذا لا يزال مشروع تدريب ، لذلك يتم تجميعه على أساس مؤقت)التطبيقات:- مشروع محرر Nextion (البرامج الثابتة للوحة)
- مشروع لبرنامج FLProg (البرامج الثابتة لاردوينو )