• 6ES7223-1HF22-0XA8传授代理
  • 6ES7223-1HF22-0XA8传授代理
  • 6ES7223-1HF22-0XA8传授代理

产品描述

产品规格模块式包装说明全新品牌西门子

6ES7223-1HF22-0XA8传授代理

OMRON模拟器1.5入门步骤,
       1.安装好CX-P5.0及CX_SIMULATOR1.5后,运行模拟器主程序,**运行
         要设置参数,出现设置向导,
            Select PLC
               选中Create a new PLC(PLC Setup Wizard)后,选取一文件夹,
               [*二次运行选open  an existing PLC]   
       2.在PLC Setup Wizard--Select PLC Type选取一PLC 型号
            如 CS1G-CPU45,点下一步;
       3.在Register PLC Unit used in this project
            在左面分别加入一输入模块与输出模块,
            点下一步直至完成,自动进入步骤4; 
       4. 在Work CX-Simulator弹出框中(此Connect项位于CX-Simulator Debug Console
            的菜单File下)
            Virtual 选择框中选Controller bbbb ,点Connect ,连接成功;
       5.再点Cx-Simulator Debug Console中的较左边的三角形按钮(Run(Monitor Mode)),
            Run指示灯变绿,模拟PLC已开始运行;就可以用CX_P5.0下传或上传梯形图程序;
       6.运行 CX-P5.0,在FILE菜单下,新建一工程,要选跟模拟器一样的CPU类型;
            "更改PLC"弹出框中
              设备类型选取 CS1G/CJ1G,其右的设定中,CPU选CPU45,
              在模拟PLC中并无程序,须在新工程建一简单的梯形图,以END结尾;
       7.CX p5.0与PLC连接,点CX P5.0的菜单 PLC--->工作在线器,
         出现上传弹出框(PLC-->CX P5.0),点取消,因为PLC中是空的,上传会冲掉你刚编的程序,
         要向PLC下传;
       8.向PLC下传你的程序:点CX p5.0的菜单 PLC-->传送(R)-->到PLC,
         在梯形图上就看到执行情况。 如果要修改梯形图,则要断开与模拟PLC的状态1. MMC卡作为CPU的装载内存(Load Memory),在为您的CPU选型MMC的时候,我们建议您所选的MMC卡一定要大于等于您所选定的CPU工作内存的大小(work memor在定购以上产品时,PLC本身不带有MMC卡,所以为了正常使用PLC,您必须根据您工程项目实际需求定购一个大小适用的MMC卡,如果您的PLC上未插入MMC卡,你是无法将STEP7中的程序和数据下载下去的,同时你应当注意,不能带电插拔MMC卡,否则会丢失程序或损坏MMC卡。
2. 在Simatic manager中,选择一个程序块下载,则该块被下载到MMC卡中,如果在窗口左边的树型图中选中Block文件夹进行下载,则所有的块被下载到MMC卡上,MMC中原有的信息将被覆盖,向MMC卡读写数据或下载程序的次数不受限制。
3. 除过CPU中集成的SFB/SFCs块外,MMC当中其他的块可被在线删除。
4. 对某些CPU用新版MMC卡(6ES7 953-XXX10-0AA0)替代旧版MMC卡(6ES7 953-XXX00-0AA0)时需要升级PLC的OPERATING SYSTEM。升级时需要使用PG(6ES7798-0BA00-0XA0)或带USB口的编程器(6ES7792-0AA00-0XA0),通过STEP7 MANAGER窗口中的菜单功能“PLC/UPDATE OPERATING SYSTEM”将CPU_HD.UPD文件写到MMC卡上,CPU_HD.UPD文件可以在www4.ad.siemens.de网站上下载得到。
5. y),较好比工作内存大一些,但如果您的应用中,PLC工作时要使用大量的过程数据,历史数据,配方数据等或控制工艺中存在较多的用户程序块、STEP7中的应用功能块(如FB41、FB42等)时,建议选用2-8M的MMC卡,但请注意只有314、315-2DP、C7系列的PLC支持8M的MMC卡。
6. MMC卡是装载内存,所以不能够在上位机中的组态软件中直接读取MMC卡上的数据值(DB块中的数据),组态画面读取的是PLC RAM内存中的数据。
7. 在西门子的PLC上必须使用西门子**的MMC卡,如下表中所列出的,不能使用数码相机、移动电话或PDA等数码产品使用的通用型MMC卡。


