Download as pdf or txt
Download as pdf or txt
You are on page 1of 10

Chia s

Lin kt khc

Blog tip theo

To Blog

ng nhp

STAR SHARE
Lun L Chnh Mnh

Trang ch

Gii thiu

Cc d n

H tr k thut

Qu tng

Lin H
TM KIM BLOG NY
Tm kim

RS 485
Giao thc modbus 1 Cu trc khung truyn: <a ch slave>< chc nng>< [d liu]><CRCh><CRCl> Theo chun th a ch thit b #0 , a ch =0 l yu cu tt c cc thit b BROADCAST g V d: a ch thit b : Giau_id = 0x45 Chc nng: Gi chui xung PIC: 0x01 Yu cu pic gi chui v PC :0x02

BI NG PH BIN

RS 485 Giao thc modbus 1 Cu trc khung truyn: <a ch slave>< chc nng>< [d liu]><CRCh><CRCl> Theo chun th ... 3D Printer M hnh 3D

Gi s chui cn truyn l : Data_tx = giau Byte kim tra CRC tnh c l 0x56,0xf3 Khi my tnh truyn xung pic d liu nh sau: 0x450x01giau0x560xf3<khong trng khong cch ti thiu gia hai khung truyn> Ch l giau l gi m ansi ca my ch . bo kt thc khung truyn l mt khong trng sau khi truyenf xong

RF Led Tri tim Cc hiu ng ///////////////test////////////////////// #define test 0 #if test void effect1() { unsigned char i; out.ma=0xfffff... Led Cube 3d cvnrjdf fhdf

