[Gufungura isoko] Icyumba cyamahugurwa cyubwenge

—— Kuva kuri Forum ya DWIN Iterambere

Muri iki kibazo, turabagezaho ibihembo byatsindiye isoko yisoko rya DWIN Iterambere - icyumba cyo guhinga cyubwenge.Ba injeniyeri bashyize mubikorwa T5L yubwenge kugirango bagenzure ubushyuhe nubushyuhe bwabafana binyuze muri protocole ya Modbus.Amashanyarazi arashobora kandi guhindurwa kugirango bigane imikorere yumucyo.Sisitemu irashobora guhita ikora ukurikije ibipimo byashyizwe kuri ecran hanyuma ikabika amateka yamateka.

1.UI Yerekana Ibikoresho

asvdfb (2)
asvdfb (1)

2.UI Igishushanyo

asvdfb (3)

1.C51 Igishushanyo

Kode nyamukuru yo kubona no kuvugurura amakuru nkubushyuhe, ubushuhe, nubutumburuke kuri interineti nyamukuru, no gukoresha modbus rtu kugenzura modul igenzura ubushyuhe, moteri, gutabaza, nizindi mashini zabacakara nibi bikurikira

Imigaragarire yingenzi ya kode yerekana:

#shyiramo "main_win.h"

#shyiramo "modbus.h"

#shyiramo "sys_params.h"

#shyiramo "imikorere_umuyobozi.h"

#shyiramo "uart2.h"

#shyiramo

#shyiramo

#sobanura TEMP_HUM_SLAVE_ADDR 2

#sobanura TEMP_HUM_VAL_MAX_NUM 2

#sobanura ALERT_BIT_MAX_NUM 30

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

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