影响通信的因素很多,需要仔细检查。可用简化连接,替换设备等方法,逐步缩小故障点可能所在的范围。例如,当网络上有一个CPU不能进行编程通信,就要将CPU从网络上脱开,单独进行编程通信检查。

在设备正常的条件下,发生Micro/WIN不能与CPU通信的原因主要有:


Micro/WIN中设置的对方通信口地址与CPU的实际口地址不同

Micro/WIN中设置的本地(编程电脑)地址与CPU通信口的地址相同了(应当将Micro/WIN的本地地址设置为“0”)

Micro/WIN使用的通信波特率与CPU端口的实际通信速率设置不同

有些程序会将CPU上的通信口设置为自由口模式,此时不能进行编程通信。编程通信是PPI模式。而在“STOP”状态下,通信口永远是PPI从站模式。较好把CPU上的模式开关拨到“STOP”的位置


针对上述情况,可以在Micro/WIN左侧的浏览条中点击Communication(通信)图标,在对话框中双击通信设备的图标(如PC/PPI电缆),改变本地的连接属性(本地地址或通信速率设置);双击***(刷新)图标,并且选中Check all baudrate(检查所有波特率)可以找到地址、速率不明的站点。此时应使用新的RS-232/PPI电缆或者USB/PPI电缆,或CP卡,否则不能覆盖所有的波特率范围。

 如果使用CP5511、CP5512、CP5611等通信卡与S7-200 CPU进行编程通信,可以看到CPU通信口的一些状态报告,便于判断是否硬件损坏。

检查编程通信的主要步骤

 以下步骤仅仅适合使用“真的”PC机串行通信口(UART16550或兼容的COM口),再连接西门子PC/PPI(RS-232口)电缆的情况

如果有时能够通信但不正常,请检查如下“1-4”项,如果根本不通,请检查全部项目:

    检查STEP 7-Micro/WIN与bbbbbbs操作系统是否完全兼容

     

    检查是否使用西门子的原装编程电缆,以及电缆是否符合编程PC机或笔记本电脑的硬件条件

     

    检查编程电脑上的COM通信口设置

      鼠标右键单击“我的电脑”,选择“属性”

      打开“设备管理器”标签(对于bbbbbbs2000,选择“硬件”标签,按“设备管理器”按钮)

      双击“端口(COM和LPT)”

      双击所使用的通信口,如COM1

      在端口设置标签,选择“高级”

      在对话框中把接收和发送缓冲区都设置为较小值,并保持选中“FIFO”选择框

      重新启动计算机使设置有效

       


    检查编程电缆的DIP开关设置,是否与Micor/WIN的通信速率设置相同

    在Micro/WIN左边的浏览条中鼠标单击Communication(通信)大图标,检查通信参数设置。鼠标双击PC/PPI电缆图标可以更改通信属性。 CPU出厂的缺省设置是通信口地址为2,波特率为9.6K。

    使用新的SMART(智能)RS-232/PPI电缆的用户,如果配合Micro/WIN32 V3.2 SP4以上版,可以将DIP开关5设置为“1”,选中通信界面的“bbbbbb all baudrate”(搜索所有波特率)选择框,可用于搜索网络上所有相关设备。

    对于普通编程电缆,搜索速率较高为19.2,因此如果CPU通信口速率被设置为187.5K,则不能被找到。

     

    如果仍然不通,请检查CPU右下角的传感器直流电源输出电压(测量L+/M),电压应当**22V

     

    使用wipeout.exe程序,恢复CPU的出厂设置。缺省情况下CPU通信口地址为2,通信速率9.6K


202207281244519172844.jpg202202231632200382714.jpg202202231632207636284.jpg



完整的一条指令,应该包含指令符+操作数(当然不包括那些单指令,比如NOT等)。其中的操作数是指令要执行的目标,也就是指令要进行操作的地址。

我们知道,在PLC中划有各种用途的存储区,比如物理输入输出区P、映像输入区I、映像输出区Q、位存储区M、定时器T、计数器C、数据区DB和L等,同时我们还知道,每个区域可以用位(BIT)、字节(BYTE)、字(WORD)、双字(DWORD)来衡量,或者说来*确切的大小。当然定时器T、计数器C不存在这种衡量体制,它们仅用位来衡量。由此我们可以得到,要描述一个地址,至少应该包含两个要素:

1、存储的区域
2、这个区域中具体的位置
比如:A Q2.0
其中的A是指令符,Q2.0是A的操作数,也就是地址。这个地址由两部分组成:
Q:指的是映像输出区
2.0:就是这个映像输出区*二个字节的*0位。
由此,我们得出, 一个确切的地址组成应该是:
〖存储区符〗〖存储区尺寸符〗〖尺寸数值〗.〖位数值〗,例如:DBX200.0。
DB X 200 . 0
其中,我们又把〖存储区符〗〖存储区尺寸符〗这两个部分合称为:地址标识符。这样,一个确切的地址组成,又可以写成:
地址标识符 + 确切的数值单元


【间接寻址的概念】
寻址,就是*指令要进行操作的地址。给定指令操作的地址方法,就是寻址方法。
在谈间接寻址之前,我们简单的了解一下直接寻址。所谓直接寻址,简单的说,就是直接给出指令的确切操作数,象上面所说的,A Q2.0,就是直接寻址,对于A这个指令来说,Q2.0就是它要进行操作的地址。

这样看来,间接寻址就是间接的给出指令的确切操作数。对,就是这个概念。

比如:A Q[MD100] ,A T[DBW100]。程序语句中用方刮号 [ ] 标明的内容,间接的指明了指令要进行的地址,这两个语句中的MD100和DBW100称为指针Pointer,它指向它们其中包含的数值,才是指令真正要执行的地址区域的确切位置。间接由此得名。

西门子的间接寻址方式计有两大类型:存储器间接寻址和寄存器间接寻址。

【存储器间接寻址】

存储器间接寻址的地址给定格式是:地址标识符+指针。指针所指示存储单元中所包含的数值,就是地址的确切数值单元。

存储器间接寻址具有两个指针格式:单字和双字。

单字指针是一个16bit的结构,从0-15bit,指示一个从0-65535的数值,这个数值就是被寻址的存储区域的编号。

双字指针是一个32bit的结构,从0-2bit,共三位,按照8进制指示被寻址的位编号,也就是0-7;而从3-18bit,共16位,指示一个从0-65535的数值,这个数值就是被寻址的字节编号。

指针可以存放在M、DI、DB和L区域中,也就是说,可以用这些区域的内容来做指针。

单字指针和双字指针在使用上有很大区别。下面举例说明:

L DW#16#35 //将32位16进制数35存入ACC1

T MD2 //这个值再存入MD2,这是个32位的位存储区域

L +10 //将16位整数10存入ACC1,32位16进制数35自动移动到ACC2

T MW100 //这个值再存入MW100,这是个16位的位存储区域

OPN DBW[MW100] //打开DBW10。这里的[MW100]就是个单字指针,存放指针的区域是M区,

MW100中的值10,就是指针间接*的地址,它是个16位的值!

--------

L L#+10 //以32位形式,把10放入ACC1,此时,ACC2中的内容为:16位整数10

T MD104 //这个值再存入MD104,这是个32位的位存储区域

A I[MD104] //对I1.2进行与逻辑操作!

=DIX[MD2] //赋值背景数据位DIX6.5!

--------

A DB[MW100].DBX[MD2] //读入DB10.DBX6.5数据位状态

=Q[MD2] //赋值给Q6.5

--------

A DB[MW100].DBX[MD2] //读入DB10.DBX6.5数据位状态

=Q[MW100] //错误!!没有Q10这个元件

-----------------------------------------------------------------------------------------

