本研究提出了一套完整的基于Linux嵌入式平臺的EtherCAT主站系統設計方案,旨在打通整個EtherCAT協議技術環節。從主站和從站的硬件層面到軟件層面再到上位機軟件,開發出整套擁有自主知識產權的EtherCAT主站系統。設計EtherCAT從站模塊,選用從站控制芯片ET1100設計通信板,STM32單片機設計控制板,將通信板和控制板通過SPI總線接口組合,組成兩套從站模塊,分別實現數字輸入信號檢測和模擬輸入信號檢測的功能。設計EtherCAT主站模塊,選用基于AM3358處理器的BeagleBone Black作為Linux嵌入式開發平臺,并且在該平臺上運行集成Xenomai實時補丁的Linux操作系統,接著在操作系統上構建IgH EtherCAT Master for Linux開源框架和配置開發環境,最后基于這套開源框架進行應用程序的設計,完成整套主站模塊設計。設計EtherCAT主站程序的兩種交互模式,一種是基于命令行操作的控制臺模式,還有一種是基于Qt開發的圖形用戶界面模式。用戶可以通過任意模式,實現過程數據通信和服務數據通信的數據讀寫,并且執行一些其他的必要功能操作。結果表明,從站模塊的基本功能實現,可以有效檢測輸入的數字信號和模擬信號。主站模塊的基本功能實現,可以與從站模塊建立起有效的過程數據通信和服務數據通信,性能上同步誤差在ns級,報文的傳輸時間在us級,通訊抖動在us級別,可以滿足工業控制系統對實時性的要求。控制臺模式和圖形用戶界面模式交互有效。
上傳時間: 2022-05-22
上傳用戶:aben
隨著工業控制對可靠性與實時性要求不斷提高,傳統總線因無法突破實時性,通信效率及總線供電等技術瓶頸而逐漸被一些新的技術所替代。在國內外,一種將以太網應用于工業控制的新興工業以太網技術引起了越來越多的關注。EtherCAT是一種基于改進的以太網幀結構的工業以太網協議,是目前可靠性和實時性最高的工業以太網協議之一。 本文提出一種基于STM32處理器的EtherCAT從站協議棧的實現方法。首先從物理層、數據鏈路層及應用層研究分析了 EtherCAT協議。其次,重點設計開發基于STM32處理器的EtherCAT從站設備的協議軟件,設計并實現了從站狀態機、周期性過程數據及郵箱數據三大通信任務的軟件代碼。在已搭建的 EtherCAT主從站運行平臺驗證了系統的可靠與實時性。EtherCAT報文的一次發送和接收共需2ms,該時間隨著從站個數的增加變化不大。最后,本文創新點是設計一種基于 EtherCAT實時通信協議棧的智能家居網絡控制系統,比以往采用單片機作為終端控制器的控制系統在擴展能力,數據處理能力,實時性方面都有顯著優勢,實現了智能家居中智能開關與人臉識別門禁兩部分應用控制任務,該系統提高了家居控制的安全性及實時性,是目前最有發展前景的工業以太網應用技術之一。 從站協議棧實現EtherCAT的從站功能,并且運行于STM32處理器上,提高了從站運行速度,保證整個EtherCAT系統的實時性。
上傳時間: 2022-05-27
上傳用戶:得之我幸78
此資源是Ethercat 從站協議生成工具,可方便的生成從站協議代碼,配合LAN9252的相關工具和資料,能方便的地實現Ethercat從機。
標簽: Ethercat
上傳時間: 2022-06-20
上傳用戶:
ZendStudio-5_2, 內含注冊機(Keygen),強大的php開發工具,能夠檢查PHP開發中的語法錯誤,以及語法加亮等功能,還可以調試PHP程序,是不可多得的PHP開發工具,堪稱業界最強大的PHP開發利器!
標簽: ZendStudio Keygen 注冊機
上傳時間: 2016-03-04
上傳用戶:chenlong
看n2實例 #Create a simulator object set ns [new Simulator] #Define different colors for data flows #$ns color 1 Blue #$ns color 2 Red #Open the nam trace file set nf [open out-1.nam w] $ns namtrace-all $nf set f0 [open out0.tr w] set f1 [open out1.tr w] #Define a finish procedure proc finish {} { global ns nf $ns flush-trace #Close the trace file close $nf #Execute nam on the trace file exit 0 } #Create four nodes set n0 [$ns node] set n1 [$ns node] set n2 [$ns node] set n3 [$ns node] #Create links between the nodes $ns duplex-link $n0 $n2 1Mb 10ms
標簽: simulator Simulator different Create
上傳時間: 2016-07-02
上傳用戶:wfl_yy
【問題描述】 在一個N*N的點陣中,如N=4,你現在站在(1,1),出口在(4,4)。你可以通過上、下、左、右四種移動方法,在迷宮內行走,但是同一個位置不可以訪問兩次,亦不可以越界。表格最上面的一行加黑數字A[1..4]分別表示迷宮第I列中需要訪問并僅可以訪問的格子數。右邊一行加下劃線數字B[1..4]則表示迷宮第I行需要訪問并僅可以訪問的格子數。如圖中帶括號紅色數字就是一條符合條件的路線。 給定N,A[1..N] B[1..N]。輸出一條符合條件的路線,若無解,輸出NO ANSWER。(使用U,D,L,R分別表示上、下、左、右。) 2 2 1 2 (4,4) 1 (2,3) (3,3) (4,3) 3 (1,2) (2,2) 2 (1,1) 1 【輸入格式】 第一行是數m (n < 6 )。第二行有n個數,表示a[1]..a[n]。第三行有n個數,表示b[1]..b[n]。 【輸出格式】 僅有一行。若有解則輸出一條可行路線,否則輸出“NO ANSWER”。
標簽: 點陣
上傳時間: 2014-06-21
上傳用戶:llandlu
/****************temic*********t5557***********************************/ #include <at892051.h> #include <string.h> #include <intrins.h> #include <stdio.h> #define uchar unsigned char #define uint unsigned int #define ulong unsigned long //STC12C2051AD的SFR定義 sfr WDT_CONTR = 0xe1;//stc2051的看門狗?????? /**********全局常量************/ //寫卡的命令 #define write_command0 0//寫密碼 #define write_command1 1//寫配置字 #define write_command2 2//密碼寫數據 #define write_command3 3//喚醒 #define write_command4 4//停止命令 #define TRUE 1 #define FALSE 0 #define OK 0 #define ERROR 255 //讀卡的時間參數us #define ts_min 250//270*11.0592/12=249//取近似的整數 #define ts_max 304//330*11.0592/12=304 #define t1_min 73//90*11.0592/12=83:-10調整 #define t1_max 156//180*11.0592/12=166 #define t2_min 184//210*11.0592/12=194 #define t2_max 267//300*11.0592/12=276 //***********不采用中斷處理:采用查詢的方法讀卡時關所有中斷****************/ sbit p_U2270B_Standby = P3^5;//p_U2270B_Standby PIN=13 sbit p_U2270B_CFE = P3^3;//p_U2270B_CFE PIN=6 sbit p_U2270B_OutPut = P3^7;//p_U2270B_OutPut PIN=2 sbit wtd_sck = P1^7;//SPI總線 sbit wtd_si = P1^3; sbit wtd_so = P1^2; sbit iic_data = P1^2;//lcd IIC sbit iic_clk = P1^7; sbit led_light = P1^6;//測試綠燈 sbit led_light1 = P1^5;//測試紅燈 sbit led_light_ok = P1^1;//讀卡成功標志 sbit fengmingqi = P1^5; /***********全局變量************************************/ uchar data Nkey_a[4] = {0xA0, 0xA1, 0xA2, 0xA3};//初始密碼 //uchar idata card_snr[4]; //配置字 uchar data bankdata[28] = {1,2,3,4,5,6,7,1,2,3,4,5,6,7,1,2,3,4,5,6,7,1,2,3,4,5,6,7}; //存儲卡上用戶數據(1-7)7*4=28 uchar data cominceptbuff[6] = {1,2,3,4,5,6};//串口接收數組ram uchar command; //第一個命令 uchar command1;// //uint temp; uchar j,i; uchar myaddr = 8; //uchar ywqz_count,time_count; //ywqz jishu: uchar bdata DATA; sbit BIT0 = DATA^0; sbit BIT1 = DATA^1; sbit BIT2 = DATA^2; sbit BIT3 = DATA^3; sbit BIT4 = DATA^4; sbit BIT5 = DATA^5; sbit BIT6 = DATA^6; sbit BIT7 = DATA^7; uchar bdata DATA1; sbit BIT10 = DATA1^0; sbit BIT11 = DATA1^1; sbit BIT12 = DATA1^2; sbit BIT13 = DATA1^3; sbit BIT14 = DATA1^4; sbit BIT15 = DATA1^5; sbit BIT16 = DATA1^6; sbit BIT17 = DATA1^7; bit i_CurrentLevel;//i_CurrentLevel BIT 00H(Saves current level of OutPut pin of U2270B) bit timer1_end; bit read_ok = 0; //緩存定時值,因用同一個定時器 union HLint { uint W; struct { uchar H;uchar L; } B; };//union HLint idata a union HLint data a; //緩存定時值,因用同一個定時器 union HLint0 { uint W; struct { uchar H; uchar L; } B; };//union HLint idata a union HLint0 data b; /**********************函數原型*****************/ //讀寫操作 void f_readcard(void);//全部讀出1~7 AOR喚醒 void f_writecard(uchar x);//根據命令寫不同的內容和操作 void f_clearpassword(void);//清除密碼 void f_changepassword(void);//修改密碼 //功能子函數 void write_password(uchar data *data p);//寫初始密碼或數據 void write_block(uchar x,uchar data *data p);//不能用通用指針 void write_bit(bit x);//寫位 /*子函數區*****************************************************/ void delay_2(uint x) //延時,時間x*10us@12mhz,最小20us@12mhz { x--; x--; while(x) { _nop_(); _nop_(); x--; } _nop_();//WDT_CONTR=0X3C;不能頻繁的復位 _nop_(); } ///////////////////////////////////////////////////////////////////// void initial(void) { SCON = 0x50; //串口方式1,允許接收 //SCON =0x50; //01010000B:10位異步收發,波特率可變,SM2=0不用接收到有效停止位才RI=1, //REN=1允許接收 TMOD = 0x21; //定時器1 定時方式2(8位),定時器0 定時方式1(16位) TCON = 0x40; //設定時器1 允許開始計時(IT1=1) TH1 = 0xfD; //FB 18.432MHz 9600 波特率 TL1 = 0xfD; //fd 11.0592 9600 IE = 0X90; //EA=ES=1 TR1 = 1; //啟動定時器 WDT_CONTR = 0x3c;//使能看門狗 p_U2270B_Standby = 0;//單電源 PCON = 0x00; IP = 0x10;//uart you xian XXXPS PT1 PX1 PT0 PX0 led_light1 = 1; led_light = 0; p_U2270B_OutPut = 1; } /************************************************/ void f_readcard()//讀卡 { EA = 0;//全關,防止影響跳變的定時器計時 WDT_CONTR = 0X3C;//喂狗 p_U2270B_CFE = 1;// delay_2(232); //>2.5ms /* // aor 用喚醒功能來防碰撞 p_U2270B_CFE = 0; delay_2(18);//start gap>150us write_bit(1);//10=操作碼讀0頁 write_bit(0); write_password(&bankdata[24]);//密碼block7 p_U2270B_CFE =1 ;// delay_2(516);//編程及確認時間5.6ms */ WDT_CONTR = 0X3C;//喂狗 led_light = 0; b.W = 0; while(!(read_ok == 1)) { //while(p_U2270B_OutPut);//等一個穩定的低電平?超時判斷? while(!p_U2270B_OutPut);//等待上升沿的到來同步信號檢測1 TR0 = 1; //deng xia jiang while(p_U2270B_OutPut);//等待下降沿 TR0 = 0; a.B.H = TH0; a.B.L = TL0; TH0 = TL0 = 0; TR0 = 1;//定時器晚啟動10個周期 //同步頭 if((324 < a.W) && (a.W < 353)) ;//檢測同步信號1 else { TR0 = 0; TH0 = TL0 = 0; goto read_error; } //等待上升沿 while(!p_U2270B_OutPut); TR0 = 0; a.B.H = TH0; a.B.L = TL0; TH0 = TL0 = 0; TR0 = 1;//b.N1<<=8; if(a.B.L < 195);//0.5p else { TR0 = 0; TH0 = TL0 = 0; goto read_error; } //讀0~7塊的數據 for(j = 0;j < 28;j++) { //uchar i; for(i = 0;i < 16;i++)//8個位 { //等待下降沿的到來 while(p_U2270B_OutPut); TR0 = 0; a.B.H = TH0; a.B.L = TL0; TH0 = TL0 = 0; TR0 = 1; if(t2_max < a.W/*)&&(a.W < t2_max)*/)//1P { b.W >>= 2;//先左移再賦值 b.B.L += 0xc0; i++; } else if(t1_min < a.B.L/*)&&(a.B.L < t1_max)*/)//0.5p { b.W >>= 1; b.B.L += 0x80; } else { TR0 = 0; TH0 = TL0 = 0; goto read_error; } i++; while(!p_U2270B_OutPut);//上升 TR0 = 0; a.B.H = TH0; a.B.L = TL0; TH0 = TL0 = 0; TR0 = 1; if(t2_min < a.W/*)&&(a.W < t2_max)*/)//1P { b.W >>= 2; i++; } else if(t1_min < a.B.L/*a.W)&&(a.B.L < t1_max)*/)//0.5P //else if(!(a.W==0)) { b.W >>= 1; //temp+=0x00; //led_light1=0;led_light=1;delay_2(40000); } else { TR0 = 0; TH0 = TL0 = 0; goto read_error; } i++; } //取出奇位 DATA = b.B.L; BIT13 = BIT7; BIT12 = BIT5; BIT11 = BIT3; BIT10 = BIT1; DATA = b.B.H; BIT17 = BIT7; BIT16 = BIT5; BIT15 = BIT3; BIT14 = BIT1; bankdata[j] = DATA1; } read_ok = 1;//讀卡完成了 read_error: _nop_(); } } /***************************************************/ void f_writecard(uchar x)//寫卡 { p_U2270B_CFE = 1; delay_2(232); //>2.5ms //psw=0 standard write if (x == write_command0)//寫密碼:初始化密碼 { uchar i; uchar data *data p; p = cominceptbuff; p_U2270B_CFE = 0; delay_2(31);//start gap>330us write_bit(1);//寫操作碼1:10 write_bit(0);//寫操作碼0 write_bit(0);//寫鎖定位0 for(i = 0;i < 35;i++) { write_bit(1);//寫數據位1 } p_U2270B_CFE = 1; led_light1 = 0; led_light = 1; delay_2(40000);//測試使用 //write_block(cominceptbuff[4],p); p_U2270B_CFE = 1; bankdata[20] = cominceptbuff[0];//密碼存入 bankdata[21] = cominceptbuff[1]; bankdata[22] = cominceptbuff[2]; bankdata[23] = cominceptbuff[3]; } else if (x == write_command1)//配置卡參數:初始化 { uchar data *data p; p = cominceptbuff; write_bit(1);//寫操作碼1:10 write_bit(0);//寫操作碼0 write_bit(0);//寫鎖定位0 write_block(cominceptbuff[4],p); p_U2270B_CFE= 1; } //psw=1 pssword mode else if(x == write_command2) //密碼寫數據 { uchar data*data p; p = &bankdata[24]; write_bit(1);//寫操作碼1:10 write_bit(0);//寫操作碼0 write_password(p);//發口令 write_bit(0);//寫鎖定位0 p = cominceptbuff; write_block(cominceptbuff[4],p);//寫數據 } else if(x == write_command3)//aor //喚醒 { //cominceptbuff[1]操作碼10 X xxxxxB uchar data *data p; p = cominceptbuff; write_bit(1);//10 write_bit(0); write_password(p);//密碼 p_U2270B_CFE = 1;//此時數據不停的循環傳出 } else //停止操作碼 { write_bit(1);//11 write_bit(1); p_U2270B_CFE = 1; } p_U2270B_CFE = 1; delay_2(560);//5.6ms } /************************************/ void f_clearpassword()//清除密碼 { uchar data *data p; uchar i,x; p = &bankdata[24];//原密碼 p_U2270B_CFE = 0; delay_2(18);//start gap>150us //操作碼10:10xxxxxxB write_bit(1); write_bit(0); for(x = 0;x < 4;x++)//發原密碼 { DATA = *(p++); for(i = 0;i < 8;i++) { write_bit(BIT0); DATA >>= 1; } } write_bit(0);//鎖定位0:0 p = &cominceptbuff[0]; write_block(0x00,p);//寫新配置參數:pwd=0 //密碼無效:即清除密碼 DATA = 0x00;//停止操作碼00000000B for(i = 0;i < 2;i++) { write_bit(BIT7); DATA <<= 1; } p_U2270B_CFE = 1; delay_2(560);//5.6ms } /*********************************/ void f_changepassword()//修改密碼 { uchar data *data p; uchar i,x,addr; addr = 0x07;//block7 p = &Nkey_a[0];//原密碼 DATA = 0x80;//操作碼10:10xxxxxxB for(i = 0;i < 2;i++) { write_bit(BIT7); DATA <<= 1; } for(x = 0;x < 4;x++)//發原密碼 { DATA = *(p++); for(i = 0;i < 8;i++) { write_bit(BIT7); DATA >>= 1; } } write_bit(0);//鎖定位0:0 p = &cominceptbuff[0]; write_block(0x07,p);//寫新密碼 p_U2270B_CFE = 1; bankdata[24] = cominceptbuff[0];//密碼存入 bankdata[25] = cominceptbuff[1]; bankdata[26] = cominceptbuff[2]; bankdata[27] = cominceptbuff[3]; DATA = 0x00;//停止操作碼00000000B for(i = 0;i < 2;i++) { write_bit(BIT7); DATA <<= 1; } p_U2270B_CFE = 1; delay_2(560);//5.6ms } /***************************子函數***********************************/ void write_bit(bit x)//寫一位 { if(x) { p_U2270B_CFE = 1; delay_2(32);//448*11.0592/120=42延時448us p_U2270B_CFE = 0; delay_2(28);//280*11.0592/120=26寫1 } else { p_U2270B_CFE = 1; delay_2(92);//192*11.0592/120=18 p_U2270B_CFE = 0; delay_2(28);//280*11.0592/120=26寫0 } } /*******************寫一個block*******************/ void write_block(uchar addr,uchar data *data p) { uchar i,j; for(i = 0;i < 4;i++)//block0數據 { DATA = *(p++); for(j = 0;j < 8;j++) { write_bit(BIT0); DATA >>= 1; } } DATA = addr <<= 5;//0地址 for(i = 0;i < 3;i++) { write_bit(BIT7); DATA <<= 1; } } /*************************************************/ void write_password(uchar data *data p) { uchar i,j; for(i = 0;i < 4;i++)// { DATA = *(p++); for(j = 0;j < 8;j++) { write_bit(BIT0); DATA >>= 1; } } } /*************************************************/ void main() { initial(); TI = RI = 0; ES = 1; EA = 1; delay_2(28); //f_readcard(); while(1) { f_readcard(); //讀卡 f_writecard(command1); //寫卡 f_clearpassword(); //清除密碼 f_changepassword(); //修改密碼 } }
標簽: 12345
上傳時間: 2017-10-20
上傳用戶:my_lcs
電阻類3D封裝表貼插裝電阻可調電阻功率電阻封裝庫AD庫PCB庫共100個(ALTIUM 3D封裝庫),列表如下:Component Count : 100Component Name-----------------------------------------------FLQ-0R03FLQ-40A-75mVFLQ-50-3FLQ-50AFLQ-60A-75mVFLQ-OAR5R005FLFFUSE-1210FUSE-1808FUSE-2920IGBT-BSM200GB60DLCIGBT-FF200R12KT4R0.5WR0.25wR1/1-HR1/2-HR1/2-VR1/4-HR1/4-VR1/8R1/16R1W -LR1W-WR2W-LR2W-WR2W-W-1R3W-HR3W-VR608XAR0402R0402SR0603R0805R1206R1210R1808R1812R2010R2512RD20D561KRES ADJ1RES ADJ2RES ADJ3RES-3224WRES-3296PRES-3296WRES-3296XRES-POT-TRRES-POT4MM-2RES-pot3306FRES-RK16312RES-RP8RES-RP9RES-RT-PJ-3314JRES-RV3224WRES-RV3296PRES-RV3296WRES-RV3296XRES-RV3386RES-VR-3RES-VR1RES-VR2RES-VR3RES-VR4RES-VR5RES-VR6RES-VR3296PRES-VR3296WRES-VR3296XRES-VR3306RES-VR3362PRES-VR3362WRES-VR3386RGG-5W-VRGG-5W-WRGG-5W-W-2RGG-10W-WRGG-10W-W -2RGG-20W-Wrgg-R3W-WRGG-R5W-TRGG-R5W-Vrgg-R5W2-wRX21-8WRX27-1VRX27-5W-LRX27-5W-WRX27-7WTVR-5DTVR-7DTVR-10DTVR-14DTVR-14D-NTCTVR-20DTVR-RD15TVR-RD20TVR-RV0.6TVR-RV7DTVR-RV8D-20TVR-RV14DTVR-RV20D
上傳時間: 2022-01-06
上傳用戶:wangshoupeng199
LED燈封裝Altium Designer AD PCB封裝庫2D3D元件庫文件PCB Library : LED.PcbLibDate : 2020/12/29Time : 16:50:29Component Count : 49Component Name-----------------------------------------------LED 1W/3WLED 1W/3W-WLED 3mm-2PLED 3MM-BLED 3MM-GLED 3MM-RLED 3MM-WLED 3MM-YLED 3MM-YCLED 5MM-BLED 5MM-GLED 5MM-RLED 5MM-WLED 5MM-YLED 5MM-YCLED 0603-RGLED 0603BLED 0603GLED 0603RLED 0603WLED 0603YLED 0805BLED 0805GLED 0805RLED 0805WLED 0805YLED 1206BLED 1206GLED 1206RLED 1206WLED 1206YLED 3528-2PinLED 3528-4PinLED 5050LED 5630LED 5730-VLED F234-BLED F234-GLED F234-RLED F234-WLED F234-YLED F257-BLED F257-GLED F257-RLED F257-WLED F257-YLED SH-5MM-WLED SH-8MMLED SH-8MM-W
標簽: led 封裝 altium designer pcb
上傳時間: 2022-03-11
上傳用戶:
EtherCAT 是一利1應用于工廠向動化和| 流程向動化領域的實時工業以太網現場總線協議,是工業通信網絡國際標準IEC6 11 58 和IEC6 1784 的組成部分。本書介紹了: 實時工業以太網技術進展、EtherCA丁系統組成原理、EtherCA丁協議、從站專用集成電路芯片ETIIOO 、ETllOO 從站硬件設計實例、EtherCAT 用于伺?f?驅動器控制應用協議CoE 利、So E 、Windows XP 操作系統下EtherCAT主站驅動程序設計、基于微處理器的EtherCAT 從站驅動程序設計和| 開發實例。本書可作為工業向動化和| 計算機控制專業研究生教材或教學參考書,亦可作為EtherCAT 協議開發技術人員的工具書。
上傳時間: 2022-07-04
上傳用戶:xsr1983