•ARINC429总线协议是美国航空电子工程委员会(Airlines Engineering Committee)于1977年7月提出的,并于同年发表并获得批准使用,它的全称是数字式信息传输系统(Digital Information Transmission System ) 。协议标准规定了航空电子设备及有关系统间的数字信息传输要求。ARINC429广泛应用在先进的民航客机中,如B-737、B-757、B-767,俄制军用飞机也选用了类似的技术。
标签: ARINC429 总线
上传时间: 2015-03-25
上传用户:423619775
DCS从1975年问世以来,大约有三次比较大的变革,七十年代操作站的硬件、操作系统、监视软件都是专用的,由各DCS厂家自己开发的,也没有动态流程图,通讯网络基本上都是轮询方式的;八十年代就不一样了,通讯网络较多使用令牌方式;九十年代操作站出现了通用系统,九十年代末通讯网络有部份遵守TCP/IP协议,有的开始采用以太网。总的来看,变化主要体现在I/O板、操作站和通讯网络。控制器相对来讲变化要小一些。操作站主要表现在由专用机变化到通用机,如PC机和小型机的应用。但是目前它的操作系统一般采用UNIX,也有小系统采用NT,相比较来看UNIX的稳定性要好一些,NT则有死机现象。I/O板主要体现在现场总线的引入DCS系统。
标签: DCSDCS教程DCS教程
上传时间: 2016-03-29
上传用户:黑暗骑士
lwip是一个轻量级的TCP/IP协议栈(Lightweight TCP/IP Stack)实现,最初是瑞士计算机科学学院Adam Dunkels编写的一个应用于无操作系统的嵌入式系统中的TCP/IP协议栈,后来作为一个开源(open source)项目,由一个全球性的团队进行开发和维护。
上传时间: 2016-06-13
上传用户:tttm1030
/****************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
wifi模块,RAK411 是一款完全符合802.11b/g/n 无线协议的Wi-Fi 模块,内部集成完整的TCP/IP 协议栈,支 持ARP、IP、ICMP、TCP 、UDP、DHCP CLIENT、DHCP SERVER、DNS 等多种协议。支持AP 模式, Station 及Ad-hoc。用户可以方便、快速地使用模块实现组网及数据收发。在SPI 接口下,模块最大传输 速率可达2Mbps。
上传时间: 2018-05-17
上传用户:luke242
针对目前我国已经存在的温室控制系统成本高、网络化不足以及测量环境因子单一等问题,文中开发了一套基于STM32的温室远程控制系统。该系统通过利用STM32单片机作为温室内的控制器以及MFC编写的控制软件实现对温室内空气温度、空气湿度、光照强度和CO2浓度多个环境因子的远程监测和控制。 系统的硬件电路设计包括STM32控制器、数据采集模块、设备控制模块、网络接口模块、实时显示模块以及数据存储模块等。其中数据采集模块采用DHT11、MG811以及BH1750传感器进行环境因子的测量,设备控制模块通过控制继电器通断来控制温室内的加热系统和光照系统等执行设备,STM32通过ENC28J60接入网络实现远程控制,显示模块实现各个环境因子的实时显示,数据存储模块采用外接SD卡的方式进行数据的存储。在STM32的程序设计中采用了库函数的开发方式设计了测量程序、显示程序以及控制程序。通过在STM32中移植μC/OS-Ⅱ操作系统实现多任务的运行,移植LwIP协议使STM32可以接入网络,实现控制的网络化。在VC6.0平台下利用MFC设计了控制软件,控制软件和STM32之间通过TCP/IP协议进行数据和命令的传输。控制软件的主要功能是对温室内的多个环境因子进行远程监测和对执行设备进行远程控制。在控制软件设计中,采用面向对象的方法将相关的操作函数封装到类中,便于对系统进行升级,采用多线程的方法解决了多个任务同时运行的状况。将控制过程中产生的数据保存到数据库中,可以对系统运行产生的数据进行分析和利用。 为了对系统进行测试,在文中搭建了一个小型的温室并将控制器安装在温室内。经过测试,文中设计的温室控制系统可以实现对温室内空气温度、空气湿度、光照强度和CO2浓度的远程实时监测,数据每秒更新一次。当上述的环境因子超过控制软件上设置的上下限范围时,系统会报警,此时可以在控制软件上控制执行设备的通断来调节该因子使其到达设置的范围内。
上传时间: 2022-06-09
上传用户:qingfengchizhu
1、原始套接字透析之前言大多数程序员所接触到的套接字(Socket)为两类服务应用:(1)流式套接字(SOCK-STREAM):一种面向连接的Socket,针对于面向连接的TCP(2)数据报式套接字(SOCK-DGRAM):一种无连接的Socket,对应于无连接的UDP服务应用.从用户的角度来看,SOCK-STREAM,SOCK-DGRAM这两类套接字似乎的确涵盖了TCP/IP应用的全部,因为基于TCPIP的应用,从协议栈的层次上讲,在传输层的确只可能建立于TCP或UDP协议之上(图1),而SOCK STREAM,SOCK DGRAM又分别对应于TCP和UDP,所以几乎所有的应用都可以用这两类套接字实现。但是,当我们面对如下问题时,SOCK_STREAM,SOCK DGRAM将显得这样无助:(1).怎样发送一个自定义的IP包?(2)怎样发送一个ICMP协议包?(3)怎样使本机进入杂糅模式,从而能够进行网络sniffer?(4)怎样分析所有经过网络的包,而不管这样包是否是发给自己的?(5)怎样伪装本地的IP地址?这使得我们必须面对另外一个深刻的主题--原始套字(Raw Socket),Raw Socket广泛应用于高级网络编程,也是一种广泛的黑客手段。著名的网络sniffer、拒绝服务攻击(DOS),IP欺骗等都可以以Raw Socket实现。Raw Socket与标准套接字(SOCK STREAM,SOCK DGRAM)的区别在于前者直接置"根"于操作系统网络核心(Network Core),而SOCK STREAM.SOCK DGRAM则"悬浮“于TCP和UDP协议的外围,如图2所示:
上传时间: 2022-06-19
上传用户:得之我幸78
在传统的数据传输及工业自动化控制领域,有成千上万的数据采集、通信和自动控制设备都是利用Meter Bus总线、CAN总线等进行数据通信、数据交换和数据管理的。虽然Meter Bus总线、CAN总线都具有一些先天性的优势。诸如低功耗、造价低廉、设计简单、应用广泛等特点。但是,随着社会需求的发展,稳定、大流量、长距离、高速度、高集成度、交互性强和资源共享的系统成为必然,从而使得单纯的Meter bus总线通信或者CAN总线通信不能满足社会的需求。同时,随着互联网的迅猛发展,支持TCP/IP协议的以太网的功能得到了极大的完善,并且已经延伸到社会的各个角落。与Meter Bus总线通信和CAN总线通信相比较,TCP/IP网络是基于复杂环境设计的,具有自动纠错功能,通信质量稳定。目前100M已经是TCP/IP网络的标准配置,1000M也在快速的普及当中,这么快的传输速度是Meter Bus总线通信和CAN总线通信所无法达到的。而且,TCP/IP网络的开放性非常强,只要接入互联网,通信距离就可以无限延长,从而可以实现最大限度的信息和资源共享。基于此,充分利用Meter Bus总线通信和CAN总线通信的优势,同时与开放的TCP/IP网络衔接,正是目前国内外测控技术研究的重点,我们把它称为网络化的测控技术。本文基于嵌入式Linux系统,设计并实现了Meter Bus总线和CAN总线与TCP/IP网络的通信转换网关,完成了Meter Bus总线和CAN总线与TCP/IP网络的数通,V1
标签: 嵌入式 linux 以太网 can mbus 现场总线 通信网关
上传时间: 2022-06-21
上传用户:
《单片机与嵌入式:STM32库开发实战指南》基于STM32F103芯片,紧紧围绕“库”的分析和使用展开。在大量实例的基础上,《单片机与嵌入式:STM32库开发实战指南》对于如何综合运用固件库开发项目给出了具体的范例;在固件库的使用和学习的基础上,又进一步讲解了结合嵌入式实时操作系统、TCP/IP协议栈进行嵌入式系统开发的方法,让读者循序渐进、系统地掌握基于STM32官方库进行开发的方法。
标签: stm32
上传时间: 2022-06-21
上传用户:jason_vip1
嵌入式系统是计算机技术、半导体技术和电子技术的综合体,已经广泛应用于科学研究、工程设计、国防军事、自动化控制等各个领域。随着网络通讯技术的迅猛发展,生产和生活中广泛要求嵌入式系统终端能够完成网络通讯功能。论就是以ARM7 TDMII为嵌入式开发平台,开发具有网络通信功能的嵌入式终端。SOCKET是一个通信链的句柄,通过套接字向网络发出请求或者应答网络请求,用于TCP/IP协议的应用程序之间的相互通信。论文选择了ARM体系结构的嵌入式LPC2200处理器,根据系统的需求,在综合各种设计方案的基础上,选择移植带有TCP/IP协议的ucLinux嵌入式操作系统。裁剪和定制系统后,构建相关的文件系统。在此基础上,编写应用程序,调用系统的Socket通信函数,实现服务器端和客户端的通信。描述IP地址和端口,用于在两个论文成功的实现了嵌入式设备的网络接入功能,各个带有网络通讯功能的嵌入式终端可以相互通讯,扩大了和提高了嵌入式设备的应用范围,对嵌入式系统的发展有较大的意义。
上传时间: 2022-06-22
上传用户: