PLC实验代码

合集下载

PLC实验报告 基础指令实验

PLC实验报告 基础指令实验

PLC实验报告基础指令实验一、实验目的本次 PLC 基础指令实验的主要目的是熟悉 PLC 的基本指令,掌握其编程方法和应用技巧,通过实际操作加深对 PLC 控制系统的理解,并提高解决实际问题的能力。

二、实验设备1、 PLC 实验台,型号为_____。

2、编程软件,版本为_____。

3、连接导线若干。

4、实验指导书。

三、实验内容(一)位逻辑指令实验1、常开触点和常闭触点指令编写一个简单的程序,实现当输入信号 I00 为 ON 时,输出信号Q00 为 ON。

当输入信号 I01 为 OFF 时,输出信号 Q01 为 ON。

2、取反指令设计一个程序,使得输入信号 I02 为 ON 时,经过取反指令,输出信号 Q02 为 OFF;输入信号 I02 为 OFF 时,输出信号 Q02 为 ON。

3、置位和复位指令编写程序,当输入信号 I03 产生一个上升沿时,使用置位指令将输出信号 Q03 置位为 ON,并保持。

当输入信号 I04 产生一个上升沿时,使用复位指令将输出信号 Q03 复位为 OFF。

(二)定时器指令实验1、接通延时定时器构建一个程序,当输入信号 I05 为 ON 时,接通延时定时器 TON 开始计时,设定时间为 5 秒。

5 秒后,输出信号 Q04 为 ON。

2、断开延时定时器设计程序,当输入信号 I06 由 ON 变为 OFF 时,断开延时定时器TOF 开始计时,设定时间为 3 秒。

3 秒内,如果输入信号 I06 重新变为ON,则定时器复位。

3 秒后,输出信号 Q05 为 OFF。

(三)计数器指令实验1、增计数器编写程序,当输入信号 I07 产生一个上升沿时,增计数器 CTU 的计数值加 1。

当计数值达到预设值 10 时,输出信号 Q06 为 ON。

2、减计数器构建一个程序,当输入信号 I10 产生一个上升沿时,减计数器 CTD 的计数值减 1。

当计数值减为 0 时,输出信号 Q07 为 ON。

plc实验报告和相应的编程

plc实验报告和相应的编程

实验一认识FXGP与PLC一.实验目的:1.熟悉FXGP的操作界面2.熟悉FXGP菜单的显示和操作方式3.注意观察FXGP系统提供的信息4.学会设置路径、新建程序5.初步学习用指令表、梯形图方式编制PLC程序6.理解指令表和梯形图的对应关系7.掌握FXGP中的程序传送到PLC的方法8.通过实验了解和熟悉FX系列PLC的外部结构和外部接线方法9.熟悉简易编程器的使用。

9. 掌握调试程序的方法二.实验内容(一)使用FXGP软件编辑程序1.设置文件路径为C:\PLC12.进入FXGP软件3.新建一个序程序,指定正确的PLC类型,程序名称[untit101] 4.用梯形图形式编辑如下一段程序5、通过转换,在指令表形式下阅读程序(二)、使用编程器编辑程序1.关电源,将手持编程器FX-10P-E或FX-20P-E连接电缆,电缆另一头接至PLC主机的编程器插座中,并将主机工作方式选择(STOP/RUN)拨至“STOP”位置。

2.按下PLC的电源开关,PLC主机通电,“POWER”灯亮,手持编程器在液晶窗口显示自检内容。

3.写入程序前,需对PLC“RAM”全部清零,当液晶显示屏上显示全是“NOP”时,即可输入程序。

清零方法如图1所示。

图1 PLC清零方法4.程序的输入,需要先按功能编辑键,键盘上分别有“RD/WR”、“INS/DEL”、“MNT/TEST”等字符分别代表读/写、插入/删除和监控/测试功能。

其功能为后按者有优先权。

例如第一次按“RD/WR”键为读出(R),再按一次即为写入(W),再按一次又变成R。

W、R、I、D、M和T功能字符分别显示在液晶显示窗的左上角。

5.输入程序如图2所示,进行编程训练操作。

图2 编程实例实现编程操作如图3所示。

(a) 键盘操作(b) 显示图3 编程操作6.输入完程序后,可按图4操作键进行程序检查。

图4 程序检查7.验证实验的正确性(1)将模拟开关板的开关分别用导线连接到PLC的输入端X0、X1和COM端。

