[Манбаи кушода] Ҳуҷраи омӯзишии интеллектуалӣ

——Аз форуми таҳиягарони DWIN

Дар ин шумора, мо ба шумо парвандаи кушодаи ҷоизадори Форуми Developer DWIN - утоқи парвариши интеллектуалиро пешниҳод мекунем.Муҳандисон экрани интеллектуалии T5L-ро барои назорати функсияҳои гармидиҳӣ ва ҳарорати ҳаво тавассути протоколи Modbus татбиқ карданд.Таъмини барқро инчунин метавонад барои тақлид кардани функсияи рӯшноӣ танзим кард.Система метавонад ба таври худкор мувофиқи параметрҳои дар экран муқарраршуда кор кунад ва сабтҳои таърихи хатогиҳоро захира кунад.

1.Намоиши маводи UI

asvdfb (2)
asvdfb (1)

2. Тарҳрезии UI

asvdfb (3)

1.C51 Тарҳрезӣ

Рамзҳои асосӣ барои ба даст овардан ва нав кардани маълумот ба монанди ҳарорат, намӣ ва баландӣ дар интерфейси асосӣ ва истифодаи modbus Rtu барои назорати модулҳои назорати ҳарорат, муҳаррикҳо, ошкоркунии ҳушдор ва дигар мошинҳои ғуломӣ инҳоянд

Истинод барои рамзи интерфейси асосӣ:

#дарбар кунед "main_win.h"

# дохил кунед "modbus.h"

#include "sys_params.h"

#include "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))

#муайян кардани GET_ALERT_BIT(val, pos) ((val[pos/8]>>(pos%8))&0x01)

сохтори typedef{

санаи аломат[17];

u8 паст;

}Ҳушдор;

#муайян кардани ALERT_TABLE_LEN 20

статикӣ 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 сана_сана[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;

бит is_main_win = 0;

main_win_update () бекор

{

}

void main_win_disp_date()

{

u8 len;

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(alert_alert_val, i))

давом додан;

агар(GET_ALERT_BIT(alert_val, i))

{

агар(alert_num>=ALERT_TABLE_LEN)

alert_num = ALERT_TABLE_LEN-1;

alert_table[alert_num].desc = i+1;

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

санаи_сан[0], санаи_сан[1], санаи_сан[2], санаи_сан[3], санаи_сан[4]

);

alert_num++;

}

}

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

}

void main_win_disp_alert ()

{

u16 i;

u16 вал;

u16 len = 0;

умумӣ_буф[0] = 0;

барои(i=0;i

{

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

{

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

барои(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[индекс] = !btn_sta[index];

агар((индекс==3)||(индекс==7))

btn_sta[индекс] = 1;

modbus_write_bit(btn_addr[index], btn_sta[index]?0xFF00:0x0000);

btn_val = btn_sta[индекс];

sys_write_vp(MAIN_WIN_BTN_STA_START_VP+MAIN_WIN_BTN_STA_OFFSET*индекс, (u8*)&btn_val, 1);

агар (индекс==9)

is_main_win = 0;

else if((индекс==3)||(индекс==7))

{

while(sys_get_touch_sta());

modbus_write_bit(btn_addr[index], 0x0000);

}

}

void main_win_msg_handler (u8 *msg,u16 msg_len)

{

u8 f_code = паём[MODBUS_RESPOND_POS_FUNC_CODE];

u8 data_len = паём[MODBUS_RESPOND_POS_DATA_LEN];

u8 i;

u8 ҷуброн;

msg_len = msg_len;

агар(!is_main_win)

бозгашт;

агар((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

{

alert_val = msg[офсет];

офсет++;

}

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

}

}

ботил 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)

{

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"

#include "crc16.h"

#include "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-ро муайян кунед

#include UART_INCLUDE

бит статикӣ is_modbus_recv_complete = 0;

статикӣ u8 modbus_recv_buff [270];

static u16 modbus_recv_len = 0;//Дарозии умумии байтҳои қабулшуда

статикӣ u8 modbus_recv_timeout = 0;//Вақти фаромаданро қабул кунед

ноустувори статикӣ u16 modbus_send_interval = 0;

бастаи MODBUS_PACKET;

void modbus_init ()

{

UART_INIT(UART_BAUD);

}

бекор кардани modbus_send_bytes (u8 *bytes, u16 len)

{

UART_SEND_BYTES(байт,лен);

}

void modbus_recv_byte (u8 байт)

{

агар (ис_modbus_recv_complete)

бозгашт;

агар (modbus_recv_len

modbus_recv_buff[modbus_recv_len++] = байт;

}

void modbus_check_recv_timeout ()

{

агар (modbus_recv_timeout)

{

modbus_recv_timeout--;

агар(modbus_recv_timeout==0)

{

is_modbus_recv_complete = 1;

}

}

}

u8 modbus_send_packet(u8 *пакет)

{

u16 len;

u16 crc;

u8 func_code = пакет[1];

дар ҳоле (modbus_send_interval);

агар(функ_коди==MODBUS_FUNC_CODE_10)

{

((MODBUS_10_PACKET*)пакет)->byte_num = ((MODBUS_10_PACKET*)пакет)->word_num*2;

len = 9+((MODBUS_10_PACKET*)пакет)->byte_num;

}дигар агар(func_code==MODBUS_FUNC_CODE_0F)

{

len = ((MODBUS_0F_PACKET*)пакет)->bit_num;

((MODBUS_0F_PACKET*)пакет)->byte_num = len/8+(len%8?1:0);

len = 9+((MODBUS_0F_PACKET*)пакет)->byte_num;

} дигар

{

len = андозаи(MODBUS_PACKET);

}

crc = crc16 (пакет, len-2);

пакет[len-2] = (u8)(crc>>8);

пакет[len-1] = (u8)crc;

modbus_send_bytes (пакет, лен);

modbus_send_interval = MODBUS_SEND_INTERVAL;

баргардонидани 0;//Муваффақият

}

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

void modbus_handler ()

{

u16 crc;

агар(!is_modbus_recv_complete)

бозгашт;

//Қимати crc-ро санҷед

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

агар(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 adr, u16 len)

{

packet.slave_addr = SLAVE_ADDR;

packet.func_code = fcode;//Рамзи функсия

packet.start_addr = адрес;//Адрес

packet.data_len = len;//Арзиш навишта шудааст

len = modbus_send_packet ((u8 *) & пакет);

баргаштан;

}


Вақти фиристодан: январ-12-2024