[Bude Madogararsa]Dakin Horo da Hankali

——Daga Dandalin Masu Haɓaka DWIN

A cikin wannan fitowar, za mu gabatar muku da buɗaɗɗen buɗaɗɗen buɗaɗɗen lambar yabo na Dandalin Masu Haɓaka DWIN - ɗakin noma mai wayo.Injiniyoyin sun aiwatar da allon wayo na T5L don sarrafa dumama da ayyukan sarrafa zafin fan ta hanyar ka'idar Modbus.Hakanan za'a iya daidaita wutar lantarki don daidaita aikin hasken wuta.Tsarin zai iya aiki ta atomatik bisa ga sigogi da aka saita akan allon kuma ya adana bayanan tarihin kuskure.

1.UI Material Nuni

asvdfb (2)
asvdfb (1)

2.UI Design

asvdfb (3)

1.C51 Zane

Babban lambobi don samun da sabunta bayanai kamar zafin jiki, zafi, da tsayi a kan babban mahallin, da kuma amfani da modbus rtu don sarrafa kayan sarrafa zafin jiki, injina, gano ƙararrawa, da sauran injinan bayi sune kamar haka.

Babban bayanin lambar mu'amala:

#hada da "main_win.h"

#hada da "modbus.h"

#hada da "sys_params.h"

# hada da "func_handler.h"

#hada da "uart2.h"

#hada da

#hada da

# ayyana TEMP_HUM_SLAVE_ADDR 2

# ayyana TEMP_HUM_VAL_MAX_NUM 2

# ayyana ALERT_BIT_MAX_NUM 30

#bayyana ALERT_BYTE_NUM (ALERT_BIT_MAX_NUM/8+((ALERT_BIT_MAX_NUM%8)!=0))

#bayyana GET_ALERT_BIT(val, pos) ((val[pos/8]>>(pos%8))&0x01)

tsarin rubutu{

kwanan wata [17];

ku 8 ;

} FADAKARWA;

# ayyana SANARWA_TABLE_LEN 20

a tsaye u8 btn_sta[MAIN_WIN_BTN_MAX_NUM] = {0};

a tsaye u8 btn_addr[MAIN_WIN_BTN_MAX_NUM] = {50, 51, 52, 69, 53, 54, 55, 70, 56, 57, 58, 59};

u16 main_win_val[MAIN_WIN_VAL_MAX_NUM];

u16 temp_hum_val[TEMP_HUM_VAL_MAX_NUM] = {0};

u16 date_val[MAIN_WIN_DATE_MAX_NUM] = {0};

u8 alert_val[ALERT_BYTE_NUM] = {0};

u8 old_alert_val[ALERT_BYTE_NUM] = {0};

ALERT faɗakarwa_tebur[ALERT_TABLE_LEN];

u16 alert_num = 0;

bit is_main_win = 0;

banza main_win_update()

{

}

banza main_win_disp_date()

{

u8 zuw;

len = sprintf (na kowa_buf, "% u:%u", (u16) date_val[3], (u16) date_val[4]);

na kowa_buf[len+1] = 0;

sys_write_vp (MAIN_WIN_DATE_VP, common_buf, len/2+2);

}

banza main_win_process_alert()

{

ku 8;

domin (i=0;i

{

idan (GET_ALERT_BIT (tsohon_alert_val, i))

ci gaba;

idan (GET_ALERT_BIT(jijjiga_val, i))

{

idan (alert_num>=ALERT_TABLE_LEN)

alert_num = ALERT_TABLE_LEN-1;

alert_table[alert_num].desc = i+1;

sprintf(alert_table[alert_num].kwana, "%u/%u/%u %u:%u",

date_val[0], date_val[1], date_val[2], date_val[3], date_val[4]

);

faɗakarwa_num++;

}

}

memcpy(old_alert_val, alert_val, sizeof(alert_val));

}

banza main_win_disp_alert()

{

ku 16;

ku 16;

len u16 = 0;

gama gari[0] = 0;

domin (i=0;i

{

wuta = 0;

idan (i

{

val = alert_table.desc;

len += sprintf(na kowa_buf+len, "%s\r\n", alert_table.date);

}

sys_write_vp(ALERT_WIN_DESC_START_VP+i, (u8*)&val, 1);

}

na kowa_buf[len+1] = 0;

sys_write_vp (ALERT_WIN_DATE_VP, common_buf, len/2+2);

}

void main_win_init()

{

iyo fix_val;

ku 8;

is_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);

domin (i=0;i

{

idan (i==0)

ci gaba;

sys_write_vp(MAIN_WIN_WIND_SPEED_VP+MAIN_WIN_VAL_OFFSET*i, (u8*)&main_win_val, 1);

}

fix_val = main_win_val[0]/WIND_SPEED_SCALE+FLOAT_FIX_VAL;

sys_write_vp(MAIN_WIN_WIND_SPEED_VP, (u8*)&fixed_val, 2);

}

void main_win_click_handler(u16 btn_val)

{

u8 ;

idan (btn_val==0x0B)

{

main_win_disp_alert();

dawowa;

}

index = btn_val-1;

btn_sta[index] = !btn_sta[index];

idan (((index=3)||(index=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);

idan (index=9)

is_main_win = 0;

idan kuma (((index=3)||(index=7))

{

yayin (sys_get_touch_sta());

modbus_write_bit (btn_addr [index], 0x0000);

}

}

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];

ku 8;

u8 biya;

msg_len = msg_len;

idan (! is_main_win)

dawowa;

idan ((f_code==MODBUS_FUNC_CODE_03)&&(data_len==MAIN_WIN_VAL_MAX_NUM*2))

{

biya diyya = MODBUS_RESPOND_POS_DATA;

domin (i=0;i

{

main_win_val = SYS_GET_U16(msg[offset], msg[offset+1]);

biya += 2;

}

main_win_update();

} kuma idan ((f_code==MODBUS_FUNC_CODE_01)&&(bayanai_len==ALERT_BYTE_NUM))

{

biya diyya = MODBUS_RESPOND_POS_DATA;

domin (i=0;i

{

alert_val = msg[offset];

kashe ++;

}

main_win_process_alert();

} in ((f_code==MODBUS_FUNC_CODE_03)&&(data_len==TEMP_HUM_VAL_MAX_NUM*2))

{

biya diyya = MODBUS_RESPOND_POS_DATA;

domin (i=0;i

{

temp_hum_val = SYS_GET_U16(msg[offset], msg[offset+1]);

biya += 2;

modbus_write_word(5+i, temp_hum_val);

}

main_win_update();

} in ((f_code==MODBUS_FUNC_CODE_03)&&(data_len==MAIN_WIN_DATE_MAX_NUM*2))

{

biya diyya = MODBUS_RESPOND_POS_DATA;

domin (i=0;i

{

date_val = SYS_GET_U16(msg[offset], msg[offset+1]);

biya += 2;

}

main_win_disp_date();

}

}

void main_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;//Maida

}

banza main_win_handler()

{

Tutar u8 a tsaye = 0;

idan (shine_babban_nasara)

{

idan (lokacin karanta_ faɗakarwa = ALERT_READ_PERIOD)

{

alert_read_period = 0;

modbus_read_bits (510, ALERT_BIT_MAX_NUM);

dawowa;

}

idan (lokacin_sabuntawa = DATE_UPDATE_PERIOD)

{

date_update_period = 0;

modbus_read_words (180, MAIN_WIN_DATE_MAX_NUM);

dawowa;

}

tuta = ! tuta;

idan (tuta)

modbus_read_words (0, MAIN_WIN_VAL_MAX_NUM);

wani

main_win_read_temp_hum();

}

}

modbus rtu code reference:

#hada da "modbus.h"

#hada da "crc16.h"

#hada da "sys_params.h"

# ayyana UART_INCLUDE "uart2.h"

# ayyana UART_INIT uart2_init

# ayyana UART_SEND_BYTES uart2_aika_bytes

# ayyana UART_BAUD 9600

# ayyana MODBUS_RECV_TIMEOUT (u8)(35000.0f/UART_BAUD+2)

# ayyana MODBUS_SEND_INTERVAL 150

#hade UART_INCLUDE

a tsaye bit is_modbus_recv_complete = 0;

a tsaye u8 modbus_recv_buff[270];

a tsaye u16 modbus_recv_len = 0;// Jimlar tsawon bytes da aka karɓa

a tsaye u8 modbus_recv_timeout = 0;// Karɓar lokacin ambaliya

mai canzawa u16 modbus_send_interval = 0;

MODBUS_PACKET fakiti;

babu modbus_init()

{

UART_INIT(UART_BAUD);

}

modbus_send_bytes (u8 *bytes, len u16)

{

UART_SEND_BYTES(bytes, len);

}

modbus_recv_byte (u8 byte)

{

idan (shi_modbus_recv_complete)

dawowa;

idan (modbus_recv_len

modbus_recv_buff[modbus_recv_len++] = byte;

}

modbus_check_recv_timeout()

{

idan (modbus_recv_timeout)

{

modbus_recv_timeout--;

idan (modbus_recv_timeout==0)

{

is_modbus_recv_complete = 1;

}

}

}

u8 modbus_send_packet (u8 * fakiti)

{

u16 ruwan;

ku 16 crc;

u8 func_code = fakiti[1];

yayin (modbus_send_interval);

idan (func_code==MODBUS_FUNC_CODE_10)

{

((MODBUS_10_PACKET*) fakiti)->byte_num = ((MODBUS_10_PACKET*) fakiti)->kalmar_num*2;

len = 9+ ((MODBUS_10_PACKET*) fakiti) ->byte_num;

} kuma idan (func_code==MODBUS_FUNC_CODE_0F)

{

len = ((MODBUS_0F_PACKET*) fakiti)->bit_num;

((MODBUS_0F_PACKET*) fakiti) ->byte_num = len/8+(len%8?1:0);

len = 9+ ((MODBUS_0F_PACKET*) fakiti) ->byte_num;

} sauran

{

len = girman (MODBUS_PACKET);

}

crc = crc16 (fakiti, len-2);

fakiti[len-2] = (u8) (crc>> 8);

fakiti[len-1] = (u8) crc;

modbus_send_bytes(fakiti, len);

modbus_send_interval = MODBUS_SEND_INTERVAL;

dawo 0;//Nasara

}

extern void modbus_msg_handler(u8 *msg,u16 msg_len);

m modbus_handler()

{

ku 16 crc;

idan (! is_modbus_recv_complete)

dawowa;

//Duba darajar crc

crc = ((u16)modbus_recv_buff[modbus_recv_len-2]<<8)+modbus_recv_buff[modbus_recv_len-1];

idan (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;//Lambar aiki

packet.start_addr = addr;//Adireshi

packet.data_len = len;//An rubuta darajar

len = modbus_send_packet ((u8*)&fakiti);

dawo da len;

}


Lokacin aikawa: Janairu-12-2024