1PLC实验基本指令1

1PLC实验基本指令1

重庆交通大学学生实验报告实验课程名称可编程控制器原理及应用开课实验室机电学院209实验室学院机电学院年级08级专业班机电子2班学生姓名李黎学号08490229开课时间2010 至2011 学年第二学期总成绩教师签名实验一 基本指令的编程练习 与或非逻辑功能实验一、实验任务及实验目的1、熟悉PLC 实验装置及实验箱,S7-200系列编程控制器的外部接线方法2、了解编程软件STEP7的编程环境,软件的使用方法。

3、掌握与、或、非逻辑功能的编程方法。

二、实验过程(程序方案设计、程序代码,关键代码注释,实验中遇到的问题以及解决问题的过程等)通过程序判断Q0.1、Q0.2、Q0.3、Q0.4的输出状态,然后输入程序并运行,加以验证。

步序 指令 器件号 说 明 步序 指 令 器件号 说 明 0 LD I0.1 输入 0 LDI I0.1 1 AN I0.3 输入 1 ANI I0.0 2 = Q0.1 与门输出2 = Q0.3 或非门输出0 LD I0.1 0 LDI I0.1 1 O I0.3 1 OI I0.3 2 =Q0.2或门输出2=Q0.4与非门输出电路接线:输出 接线HL0HL1HL2HL3 Q0.1 Q0.2 Q0.3Q0.4梯形图程序:输入 接线 SQ1 SQ3 I0.1I0.3实验步骤:梯形图中的SQ1、SQ3分别对应控制实验单元输入开关I0.1、I0.3。

通过专用的PC/PPI电缆连接计算机与PLC主机。

打开编程软件STEP7,逐条输入程序,检查无误后,将所编程序下载到主机内,并将可编程控制器主机上的STOP/RUN开关拨到RUN位置,运行指示灯点亮,表明程序开始运行,有关的指示灯将显示运行结果。

拨动输入开关SQ1、SQ3,观察输出指示灯Q0.1、Q0.2、Q0.3、Q0.4是否符合与、或非逻辑的正确结果。

三、实验结果及总结结果:达到了设计的要求和观察到了预期的实验结果。

总结:1、试验前对PLC的概念很模糊,通过这次试验,了解到PLC的使用,特别是对梯形图理解更深入了。

plc实验1基本指令的编程练习

plc实验1基本指令的编程练习

实验一基本指令的编程练习一、实验目的1、熟悉西门子PLC实验装置。

2、掌握S7-200型PLC的输入输出配置及外围设备的连接方法。

3、练习掌握STEP7 Micro WIN V4.0编程软件的使用方法。

4、掌握梯形图、指令表等编程语言的转换。

5、掌握与、或、非基本逻辑指令及定时器、计数器的使用。

二、实验设备1、PLC实验台(西门子S7-200)1台。

2、安装了STEP7 Micro WIN V4.0软件的计算机一台。

3、PC/PPI编程电缆一根。

4、导线若干。

三、实验接线图和I/O分配表3.1实验接线图I/O分配表编地址说明功能号1 I0.0 按钮1 系统启动2 I0.1 按钮2 系统停止3 I0.2 按钮34 I0.3 按钮45 Q0.0 灯1 指示灯6 Q0.1 灯2 指示灯7 Q0.2 接触器1 控制电动机8 Q0.3 接触器2 控制电动机四、实验步骤1、电源断电,按图接线将AC220V电源通过单极空气开关接至PLC主机电源,按纽SB1、SB2、SB3、SB4分别接至PLC输入点I0.0、I0.1、I0.2,I0.3指示灯L1、L2、KM1、KM2分别接至Q0.0、Q0.1、Q0.2、Q0.3。

用编程电缆连接PLC的PORT1和计算机的COM端。

2、接通电源,打开计算机,进入PLC编程界面,检查计算机与PLC主机通信是否正常。

3、新建文件,保存,将程序逐条输入,检查无误后,将PLC设为停止状态,STOP指示灯亮,将程序下载至PLC后,再将PLC设为运行状态,RUN指示灯亮。

4、按下按钮SB1、SB2、SB3或SB4观察输出指示灯的状态是否符合程序的运行结果。

五、基本指令练习程序1、与、或、非逻辑功能实验通过程序判断Q0.0、Q0.1、Q0.2的输出状态,然后输入并运行程序加以验证。

