西门子模块总代理商-三门峡
状态字用于表示CPU执行指令时所具有的状态。一些指令是否执行或以何方式执行可能取决于状态字中的某些位;执行指令时也可能改变状态字中的某些位,也能在位逻辑指令或字逻辑指令中访问并检测他们。状态字的结构如下:
31……………9 8 7 6 5 4 3 2 1 0
BR | CC1 | CC0 | OS | OV | OR | STA | RLO |
(1) 首位检测位()
状态字的位0称为首位检测位。若位的状态为0,则表明一个梯形逻辑网络的开始,或指令为逻辑串的条指令。CPU对逻辑串条指令的检测(称为首位检测)产生的结果直接保存在状态字的RLO位中,经过检测存放在RLO中的0或1被称为首位检测结果。位在逻辑串的开始时总是0,在逻辑串指令执行过程中位为1,输出指令或与逻辑运算有关的转移指令(表示一个逻辑串结束的指令)将清0。
(2) 逻辑操作结果(RLO)
状态字的位1称为逻辑操作结果RLO(Result of Logic Operation)。该位存储逻辑指令或算术比较指令的结果。在逻辑串中,RLO位的状态能够表示有关信号流的信息。RLO的状态为1,表示有信号流(通);为0,表示无信号流(断)。可用RLO触发跳转指令。
(3) 状态位(STA)
状态字的位2称为状态位。状态位不能用指令检测,它只是在程序测试中被CPU解释并使用。如果一条指令是对存储区操作的位逻辑指令,则无论是对该位的读或写操作,STA总是与该位的值取得一致;对不访问存储区的位逻辑指令来说,STA位没有意义,此时它总被置为1。
(4) 或位(OR)
状态字的位3称为或位(OR)。在先逻辑“与”后逻辑“或”的逻辑串中,OR位暂存逻辑“与”的操作结果,以便进行后面的逻辑“或”运算。其它指令将OR位清0。
(5) 溢出位(OV)
状态字的位4称为溢出位。溢出位被置1,表明一个算术运算或浮点数比较指令执行时出现错误(错误:溢出、非法操作、不规范格式)。后面的算术运算或浮点数比较指令执行结果正常的话OV位就被清0。
(6) 溢出状态保持位(OS)
状态字的位5称为溢出状态保持位(或称为存储溢出位)。OV被置1时OS也被置1;OV被清0时OS仍保持。所以它保存了OV位,可用于指明在先前的一些指令执行中是否产生过错误。只有下面的指令才能复位OS位:JOS(OS=1时跳转);块调用指令和块结束指令。
(7) 条件码1(CC1)和条件码0(CC0)
状态字的位7和位6称为条件码1和条件码0。这两位结合起来用于表示在累加器1中产生的算术运算或逻辑运算结果与0的大小关系;比较指令的执行结果或移位指令的移出位状态。详见表4.4.2.1和表4.4.2.2。
4.4.2.1算术运算后的CC1和CC0
CCl | CCO | 算术运算 无溢出 | 整数算术运算 有溢出 | 浮点数算术运算 有溢出 |
0 | 0 | 结果=0 | 整数加时产生负范围溢出 | 平缓下溢 |
0 | 1 | 结果<0 | 乘时负范围溢出;加、减、取负时正溢出 | 负范围溢出 |
1 | 0 | 结果>0 | 乘、除时正溢出;加、减时负溢出 | 正范围溢出 |
1 | 1 | - | 在除时除数为0 | 非法操作 |
4.4.2.2 比较、移位和循环移位、字逻辑指令后的CC1和CC0
CCl | CCO | 比较指令 | 移位和循环指令 | 字逻辑指令 |
0 | 0 | 累加器2=累加器1 | 移位=0 | 结果=0 |
0 | 1 | 累加器2<累加器1 | - | - |
1 | 0 | 累加器2>累加器1 | - | 结果≠0 |
1 | 1 | 不规范 (只用于浮点数比较) | 移出位=1 | - |
(8) 二进制结果位(BR)
状态字的位8称为二进制结果位。它将字处理程序与位处理联系起来,在一段既有位操作又有字操作的程序中,用于表示字操作结果是否正确(异常)。将BR位加入程序后,无论字操作结果如何,都不会造成二进制逻辑链中断。在LAD的方块指令中,BR位与ENO有对应关系,用于表明方块指令是否被正确执行:如果执行出现了错误,BR位为0,ENO也为0;如果功能被正确执行,BR位为1,ENO也为1。
在用户编写的FB和FC程序中,必须对BR位进行管理,当功能块正确运行后使BR位为1,否则使其为0。使用STL指令SAVE或LAD指令——(SAVE),可将RLO存入BR中,从而达到管理BR位的目的。当FB或FC执行无错误时,使RLO为1并存入BR,否则,在BR中存入0。
我接触到很多同行,他们都说S7-300/400的语句表(即指令表)语言难学,近在西门子的S7-300/400论坛上,看到有网友感叹“语句表好难学啊!”。 梯形图为什么好学?其原因很简单,梯形图来源于继电器电路图,以触点和线圈为主,因此熟悉继电器控制的电气人员感觉很容易学。
1.语句表非学不可
1)语句表的指令比梯形图多,只有语句表才有下列指令:定时器/计数器的FR指令、与地址寄存器、累加器、状态字、数据块有关的大量指令,循环指令(LOOP)和部分跳转指令,块结束指令等。
2)语句表的功能比梯形图更强,例如循环程序和间接寻址等只能用语句表来编程。
3)实际的控制程序(特别是老外编的程序)几乎都有语句表编写的逻辑块。但是语句表程序一般不能用STEP 7完全转换为梯形图。不能转换的程序段仍然用语句表表示。
因此在实际工作中语句表是很难回避的,要想学好S7-300/400,必须学好语句表。
2.语句表为什么难学?
1)语句表语言有点类似于Inbbb的51系列单片机的汇编语言,比如它们都有累加器、状态字和地址寄存器等,梯形图并不使用累加器和地址寄存器。
2)语句表程序几乎所有的操作都是在累加器中完成的,因此需要用大量的装入(L)指令来将数据装入累加器,用传送(T)指令来将运算结果从累加器传送到目的地址。比较一下S7-300和S7-200的循环程序,就会发现前者的要复杂得多。
梯形图只需要一条MOVE指令,不需要累加器就可以任意传送数据。
2)S7-300/400的间接寻址比其他plc的间接寻址复杂得多,只有语句表有间接寻址功能,这也是语句表难学的原因之一。
3.学好语句表的几点建议
1)首先要打牢基础,掌握必备的计算机基础知识,例如二进制数、十六进制数、BCD码、补码、各种数据类型、参数类型、累加器、状态字、地址寄存器、各种寻址方式等的基本概念和应用。
如果在学校学过汇编语言,对学习语句表语言会有好处。有人建议为了学语句表去学汇编语言,我认为倒没有这个必要。
2)多用多练,在实践中学。PLC和计算机的语言就像外语一样,一定要多用多练,主要靠读程序、编程序和调试程序来学习。初学的时候可以找一本好的教材,阅读教材中有大量注释的语句表程序。在此基础上,可以阅读生产中的实用程序。好能自己编一些程序,然后用仿真软件来调试程序。
3)充分利用STEP 7的在线帮助功能,用鼠标选中用户程序中的某条指令,按〈F1〉键就可以打开该指令的在线帮助,看到指令的详细使用方法,例如指令的功能描述,指令的输入/输出参数的数据类型、允许使用的存储区和参数的意义,指令的执行对状态字的影响,以及指令应用的实例等。
- 西门子模块总代理商-漯河 2023-10-26
- 西门子模块总代理商-许昌 2023-10-26
- 西门子模块总代理商-濮阳 2023-10-26
- 西门子模块总代理商-安阳 2023-10-26
- 西门子模块总代理商-新乡 2023-10-26
- 西门子模块总代理商-鹤壁 2023-10-26
- 西门子模块总代理商-廊坊 2023-10-26
- 西门子模块总代理商-沧州 2023-10-26
- 西门子模块总代理商-承德 2023-10-26
- 西门子模块总代理商-张家口 2023-10-26
- 西门子模块总代理商-保定 2023-10-26
- 西门子模块总代理商-邢台 2023-10-26
- 西门子模块总代理商-邯郸 2023-10-26
- 西门子模块总代理商-秦皇岛 2023-10-26
- 西门子模块总代理商-唐山 2023-10-26
联系方式
- 地址:上海杨浦 上海市松江区广富林路4855弄88号3楼
- 邮编:200093
- 电话:15821971992
- 经理:聂聪
- 手机:15821971992
- 传真:021-33556143
- QQ:2724917714
- Email:2724917714@qq.com