[Open Source]Chipinda Chophunzitsira Mwanzeru

——Kuchokera ku DWIN Developer Forum

Munkhaniyi, tikukudziwitsani nkhani yotseguka yopambana mphoto ya DWIN Developer Forum - chipinda chanzeru cholima.Mainjiniya adakhazikitsa mawonekedwe anzeru a T5L kuti aziwongolera kutentha ndi kutentha kwa fan kudzera mu protocol ya Modbus.Mphamvu yamagetsi imathanso kusinthidwa kuti ifanane ndi ntchito yowunikira.Dongosololi limatha kuyenda molingana ndi magawo omwe adayikidwa pazenera ndikusunga mbiri yakale yolakwika.

1.UI Zinthu Zowonetsera

asvdfb (2)
asvdfb (1)

2.UI Design

asvdfb (3)

1.C51 Mapangidwe

Zizindikiro zazikulu zopezera ndi kukonzanso deta monga kutentha, chinyezi, ndi kutalika kwa mawonekedwe akuluakulu, ndi kugwiritsa ntchito modbus rtu kulamulira ma modules owongolera kutentha, ma motors, kuzindikira alamu, ndi makina ena akapolo ndi awa:

Main interface code code:

#kuphatikizapo "main_win.h"

#kuphatikizapo "modbus.h"

#kuphatikizapo "sys_params.h"

#kuphatikizapo "func_handler.h"

#kuphatikizapo "uart2.h"

#kuphatikizapo

#kuphatikizapo

# fotokozani TEMP_HUM_SLAVE_ADDR2

# tanthauzirani TEMP_HUM_VAL_MAX_NUM 2

# tanthauzirani ALERT_BIT_MAX_NUM 30

# tanthauzirani 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)

mtundu wa typedef{

tsiku lachiwonetsero[17];

u8 nsi;

}CHENJEZO;

#tanthauzira ALERT_TABLE_LEN 20

static u8 btn_sta[MAIN_WIN_BTN_MAX_NUM] = {0};

static 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};

CHENJEZO_tebulo[ALERT_TABLE_LEN];

u16 alert_num = 0;

pang'ono ndi_main_win = 0;

void main_win_update()

{

}

void main_win_disp_date()

{

u8 inu;

len = sprintf(common_buf, "%u:%u", (u16)deti_val[3], (u16)deti_val[4]);

common_buf[len+1] = 0;

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

}

void main_win_process_alert()

{

u8 ndi;

za(i=0;i

{

ngati(GET_ALERT_BIT(kale_chidziwitso_chovala, i))

pitilizani;

ngati(GET_ALERT_BIT(chidziwitso_chovala, i))

{

ngati(chidziwitso_nambala>=ALERT_TABLE_LEN)

nambala_chidziwitso = ALERT_TABLE_LEN-1;

alert_table[alert_num].desc = i+1;

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

deti_val[0], deti_val[1], deti_val[2], deti_val[3], deti_vale[4]

);

chenjezo_nambala++;

}

}

memcpy(akale_alert_val, alert_val, sizeof(alert_val));

}

void main_win_disp_alert()

