/****************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
智能家居灯光控制系统.pdf1.系统功能 商场灯光区域化管理。 灯光远程手自动开关,减少人工工作量,提高工作效率。 可设定灯光开关时间,减少不必要的能耗。 强电弱电分离,减少不安全因素。 可根据需要扩展控制模块和灯具。 2.系统组成 本地部分 采集控制模块:eIMB3602 嵌入式可编程工业主板; 数据远传设备:GPRS-5-232/485 无线数传终端; 中继器:每 500 米安装一个,数量根据实际需求配备。 控制室部分 服务器:ePC3602 嵌入式工控机; 配套软件:IOTMonitor 物联网信息监控软件一套,安装于 ePC3602 嵌入式工控 机。
上传时间: 2022-03-11
上传用户:
|- 9.配套数据手册 - 0 B|- 8.面包板接线软件 - 0 B|- 7.物联网实验 - 0 B|- 6.图形化编程 - 0 B|- 5.实验接线图 - 0 B|- 4.视频教程 - 0 B|- 3.案例程序 - 0 B|- 2.开发环境 - 0 B|- 10.辅助软件 - 0 B|- 1.学前先看 - 0 B|- CLB.ico - 17.00 kB|- Autorun.inf - 23 B
上传时间: 2022-06-06
上传用户:
PLC技术的发展,为工业自动化的实现立下了汗马功劳。但目前在PLC学习过程中,大都过分强调了编程语言(软件)的重要性,而忽视了PLC硬件的学习,殊不知,硬件在整个工控系统中也是非常重要的。 PLC硬件“零基础”入门——本文可以帮助想要学习PLC的人更好掌握必要硬件知识;另附硬件中英文版datasheet,可供读者下载查阅。
上传时间: 2022-06-12
上传用户:
和image2lcd 功能是一样的,我感觉比LCD好用,而且软件本身是免费的。
上传时间: 2022-06-15
上传用户:
随着近年来传动系统的发展,多电机传动已被越来越广泛地应用于各种领域中。为了提高多电机传动系统的动态和稳态性能,以及满足一些特定系统对于多电机精确同步的要求,多电机同步控制方法的研究也变得越来越重要。目前,有许多方法用来研究多电机同步控制策略,本文采用的是偏差耦合控制方法,利用模糊PID作为速度同步补偿器的控制算法,使用遗传算法来整定PID的参数范围,解决了多电机同步控制系统中多电机速度的同步控制问题。本文首先分析了多电机同步控制的原理及其特点,根据偏差耦合控制策略的优点,确立了基于模糊PID补偿器的多电机同步控制策略,提出了模糊PID补偿器的设计方法。其次,利用罗克韦尔实验室现有的设备,构造了一个与生产现场类似的试验环境,设计了电机同步控制系统的实验平台。在单个永磁同步电动机调速系统的基础上,实现了多电机同步控制。基于实验平台,分别对硬件和软件部分进行了设计,其中包括控制系统网络的组建和硬件连线的设计和对运动控制模块进行组态以及运动控制梯形图的编制。根据本文设计的多电机同步控制方法在保证系统具有优良抗干扰性能的同时,使系统获得了较好的跟随性能及同步跟踪精度。经过Matlab的仿真以及实验结果说明了本文设计的控制算法的有效性和实用性。最后,总结了所做的研究工作,并对多电机同步控制系统中存在的其它问题进行了简单的分析,以及对未来研究方向进行了阐述。关键词:多电机同步控制;:模糊PID;遗传算法;永磁同步电动机;偏差耦合控制
标签: 模糊PID补偿器
上传时间: 2022-06-18
上传用户:zhaiyawei
AB 触摸屏编辑软件,中文版,供工控工程师查看参考。
标签: FactoryTalk
上传时间: 2022-07-02
上传用户:
一.以下内容适合 TRINAMIC 的直流无刷驱动控制产品软件调试, 包括 TMCC160-EVAL,TMCM1630,TMCM1640二.软件安装2.1 下载最新TMCL-IDE 软件 安装完成后单击如下软件图标2.2 连接成功后会自动显示 所连接的模块 如下图 TMCM1630通讯上之后单击会显示所连接卡的一些信息,如供电,输入/输出信息,
上传时间: 2022-07-08
上传用户:
ees实验指导书本实验指导书主要针对电梯仿真设备(Elevator Simulation, EET),详细描述了基于西门子S7-1200对其进行控制的过程。 实验过程中,使用西门子博途(TIA Portal)软件中的STEP7 Professional V13和WINCC Professional V13完成控制程序的编写和监控画面的组态,指导书中给出了实验的具体操作步骤。若使用博途STEP7 Basic V13和WINCC Basic V13,此实验指导书同样适用。无论Professional版,还是Advanced版,其与Basic版最大的区别在于,Professional版(或Advanced版)除了含了Basic版的功能外,可扩充性比Basic版强。 本实验指导书的实验设计本着循序渐进的原则,由浅入深。认真完成指导书中所列实验,有助于帮助学员更好的掌握电梯的控制及日常运行管理的知识。 指导书中所提供的实验也具有良好的扩展性,学员可利用所具备的系统平台对所提供的实验进行合理创新,以达到更好地学习目的。
标签: 电梯仿真
上传时间: 2022-07-21
上传用户:aben
SEW 变频器与ABPLC 通过EthernetIP 通讯控制第一步:根据电机的名牌设定电机参数,具体操作按下图步骤操作即可。第二步:利用SEW变频器软件或AB 的BOOTP-DHCP Server软件设定IP 地址。第三步: 组态PLC,要用AB 通用的以太网模块按下面的配置来组态。我们现场测试过用SEW官网的EDS文件通讯不上,后来用这个可以的。第四步: 利用变频器面板按钮手动启动停止, 测试电机运转是否正常。通过上下键选择到如下图指示灯亮,按下Enter 确认,按下run 键,调节旋钮给定速度,电机就可以转了。第五步:配置变频器参数。按下图红框中的参数进行配置。第六步:通过PLC给出命令,启动停止变频器。给定速度,斜坡,启动。控制字1除了基本控制块中包含的最重要的驱动功能外,在有效高位字节中包括内部设定功能用的功能位,其可以在MOVIDRIVE变频器中产生。
标签: sew 变频器 abplc ethernetip
上传时间: 2022-07-23
上传用户: