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

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

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

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

acdsb (1)

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

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

Παράδειγμα ανάπτυξης 3.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<=0x10)

start_win_btn_click_handler(btn_val);

 

btn_val = 0;

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

}

 

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


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