从上面系列举例我们至少看出来一点:

单字指针只应用在地址标识符是非位的情况下。的确,单字指针描述过,它确定的数值是0-65535,而对于byte.bit这种具体位结构来说,只能用双字指针。这是它们的**个区别,单字指针的另外一个限制就是,它只能对T、C、DB、FC和FB进行寻址,通俗地说,单字指针只可以用来指代这些存储区域的编号。

相对于单字指针,双字指针就没有这样的限制,它不仅可以对位地址进行寻址,还可以对BYTE、WORD、DWORD寻址,并且没有区域的限制。不过,有得必有失,在对非位的区域进行寻址时,必须确保其0-2bit为全0!

总结一下:

单字指针的存储器间接寻址只能用在地址标识符是非位的场合;双字指针由于有位格式存在,所以对标识符没有限制。也正是由于双字指针是一个具有位的指针,因此,当对字节、字或者双字存储区地址进行寻址时,必须确保双字指针的内容是8或者8的倍数。

现在,我们来分析一下上述例子中的A I[MD104] 为什么最后是对I1.2进行与逻辑操作。

通过L L#+10 ,我们知道存放在MD104中的值应该是:

MD104:0000 0000 0000 0000 0000 0000 0000 1010

当作为双字指针时,就应该按照3-18bit*byte,0-2bit*bit来确定较终指令要操作的地址,因此:
0000 0000 0000 0000 0000 0000 0000 1010 = 1.2

【地址寄存器间接寻址】

在先前所说的存储器间接寻址中,间接指针用M、DB、DI和L直接*,就是说,指针指向的存储区内容就是指令要执行的确切地址数值单元。但在寄存器间接寻址中,指令要执行的确切地址数值单元,并非寄存器指向的存储区内容,也就是说,寄存器本身也是间接的指向真正的地址数值单元。从寄存器到得出真正的数值单元,西门子提供了两种途径:

1、区域内寄存器间接寻址
2、区域间寄存器间接寻址

