[Oghere Isi mmalite] Ụlọ Ọzụzụ ọgụgụ isi

——Site na ọgbakọ Mmepụta DWIN

N'ime mbipụta a, anyị na-ewebata gị ihe nturu ugo mepere emepe nke DWIN Developer Forum - ụlọ ọrụ cultivation smart.Ndị injinia mebere enyo smart T5L iji jikwaa ọrụ njikwa okpomọkụ na fan site na usoro Modbus.Enwere ike ịhazi ọkụ eletrik ka ọ rụọ ọrụ ọkụ.Usoro nwere ike na-akpaghị aka na-agba ọsọ dị ka paramita atọrọ na ihuenyo na-echekwa njehie akụkọ ihe mere eme ndekọ.

1.UI ihe ngosi

asvdfb (2)
asvdfb (1)

2.UI Nhazi

asvdfb (3)

1.C51 Imebe

Koodu ndị bụ isi maka inweta na imelite data dị ka okpomọkụ, iru mmiri, na elu na isi interface, na iji modbus rtu iji chịkwaa modul njikwa okpomọkụ, moto, nchọpụta mkpu, na igwe ndị ọzọ ohu bụ ndị a.

Ntuziaka koodu isi interface:

#gụnye "isi_win.h"

#gụnyere "modbus.h"

#gụnye "sys_params.h"

#gụnye "func_handler.h"

#gụnyere "uart2.h"

#gụnye

#gụnye

# kọwapụta TEMP_HUM_SLAVE_ADDR 2

# kọwapụta TEMP_HUM_VAL_MAX_NUM 2

# kọwapụta ALERT_BIT_MAX_NUM 30

# kọwapụta ALERT_BYTE_NUM (ALERT_BIT_MAX_NUM/8+((ALERT_BIT_MAX_NUM%8)!=0))

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

struct typedef{

char ụbọchị[17];

u8 okpokoro;

}AKWỤKWỌ;

# kọwapụta 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};

ALERT alert_table[ALERT_TABLE_LEN];

u16 alert_num = 0;

bit is_main_win = 0;

ihe efu main_win_update()

{

}

ihe efu main_win_disp_date()

{

u8 oghere;

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

nkịtị_buf[len+1] = 0;

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

}

ihe efu main_win_process_alert()