参考程序:(1)梯形图根据输出结果,绘制时序图(2)语句表2、电动机起动保持停止控制程序(1)梯形图(2)语句表LD I0.0O Q0.0AN I0.1= Q0.03、置位、复位指令练习(1)梯形图(2语句表)根据输出结果,绘制时序图根据输出结果,绘制时序图4、定时器功能的实验(1)得电延时定时电路语句表(2)断电延时定时电路(3) 掉电保护性接通延时定时器(保持定时器)电路根据输出结果,绘制时序图注意:PLC的定时器有一定的定时范围。

调试PLC的C程序源码

调试PLC的C程序源码

fxnew.h#define DELAY_TIMES 30000L#define TRUE 1#define FALSE 0#define TRUE 1#define FALSE 0#define FORCE_ON 0x37#define FORCE_OFF 0x38void init_plc(void);int check_plc(void);int _read_data_register(unsigned int uAddress,unsigned int number); int _read_mdata_register(unsigned int uAddress,unsigned int number); int _write_data_register(unsigned int uAddress,unsigned int number); int _force_m_contact(unsigned int uAddress,unsigned char ucOn_off); int read_data_register(unsigned int uAddress,unsigned int number); int read_mdata_register(unsigned int uAddress,unsigned int number); int write_data_register(unsigned int uAddress,unsigned int number); int force_m_contact(unsigned int uAddress,unsigned char ucOn_off); int _read_m_register(unsigned int uAddress,unsigned int number);int read_m_register(unsigned int uAddress,unsigned int number);int TESTING=0;unsigned int uRead_value[25];unsigned int uWrite_value[25];unsigned int COMM_PORT=1;unsigned int STATS_PORT=0x2fd;unsigned int DATA_PORT=0x2f8;void init_plc(void){ _AX=0xfa;_DX=COMM_PORT;geninterrupt(0x14);while((inportb(STATS_PORT)&1)!=0)inportb(DA TA_PORT);}int check_plc(void){ long lTmp;if(TESTING==1)return TRUE;init_plc();for(lTmp=0L;lTmp<DELAY_TIMES;lTmp++){ if((inportb(STA TS_PORT)&0x20)!=0)break;}if(lTmp>=DELAY_TIMES)return(FALSE);outportb(DATA_PORT,5);disable();for(lTmp=0L;lTmp<DELAY_TIMES;lTmp++){ if((inportb(STA TS_PORT)&1)!=0)break;}if(lTmp>=DELAY_TIMES){ enable();return(FALSE);}if((lTmp=inportb(DATA_PORT))==6){ enable();return(TRUE);}else{ enable();return(FALSE);}}int read_data_register(unsigned int uAddress,unsigned int number){ int i;for(i=0;i<3;i++)if(_read_data_register(uAddress,number)==TRUE)return TRUE;return FALSE;}int _read_data_register(unsigned int uAddress,unsigned int number){ unsigned char uSend[]={2,0x30,0x30,0x30,0x30,0x30,0x30,0x32,3,0x30,0x30};unsigned char uReceive[104];unsigned int uTmp;unsigned int uSum;unsigned int num;long lTmp;int i,j;if(TESTING==1){ for(i=0;i<number;i++)uRead_value[i]=0;return TRUE;}init_plc();num=number*2;if((num/16)>=10)uSend[6]=(unsigned char)(num/16+0x41-10);elseuSend[6]=(unsigned char)(num/16+0x30);if((num%16)>=10)uSend[7]=(unsigned char)((num%16)+0x41-10); elseuSend[7]=(unsigned char)((num%16)+0x30); uAddress=uAddress*2+0x1000;uTmp=uAddress & 0x000f;uSend[5]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa); uTmp=(uAddress>>4) & 0x000f;uSend[4]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa); uTmp=(uAddress>>8) & 0x000f;uSend[3]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa); uTmp=(uAddress>>12)&0x000f;uSend[2]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);uSum=0;for(i=1;i<9;i++)uSum=uSum+(unsigned char)uSend[i];uTmp=uSum&0x000f;uSend[10]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa); uTmp=(uSum>>4)&0x000f;uSend[9]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);for(i=0;i<11;i++){ for(lTmp=0L;lTmp<DELAY_TIMES;lTmp++) { if((inportb(STATS_PORT)&0x20)!=0)break;}if(lTmp>=DELAY_TIMES){return(FALSE);}outportb(DATA_PORT,uSend[i]);}disable();for(lTmp=0;lTmp<DELAY_TIMES;lTmp++){ if((inportb(STA TS_PORT)&1)!=0)break;}if(lTmp>=DELAY_TIMES){enable();return(FALSE);}uReceive[0]=inportb(DA TA_PORT);if(uReceive[0]!=2){enable();return(FALSE);}for(i=1;i<number*4+4;i++){ for(lTmp=0L;lTmp<DELAY_TIMES;lTmp++) { if((inportb(STA TS_PORT)&1)!=0)break;}if(lTmp>=DELAY_TIMES){enable();return(FALSE);}uReceive[i]=inportb(DATA_PORT);}enable();uSum=0;for(i=1;i<number*4+2;i++)uSum=uSum+(unsigned int)uReceive[i];uTmp=uSum&0xf;uTmp=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);if((unsigned char)uTmp!=uReceive[number*4+3])return(FALSE);uTmp=(uSum>>4)&0xf;uTmp=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);if((unsigned char)uTmp!=uReceive[number*4+2])return(FALSE);for(j=0;j<number;j++){ for(i=j*4+1;i<j*4+5;i++)uReceive[i]=(uReceive[i]>0x39)?uReceive[i]-0x41+0xa:uReceive[i]-0x30;uRead_value[j]=(((((uReceive[j*4+3]<<4)+uReceive[j*4+4])<<4)+uReceive[j*4+1])<<4)+u Receive[j*4+2];}return TRUE;}int read_mdata_register(unsigned int uAddress,unsigned int number){ int i;for(i=0;i<3;i++)if(_read_mdata_register(uAddress,number)==TRUE)return TRUE;return FALSE;}int _read_mdata_register(unsigned int uAddress,unsigned int number){ unsigned char uSend[]={2,0x30,0x30,0x30,0x30,0x30,0x30,0x32,3,0x30,0x30};unsigned char uReceive[104];unsigned int uTmp;unsigned int uSum;unsigned int num;long lTmp;int i,j;if(TESTING==1){ for(i=0;i<number;i++)uRead_value[i]=0;return TRUE;}init_plc();num=number*2;if((num/16)>=10)uSend[6]=(unsigned char)(num/16+0x41-10);elseuSend[6]=(unsigned char)(num/16+0x30);if((num%16)>=10)uSend[7]=(unsigned char)((num%16)+0x41-10);elseuSend[7]=(unsigned char)((num%16)+0x30);/*uAddress=uAddress*2+0x1000;*/uTmp=uAddress & 0x000f;uSend[5]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa); uTmp=(uAddress>>4) & 0x000f;uSend[4]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa); uTmp=(uAddress>>8) & 0x000f;uSend[3]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa); uTmp=(uAddress>>12)&0x000f;uSend[2]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);uSum=0;for(i=1;i<9;i++)uSum=uSum+(unsigned char)uSend[i];uTmp=uSum&0x000f;uSend[10]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa); uTmp=(uSum>>4)&0x000f;uSend[9]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);for(i=0;i<11;i++){ for(lTmp=0L;lTmp<DELAY_TIMES;lTmp++) { if((inportb(STA TS_PORT)&0x20)!=0)break;}if(lTmp>=DELAY_TIMES){return(FALSE);}outportb(DATA_PORT,uSend[i]);}disable();for(lTmp=0;lTmp<DELAY_TIMES;lTmp++){ if((inportb(STA TS_PORT)&1)!=0)break;}if(lTmp>=DELAY_TIMES){enable();return(FALSE);}uReceive[0]=inportb(DA TA_PORT);if(uReceive[0]!=2){enable();return(FALSE);}for(i=1;i<number*4+4;i++){ for(lTmp=0L;lTmp<DELAY_TIMES;lTmp++){ if((inportb(STATS_PORT)&1)!=0)break;}if(lTmp>=DELAY_TIMES){enable();return(FALSE);}uReceive[i]=inportb(DATA_PORT);}enable();uSum=0;for(i=1;i<number*4+2;i++)uSum=uSum+(unsigned int)uReceive[i];uTmp=uSum&0xf;uTmp=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);if((unsigned char)uTmp!=uReceive[number*4+3])return(FALSE);uTmp=(uSum>>4)&0xf;uTmp=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);if((unsigned char)uTmp!=uReceive[number*4+2])return(FALSE);for(j=0;j<number;j++){ for(i=j*4+1;i<j*4+5;i++)uReceive[i]=(uReceive[i]>0x39)?uReceive[i]-0x41+0xa:uReceive[i]-0x30;uRead_value[j]=(((((uReceive[j*4+3]<<4)+uReceive[j*4+4])<<4)+uReceive[j*4+1])<<4)+u Receive[j*4+2];}return TRUE;}int write_data_register(unsigned int uAddress,unsigned int number) { int i;for(i=0;i<3;i++)if(_write_data_register(uAddress,number)==TRUE)return TRUE;return FALSE;}int _write_data_register(unsigned int uAddress,unsigned int number) { unsigned char uSend[111];unsigned int uTmp,uSum,num;long lTmp;int i;if(TESTING==1)return TRUE;init_plc();uSend[0]=2;uSend[1]=0x31;uSend[number*4+8]=3;num=(number*2)/16;if(num>=10)uSend[6]=num+0x41-10;else uSend[6]=num+0x30;num=(number*2)%16;if(num>=10)uSend[7]=num+0x41-10;else uSend[7]=num+0x30;uAddress=0x1000+2*uAddress;uTmp=uAddress&0x000f;uSend[5]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);uTmp=(uAddress>>4)&0x000f;uSend[4]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);uTmp=(uAddress>>8)&0x000f;uSend[3]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);uTmp=(uAddress>>12)&0x000f;uSend[2]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);for(i=0;i<number;i++){uTmp=uWrite_value[i]&0x000f;uSend[i*4+9]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);uTmp=(uWrite_value[i]>>4)&0x000f;uSend[i*4+8]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);uTmp=(uWrite_value[i]>>8)&0x000f;uSend[i*4+11]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);uTmp=(uWrite_value[i]>>12)&0x000f;uSend[i*4+10]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa); }uSum=0;for(i=1;i<9+number*4;i++)uSum+=uSend[i];uTmp=uSum&0x000f;uSend[number*4+10]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa); uTmp=(uSum>>4)&0x000f;uSend[number*4+9]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa); for(i=0;i<11+number*4;i++){ for(lTmp=0L;lTmp<DELAY_TIMES;lTmp++) { if((inportb(STA TS_PORT)&0x20)!=0)break;}if(lTmp>=DELAY_TIMES){/*enable();*/return(FALSE);}outportb(DATA_PORT,uSend[i]);}disable();for(lTmp=0L;lTmp<DELAY_TIMES;lTmp++){ if((inportb(STA TS_PORT)&1)!=0)break;}if(lTmp>=DELAY_TIMES){enable();return(FALSE);}if(inportb(DATA_PORT)!=6){enable();return(FALSE);}else{enable();return(TRUE);}}int force_m_contact(unsigned uAddress,unsigned char ucOn_off){ int i;for(i=0;i<3;i++)if(_force_m_contact(uAddress,ucOn_off)==TRUE)return TRUE;return FALSE;}int _force_m_contact(unsigned uAddress,unsigned char ucOn_off){ unsigned uSend[]={2,0x37,0x30,0x30,0x30,0x30,3,0x30,0x30};unsigned uTmp,uSum,i;long lTmp;if(TESTING==1)return TRUE;init_plc();uAddress=uAddress+0x800;uSend[1]=ucOn_off;uTmp=uAddress&0x000f;uSend[3]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);uTmp=(uAddress>>4)&0x000f;uSend[2]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);uTmp=(uAddress>>8)&0x000f;uSend[5]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);uTmp=(uAddress>>12)&0x000f;uSend[4]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);uSum=0;for(i=1;i<7;i++)uSum+=uSend[i];uTmp=uSum&0x000f;uSend[8]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);uTmp=(uSum>>4)&0x000f;uSend[7]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);for(i=0;i<9;i++){ for(lTmp=0L;lTmp<DELAY_TIMES;lTmp++){ if((inportb(STA TS_PORT)&0x20)!=0)break;}if(lTmp>=DELAY_TIMES){enable();return(FALSE);}outportb(DATA_PORT,uSend[i]);}disable();for(lTmp=0L;lTmp<DELAY_TIMES;lTmp++){ if((inportb(STA TS_PORT)&1)!=0)break;}if(lTmp>=DELAY_TIMES){enable();return(FALSE);}if(inportb(DATA_PORT)!=6){enable();return(FALSE);}else{ enable();return(TRUE);}}int read_m_register(unsigned int uAddress,unsigned int number){ int i;for(i=0;i<3;i++)if(_read_m_register(uAddress,number)==TRUE)return TRUE;return FALSE;}int _read_m_register(unsigned int uAddress,unsigned int number){ unsigned char uSend[]={2,0x30,0x30,0x30,0x30,0x30,0x30,0x32,3,0x30,0x30};unsigned char uReceive[54];unsigned int uTmp;unsigned int uSum;unsigned int num;long lTmp;int i,j;if(TESTING==1){ for(i=0;i<number;i++)uRead_value[i]=0;return TRUE;}init_plc();num=number;if((num/16)>=10)uSend[6]=(unsigned char)(num/16+0x41-10);elseuSend[6]=(unsigned char)(num/16+0x30);if((num%16)>=10)uSend[7]=(unsigned char)((num%16)+0x41-10); elseuSend[7]=(unsigned char)((num%16)+0x30); uAddress=uAddress/8+0x100;uTmp=uAddress & 0x000f;uSend[5]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa); uTmp=(uAddress>>4) & 0x000f;uSend[4]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa); uTmp=(uAddress>>8) & 0x000f;uSend[3]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa); uTmp=(uAddress>>12)&0x000f;uSend[2]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);uSum=0;for(i=1;i<9;i++)uSum=uSum+(unsigned char)uSend[i];uTmp=uSum&0x000f;uSend[10]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa); uTmp=(uSum>>4)&0x000f;uSend[9]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);for(i=0;i<11;i++){ for(lTmp=0L;lTmp<DELAY_TIMES;lTmp++) { if((inportb(STA TS_PORT)&0x20)!=0)break;}if(lTmp>=DELAY_TIMES){/*enable();*/return(FALSE);}outportb(DATA_PORT,uSend[i]);}disable();for(lTmp=0;lTmp<DELAY_TIMES;lTmp++){ if((inportb(STA TS_PORT)&1)!=0)break;}if(lTmp>=DELAY_TIMES){enable();return(FALSE);}uReceive[0]=inportb(DATA_PORT);if(uReceive[0]!=2){enable();return(FALSE);}for(i=1;i<number*2+4;i++){ for(lTmp=0L;lTmp<DELAY_TIMES;lTmp++) { if((inportb(STA TS_PORT)&1)!=0)break;}if(lTmp>=DELAY_TIMES){enable();return(FALSE);}uReceive[i]=inportb(DATA_PORT);}enable();uSum=0;for(i=1;i<number*2+2;i++)uSum=uSum+(unsigned int)uReceive[i];uTmp=uSum&0xf;uTmp=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);if((unsigned char)uTmp!=uReceive[number*2+3])return(FALSE);uTmp=(uSum>>4)&0xf;uTmp=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);if((unsigned char)uTmp!=uReceive[number*2+2])return(FALSE);for(j=0;j<number;j++){ for(i=j*2+1;i<j*2+3;i++)uReceive[i]=(uReceive[i]>0x39)?uReceive[i]-0x41+0xa:uReceive[i]-0x30;uRead_value[j]=((uReceive[j*2+1])<<4)+uReceive[j*2+2];}return TRUE;}。

