[திறந்த மூல] நுண்ணறிவு பயிற்சி அறை

——DWIN டெவலப்பர் மன்றத்திலிருந்து

இந்த இதழில், DWIN டெவலப்பர் ஃபோரம் - ஸ்மார்ட் சாகுபடி அறையின் விருது பெற்ற ஓப்பன் சோர்ஸ் கேஸை உங்களுக்கு அறிமுகப்படுத்துகிறோம்.மோட்பஸ் நெறிமுறை மூலம் வெப்பமாக்கல் மற்றும் விசிறி வெப்பநிலை கட்டுப்பாட்டு செயல்பாடுகளை கட்டுப்படுத்த பொறியாளர்கள் T5L ஸ்மார்ட் திரையை செயல்படுத்தினர்.லைட்டிங் செயல்பாட்டை உருவகப்படுத்த மின்சார விநியோகத்தையும் சரிசெய்யலாம்.திரையில் அமைக்கப்பட்டுள்ள அளவுருக்களுக்கு ஏற்ப கணினி தானாகவே இயங்கி, தவறு வரலாற்றுப் பதிவுகளைச் சேமிக்கும்.

1.UI பொருள் காட்சி

asvdfb (2)
asvdfb (1)

2.UI வடிவமைப்பு

asvdfb (3)

1.C51 வடிவமைப்பு

பிரதான இடைமுகத்தில் வெப்பநிலை, ஈரப்பதம் மற்றும் உயரம் போன்ற தரவைப் பெறுதல் மற்றும் புதுப்பித்தல் மற்றும் வெப்பநிலை கட்டுப்பாட்டு தொகுதிகள், மோட்டார்கள், அலாரம் கண்டறிதல் மற்றும் பிற அடிமை இயந்திரங்களைக் கட்டுப்படுத்த modbus rtu ஐப் பயன்படுத்துவதற்கான முக்கிய குறியீடுகள் பின்வருமாறு.

முக்கிய இடைமுகக் குறியீடு குறிப்பு:

#"main_win.h" அடங்கும்

# "modbus.h" அடங்கும்

#"sys_params.h" அடங்கும்

#"func_handler.h" அடங்கும்

#"uart2.h" அடங்கும்

#சேர்க்கிறது

#சேர்க்கிறது

#TEMP_HUM_SLAVE_ADDR 2ஐ வரையறுக்கவும்

#TEMP_HUM_VAL_MAX_NUM 2ஐ வரையறுக்கவும்

#ALERT_BIT_MAX_NUM 30ஐ வரையறுக்கவும்

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)

typedef struct{

கரி தேதி[17];

u8 desc;

}எச்சரிக்கை;

#ALERT_TABLE_LEN 20ஐ வரையறுக்கவும்

நிலையான u8 btn_sta[MAIN_WIN_BTN_MAX_NUM] = {0};

நிலையான 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_TABLE_LEN];

u16 alert_num = 0;

பிட் is_main_win = 0;

void main_win_update()

{

}

முக்கிய_win_disp_date()