地址寄存器间接寻址的一般格式是:
〖地址标识符〗〖寄存器,P#byte.bit〗,比如:DIX[AR1,P#1.5] 或 M[AR1,P#0.0] 。
〖寄存器,P#byte.bit〗统称为:寄存器寻址指针,而〖地址标识符〗在上帖中谈过,它包含〖存储区符〗+〖存储区尺寸符〗。但在这里,情况有所变化。比较一下刚才的例子:
DIX [AR1,P#1.5] 
X [AR1,P#1.5] 
DIX可以认为是我们通常定义的地址标识符,DI是背景数据块存储区域,X是这个存储区域的尺寸符,指的是背景数据块中的位。但下面一个示例中的M呢?X只是*了存储区域的尺寸符,那么存储区域符在哪里呢?毫无疑问,在AR1中!
DIX [AR1,P#1.5] 这个例子,要寻址的地址区域事先已经确定,AR1可以改变的只是这个区域内的确切地址数值单元,所以我们称之为:区域内寄存器间接寻址方式,相应的,这里的[AR1,P#1.5] 就叫做区域内寻址指针。

X [AR1,P#1.5] 这个例子,要寻址的地址区域和确切的地址数值单元,都未事先确定,只是确定了存储大小,这就是意味着我们可以在不同的区域间的不同地址数值单元以给定的区域大小进行寻址,所以称之为:区域间寄存器间接寻址方式,相应的,这里的[AR1,P#1.5] 就叫做区域间寻址指针。

既然有着区域内和区域间寻址之分,那么,同样的AR1中,就存有不同的内容,它们代表着不同的含义。

【AR的格式】

地址寄存器是专门用于寻址的一个特殊指针区域,西门子的地址寄存器共有两个:AR1和AR2,每个32位。
当使用在区域内寄存器间接寻址中时,我们知道这时的AR中的内容只是指明数值单元,因此,区域内寄存器间接寻址时,寄存器中的内容等同于上帖中提及的存储器间接寻址中的双字指针,也就是:

其0-2bit,*bit位,3-18bit*byte字节。其*31bit固定为0。
AR:
0000 0000 0000 0BBB BBBB BBBB BBBB BXXX
这样规定,就意味着AR的取值只能是:0.0 ——65535.7
例如:当AR=D4(hex)=0000 0000 0000 0000 0000 0000 1101 0100(b),实际上就是等于26.4。

而在区域间寄存器间接寻址中,由于要寻址的区域也要在AR中*,显然这时的AR中内容肯定于寄存器区域内间接寻址时,对AR内容的要求,或者说规定不同。

AR:
1000 0YYY 0000 0BBB BBBB BBBB BBBB BXXX


比较一下两种格式的不同,我们发现,这里的*31bit被固定为1,同时,*24、25、26位有了可以取值的范围。聪明的你,肯定可以联想到,这是用于*存储区域的。对,bit24-26的取值确定了要寻址的区域,它的取值是这样定义的:

区域标识符
26、25、24位
P(外部输入输出) 
000

I(输入映像区) 
001


Q(输出映像区) 
010

M(位存储区) 
011

DB(数据块) 
100

DI(背景数据块) 
101

L(暂存数据区,也叫局域数据)
111


如果我们把这样的AR内容,用HEX表示的话,那么就有:
当是对P区域寻址时,AR=800xxxxx
当是对I区域寻址时,AR=810xxxxx
当是对Q区域寻址时,AR=820xxxxx
当是对M区域寻址时,AR=830xxxxx
当是对DB区域寻址时,AR=840xxxxx
当是对DI区域寻址时,AR=850xxxxx
当是对L区域寻址时,AR=870xxxxx

经过列举,我们有了初步的结论:如果AR中的内容是8开头,那么就一定是区域间寻址;如果要在DB区中进行寻址,只需在8后面跟上一个40。84000000-840FFFFF指明了要寻址的范围是:

DB区的0.0——65535.7。

例如:当AR=840000D4(hex)=1000 0100 0000 0000 0000 0000 1101 0100(b),实际上就是等于DBX26.4。
我们看到,在寄存器寻址指针 [AR1/2,P#byte.bit] 这种结构中,P#byte.bit又是什么呢?

【P#指针】
P#中的P是Pointer,是个32位的直接指针。所谓的直接,是指P#中的#后面所跟的数值或者存储单元,是P直接给定的。这样P#XXX这种指针,就可以被用来在指令寻址中,作为一个“常数”来对待,这个“常数”可以包含或不包含存储区域。例如:

● L P#Q1.0 //把Q1.0这个指针存入ACC1,此时ACC1的内容=82000008(hex)=Q1.0
★ L P#1.0 //把1.0这个指针存入ACC1,此时ACC1的内容=00000008(hex)=1.0
● L P#MB100 //错误!必须按照byte.bit结构给定指针。
● L P#M100.0 //把M100.0这个指针存入ACC1,此时ACC1的内容=83000320(hex)=M100.0
● L P#DB100.DBX26.4 //错误!DBX已经提供了存储区域,不能重复*。
● L P#DBX26.4 //把DBX26.4这个指针存入ACC1,此时ACC1的内容=840000D4(hex)=DBX26.4

我们发现,当对P#只是*数值时,累加器中的值和区域内寻址指针规定的格式相同(也和存储器间接寻址双字指针格式相同);而当对P#*带有存储区域时,累加器中的内容和区域间寻址指针内容完全相同。事实上,把什么样的值传给AR,就决定了是以什么样的方式来进行寄存器间接寻址。在实际应用中,我们正是利用P#的这种特点,根据不同的需要,*P#指针,然后,再传递给AR,以确定较终的寻址方式。

在寄存器寻址中,P#XXX作为寄存器AR指针的偏移量,用来和AR指针进行相加运算,运算的结果,才是指令真正要操作的确切地址数值单元!
无论是区域内还是区域间寻址,地址所在的存储区域都有了*,因此,这里的P#XXX只能*纯粹的数值,如上面例子中的★。

【指针偏移运算法则】
在寄存器寻址指针 [AR1/2,P#byte.bit] 这种结构中,P#byte.bit如何参与运算,得出较终的呢?
运算的法则是:AR1和P#中的数值,按照BYTE位和BIT位分类相加。BIT位相加按八进制规则运算,而BYTE位相加,则按照十进制规则运算。

例如:寄存器寻址指针是:[AR1,P#2.6],我们分AR1=26.2和DBX26.2两种情况来分析。
当AR1等于26.2,
AR1:26.2
+ P#: 2.6
---------------------------
= 29.0 这是区域内寄存器间接寻址的较终确切地址数值单元

当AR1等于DBX26.2,
AR1:DBX26.2
+ P#: 2.6
---------------------------
= DBX29.0 这是区域间寄存器间接寻址的较终确切地址数值单元

【AR的地址数据赋值】
通过的介绍,我们知道,要正确运用寄存器寻址,较重要的是对寄存器AR的赋值。同样,区分是区域内还是区域间寻址,也是看AR中的赋值。

对AR的赋值通常有下面的几个方法:
1、直接赋值法
例如:
L DW#16#83000320
LAR1
可以用16进制、整数或者二进制直接给值,但必须确保是32位数据。经过赋值的AR1中既存储了地址数值,也*了存储区域,因此这时的寄存器寻址方式肯定是区域间寻址。

2、间接赋值法
例如:
L [MD100]
LAR1
可以用存储器间接寻址指针给定AR1内容。具体内容存储在MD100中。

3、指针赋值法
例如:
LAR1 P#26.2
使用P#这个32位“常数”指针赋值AR。

总之,无论使用哪种赋值方式,由于AR存储的数据格式有明确的规定,因此,都要在赋值前,确认所赋的值是否符合寻址规范。

使用间接寻址的主要目的,是使指令的执行结果有动态的变化,简化程序是**目的,在某些情况下,这样的寻址方式是必须的,比如对某存储区域数据遍历。此外,间接寻址,还可以使程序更具柔性,换句话说,可以标准化。

下面通过实例应用来分析如何灵活运用这些寻址方式:

【存储器间接寻址应用实例】
我们先看一段示例程序:

L 100 
T MW 100 // 将16位整数100传入MW100
L DW#16#8 // 加载双字16进制数8,当把它用作双字指针时,按照BYTE.BIT结构,
结果演变过程就是:8H=1000B=1.0
T MD 2 // MD2=8H
OPN DB [MW 100] // OPN DB100
L DBW [MD 2] // L DB100.DBW1
T MW[MD2] // T MW1 
A DBX [MD 2] // A DBX1.0
= M [MD 2] // =M1.0

在这个例子中,我们中心思想其实就是:将DB100.DBW1中的内容传送到MW1中。这里我们使用了存储器间接寻址的两个指针——单字指针MW100用于*DB块的编号,双字指针MD2用于*DBW和MW存储区字地址。
--------------------------------------------------------------------------------------------

提出的 DB[MW100].DBW[MD2] 这样的寻址是错误的提法,这里做个解释:

DB[MW100].DBW[MD2] 这样的寻址结构就寻址原理来说,是可以理解的,但从SIEMENS程序执行机理来看,是非法的。在实际程序中,对于这样的寻址,程序语句应该写成:

OPN DBW[WM100], L DBW[MD2

--------------------------------------------------------------------------------

事实上,从这个例子的中心思想来看,根本没有必要如此复杂。但为什么要用间接寻址呢?

要澄清使用间接寻址的优势,就让我们从比较中,找答案吧。
例子告诉我们,它较终执行的是把DB的某个具体字的数据传送到位存储区某个具体字中。这是针对数据块100的1数据字传送到位存储区*1字中的具体操作。如果我们现在需要对同样的数据块的多个字(连续或者不连续)进行传送呢?直接的方法,就是一句一句的写这样的具体操作。有多少个字的传送,就写多少这样的语句。毫无疑问,即使不知道间接寻址的道理,也应该明白,这样的编程方法是不合理的。而如果使用间接寻址的方法,语句就简单多了。



http://zhangqueena.b2b168.com

产品推荐