PLC指令代码

PLC指令代码

M 内部继电器默认6144 点(M0 ~ 6143)( 可更改)B 链接继电器默认2048 点(B0 ~ 7FF)( 可更改)T 定时器默认512 点(T0 ~ 511)( 可更改)( 低速定时器/ 高速定时器共用) 通过指令指定低速定时器/ 高速定时器低速定时器/ 高速定时器的计量单位是在参数中设置( 低速定时器:1 ~ 1000ms,单位1ms,默认100ms)( 高速定时器:0.1 ~ 100ms,单位0.1ms,默认10ms)ST累计定时器默认0 点( 低速定时器/ 高速定时器共用)( 可更改) 通过指令指定低速定时器/ 高速定时器低速定时器/ 高速定时器的计量单位是在参数中设置( 低速定时器:1 ~ 1000ms,单位1ms,默认100ms)( 高速定时器:0.1 ~ 100ms,单位0.1ms,默认10ms)C 计数器普通计数器: 默认512 点(C0 ~ 511)( 可更改)D数据寄存器默认6144 点(D0 ~ 7FF6143)( 可更改)W链接寄存器默认2048 点(W0 ~ 7FF)( 可更改)F 报警器默认1024 点(F0 ~ 1023)( 可更改)V变址继电器默认1024 点(V0 ~ 1023)( 可更改)SB链接特殊继电器 1536 点(SB0 ~ 5FF)软元件点数固定SW链接特殊寄存器1536 点(SW0 ~ 5FF)SM特殊继电器5120 点(SM0 ~ 5119)SD特殊寄存器5120 点(SD0 ~ 5119)MRD在某个控制线路的编制过程中,使用MRD指令就将堆栈底部单元里的内容(即在最后一次使用MPS指令时,推入堆栈的逻辑运算结果)读出。