{

u8 i;

maka (i=0;i

{

ọ bụrụ (GET_ALERT_BIT (ochie_alert_val, i))

gaa n'ihu;

ma ọ bụrụ (GET_ALERT_BIT(alert_val, i))

{

ọ bụrụ (alert_num>=ALERT_TABLE_LEN)

alert_num = ALERT_TABLE_LEN-1;

alert_table[alert_num].desc = i+1;

sprintf(alert_table[alert_num].ụbọchị, "%u/%u/%u %u:%u",

date_val[0], ụbọchị_val[1], ụbọchị_val[2], ụbọchị_val[3], ụbọchị_val[4]

);

alert_num++;

}

}

memcpy(ochie_alert_val, alert_val, sizeof(alert_val));

}

ihe efu main_win_disp_alert()

{

nke iri na isii;

u16 val;

u16 oghere = 0;

nkịtị_buf[0] = 0;

maka (i=0;i

{

val = 0;

ọ bụrụ (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);

}

nkịtị_buf[len+1] = 0;

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

}

ihe efu main_win_init()

{

sere n'elu fix_val;

u8 i;

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

maka (i=0;i

{

ọ bụrụ (i==0)

gaa n'ihu;

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

}

ihe efu main_win_click_handler(u16 btn_val)

{

u8 ndek;

ọ bụrụ (btn_val== 0x0B)

{

main_win_disp_alert();

laghachi;

}

index = btn_val-1;

btn_sta[index] = !btn_sta[index];

ọ bụrụ na ((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);

ọ bụrụ (index=9)

is_main_win = 0;

ọzọ ma ọ bụrụ ((index=3)||(index==7))

{

mgbe (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 i;

u8 akwụ ụgwọ;

msg_len = msg_len;

ọ bụrụ (! is_main_win)

laghachi;

ọ bụrụ na ((f_code==MODBUS_FUNC_CODE_03)&&(data_len==MAIN_WIN_VAL_MAX_NUM*2))

{

nkwụsị = MODBUS_RESPOND_POS_DATA;

maka (i=0;i

{

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

nkwụsị += 2;

}

main_win_update();

}ọzọ ma ọ bụrụ ((f_code==MODBUS_FUNC_CODE_01)&&(data_len==ALERT_BYTE_NUM))

{

nkwụsị = MODBUS_RESPOND_POS_DATA;

maka (i=0;i

{

alert_val = msg[offset];

mmebi ++;

}

main_win_process_alert();

}ọzọ ma ọ bụrụ ((f_code==MODBUS_FUNC_CODE_03)&&(data_len==TEMP_HUM_VAL_MAX_NUM*2))

{

nkwụsị = MODBUS_RESPOND_POS_DATA;

maka (i=0;i

{

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

nkwụsị += 2;

modbus_write_word(5+i, temp_hum_val);

}

main_win_update();

}ọzọ ma ọ bụrụ ((f_code==MODBUS_FUNC_CODE_03)&&(data_len==MAIN_WIN_DATE_MAX_NUM*2))

{

nkwụsị = MODBUS_RESPOND_POS_DATA;

maka (i=0;i

{

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

nkwụsị += 2;

}

main_win_disp_date();

}

}

ihe efu 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;// tụgharịa

}

ihe efu main_win_handler()

{

ọkọlọtọ u8 static = 0;

ọ bụrụ (bụ_main_win)

{

ọ bụrụ (oge nche_agụ_==ALERT_READ_PERIOD)

{

alert_read_period = 0;

modbus_read_bits (510, ALERT_BIT_MAX_NUM);

laghachi;

}

ọ bụrụ (ụbọchị_update_period==DATE_UPDATE_PERIOD)

{

date_update_period = 0;

modbus_read_words (180, MAIN_WIN_DATE_MAX_NUM);

laghachi;

}

ọkọlọtọ = !flag;

ọ bụrụ (ọkọlọtọ)

modbus_read_words(0, MAIN_WIN_VAL_MAX_NUM);

ọzọ

main_win_read_temp_hum ();

}

}

Ntuziaka koodu modbus rtu:

#gụnyere "modbus.h"

#gụnyere "crc16.h"

#gụnye "sys_params.h"

# kọwaa UART_INCLUDE "uart2.h"

# kọwaa UART_INIT uart2_init

# kọwapụta UART_SEND_BYTES uart2_send_bytes

# kọwaa UART_BAUD 9600

# kọwapụta MODBUS_RECV_TIMEOUT (u8)(35000.0f/UART_BAUD+2)

# kọwapụta MODBUS_SEND_INTERVAL 150

#gụnye UART_INCLUDE

static bit is_modbus_recv_complete = 0;

static u8 modbus_recv_buff[270];

static u16 modbus_recv_len = 0;// Ngụkọta ogologo bytes nabatara

static u8 modbus_recv_timeout = 0;//Nabata oge njupụta

static agbanwe agbanwe u16 modbus_send_interval = 0;

MODBUS_PACKET ngwugwu;

ihe efu modbus_init()

{

UART_INIT(UART_BAUD);

}

ihe efu modbus_send_bytes(u8 *bytes,u16 len)

{

UART_SEND_BYTES(bytes, len);

}

ihe efu modbus_recv_byte(u8 byte)

{

ọ bụrụ (bụ_modbus_recv_complete)

laghachi;

ọ bụrụ (modbus_recv_len

modbus_recv_buff[modbus_recv_len++] = byte;

}

ihe efu modbus_check_recv_timeout()

{

ọ bụrụ (modbus_recv_timeout)

{

modbus_recv_oge--;

ọ bụrụ (modbus_recv_timeout==0)

{

is_modbus_recv_complete = 1;

}

}

}

u8 modbus_send_packet (u8 * ngwugwu)

{

oghere 16;

16 crc;

u8 func_code = ngwugwu[1];

mgbe (modbus_send_interval);

ọ bụrụ (func_code==MODBUS_FUNC_CODE_10)

{

((MODBUS_10_PACKET*)packet)->byte_num = ((MODBUS_10_PACKET*)packet)->okwu_num*2;

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

}ọzọ ma ọ bụrụ (func_code==MODBUS_FUNC_CODE_0F)

{

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

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

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

}ọzọ

{

oghere = nha (MODBUS_PACKET);

}

crc = crc16 (akpa, len-2);

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

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

modbus_send_bytes(ngwugwu, len);

modbus_send_interval = MODBUS_SEND_INTERVAL;

nloghachi 0;// ịga nke ọma

}

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

ihe efu modbus_handler()

{

16 crc;

ọ bụrụ (! is_modbus_recv_complete)

laghachi;

// Lelee uru crc

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

ọ bụrụ (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 oghere)

{

packet.slave_addr = SLAVE_ADDR;

packet.func_code = fcode;// Koodu ọrụ

packet.start_addr = addr;//Adreesị

packet.data_len = len;//Uru e dere

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

laghachi len;

}


Oge nzipu: Jan-12-2024