{

u16 ine;

u16 gawo;

u16 len = 0;

common_buf[0] = 0;

za(i=0;i

{

gawo = 0;

ngati (i

{

val = 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);

}

void main_win_init()

{

yandama fixed_val;

u8 ndi;

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

za(i=0;i

{

ngati(i==0)

pitilizani;

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

}

void main_win_click_handler(u16 btn_val)

{

u8 index;

ngati(btn_val==0x0B)

{

main_win_disp_alert();

kubwerera;

}

index = btn_val-1;

btn_sta[index] = !btn_sta[index];

ngati((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);

ngati (index==9)

ndi_main_win = 0;

ngati ((index==3)||(index==7))

{

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

u8 ndi;

u8 kusintha;

msg_len = msg_len;

ngati(!ndi_main_win)

kubwerera;

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

{

kuchotsera = MODBUS_RESPOND_POS_DATA;

za(i=0;i

{

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

kusintha += 2;

}

main_win_update ();

}mwina ngati((f_code==MODBUS_FUNC_CODE_01)&&(data_len==ALERT_BYTE_NUM))

{

kuchotsera = MODBUS_RESPOND_POS_DATA;

za(i=0;i

{

alert_val = msg[offset];

kusintha ++;

}

main_win_process_alert();

}mwina ngati((f_code==MODBUS_FUNC_CODE_03)&&(data_len==TEMP_HUM_VAL_MAX_NUM*2))

{

kuchotsera = MODBUS_RESPOND_POS_DATA;

za(i=0;i

{

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

kusintha += 2;

modbus_write_word(5+i, temp_hum_val);

}

main_win_update ();

}mwina ngati((f_code==MODBUS_FUNC_CODE_03)&&(data_len==MAIN_WIN_DATE_MAX_NUM*2))

{

kuchotsera = MODBUS_RESPOND_POS_DATA;

za(i=0;i

{

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

kusintha += 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;//Revert

}

void main_win_handler()

{

static u8 mbendera = 0;

ngati(ndi_main_win)

{

ngati(alert_read_period==ALERT_READ_PERIOD)

{

alert_read_period = 0;

modbus_read_bits(510, ALERT_BIT_MAX_NUM);

kubwerera;

}

ngati(date_update_period==DATE_UPDATE_PERIOD)

{

date_update_period = 0;

modbus_read_words(180, MAIN_WIN_DATE_MAX_NUM);

kubwerera;

}

mbendera = !mbendera;

ngati (mbendera)

modbus_read_words(0, MAIN_WIN_VAL_MAX_NUM);

zina

main_win_read_temp_hum();

}

}

modbus rtu code reference:

#kuphatikizapo "modbus.h"

#kuphatikizapo "crc16.h"

#kuphatikizapo "sys_params.h"

#define UART_INNCLUDE "uart2.h"

#define UART_INIT uart2_init

# define UART_SEND_BYTES uart2_send_bytes

# fotokozani UART_BAUD 9600

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

# tanthauzirani MODBUS_SEND_INTERVAL 150

#kuphatikizapo UART_INCLUDE

static bit is_modbus_recv_complete = 0;

static u8 modbus_recv_buff[270];

static u16 modbus_recv_len = 0;//Utali wonse wa ma byte ovomerezeka

static u8 modbus_recv_timeout = 0;//Landirani nthawi kusefukira

static volatile u16 modbus_send_interval = 0;

MODBUS_PACKET paketi;

void modbus_init()

{

UART_INIT(UART_BAUD);

}

void modbus_send_bytes(u8 *bytes,u16 len)

{

UART_SEND_BYTES(mabayiti,len);

}

opanda modbus_recv_byte(u8 byte)

{

ngati(ndi_modbus_recv_complete)

kubwerera;

ngati(modbus_recv_len

modbus_recv_buff[modbus_recv_len++] = baiti;

}

void modbus_check_recv_timeout()

{

ngati (modbus_recv_timeout)

{

modbus_recv_timeout--;

ngati(modbus_recv_timeout==0)

{

is_modbus_recv_complete = 1;

}

}

}

u8 modbus_send_packet(u8 *packet)

{

u16 gawo;

ndi 16 cr;

u8 func_code = paketi[1];

pamene (modbus_send_interval);

ngati(func_code==MODBUS_FUNC_CODE_10)

{

((MODBUS_10_PACKET*) paketi)->byte_nambala = ((MODBUS_10_PACKET*) paketi)->nambala_ya mawu*2;

len = 9+((MODBUS_10_PACKET*)paketi)->byte_nambala;

}mwina ngati(func_code==MODBUS_FUNC_CODE_0F)

{

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

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

len = 9+((MODBUS_0F_PACKET*)paketi)->byte_nambala;

}ine

{

len = sizeof(MODBUS_PACKET);

}

crc = crc16(paketi,len-2);

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

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

modbus_send_bytes(packet,len);

modbus_send_interval = MODBUS_SEND_INTERVAL;

kubwerera 0;//Kupambana

}

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

void modbus_handler()

{

ndi 16 cr;

ngati(!is_modbus_recv_complete)

kubwerera;

// Onani mtengo wa crc

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

ngati(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;//kodi yantchito

packet.start_addr = addr;//Address

packet.data_len = len;//Value yolembedwa

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

kubwerera len;

}


Nthawi yotumiza: Jan-12-2024