MPS在某个控制线路的编制过程中,如果要求该控制线路同时联结几个线圈或特殊功能块,而且它们各自的控制条件略有不同,需要将某一个或几个触点的逻辑运算结果存放起来,以备后用,这时就需要使用MPS指令将该逻辑运算结果推入堆栈。

PLC常用符号代码

PLC常用符号代码

电器类型符号说明编号输入继电器X X000-X127 采用8进制编号,最多128点X000—X007,X100—X107;X010—X017,X110—X117输出继电器Y X000-X127 采用8进制编号,最多128点Y000—Y007,Y100—Y107;Y010—Y017,Y110—Y117辅助继电器M M000—M1023 十进制,一类:无掉电保护(能用),二类:具有带电保护;三类:物殊辅助继电器通用:M000—M499,掉电保护M500—M1023,特殊M8000—M8255定时器T T000—T500 十进制,1、定时精度100ms 的定时器,定时范围0.1—3276.7S;2、定时精度10ms的定时器,定时范围0.01—3276.7S精度100ms:T000-T199;精度10m:T200-T245计数器C C000-C199 十进制,计数器的庙宇可由常数K设定,1、通用加计数据C000-C099,计数范围K1-K32767之间,2、掉电保护加计数据器C100-C199,计数范围K1-K32767之间。

