——Ukusuka kwiQonga labaphuhlisi be-DWIN
Kolu shicilelo, sazisa kuwe ngembasa yomthombo ovulekileyo ophumelele ibhaso leQonga loMphuhlisi le-DWIN- igumbi lokulima elikrelekrele.Iinjineli ziphumeze isikrini esilumkileyo se-T5L ukulawula ukufudumeza kunye nokulawula ubushushu befeni imisebenzi ngeModbus protocol.Unikezelo lwamandla lunokulungiswa kwakhona ukulinganisa umsebenzi wokukhanyisa.Inkqubo inokuqhuba ngokuzenzekelayo ngokweeparamitha ezibekwe kwiscreen kwaye ugcine iirekhodi zembali yempazamo.
1.UI Material Display
2.UI Design
1.C51 Uyilo
Iikhowudi eziphambili zokufumana kunye nokuhlaziya idatha efana neqondo lokushisa, ukufuma, kunye nokuphakama kwi-interface engundoqo, kunye nokusebenzisa i-modbus rtu ukulawula iimodyuli zokulawula ubushushu, ii-motor, ukufunyanwa kwe-alamu, kunye nabanye oomatshini bekhoboka ngolu hlobo lulandelayo.
Ikhowudi yojongano oluphambili ireferensi:
#iquka "ukuphumelela_okuphambili.h"
#bandakanya "modbus.h"
#zibandakanya "sys_params.h"
#ziquka "func_handler.h"
#zibandakanya "uart2.h"
#zibandakanya
#zibandakanya
#chaza TEMP_HUM_SLAVE_ADDR2
#chaza TEMP_HUM_VAL_MAX_NUM 2
#chaza ALERT_BIT_MAX_NUM 30
#chaza ALERT_BYTE_NUM (ALERT_BIT_MAX_NUM/8+((ALERT_BIT_MAX_NUM%8)!=0))
#define GET_ALERT_BIT(val, pos) ((val[pos/8]>>(pos%8))&0x01)
uhlobo lwe-typedef{
umhla we-char[17];
u8 desc;
} ISILUMKO;
#chaza ALERT_TABLE_LEN 20
i-static u8 btn_sta[MAIN_WIN_BTN_MAX_NUM] = {0};
i-static u8 btn_addr[MAIN_WIN_BTN_MAX_NUM] = {50, 51, 52, 69, 53, 54, 55, 70, 56, 57, 58, 59};
u16 ongundoqo_win_val[MAIN_WIN_VAL_MAX_NUM];
u16 temp_hum_val[TEMP_HUM_VAL_MAX_NUM] = {0};
U16 umhla_umvalo[MAIN_WIN_DATE_MAX_NUM] = {0};
u8 isivuseleli_ival[ALERT_BYTE_NUM] = {0};
u8 old_alert_val[ALERT_BYTE_NUM] = {0};
Itheyibhile yesivuseleli_yesilumkiso[ALERT_TABLE_LEN];
u16 alert_num = 0;
bit is_main_win = 0;
akukho nto iphambili_win_uhlaziyo ()
{
}
i-void main_win_disp_date()
{
u8 len;
len = sprintf(common_buf, "%u:%u", (u16)umhla_val[3], (u16)umhla_ival[4]);
common_buf[len+1] = 0;
sys_write_vp(MAIN_WIN_DATE_VP, common_buf, len/2+2);
}
i-void main_win_process_alert ()
{
u8 mna;
ye(i=0;i
{
ukuba(GET_ALERT_BIT(ival_isilumkiso_esidala, i))
qhubeleka;
ukuba(GET_ALERT_BIT(isilumkiso_ival, i))
{
ukuba(inombolo_yesilumkiso>=ALERT_TABLE_LEN)
inombolo_yesilumkiso = ALERT_TABLE_LEN-1;
i-alert_table[inombolo_yesilumkiso].desc = i+1;
sprintf(alert_table[alert_num].umhla, "%u/%u/%u %u:%u",
umhla_umgangatho[0], umhla_umgangatho[1], umhla_umhla[2], umhla_umgangatho[3], umhla_umhla[4]
);
inombolo_yesilumkiso++;
}
}
memcpy(ival_yesivuseleli_ival, ivali_yesivuseleli, ubungakanani be(ival_yesilumkiso));
}
akukho nto iphambili_win_disp_alert()
{
u16 mna;
u16 val;
u16 len = 0;
common_buf[0] = 0;
ye(i=0;i
{
ival = 0;
ukuba ndi
{
ival = alert_table.desc;
len += sprintf(common_buf+len, "%s\r\n", alert_table.date);
}
sys_write_vp(ALERT_WIN_DESC_START_VP+i, (u8*)&val, 1);
}
common_buf[len+1] = 0;
sys_write_vp(ALERT_WIN_DATE_VP, common_buf, len/2+2);
}
akukho nto iphambili_win_init()
{
ival yokudada
u8 mna;
yi_main_win = 1;
main_win_val[5] = (u16) (temp_hum_val[0]/10.0+0.5f);
main_win_val[6] = (u16) (temp_hum_val[1]/10.0+0.5f);
ye(i=0;i
{
ukuba(i==0)
qhubeleka;
sys_write_vp(MAIN_WIN_WIND_SPEED_VP+MAIN_WIN_VAL_OFFSET*i, (u8*)&main_win_val, 1);
}
fixed_val = main_win_val[0]/WIND_SPEED_SCALE+FLOAT_FIX_VAL;
sys_write_vp(MAIN_WIN_WIND_SPEED_VP, (u8*)&fixed_val, 2);
}
i-void main_win_click_handler(u16 btn_val)
{
u8 index;
ukuba(btn_val==0x0B)
{
main_win_disp_alert ();
buya
}
isalathisi = btn_val-1;
btn_sta[index] = !btn_sta[index];
ukuba((isalathisi==3)||(isalathi==7))
btn_sta[index] = 1;
modbus_write_bit(btn_addr[index], btn_sta[index]?0xFF00:0x0000);
btn_val = btn_sta[index];
sys_write_vp(MAIN_WIN_BTN_STA_START_VP+MAIN_WIN_BTN_STA_OFFSET* index, (u8*)&btn_val, 1);
ukuba(isalathi==9)
yi_main_win = 0;
ngenye indlela ukuba((isalathisi==3)||(isalathisi==7))
{
ngelixa(sys_get_touch_sta());
modbus_write_bit(btn_addr[index], 0x0000);
}
}
i-void main_win_msg_handler(u8 *msg,u16 msg_len)
{
u8 f_code = msg[MODBUS_RESPOND_POS_FUNC_CODE];
u8 data_len = msg[MODBUS_RESPOND_POS_DATA_LEN];
u8 mna;
u8 offset;
msg_len = msg_len;
ukuba(!is_main_win)
buya
ukuba((f_code==MODBUS_FUNC_CODE_03)&(data_len==MAIN_WIN_VAL_MAX_NUM*2))
{
offset = MODBUS_RESPOND_POS_DATA;
ye(i=0;i
{
main_win_val = SYS_GET_U16(msg[offset], msg[offset+1]);
ukulinganisa += 2;
}
main_win_uhlaziyo ();
}Okunye ukuba((f_code==MODBUS_FUNC_CODE_01)&(data_len==ALERT_BYTE_NUM))
{
offset = MODBUS_RESPOND_POS_DATA;
ye(i=0;i
{
alert_val = msg[offset];
i-offset++;
}
main_win_process_alert ();
}Okunye ukuba((f_code==MODBUS_FUNC_CODE_03)&(data_len==TEMP_HUM_VAL_MAX_NUM*2))
{
offset = MODBUS_RESPOND_POS_DATA;
ye(i=0;i
{
temp_hum_val = SYS_GET_U16(msg[offset], msg[offset+1]);
ukulinganisa += 2;
modbus_write_word(5+i, temp_hum_val);
}
main_win_uhlaziyo ();
}Okunye ukuba((f_code==MODBUS_FUNC_CODE_03)&(data_len==MAIN_WIN_DATE_MAX_NUM*2))
{
offset = MODBUS_RESPOND_POS_DATA;
ye(i=0;i
{
umhla_umgangatho = SYS_GET_U16(msg[offset], msg[offset+1]);
ukulinganisa += 2;
}
main_win_disp_date();
}
}
akukho nto iphambili_win_read_temp_hum()
{
u8 old_slave_addr = SLAVE_ADDR;
sys_params.user_config[5] = TEMP_HUM_SLAVE_ADDR;
modbus_read_words(0, TEMP_HUM_VAL_MAX_NUM);
sys_params.user_config[5] = old_slave_addr;//Buyisela
}
i-void main_win_handler()
{
iflegi ye-static u8 = 0;
ukuba (i_ingundoqo_iphumelele)
{
ukuba(alert_read_period==ALERT_READ_PERIOD)
{
alert_read_period = 0;
modbus_read_bits(510, ALERT_BIT_MAX_NUM);
buya
}
ukuba(date_update_period==DATE_UPDATE_PERIOD)
{
date_update_period = 0;
modbus_read_words(180, MAIN_WIN_DATE_MAX_NUM);
buya
}
iflegi = ! iflegi;
ukuba ( iflegi)
modbus_read_words(0, MAIN_WIN_VAL_MAX_NUM);
enye into
main_win_read_temp_hum();
}
}
ireferensi yekhowudi ye-modbus rtu:
#bandakanya "modbus.h"
#quka "crc16.h"
#zibandakanya "sys_params.h"
#define UART_INNCLUDE "uart2.h"
#define UART_INIT uart2_init
#define UART_SEND_BYTES uart2_send_bytes
#chaza UART_BAUD 9600
#chaza MODBUS_RECV_TIMEOUT (u8)(35000.0f/UART_BAUD+2)
#chaza MODBUS_SEND_INTERVAL 150
#zibandakanya UART_INQULUDE
i-static bit is_modbus_recv_complete = 0;
i-static u8 modbus_recv_buff[270];
i-static u16 modbus_recv_len = 0;//Itotali yobude beebhayithi zamkelwe
i-static u8 modbus_recv_timeout = 0;//Yamkela ixesha lokuphuphuma
i-static iguquguquka u16 modbus_send_interval = 0;
MODBUS_PACKET ipakethe;
akukho modbus_init ()
{
UART_INIT(UART_BAUD);
}
i-void modbus_send_bytes(u8 *bytes,u16 len)
{
UART_SEND_BYTES(bytes,len);
}
akukho modbus_recv_byte(u8 byte)
{
ukuba(i_modbus_recv_igqityiwe)
buya
ukuba(modbus_recv_len
modbus_recv_buff[modbus_recv_len++] = byte;
}
i-void modbus_check_recv_timeout()
{
ukuba(modbus_recv_timeout)
{
modbus_recv_timeout--;
ukuba(modbus_recv_timeout==0)
{
is_modbus_recv_complete = 1;
}
}
}
u8 modbus_send_packet(u8 *packet)
{
u16 len;
u16 crc;
u8 func_code = ipakethi[1];
ngelixa(modbus_send_interval);
ukuba(func_code==MODBUS_FUNC_CODE_10)
{
((MODBUS_10_PACKET*) ipakethi)->byte_num = ((MODBUS_10_PACKET*)ipakethi)->inombolo_yegama*2;
len = 9+((MODBUS_10_PACKET*)packet)->byte_num;
} kungenjalo ukuba(func_code==MODBUS_FUNC_CODE_0F)
{
len = ((MODBUS_0F_PACKET*)ipakethi)->bit_num;
((MODBUS_0F_PACKET*) ipakethi)->byte_num = len/8+(len%8?1:0);
len = 9+((MODBUS_0F_PACKET*)packet)->byte_num;
}okunye
{
len = ubukhulu be(MODBUS_PACKET);
}
crc = crc16(ipakethe,len-2);
ipakethe[len-2] = (u8)(crc>>8);
ipakethe[len-1] = (u8)crc;
modbus_send_bytes(ipakethi,len);
modbus_send_interval = MODBUS_SEND_INTERVAL;
buyisela 0;//Impumelelo
}
extern void modbus_msg_handler(u8 *msg,u16 msg_len);
i-modbus_handler engenanto ()
{
u16 crc;
ukuba(!is_modbus_recv_igqityiwe)
buya
//Jonga ixabiso le-crc
crc = ((u16) modbus_recv_buff[modbus_recv_len-2]<<8)+modbus_recv_buff[modbus_recv_len-1];
ukuba(crc16(modbus_recv_buff,modbus_recv_len-2)==crc)
{
modbus_msg_handler(modbus_recv_buff,modbus_recv_len);
}
modbus_recv_len = 0;
is_modbus_recv_complete = 0;
}
u8 modbus_send_fcode(u8 fcode, u16 addr, u16 len)
{
packet.slave_addr = SLAVE_ADDR;
packet.func_code = fcode;//ikhowudi yokusebenza
packet.start_addr = idilesi;//Idilesi
packet.data_len = len;//Ixabiso elibhaliweyo
len = modbus_send_packet((u8*)&packet);
buyisela len;
}
Ixesha lokuposa: Jan-12-2024