imiterere ya typedef {

itariki ya char [17];

u8 kumanuka;

ALERT;

#sobanura 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 nyamukuru_win_val [MAIN_WIN_VAL_MAX_NUM];

u16 temp_hum_val [TEMP_HUM_VAL_MAX_NUM] = {0};

u16 itariki_ibiciro [MAIN_WIN_DATE_MAX_NUM] = {0};

u8 alert_val [ALERT_BYTE_NUM] = {0};

u8 umusaza_alert_val [ALERT_BYTE_NUM] = {0};

ALERT imenyesha_ibisobanuro [ALERT_TABLE_LEN];

u16 alert_num = 0;

bit is_main_win = 0;

Impfabusa nyamukuru_win_amakuru ()

{

}

Impfabusa nyamukuru_win_ikiganiro_itariki ()

{

u8 len;

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

rusange_buf [len + 1] = 0;

sys_wandika_vp (MAIN_WIN_DATE_VP, rusange_buf, len / 2 + 2);

}

Impfabusa nyamukuru_win_ibikorwa_yerekana ()

{

u8 i;

kuri (i = 0; i

{

niba (GET_ALERT_BIT (kera_alert_val, i))

komeza;

niba (GET_ALERT_BIT (integuza_val, i))

{

niba (alert_num> = ALERT_TABLE_LEN)

integuza_num = ALERT_TABLE_LEN-1;

integuza_ibisobanuro [integuza_num] .desc = i + 1;

sprintf (integuza_ibisobanuro [integuza_num] .itariki, "% u /% u /% u% u:% u",

itariki_gaciro

);

integuza_num ++;

}

}

memcpy (kera_alert_val, integuza_val, sizeof (integuza_val));

}

Impfabusa nyamukuru_win_disp_alert ()

{

u16 i;

u16 val;

u16 len = 0;

rusange_buf [0] = 0;

kuri (i = 0; i

{

val = 0;

niba (i

{

val = integuza_ibisobanuro.desc;

len + = sprintf (ibisanzwe_buf + len, "% s \ r \ n", integuza_table.itariki);

}

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

}

rusange_buf [len + 1] = 0;

sys_wandika_vp (ALERT_WIN_DATE_VP, ibisanzwe_buf, len / 2 + 2);

}

ubusa_win_init ()

{

kureremba_val;

u8 i;

is_main_win = 1;

 

nyamukuru_win_val [5] = (u16) (temp_hum_val [0] /10.0+0.5f);

nyamukuru_win_val [6] = (u16) (temp_hum_val [1] /10.0+0.5f);

kuri (i = 0; i

{

niba (i == 0)

komeza;

sys_wandika_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_wandika_vp (MAIN_WIN_WIND_SPEED_VP, (u8 *) & fix_val, 2);

}

Impfabusa nyamukuru_win_kanda_umuyobozi (u16 btn_val)

{

u8 indangagaciro;

niba (btn_val == 0x0B)

{

Main_win_disp_alert ();

garuka;

}

indangagaciro = btn_val-1;

btn_sta [indangagaciro] =! btn_sta [indangagaciro];

niba ((indangagaciro == 3) || (indangagaciro == 7))

btn_sta [indangagaciro] = 1;

modbus_wandika_bit (btn_addr [indangagaciro], btn_sta [indangagaciro]? 0xFF00: 0x0000);

btn_val = btn_sta [indangagaciro];

sys_wandika_vp (MAIN_WIN_BTN_STA_START_VP + MAIN_WIN_BTN_STA_OFFSET * indangagaciro, (u8 *) & btn_val, 1);

niba (indangagaciro == 9)

ni_main_win = 0;

ikindi niba ((indangagaciro == 3) || (indangagaciro == 7))

{

mugihe (sys_get_gukoraho_sta ());

modbus_wandika_bit (btn_addr [indangagaciro], 0x0000);

}

}

ubusa_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 offset;

msg_len = msg_len;

niba (! is_main_win)

garuka;

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

{

offset = MODBUS_RESPOND_POS_DATA;

kuri (i = 0; i

{

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

offset + = 2;

}

Main_win_update ();

} ikindi niba ((f_code == MODBUS_FUNC_CODE_01) && (data_len == ALERT_BYTE_NUM))

{

offset = MODBUS_RESPOND_POS_DATA;

kuri (i = 0; i

{

integuza_val = msg [offset];

offset ++;

}

nyamukuru_win_ibikorwa_bimenyesha ();

} ikindi niba ((f_code == MODBUS_FUNC_CODE_03) && (data_len == TEMP_HUM_VAL_MAX_NUM * 2))

{

offset = MODBUS_RESPOND_POS_DATA;

kuri (i = 0; i

{

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

offset + = 2;

modbus_wandika_ijambo (5 + i, temp_hum_val);

}

Main_win_update ();

} ikindi niba ((f_code == MODBUS_FUNC_CODE_03) && (data_len == MAIN_WIN_DATE_MAX_NUM * 2))

{

offset = MODBUS_RESPOND_POS_DATA;

kuri (i = 0; i

{

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

offset + = 2;

}

Main_win_disp_date ();

}

}

Impfabusa nyamukuru_win_isoma_temp_hum ()

{

u8 umusaza_umucakara_addr = UMUGaragu_ADDR;

        

sys_params.user_config [5] = TEMP_HUM_SLAVE_ADDR;

modbus_isoma_amagambo (0, TEMP_HUM_VAL_MAX_NUM);

sys_params.user_config [5] = umusaza_umugaragu_addr; // Hindura

}

ubusa nyamukuru_win_umuyobozi ()

{

static u8 ibendera = 0;

niba (is_main_win)

{

niba (integuza_isoma_igihe == ALERT_READ_PERIOD)

{

integuza_isoma_igihe = 0;

modbus_isoma_bits (510, ALERT_BIT_MAX_NUM);

garuka;

}

niba (itariki_yumunsi_igihe == DATE_UPDATE_PERIOD)

{

itariki_yumunsi_igihe = 0;

modbus_isoma_amagambo (180, MAIN_WIN_DATE_MAX_NUM);

garuka;

}

ibendera =! ibendera;

niba (ibendera)

modbus_isoma_amagambo (0, MAIN_WIN_VAL_MAX_NUM);

ikindi

nyamukuru_win_isoma_temp_hum ();

}

}

modbus rtu code yerekana:

#shyiramo "modbus.h"

#shyiramo "crc16.h"

#shyiramo "sys_params.h"

#sobanura UART_INCLUDE "uart2.h"

#sobanura UART_INIT uart2_init

#sobanura UART_SEND_BYTES uart2_send_bytes

#sobanura UART_BAUD 9600

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

#sobanura MODBUS_SEND_INTERVAL 150

#shyiramo UART_INCLUDE

biti bihamye ni_modbus_recv_ibyuzuye = 0;

static u8 modbus_recv_buff [270];

static u16 modbus_recv_len = 0; // Uburebure bwuzuye bwa bytes byemewe

static u8 modbus_recv_timeout = 0; // Emera igihe cyuzuye

static ihindagurika u16 modbus_send_interval = 0;

Ipaki ya MODBUS_PACKET;

ubusa modbus_init ()

{

UART_INIT (UART_BAUD);

}

modbus_send_bytes (u8 * bytes, u16 len)

{

UART_SEND_BYTES (bytes, len);

}

modbus_recv_byte (u8 byte)

{

niba (is_modbus_recv_yuzuye)

garuka;

niba (modbus_recv_len

modbus_recv_buff [modbus_recv_len ++] = byte;

}

ubusa modbus_check_recv_timeout ()

{

niba (modbus_recv_timeout)

{

modbus_recv_igihe cyigihe--;

niba (modbus_recv_timeout == 0)

{

ni_modbus_recv_yuzuye = 1;

}

}

}

u8 modbus_send_paki (u8 * paki)

{

u16 len;

u16 crc;

u8 imikorere_code = paki [1];

mugihe (modbus_send_interval);

niba (imikorere_code == MODBUS_FUNC_CODE_10)

{

((MODBUS_10_PACKET *) paki) -> byte_num = (((MODBUS_10_PACKET *) paki) -> ijambo_num * 2;

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

} ikindi niba (imikorere_code == MODBUS_FUNC_CODE_0F)

{

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

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

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

} ikindi

{

len = ubunini (MODBUS_PACKET);

}

crc = crc16 (paki, len-2);

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

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

modbus_send_bytes (paki, len);

modbus_send_interval = MODBUS_SEND_INTERVAL;

garuka 0; // Intsinzi

}

hanze idafite agaciro modbus_msg_handler (u8 * msg, u16 msg_len);

modbus_handler ()

{

u16 crc;

niba (! is_modbus_recv_yuzuye)

garuka;

// Reba agaciro ka crc

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

niba (crc16 (modbus_recv_buff, modbus_recv_len-2) == crc)

{

modbus_msg_handler (modbus_recv_buff, modbus_recv_len);

}

modbus_recv_len = 0;

ni_modbus_recv_complete = 0;

}

u8 modbus_send_fcode (u8 fcode, u16 addr, u16 len)

{

paki.umucakara_addr = UMUGaragu_ADDR;

packet.func_code = fcode; // Kode yimikorere

paki.intangiriro_addr = addr; // Aderesi

packet.data_len = len; // Agaciro kanditse

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

garuka len;

}


Igihe cyo kohereza: Mutarama-12-2024