状态器S S0-S899 初始状态器S0-S9,复位状态器S10-S19,通用状态器S20-S499,掉电保护状态器S500-S899指针P P0-P63 不能重复使用数据寄存器D D0-D511 1、通用数据寄存器D0-D199,新数据覆盖旧数据停机断电数据消失;2、保护数据寄存器D200-D511,除非必写,不丢失。

代码说明梯形图SPS 节点推入堆栈MRD 读栈内容MPP 栈内容出栈MOP 等于短接掉X2便于程序修改MOV 当X1接通时,D0寄存器被赋予数值10BIN 数值较换为BIN码,废旧物资寄存器+ - * / D0的数值“+”后再返回给D0;D0的数值“-”后再返回给D0;D0的数值“*”后再返回给D0;。

PLC实训报告

PLC实训报告

实验一 位逻辑指令实验一、实验目的1.掌握位逻辑指令的使用。

2.掌握位逻辑指令参数的设置。

二、实验内容 梯形图图1-1语句表说明步 序 指 令 器件号 说明1 LD I0.0 要想激活Q0.0,常开触点I0.0和I0.1必须为接通(闭合)。

NOT 指令作为一个但向器使用,在RUN 模式下,Q0.0和Q0.1具有相反的逻辑状态。

2 A I0.13 = Q0.04 NOT 5=Q0.1三.实验结果实验二时钟/通讯指令实验一、实验目的1.熟悉读实时时钟指令(TODP)和写实时时钟指令(TODW)的设置和使用。

