[Opinn uppspretta]Intelligent Training Room

——Frá DWIN Developer Forum

Í þessu hefti kynnum við þér hið margverðlaunaða opna tilvik DWIN Developer Forum - snjalla ræktunarherbergið.Verkfræðingar innleiddu T5L snjallskjáinn til að stjórna hita- og viftustýringaraðgerðum í gegnum Modbus siðareglur.Einnig er hægt að stilla aflgjafann til að líkja eftir lýsingaraðgerðinni.Kerfið getur sjálfkrafa keyrt í samræmi við færibreyturnar sem stilltar eru á skjánum og vistað færslur um bilanasögu.

1.UI Efnisskjár

asvdfb (2)
asvdfb (1)

2.UI Hönnun

asvdfb (3)

1.C51 Hönnun

Helstu kóðar til að afla og uppfæra gögn eins og hitastig, rakastig og hæð á aðalviðmótinu og nota modbus rtu til að stjórna hitastýringareiningum, mótorum, viðvörunarskynjun og öðrum þrælavélum eru sem hér segir

Aðalviðmótskóðatilvísun:

#include "main_win.h"

#include "modbus.h"

#include "sys_params.h"

#include "func_handler.h"

#include "uart2.h"

#innihalda

#innihalda

#define TEMP_HUM_SLAVE_ADDR 2

#define TEMP_HUM_VAL_MAX_NUM 2

#define ALERT_BIT_MAX_NUM 30

#define 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{

bleikjudagsetning[17];

u8 lýsa;

}VIÐVÖRUN;

#define 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;

biti is_main_win = 0;

ógilt main_win_update()

{

}

ógilt main_win_disp_date()

{

u8 len;

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

common_buf[len+1] = 0;

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

}

ógilt main_win_process_alert()

