[Ilo furan] Qolka Tababarka Caqliga leh

——Waxaa laga soo qaatay Madasha Horumarinta ee DWIN

Arrintaan, waxaanu kuugu soo bandhigaynaa kiis il furan oo abaal-marin ah oo ku saabsan Madasha Horumarinta ee DWIN - qolka beerashada ee caqliga leh.Injineerada ayaa hirgaliyay shaashada casriga ah ee T5L si ay u xakameeyaan kulaylinta iyo hawlaha xakamaynta heerkulka marawaxada iyada oo loo marayo borotokoolka Modbus.Korontada sidoo kale waa la hagaajin karaa si loogu ekaado shaqada iftiinka.Nidaamku si otomaatig ah ayuu u socon karaa iyadoo loo eegayo cabbirrada lagu dejiyay shaashadda wuxuuna keydin karaa diiwaannada taariikhda khaladka ah.

1.UI Qalabka Muujinta

asvdfb (2)
asvdfb (1)

2.UI Design

asvdfb (3)

1.C51 Naqshad

Koodhadhka ugu muhiimsan ee helitaanka iyo cusboonaysiinta xogta sida heerkulka, qoyaanka, iyo joogitaanka interface ugu weyn, iyo isticmaalka modbus rtu si loo xakameeyo modules-ka heerkulka, matoorada, ogaanshaha alaarmiga, iyo mashiinnada kale ee addoonta waa sida soo socota.

Tixraaca koodhka interneedka muhiimka ah:

#ku dar "guul_guud.h"

#ku dar "modbus.h"

#ku dar "sys_params.h"

#ku dar "func_handler.h"

#ku dar "uart2.h"

#ku dar

#ku dar

# qeex TEMP_HUM_SLAVE_ADDR 2

# qeex TEMP_HUM_VAL_MAX_NUM 2

# qeex ALERT_BIT_MAX_NUM 30

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

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

qaabka loo yaqaan typedef

taariikhda char[17];

u8 desk;

OGEYSIIN;

# Qeex WARGELIN_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};

Miiska digniinta ALERT[ALERT_TABLE_LEN];

u16 alert_num = 0;

xoogaa waa_main_win = 0;

madhan main_win_update()

{

}

madhan main_win_disp_date()

{

u8 len;

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

caadi_buf[len+1] = 0;

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

}

madhan main_win_process_alert()

{

u8 i;

loogu talagalay(i=0;i

{

haddi(GET_ALERT_BIT(old_alert_val,i))

sii wad;

haddi(GET_ALERT_BIT( digniin_val,i))

{

haddi( digniin_num>=ALERT_TABLE_LEN)

digniin_num = ALERT_TABLE_LEN-1;

alert_table[alert_num].desc = i+1;

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

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

);

digniin_nambar++;

}

}

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

}

madhan main_win_disp_alert()

