[Ανοικτή πηγή] Όργανο μέτρησης πολλαπλών ποσοτήτων τσιμέντου

——Από το Φόρουμ προγραμματιστών DWIN

Η βραβευμένη θήκη ανοιχτού κώδικα που προτείνεται από το φόρουμ DWIN μπορεί να χρησιμοποιηθεί στον κατασκευαστικό κλάδο για την ανίχνευση του περιεχομένου εξαρτημάτων τσιμέντου - ένα όργανο μέτρησης πολλαπλών ποσοτήτων τσιμέντου που βασίζεται στην έξυπνη οθόνη T5L. Οι μηχανικοί χρησιμοποιούν την έξυπνη οθόνη T5L για να ελέγχουν την ηλεκτρονική μονάδα ανίχνευσης βάρους, τη μονάδα μέτρησης θερμοκρασίας, τη μονάδα θέρμανσης, τον αισθητήρα υγρασίας και τη μονάδα ανάμειξης για να πραγματοποιήσουν τη λειτουργία ανίχνευσης του περιεχομένου στερεού διαλύματος και υγρού τσιμέντου και να υποστηρίξουν την εμφάνιση του ρυθμού σε πραγματικό χρόνο. ρύθμιση θερμοκρασίας, εγγραφή ιστορικού, ρύθμιση παραμέτρων σκηνής και άλλες λειτουργίες.

1. Δομή προγράμματος

acdsb (1)

2.Οθόνη υλικού UI

acdsb (2)
acdsb (4)
acdsb (3)
acdsb (5)

Παράδειγμα ανάπτυξης UI

acdsb (6)

4.C51 σχεδιασμός λογισμικού

Το πρόγραμμα εντολών αρχικοποίησης για την επικοινωνία του μηχανικού με τον πίνακα ελέγχου χρησιμοποιώντας τη σειριακή θύρα 2 T5L είναι το εξής:

void app_init()

{

is_testing = 0;

test_run_time = 0;

is_sec = 0;

period1 = 0;

is_period1 = 0;

uart2_init(115200);

send_bytes("AT+INIT=0\r\n",sizeof("AT+INIT=0\r\n")-1);

sys_delay_ms(2500);

sys_pic(1);

send_bytes("AT+START\r\n",sizeof("AT+START\r\n")-1);

}

Το κύριο πρόγραμμα της έξυπνης οθόνης T5L που αλληλεπιδρά με τον πίνακα ελέγχου για να πραγματοποιήσει τη λειτουργία ανίχνευσης σύνθεσης τσιμέντου είναι το εξής:

void btn_click_handler()

{

#define BTN_VAL_ADDR 0x1000

u16 btn_val;

if(is_testing&&is_sec)

{

is_sec = 0;

test_run_time++;

btn_val = sprintf(commbuff,"%02u:%02u",(u16)(test_run_time/60),(u16)(test_run_time%60));

commbuff[btn_val+1] = 0;

sys_write_vp(TEST_TIME_VP,commbuff,5);

if(uart2rxsta&UART2_PACKET_OK)

{

if(uart2buf[0]==0x01&&uart2buf[1]==0x02)

{

init_weight = *(float*)(uart2buf+2);

init_weight *= (*(float*)flashdat);

sys_write_vp(0x1178, (u8*)&init_weight, 2);

}άλλο εάν(uart2buf[0]==0x02&&uart2buf[1]==0x05)

{

init_ml = *(float*)(uart2buf+2);

init_ml /= (*(float*)flashdat+20);

sys_write_vp(0x1180, (u8*)&init_ml, 2);

}άλλο εάν(uart2buf[0]==0x03&&uart2buf[1]==0x07)

{

speed_val = *(float*)(uart2buf+2);

disp_val += (speed_val*2.45f);

sys_write_vp(0x1180, (u8*)&disp_val, 2);

}άλλο εάν(uart2buf[0]==0x04)

{

total_num = uart2buf[1]*256+uart2buf[2];

}else if(uart2buf[0]==0x05)

{

is_en_tmp = uart2buf[2];

}

uart2rxsta = 0;

}

}

if(is_period1)

{

is_period1 = 0;

t_sample();

if(is_testing&&is_en_tmp)

sys_write_vp(0x1170,(u8*)&tmp,2);

}

if(is_btn_scan==0)

ΕΠΙΣΤΡΟΦΗ;

is_btn_scan = 0;

sys_read_vp(BTN_VAL_ADDR,(u8*)&btn_val,1);

if(btn_val==0)

ΕΠΙΣΤΡΟΦΗ;

if(btn_val

start_win_btn_click_handler(btn_val);

 

btn_val = 0;

sys_write_vp(BTN_VAL_ADDR,(u8*)&btn_val,1);

}

 

Ανατρέξτε στον πηγαίο κώδικα για περισσότερα.


Ώρα δημοσίευσης: Δεκ-02-2023