{

u8 ég;

fyrir(i=0;i

{

if(GET_ALERT_BIT(gamalt_viðvörun_val, i))

halda áfram;

if(GET_ALERT_BIT(viðvörun_val, i))

{

if(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",

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

);

alert_num++;

}

}

memcpy (gamalt_viðvörun_val, viðvörun_val, stærð (viðvörun_val));

}

ógilt main_win_disp_alert()

{

u16 ég;

u16 val;

u16 len = 0;

common_buf[0] = 0;

fyrir(i=0;i

{

val = 0;

ef ég

{

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

}

ógilt main_win_init()

{

fljóta fast_val;

u8 ég;

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

fyrir(i=0;i

{

ef(i==0)

halda áfram;

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

}

ógilt main_win_click_handler(u16 btn_val)

{

u8 vísitala;

if(btn_val==0x0B)

{

main_win_disp_alert();

skila;

}

vísitala = btn_val-1;

btn_sta[vísitala] = !btn_sta[vísitala];

if((index==3)||(index==7))

btn_sta[vísitala] = 1;

modbus_write_bit(btn_addr[vísitala], btn_sta[vísitala]?0xFF00:0x0000);

btn_val = btn_sta[vísitala];

sys_write_vp(MAIN_WIN_BTN_STA_START_VP+MAIN_WIN_BTN_STA_OFFSET*index, (u8*)&btn_val, 1);

ef (vísitala==9)

is_main_win = 0;

annað ef((index==3)||(index==7))

{

while(sys_get_touch_sta());

modbus_write_bit(btn_addr[index], 0x0000);

}

}

ógilt 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 ég;

u8 móti;

msg_len = msg_len;

ef(!er_aðalvinningur)

skila;

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

{

offset = MODBUS_RESPOND_POS_DATA;

fyrir(i=0;i

{

main_win_val = SYS_GET_U16(msg[jöfnun], msg[jöfnun+1]);

offset += 2;

}

main_win_update();

}annars ef((f_code==MODBUS_FUNC_CODE_01)&&(data_len==ALERT_BYTE_NUM))

{

offset = MODBUS_RESPOND_POS_DATA;

fyrir(i=0;i

{

alert_val = msg[jöfnun];

offset++;

}

main_win_process_alert();

}annað ef((f_code==MODBUS_FUNC_CODE_03)&&(data_len==TEMP_HUM_VAL_MAX_NUM*2))

{

offset = MODBUS_RESPOND_POS_DATA;

fyrir(i=0;i

{

temp_hum_val = SYS_GET_U16(msg[jöfnun], msg[jöfnun+1]);

offset += 2;

modbus_write_word(5+i, temp_hum_val);

}

main_win_update();

}annað ef((f_code==MODBUS_FUNC_CODE_03)&&(data_len==MAIN_WIN_DATE_MAX_NUM*2))

{

offset = MODBUS_RESPOND_POS_DATA;

fyrir(i=0;i

{

date_val = SYS_GET_U16(msg[jöfnun], msg[jöfnun+1]);

offset += 2;

}

main_win_disp_date();

}

}

ógilt 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;//Revert

}

ógilt main_win_handler()

{

kyrrstæður u8 fáni = 0;

ef (er_aðalvinningur)

{

if(alert_read_period==ALERT_READ_PERIOD)

{

alert_read_period = 0;

modbus_read_bits(510, ALERT_BIT_MAX_NUM);

skila;

}

if(date_update_period==DATE_UPDATE_PERIOD)

{

date_update_period = 0;

modbus_read_words(180, MAIN_WIN_DATE_MAX_NUM);

skila;

}

fáni = !fáni;

ef (fáni)

modbus_read_words(0, MAIN_WIN_VAL_MAX_NUM);

Annar

main_win_read_temp_hum();

}

}

modbus rtu kóða tilvísun:

#include "modbus.h"

#include "crc16.h"

#include "sys_params.h"

#define UART_INCLUDE "uart2.h"

#skilgreina UART_INIT uart2_init

#define UART_SEND_BYTES uart2_send_bytes

#skilgreina UART_BAUD 9600

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

#define MODBUS_SEND_INTERVAL 150

#innihalda UART_INCLUDE

truflanir biti is_modbus_recv_complete = 0;

static u8 modbus_recv_buff[270];

static u16 modbus_recv_len = 0;//Heildarlengd bæta samþykkt

static u8 modbus_recv_timeout = 0;//Samþykkja yfirfallstíma

truflanir u16 modbus_send_interval = 0;

MODBUS_PACKET pakki;

ógilt modbus_init()

{

UART_INIT(UART_BAUD);

}

ógilt modbus_send_bytes(u8 *bæti,u16 len)

{

UART_SEND_BYTES(bæti,len);

}

ógilt modbus_recv_byte(u8 bæti)

{

if(er_modbus_recv_complete)

skila;

if(modbus_recv_len

modbus_recv_buff[modbus_recv_len++] = bæti;

}

ógilt modbus_check_recv_timeout()

{

if (modbus_recv_timeout)

{

modbus_recv_timeout--;

if(modbus_recv_timeout==0)

{

is_modbus_recv_complete = 1;

}

}

}

u8 modbus_send_packet (u8 *pakki)

{

u16 len;

u16 crc;

u8 func_code = pakki[1];

while(modbus_send_interval);

if(func_code==MODBUS_FUNC_CODE_10)

{

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

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

}annað ef(func_code==MODBUS_FUNC_CODE_0F)

{

len = ((MODBUS_0F_PACKET*)pakki)->bitanúmer;

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

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

}Annar

{

len = stærð(MODBUS_PACKET);

}

crc = crc16(pakki,len-2);

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

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

modbus_send_bytes(pakki,len);

modbus_send_interval = MODBUS_SEND_INTERVAL;

skila 0;//Árangur

}

ytra ógilt modbus_msg_handler(u8 *msg,u16 msg_len);

ógilt modbus_handler()

{

u16 crc;

if(!is_modbus_recv_complete)

skila;

//Athugaðu crc gildi

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 adr, u16 len)

{

packet.slave_addr = SLAVE_ADDR;

packet.func_code = fcode;// Aðgerðarkóði

packet.start_addr = addr;// Heimilisfang

packet.data_len = len;//Gildi skrifað

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

skila len;

}


Pósttími: Jan-12-2024