{

u8 லென்;

len = sprintf(common_buf, "%u:%u", (u16)date_val[3], (u16)date_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 i;

(i=0;i

{

என்றால்(GET_ALERT_BIT(old_alert_val, i))

தொடரவும்;

என்றால்(GET_ALERT_BIT(alert_val, i))

{

if(alert_num>=ALERT_TABLE_LEN)

எச்சரிக்கை_எண் = ALERT_TABLE_LEN-1;

எச்சரிக்கை_டேபிள்[alert_num].desc = i+1;

sprintf(alert_table[alert_num].தேதி, "%u/%u/%u %u:%u",

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

);

எச்சரிக்கை_எண்++;

}

}

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

}

void main_win_disp_alert()

{

u16 i;

u16 வால்;

u16 லென் = 0;

common_buf[0] = 0;

(i=0;i

{

வால் = 0;

ஒருவேளை நான்

{

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

{

மிதவை நிலையான_வால்;

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

(i=0;i

{

என்றால்(i==0)

தொடரவும்;

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 இன்டெக்ஸ்;

என்றால்(btn_val==0x0B)

{

main_win_disp_alert();

திரும்ப;

}

குறியீட்டு = btn_val-1;

btn_sta[index] = !btn_sta[index];

என்றால்((இண்டெக்ஸ்==3)||(இண்டெக்ஸ்==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);

என்றால்(அட்டவணை==9)

is_main_win = 0;

வேறு என்றால்((இண்டெக்ஸ்==3)||(இண்டெக்ஸ்==7))

{

போது(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 ஆஃப்செட்;

msg_len = msg_len;

என்றால்(!முதன்மை_வெற்றி)

திரும்ப;

என்றால்((f_code==MODBUS_FUNC_CODE_03)&&(data_len==MAIN_WIN_VAL_MAX_NUM*2))

{

ஆஃப்செட் = MODBUS_RESPOND_POS_DATA;

(i=0;i

{

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

ஆஃப்செட் += 2;

}

main_win_update();

}இல்லையெனில்((f_code==MODBUS_FUNC_CODE_01)&&(data_len==ALERT_BYTE_NUM))

{

ஆஃப்செட் = MODBUS_RESPOND_POS_DATA;

(i=0;i

{

எச்சரிக்கை_வல் = செய்தி[ஆஃப்செட்];

ஆஃப்செட்++;

}

main_win_process_alert();

}இல்லையெனில்((f_code==MODBUS_FUNC_CODE_03)&&(data_len==TEMP_HUM_VAL_MAX_NUM*2))

{

ஆஃப்செட் = MODBUS_RESPOND_POS_DATA;

(i=0;i

{

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

ஆஃப்செட் += 2;

modbus_write_word(5+i, temp_hum_val);

}

main_win_update();

}இல்லையெனில்((f_code==MODBUS_FUNC_CODE_03)&&(data_len==MAIN_WIN_DATE_MAX_NUM*2))

{

ஆஃப்செட் = MODBUS_RESPOND_POS_DATA;

(i=0;i

{

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

ஆஃப்செட் += 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;//திரும்பவும்

}

void main_win_handler()

{

நிலையான u8 கொடி = 0;

என்றால்(இஸ்_முக்கிய_வெற்றி)

{

என்றால்(alert_read_period==ALERT_READ_PERIOD)

{

எச்சரிக்கை_வாசிப்பு_காலம் = 0;

modbus_read_bits(510, ALERT_BIT_MAX_NUM);

திரும்ப;

}

என்றால்(date_update_period==DATE_UPDATE_PERIOD)

{

date_update_period = 0;

modbus_read_words(180, MAIN_WIN_DATE_MAX_NUM);

திரும்ப;

}

கொடி = !கொடி;

என்றால்(கொடி)

modbus_read_words(0, MAIN_WIN_VAL_MAX_NUM);

வேறு

main_win_read_temp_hum();

}

}

modbus RTU குறியீடு குறிப்பு:

# "modbus.h" அடங்கும்

#"crc16.h" அடங்கும்

#"sys_params.h" அடங்கும்

#UART_INCLUDE "uart2.h"ஐ வரையறுக்கவும்

#UART_INIT uart2_init ஐ வரையறுக்கவும்

#UART_SEND_BYTES uart2_send_bytes ஐ வரையறுக்கவும்

#UART_BAUD 9600 ஐ வரையறுக்கவும்

#வரையறை MODBUS_RECV_TIMEOUT (u8)(35000.0f/UART_BAUD+2)

#வரையறை MODBUS_SEND_INTERVAL 150

#UART_INCLUDE அடங்கும்

நிலையான பிட் is_modbus_recv_complete = 0;

நிலையான u8 modbus_recv_buff[270];

நிலையான u16 modbus_recv_len = 0;//பைட்டுகளின் மொத்த நீளம் ஏற்றுக்கொள்ளப்பட்டது

நிலையான u8 modbus_recv_timeout = 0;//ஓவர்ஃப்ளோ நேரத்தை ஏற்கவும்

நிலையான ஆவியாகும் u16 modbus_send_interval = 0;

MODBUS_PACKET பாக்கெட்;

வெற்றிடமான modbus_init()

{

UART_INIT(UART_BAUD);

}

வெற்றிடமான modbus_send_bytes(u8 *bytes,u16 len)

{

UART_SEND_BYTES(பைட்டுகள், லென்);

}

வெற்றிடமான modbus_recv_byte(u8 பைட்)

{

என்றால்(is_modbus_recv_complete)

திரும்ப;

என்றால்(modbus_recv_len

modbus_recv_buff[modbus_recv_len++] = பைட்;

}

வெற்றிடமான modbus_check_recv_timeout()

{

என்றால்(modbus_recv_timeout)

{

modbus_recv_timeout--;

என்றால்(modbus_recv_timeout==0)

{

is_modbus_recv_complete = 1;

}

}

}

u8 modbus_send_packet(u8 *packet)

{

u16 லென்;

u16 crc;

u8 func_code = தொகுப்பு[1];

போது(modbus_send_interval);

என்றால்(func_code==MODBUS_FUNC_CODE_10)

{

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

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

}இல்லையெனில்(func_code==MODBUS_FUNC_CODE_0F)

{

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

((MODBUS_0F_PACKET*) பாக்கெட்)->பைட்_எண் = லென்/8+(லென்%8?1:0);

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

}வேறு

{

லென் = அளவு (MODBUS_PACKET);

}

crc = crc16(packet,len-2);

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

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

modbus_send_bytes(packet,len);

modbus_send_interval = MODBUS_SEND_INTERVAL;

திரும்ப 0;//வெற்றி

}

வெளிப்புற வெற்றிட modbus_msg_handler(u8 *msg,u16 msg_len);

வெற்றிடமான modbus_handler()

{

u16 crc;

என்றால்(!is_modbus_recv_complete)

திரும்ப;

//சிஆர்சி மதிப்பைச் சரிபார்க்கவும்

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

if(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;//செயல்பாடு குறியீடு

packet.start_addr = addr;//முகவரி

packet.data_len = len;// மதிப்பு எழுதப்பட்டது

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

திரும்ப லென்;

}


இடுகை நேரம்: ஜன-12-2024