2 . X l d liu nhn c trn PIC A, cu trc khung truyn: struct { int8 address; // a ch ch v d giau_id int8 len; //ci ny cha kich thc d liu nhn c c them vo //thun tin cho vic x l d liu sau ny function func; //the function of the message received exception error; //ci exception ty theo yu cu thi c ko th ty int8 data[MODBUS_SERIAL_RX_BUFFER_SIZE]; //mng cha d liu nhn c // } modbus_rx; nhn d liu nhn t PC ta dng ngt rda, trong ngt ngy thc hin nhn tng k t a vo cu trc bn trn , ng thi gi trnh tnh crc cng thc hin ng thi, bit lc no kt thc khung truyn ta s dng ngt timer sau mi k t nhn c gi tr timer s c reset li, nu d liu cn trong khung th n s lien tc c ngha l khong cch gia 2 k t lien tip s nh hn khong thi gian timer trn d liu s c a vo cu trc trn. C th nh sau: Cn c vo cu trc khung truyn ta thy d liu nhn theo 3 giai on:

Led Ball 1. Vn cp ngun. Ngun cp cho mch iu khin c thc hin thng qua mt bin p cao tn, li khng kh. Cun s cp c iu... Led Matrix Led clock #include <p18f4550.h> #define HEADER_SIZE 4 #define FIXELS 60 #define Hour_Mask 0xFC00 / / Hour #define Minute_Mask ...

LIN KT

Dropbox Autocad 360

LU TR BLOG
Lu tr Blog

TNG S LT XEM TRANG

Giai on nhn a ch: bt u khi pic ang ch nhn khung mi MODBUS_GETADDY Giai on nhn chc nng: MODBUS_GETFUNC Giai on nhn d liu (bao gm c 2 byte CRC): MODBUS_GETDATA Ta xy dng kiu lit k ch cc giai on ; Enum { MODBUS_GETADDY=0, MODBUS_GETFUNC=1, MODBUS_GETDATA=2 } modbus_serial_state = 0; khi kt thc khung truyn th timer s trn v ngt xy ra ti y ta kim tra tng CRC c bng 0 khng, nu khng c ngha l c li xy ra, nn ton b d liu nhn c s b loi b bin bool modbus_serial_new dng bo nhn c khung truyn hp l nu modbus_serial_new = 1 tc l va nhn c 1 khung hp l ang ch x l nu modbus_serial_new = 0 sn sang nhn khung mi #int_timer2 void modbus_timeout_now(void) { if((modbus_serial_state == MODBUS_GETDATA) // trong giai on nhn d liu && (modbus_serial_crc.d == 0x0000) // tng CRC ng && (!modbus_serial_new)) //Sn sang nhn khung mi {

417

modbus_rx.len-=2; // v data lc nhn c c 2 byte CRC 2 byte ny ch kim tra d liu // thc t ko c 2 byte ny va vy kch thc tht s l len = len -2; modbus_serial_new=TRUE;// nhn c 1 khung ch PIC x l } else modbus_serial_new=FALSE; // ngc li khung nhn khng hp l , // Sn sang nhn khung tip theo modbus_serial_crc.d=0xFFFF; modbus_serial_state=MODBUS_GETADDY; modbus_enable_timeout(FALSE); // tt timer gim st }

// Purpose: Start our timeout timer // Inputs: Enable, used to turn timer on/off // Outputs: None void modbus_enable_timeout(int1 enable) { disable_interrupts(INT_TIMER2); if (enable) { set_timer2(0); clear_interrupt(INT_TIMER2); enable_interrupts(INT_TIMER2); } } // Purpose: Interrupt service routine for handling incoming serial data // Inputs: None // Outputs: None // hm x l ngt RDA #int_rda

Void incomming_modbus_serial() { char c; // cha byte nhn c c=fgetc(MODBUS_SERIAL);// nhn k t t Stream MODBUS_SERIAL ci ny phng trng //hp c hai uart c s dng dng xc nh nhn d liu t lung no if (!modbus_serial_new) { if(modbus_serial_state == MODBUS_GETADDY)// giai on nhn d liu { modbus_serial_crc.d = 0xFFFF; modbus_rx.address = c; modbus_serial_state++; modbus_rx.len = 0; modbus_rx.error=0; } else if(modbus_serial_state == MODBUS_GETFUNC) { modbus_rx.func = c; modbus_serial_state++; } else if(modbus_serial_state == MODBUS_GETDATA) { if (modbus_rx.len>=MODBUS_SERIAL_RX_BUFFER_SIZE) { modbus_rx.len=MODBUS_SERIAL_RX_BUFFER_SIZE-1; } modbus_rx.data[modbus_rx.len]=c; modbus_rx.len++; }

modbus_calc_crc(c); modbus_enable_timeout(TRUE); // khi ng li timer gim st } } // Purpose: Get a message from the RS485 bus and store it in a buffer // Inputs: None // Outputs: TRUE if a message was received // FALSE if no message is available // Note: Data will be filled in at the modbus_rx struct: int1 modbus_kbhit() { if(!modbus_serial_new) return FALSE; else if(modbus_rx.func & 0x80) //did we receive an error? { modbus_rx.error = modbus_rx.data[0]; //if so grab the error and return true modbus_rx.len = 1; } modbus_serial_new=FALSE; return TRUE; } B. x l trong hm main: Nu my tnh gi chui giau n slave giau_id D liu nhn c nu khung nhn l ng s nh sau: modbus_rx.address = 0x45 //giau_id modbus_rx.len = 4 //g+i+a+u =4 modbus_rx.func = 0x01 // ham truyen chuoi xuong pic modbus_rx. exception error =inf//ty c dng ko modbus_rx.data[] = {g,i,a,u} Void main() {

while(!modbus_kbhit()); //ch n khi nhn khung hp l // x l d liu nhn c if((modbus_rx.address == MODBUS_ADDRESS)// MODBUS_ADDRESS y v d // nh giau_id || modbus_rx.address == 0// ci ny c th b ) { switch(modbus_rx.func) { Case 0x01: //hm gi d liu t pc n pic // x l chui d liu nhn c Break; Case 0x02: } } 1. Truyn d liu ln PC Ly ci ny cho nhanh Input: int8 address Slave Address int8 byte_count Number of bytes being sent int8* input_data Pointer to an array of data to send Output: void */ void modbus_send_rsp(int8 address,// dia chi slave function func, //ham tra ve thng ging yu cu t PC int8 byte_count, // so byte du lieu can truyn int8 *input_data) // con tr vo d liu { int8 i; modbus_serial_send_start(address, func); // truyn a ch v yu cu t

PC modbus_serial_putc(byte_count);// c hay ko th ty: s byte d liu cn truyn for(i=0; i < byte_count; ++i) // truyn d liu { modbus_serial_putc(*input_data); input_data++; } modbus_serial_send_stop(); // truyn 2 byte CRC } V d PC truyn : Chuoi d liu trong pic l text =07dtd <giau_id><0x02><CRCh><CRCl> // yeu cau pic gui chuoi ve Pic nhn ng khung truyn set c modbus_serial_new bo cho pic c khung mi cn x l Hm modbus_kbhit() tr v true PIC vo on chng trnh x l d liu PIC kim tra a ch c phi l giau_id khng, nu ng th tip tc PIC kim tra yu cu ca lnh 0x02 tc l yu cu pic gi chui v PIC p ng yu cu bng cch goi hm modbus_send_rsp(giau_id,0x02,5,&text[0]); chui PIC truyn nh sau: <giau_id><0x02><07dtd><CRCh><CRCl> 1. X l d liu trn PC gi s kt ni phn cng v di tng serialport c to ra v cc thng s ci t ng vi pha PIC baud = 9600,parity=none,databits = 8,stop = 1;

u tin search phn help vi class serialport kim my nguyn mu hm reah() write () cng my ovwrload ca n . Ht cop dn vo y :)) trong c ch dn rt chi tit hiu c g th ghi vo
c ng bi holland_pro vo lc 06:50
xut url ny trn Google

Khng c nhn xt no : ng nhn xt


Lu : Ch thnh vin ca blog ny mi c ng nhn xt.

Nhp nhn xt ca bn...

Nhn xt vi tn:

Ti khon Google

Xut bn

Xem trc

Bi ng Mi hn
ng k: ng Nhn xt ( Atom )

Trang ch

Bi ng C hn

anythingmayhppen@gmail.com. Cung cp bi Blogger.

You might also like