西门子模块6ES322-1BF01-0AA0
PLC在进行输入输出处理、模拟量控制、位置控制时,需要许多数据寄存器存储数据和参数。数据寄存器为16位,高位为符号位。可用两个数据寄存器来存储32位数据,高位仍为符号位。数据寄存器有以下几种类型:
1.通用数据寄存器(D0~D199)
共200点。当M8033为ON时,D0~D199有断电保护功能;当M8033为OFF时则它们无断电保护,这种情况PLC由RUN →STOP或停电时,数据全部清零。
2.断电保持数据寄存器(D200~D7999)
共7800点,其中D200~D511(共12点)有断电保持功能,可以利用外部设备的参数设定改变通用数据寄存器与有断电保持功能数据寄存器的分配;D490~D509供通信用;D512~D7999的断电保持功能不能用软件改变,但可用指令清除它们的内容。根据参数设定可以将D1000以上做为文件寄存器。
3.特殊数据寄存器(D8000~D8255)
共256点。特殊数据寄存器的作用是用来监控PLC的运行状态。如扫描时间、电池电压等。未加定义的特殊数据寄存器,用户不能使用。具体可参见用户手册。
4.变址寄存器(V/Z)
FX2N系列PLC有V0~V7和Z0~Z7共16个变址寄存器,它们都是16位的寄存器。变址寄存器V/Z实际上是一种特殊用途的数据寄存器,其作用相当于微机中的变址寄存器变,用于改变元件的编号(变址),例如V0=5,则执行D20V0时,被执行的编号为D25(D20+5)。变址寄存器可以象其它数据寄存器一样进行读写,需要进行32位操作时,可将V、Z串联使用(Z为低位,V为高位)
在FX系列中,指针用来指示分支指令的跳转目标和中断程序的入口标号。分为分支用指针、输入中断指针及定时中断指针和记数中断指针。
1.分支用指针(P0~P127)
FX2N有P0~P127共128点分支用指针。分支指针用来指示跳转指令(CJ)的跳转目标或子程序调用指令(CALL)调用子程序的入口地址。
如图1所示,当X1常开接通时,执行跳转指令CJ P0,PLC跳到标号为P0处之后的程序去执行。
2.中断指针(I0□□~I8□□)
中断指针是用来指示某一中断程序的入口位置。执行中断后遇到IRET(中断返回)指令,则返回主程序。中断用指针有以下三种类型:
(1)输入中断用指针(I00□~I50□) 共6点,它是用来指示由特定输入端的输入信号而产生中断的中断服务程序的入口位置,这类中断不受PLC扫描周期的影响,可以及时处理外界信息。输入中断用指针的编号格式如下:
例如:I101为当输入X1从OFF→ON变化时,执行以I101为标号后面的中断程序,并根据IRET指令返回。
(2)定时器中断用指针(I6□□~I8□□) 共3点,是用来指示周期定时中断的中断服务程序的入口位置,这类中断的作用是PLC以的周期定时执行中断服务程序,定时循环处理某些任务。处理的时间也不受PLC扫描周期的限制。□□表示定时范围,可在10~99ms中选取。
(3)计数器中断用指针(I010~I060) 共6点,它们用在PLC内置的高速计数器中。根据高速计数器的计数当前值与计数设定值之关系确定是否执行中断服务程序。它常用于利用高速计数器优先处理计数结果的场合
6ES7312-1AE14-0AB0参数详细
一、 转子绕组串电阻起动控制线路
1.按钮操作控制线路
图 2.22 为转子绕组串电阻起动由按钮操作的控制线路。
图 2.22 按钮操作绕线式电动机串电阻起动控制线路
工作原理为:合上电源开关 QS ,按下 SB1 , KM 得电吸合并自锁,电动机串全部电阻起动,经一定时间后,按下 SB2 , KM1 得电吸合并自锁, KM1 主触头闭合切除级电阻 R1 ,电动机转速继续升高,经一定时间后,按下 SB3 , KM2 得电吸合并自锁, KM2 主触头闭合切除第二级电阻 R2 ,电动机转速继续升高,当电动机转速接近额定转速时,按下 SB4 , KM3 得电吸合并自锁, KM3 主触头闭合切除全部电阻,起动结束电动机在额定转速下正常运行。
2.时间原则控制绕线式电动机串电阻起动控制线路
图 2.23 为时间继电器控制绕线式电动机串电阻起动控制线路,又称为时间原则控制,,其中三个时间继电器 KT1 、 KT2 、 KT3 分别控制三个接触器 KM1 、 KM2 、 KM3 按顺序依次吸合,自动切除转子绕组中的三级电阻,与起动按钮 SB1 串接的 KM1 、 KM2 、 KM3 三个常闭触头的作用是保证电动机在转子绕组中接入全部起动电阻的条件下才能起动。若其中任何一个接触器的主触头因熔焊或机械故障而没有释放时,电动机就不能起动。
3.电流原则控制绕线式电动机串电阻起动控制线路
二、 转子绕组串频敏变阻器起动控制线路
1.电动机单向旋转转子串频敏变阻器起动控制电路
2.电动机转子串频敏变阻器正反转起动控制线
1.抗干扰能力强、可靠性高
在工业现场存在着电磁干扰、电源波动、机械振动、温度和湿度的变化等因素,这些因素都影响着计算机的正常工作。而plc从硬件和软件两个方面都采取了一系列的抗干扰措施。在硬件方面,PLC采用大规模和超大规模的集成电路,采用了隔离、滤波、屏蔽及接地等抗干扰措施,并采取了耐热、防潮、防尘和抗震等措施;在软件上采用数字滤波等抗干扰和故障诊断措施。以上这些措施使PLC具有了很强的抗干扰能力和很高的可靠性。
2.控制系统结构简单、使用方便
在PLC控制系统中,只需在PLC的输入/输出端子上接入相应的信号线即可,不需要连接继电器之类的低压电器和大量复杂的硬件接线电路,大大简化了控制系统的结构。PLC体积小、质量轻,安装与维护也极为方便。另外,PLC的编程大多采用类似于继电器控制线路的梯形图形式,这种编程语言形象直观、容易掌握,编程非常方便。
3.功能强大、通用性好
PLC内部有成百上千个可供用户使用的编程元件,具有很强的功能,可以实现非常复杂的控制功能。另外,PLC的产品已经标准化、系列化、模块化,配备有品种齐全的各种硬件装置供用户使用,用户能灵活方便地进行系统配置,组成不同功能、不同规模的控制系统。
目的:通过MSComm控件实现WINCC串口通讯(C脚本和VB脚本两种方式) 测试环境:操作系统 win7 WINCC版本:V7.2 辅助工具:串口调试工具 ASPD虚拟串口工具 测试WINCC组态画面: 测试实验过程画面:
1、通过VB实现串口通讯 画面对象“打开画面”VB事件脚本: Sub OnOpen() Dim objMSComm, tagConnection Set objMSComm = hmiRuntime.Screens("串口通讯VB版").ScreenItems("COM") Set tagConnection = HMIRuntime.Tags("tagConnection1") If objMSComm.PortOpen = False Then ' Assign com port number objMSComm.Commport = 4 ' Values: 9600 Baud, N - No Parity, 8 - Databit, 1 - Stopbit objMSComm.Settings = "9600,N,8,1" objMSComm.RThreshold = 1 objMSComm.SThreshold = 0 objMSComm.InBufferCount = 0 objMSComm.InputLen = 0 objMSComm.PortOpen = True tagConnection.Write (True) HMIRuntime.Trace("Port open." & vbCrLf) Else HMIRuntime.Trace("Port is already opened." & vbCrLf) End If End Sub MSComm控件OnComm对象事件: Sub OnOpen() Dim objMSComm, tagConnection Set objMSComm = HMIRuntime.Screens("串口通讯VB版").ScreenItems("COM") Set tagConnection = HMIRuntime.Tags("tagConnection1") If objMSComm.PortOpen = False Then ' Assign com port number objMSComm.Commport = 4 ' Values: 9600 Baud, N - No Parity, 8 - Databit, 1 - Stopbit objMSComm.Settings = "9600,N,8,1" objMSComm.RThreshold = 1 objMSComm.SThreshold = 0 objMSComm.InBufferCount = 0 objMSComm.InputLen = 0 objMSComm.PortOpen = True tagConnection.Write (True) HMIRuntime.Trace("Port open." & vbCrLf) Else HMIRuntime.Trace("Port is already opened." & vbCrLf) End If End Sub “SEND按钮”鼠标左键按下事件: Sub OnLButtonDown(ByVal Item, ByVal Flags, ByVal x, ByVal y) Dim objMSComm Dim strTemp,buffer HMIRuntime.Trace("Communication!" & vbCrLf) Set objMsComm = HMIRuntime.Screens("串口通讯VB版").ScreenItems("COM") Set buffer = HMIRuntime.Tags("Buffer1") strTemp = buffer.Read If objMSComm.PortOpen = True Then If strTemp<>"" then objMSComm.Output=strTemp End If End If End Sub 2、通过C脚本实现串口通讯 画面对象“打开画面”C事件脚本: #include "apdefap.h" void OnOpenPicture(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName) { #define GetObject GetObject __object *pdl=NULL; __object *pic=NULL; __object *obj=NULL; int i,j; pdl = __object_create("PDLRuntime"); if(pdl) { printf("portopen get pdl ok "); } pic=pdl->GetPicture("串口通讯C版"); if(pic) { printf("portopen get pic ok "); } obj=pic->GetObject("COM"); if(obj) { printf("portopen get obj ok "); } if(obj->PortOpen==0) { obj->Commport = 3; obj->Settings = "9600,N,8,1"; obj->RThreshold = 1; obj->SThreshold = 0; obj->InBufferCount = 0; obj->InputLen = 0; obj->PortOpen = 1; }
__object_delete(obj); __object_delete(pic); __object_delete(pdl); } MSComm控件OnComm对象事件: #include "apdefap.h" void OnComm(char* lpszPictureName, char* lpszObjectName ) { #define GetObject GetObject __object *pdl=NULL; __object *pic=NULL; __object *obj=NULL; char *data=""; pdl = __object_create("PDLRuntime"); if(pdl) { printf("portopen get pdl ok "); } pic=pdl->GetPicture("串口通讯C版"); if(pic) { printf("portopen get pic ok "); } obj=pic->GetObject("COM"); if(obj) { printf("portopen get obj ok "); } SetTagChar("BufferTemp",obj->Input); printf("BufferTemp:%s ",GetTagChar("BufferTemp"));
if(strcmp(GetTagChar("BufferTemp"),"")) { SetTagChar("Buffer1",GetTagChar("BufferTemp")); } __object_delete(obj); __object_delete(pic); __object_delete(pdl); } “SEND按钮”鼠标左键按下事件: #include "apdefap.h" void OnLButtonDown(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName, UINT nFlags, int x, int y) { #define GetObject GetObject __object *pdl=NULL; __object *pic=NULL; __object *obj=NULL; char *data=""; pdl = __object_create("PDLRuntime"); if(pdl) { printf("portopen get pdl ok "); } pic=pdl->GetPicture("串口通讯C版"); if(pic) { printf("portopen get pic ok "); } obj=pic->GetObject("COM"); if(obj) { printf("portopen get obj ok "); } if(strcmp(GetTagChar("Buffer1"),"")) { obj->Output=GetTagChar("Buffer1"); } __object_delete(obj); __object_delete(pic); __object_delete(pdl);
|