{

u16 i;

u16 val;

u16 len = 0;

caadi_buf[0] = 0;

loogu talagalay(i=0;i

{

Val = 0;

haddii (i

{

val = alert_table.desc;

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

}

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

}

caadi_buf[len+1] = 0;

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

}

madhan main_win_init()

{

sabayn fix_val;

u8 i;

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

loogu talagalay(i=0;i

{

haddii (i==0)

sii wad;

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

}

madhan main_win_click_handler(u16 btn_val)

{

index u8;

haddii (btn_val== 0x0B)

{

main_win_disp_alert();

soo noqosho;

}

index = btn_val-1;

btn_sta[index] = !btn_sta[index];

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

haddii (index=9)

waa_guul_guud = 0;

haddii kale haddii (((index=3)||(index=7))

{

halka (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 dhimis;

msg_len = msg_len;

haddi(! waa_guul_guud)

soo noqosho;

haddi((f_code==MODBUS_FUNC_CODE_03)&&(xogta_len==MAIN_WIN_VAL_MAX_NUM*2))

{

ka-baxsan = MODBUS_RESPOND_POS_DATA;

loogu talagalay(i=0;i

{

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

dhimis += 2;

}

main_win_update ();

}kale haddii((f_code==MODBUS_FUNC_CODE_01)&&(xogta_len==ALERT_BYTE_NUM))

{

ka-baxsan = MODBUS_RESPOND_POS_DATA;

loogu talagalay(i=0;i

{

alert_val = msg[offset];

dib u dhac ++;

}

main_win_process_alert();

}kale haddii((f_code==MODBUS_FUNC_CODE_03)&&(xogta_len==TEMP_HUM_VAL_MAX_NUM*2))

{

ka-baxsan = MODBUS_RESPOND_POS_DATA;

loogu talagalay(i=0;i

{

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

dhimis += 2;

modbus_write_word (5+i, temp_hum_val);

}

main_win_update ();

}kale haddii((f_code==MODBUS_FUNC_CODE_03)&&(xogta_len==MAIN_WIN_DATE_MAX_NUM*2))

{

ka-baxsan = MODBUS_RESPOND_POS_DATA;

loogu talagalay(i=0;i

{

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

dhimis += 2;

}

main_win_disp_date ();

}

}

madhan 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;// Soo celi

}

madhan main_win_handler()

{

calanka u8 taagan = 0;

haddi (guusha_guud)

{

hadday

{

feejignaanta_read_period = 0;

modbus_read_bits (510, ALERT_BIT_MAX_NUM);

soo noqosho;

}

hadday

{

date_update_period = 0;

modbus_read_words (180, MAIN_WIN_DATE_MAX_NUM);

soo noqosho;

}

calan = !calan;

haddii (calan)

modbus_read_words (0, MAIN_WIN_VAL_MAX_NUM);

kale

main_win_read_temp_hum ();

}

}

tixraaca code modbus rtu:

#ku dar "modbus.h"

#waxaa ku jira "crc16.h"

#ku dar "sys_params.h"

# qeex UART_INCLUDE "uart2.h"

# qeex UART_INIT uart2_init

# qeex UART_SEND_BYTES uart2_dir_bytes

# qeex UART_BAUD 9600

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

#Qeex MODBUS_SEND_INTERVAL 150

#ku dar UART_INCLUDE

yara taagan is_modbus_recv_complete = 0;

static u8 modbus_recv_buff[270];

static u16 modbus_recv_len = 0;// Wadarta dhererka bytes waa la aqbalay

static u8 modbus_recv_timeout = 0;//Aqbal wakhtiga qulqulka

kacsan u16 modbus_send_interval = 0;

MODBUS_PACKET xirmo;

modbus_init ()

{

UART_INIT (UART_BAUD);

}

modbus_send_bytes maran (u8 *bytes,u16 len)

{

UART_SEND_BYTES(bytes,len);

}

modbus_recv_byte (u8 byte)

{

haddi (ay_modbus_recv_dhamaystiran tahay)

soo noqosho;

haddii (modbus_recv_len

modbus_recv_buff[modbus_recv_len++] = byte;

}

modbus_check_recv_timeout ()

{

haddi (modbus_recv_timeout)

{

modbus_recv_timeout--;

haddi (modbus_recv_timeout==0)

{

is_modbus_recv_complete = 1;

}

}

}

u8 modbus_send_packet (u8 * xirmo)

{

len16;

u16 crc;

u8 func_code = xirmo[1];

halka (modbus_send_interval);

haddii (func_code==MODBUS_FUNC_CODE_10)

{

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

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

Haddii kale (func_code==MODBUS_FUNC_CODE_0F)

{

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

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

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

}kale

{

len = cabbirka (MODBUS_PACKET);

}

crc = crc16 (xirmo, len-2);

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

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

modbus_send_bytes (xirmo, len);

modbus_send_interval = MODBUS_SEND_INTERVAL;

soo noqo 0;//guul

}

modbus_msg_handler (u8 *msg,u16 msg_len);

modbus_handler ()

{

u16 crc;

haddii (! is_modbus_recv_complete)

soo noqosho;

// Hubi qiimaha crc

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

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

{

xirmo.slave_addr = SLAVE_ADDR;

packet.func_code = fcode;// Koodhka shaqada

packet.start_addr = addr;//Cinwaanka

packet.data_len = len;//Qiimaha qoran

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

dib-u-celinta;

}


Waqtiga boostada: Jan-12-2024