2.熟悉网络读写指令的设置和使用。

二、实验内容梯形图程序图2-1语句表说明步序指令器件号说明1 LD SM0.1 在第一个扫描周期,使能PPI主站模式,并且清除所有接收和发送缓冲区2 MOVB 2,SMB303 FILL +0,VW200,68三.实验结果实验三比较指令实验一、实验目的1.掌握数值比较的使用方法。

2.进一步熟悉PLC的输入。

二、实验内容梯形图图3-1语句表说明表3-1步 序 指 令 器件号 说明1 LD I0.0 调节模拟调节电位器0来改变SMB28的数值。

当SMB28中的数值小于等于50时,Q0.0输出当SMB28中的数值大于等于150时,Q0.1输出当比较结果为真时,状态指示器点亮。

2 LPS3 AB ﹤﹦ SMB28,504 = Q0.05 LPP6 AB ﹥= SMB28,150 7=Q0.1三.实验结果实验四计数/高速计数指令实验一、实验目的1.掌握计数器指令的使用和设置2.了解高速计数器不同的操作模式下,模块的功能。

3.进一步的熟悉PLC的指令输入。

二、实验内容梯形图图4-1图4-2 时序图语句表说明 表4-1步 序 指 令 器件号 说明1 LD I0.0 I0.0增计数 I0.1减计数I0.2将当前值复位为0当当前值=4时,将增/减计数器C48接通2 LD I0.13 LD I0.24 CTUD C48,+45 LD C48 6=Q0.0三.实验结果实验五脉冲输出指令实验一、实验目的1.掌握脉冲指令的操作。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验3 代码 400 401 100 456 100 100 450 15 450 451 10 451 452 5 452 453 10 453 455 460 454 0.5 454 455 0.5 460 456 5 100 71 460 454 460 5 451 430 450 451 431 450 432 452 460 433 454 460 452 453 434
OUT LD OUT LD OUT LD OUT LD OUT LD OUT EJP END
202 435 203 434 204 433 205 206 431 207 430 701
WRITE WRITE WRITE WRITE WRITE WRITE WRITE WRITE WRITE WRITE WRITE WRITE WRITE
WRITE WRITE WRITE WRITE WRITE WRITE WRITE WRITE WRITE WRITE WRITE WRITE WRITE WRITE WRITE WRITE WRITE WRITE WRITE WRITE WRITE
LD OR ANI OUT LD OUT K LD OUT K LD ANI OUT K LD OUT K LDI OR RST LD OUT K LD ANI ORLD SFT LD OUT MC LD S LD S LD S LD S LD S LD S LD S MCR LDI OUT K LD OUT LDI CJP LD OUT LD OUT LD OUT LD OUT LD OUT LD OUT LD OUT LD OUT EJP LD CJP LD OUT LD
LD OR ANI ANI OUT LD AND OR ANI OUT LD AND ANI ANI OUT K LD OUT K OUT END
实验1 代码 401 431 400 433 431 402 431 432 400 432 403 432 51 400 50 3 50 51 3 433
实验4 代码 210 200 410 200 450 200 71 101 101 401 201 402 202 403 203 404 204 405 205 406 206 407 207 101 100 450 0.4 450 100 400 700 200 430 201 431 202 433 203 433 204 434 205 435 206 436 207 437 700 400 701 200 437 436
WRITE WRITE WRITE WRITE WRITE WRITE WRITE WRITE WRITE WRITE WRITE WRITE WRITE WRITE WRITE WRITE WRITE WRITE WRITE WRITE WRITE WRITE WRITE WRITE WRITE WRITE WRITE WRITE WRITE WRITE WRITE WRITE WRITE WRITE WRITE WRITE WRITE WRITE WRITE WRITE WRITE WRITE WRITE WRITE WRITE WRITE WRITE WRITE WRITE WRITE WRITE
WRITE WRITE WRITE WRITE WRITE WRITE WRITE WRITE WRITE WRITE WRITE WRITE WRITE WRITE WRITE WRITE WRITE WRITE WRITE WRITE WRITE WRITE WRITE WRITE WRITE WRITE WRITE WRITE WRITE WRITE WRITE WRITE WRITE WRITE WRITE WRITE WRITE WRITE WRITE WRITE WRITE WRITE WRITE WRITE WRITE WRITE WRITE WRITE WRITE WRITE WRITE WRITE WRITE
实验2 代码 400 100 460 100 100 452 4 452 453 6 453 455 454 0.5 454 455 0.5 100 71 460 454 460 5 452 453 454 434 452 433
实验3 代码 WRITE WRITE WRITE WRITE WRITE WRITE WRITE WRITE WRITE WRITE WRITE WRITE WRITE WRITE WRITE WRITE WRITE WRITE WRITE WRITE WRITE WRITE WRITE WRITE WRITE WRITE WRITE WRITE WRITE WRITE LD OR OR ANI OUT LD OUT K LD OUT K LD OUT K LD OUT K LD ANI OR OUT K LD OUT K LD OUT K LDI OR RST LD OUT K LD OUT LD ANI OUT LDI OUT LDI OR OUT LD ANI LD ANI ORB OUT END
相关文档
最新文档