浔之漫智控技术-西门子PLC代理商
西门子PLC模块 , 变频器 , 触摸屏 , 交换机
6ES7216-2BD23-0XB8产品型号

6ES7216-2BD23-0XB8产品型号

s7-300以太网通信模板cp343-1(订货号6gk7343-1ex30-0xe0)既可以支持profinet中的 io controller功能又可以支持 io device功能。设置io device的方法如图1所示。但是,有的时候会出现io device选项是灰色,不能激活,见图2中1号红框。

图1 激活cp343-1 io device属性

图2 io device选项不能激活

解答:

这是因为cp343-1的配置插入了一个profinet-io-system(在图2中的2号红框),这就设置了cp343-1作为io controller。由于cp343-1(订货号6gk7343-1ex30-0xe0)不能同时支持 io controller和io device功能,所以io device选项是灰色,此时它只能作为io controller使用。要想激活io device功能,参照图3将profinet-io-system 断开,就可以了。或者,使用鼠标右键点中profinet-io-system, 在弹出对话框中直接选择删除也可以。同样,如果先激活了io device功能,那么cp343-1就不能插入profinet-io-system作为io controller使用,见图4。

图3 断开profinet io system

图4 不能插入profinet io system

1、“启用外设输出”功能简介

在系统的调试阶段,我们经常会用到对单个设备进行接线检查或调试的功能。如果cpu工作在run模式,那么可以通过在强制变量表中对输出写强制值的方式实现,,但当cpu工作在stop模式时,如何修改外围输出点的输出状态呢?

在step7变量表中的“启用外设输出 ”(enable peripheral outputs)功能可以将特定值分配给处于 stop 模式下的 cpu 的各个外设输出,可以用于设备的接线检查或调试。

2、“启用外设输出”的使用条件

在step7中的“启用外设输出”功能只有在满足以下几个条件时才有效:

cpu处于stop工作模式

只能对外设输出地址区,即必须是带 ”p” 的 q 地址区地址进行修改

已经建立与 cpu 的在线连接

3、实验环境:

软件:step7 v5.5 sp2

硬件:cpu315-2pn/dp,sm374(仿真模块,组态为8di/8do),组态如图1所示。

图 1

4、操作步骤

1)在项目中新建一个监控变量表,或打开一个已经存在的监控变量表。

2)根据实际需要,在变量表中添加要启动外设输出的地址,本例中添加了“pqb0”(注意,外设地址区不能按位寻址,只能按字节、字或双字寻址)

图2

3)建立与的在线连接,并通过cpu的模式转换开关(或通过菜单命令)将cpu的工作模式转换为stop模式。

4)选择变量表窗口中的“variable”菜单,可以看到这时的” enable peripheral outputs”菜单已经有效。在菜单中选中此功能,并在弹出的对话框中选择“yes”,即可激活“启用外设输出”的功能。

图3

5)在变量表的修改值列中输入相应的修改值(这里将pqb0的修改值设置为b#16#ff),并在快捷菜单中选择“active modify value”,则实际的输出点状态将被修改为设定值(可以看到这时的sm374模块的8个输出点指示灯全部被点亮)。

图4

5、“启用外设输出”的取消

可以通过以下几种方式取消“启用外设输出”功能:

通过菜单取消激活“启用外设输出”功能

将step7转到离线模式

直接通过”esc”键退出

注意,功能取消后不能再恢复,需要重新启用。

北京多日的雾霾在终于有所缓解,天气不错挺风和日丽的,所以心情也格外不错。早早的来到公司,坐到自己的工位上打开,登陆平台……一切准备工作就绪 准备开始迎接新case的挑战。

叮铃铃……。“喂。您好 这里是西门子热线您需要咨询什么技术问题。”

客户:“工程师您好。我想咨询一下关于s7-200 modbus通信的问题”

早晨个case是s7-200的modbus通信,这个在我们的micro win软件里面添加一个专用的modbus 指令库,对应需要读取或者写入的地址,通过done位的轮询就能实现通信的功能。想到这里于是就对客户说

“ 您如果希望使用s7-200进行modbus通信,可以添加一个库文件,并且我们有相关的样例程序,您可以参考一下。”

客户说:“我已经查看过你们的样例程序了。但是对于你们的样例程序有一些地方没有看懂,您能帮我解释一下吗”

我说:“好的,您尽管说您没看懂的地方”

客户说:“你们的modbus主站样例程序大致分三个部分,个网络是状态的位的复位

第二个部分是主站 ctrl功能块的使用

第三部分是msg指令的使用

ctrl和msg指令时通过done这个完成位来实现程序的轮询的这个没错吧”。

于是忙对客户说:“您说的都没错”

客户说:“那我就有一个疑问了。如果是使用done问来触发下一个网络进行轮询触发,那么是不是ctrl的done位来触发个 msg指令。然后个msg指令触发第二个msg…….”

我说:“没错”

客户说:“但是你们样例程序的网络顺序可不是这样的啊。你们样例的个网络是初始化复位操作,但是第二个网络不是ctrl指令,而是ctrl指令的done位通过上升沿触发msg使能端,第三个网络才是ctrl指令”

按照你刚才给我描述的顺序关系不是应该先写ctrl指令。再编写crtl指令的done位触发msg使能端。然后编写msg指令……”

(咋一听客户的描述没有问题。似乎按照他说的可能更符合modbus指令执行的逻辑关系,于是我就打开了modbus通信的样例程序看了起来,但是看了一会问题出现了)

我对客户说:“您按照您说的逻辑关系编过程序吗?程序能正确执行吗?”

客户说:“我还真的按照我自己的想法编写了一段程序,但是确实没有成功完成数据的发送”

我对客户说:“问题就出现在这个done位触发下一个指令的方式上。这个程序里是通过上升沿来触发下一个指令的

如果是按照您的那种方式编程,这个上升沿是不能被捕捉到的。换句话说按照您说的那种方式编程,程序是不能顺序执行的,执行到m0.0之后就停止了。单纯的查看程序不直观,您可以按照我说的稍微修改一下这段程序。在上升沿语句后面加上一个置位q0.0的操作。这样方便您在cpu上和状态表中监控执行结果。对比一下这两种编程的结果您就清楚了。”

之所以会出现运行结果的不同都是由于上升沿造成的,按照客户描述的编程逻辑m0.0位会在第二个网络中被置位为1当程序执行到第三个网络的时候需要有上升沿才会触发m0.1和q0.0的置位操作,但是由于m0.0已经变为了1无法再捕捉到上升沿所以程序也就无法继续执行。相反如果是按照样例程序中编写的那样。在第二个网络执行的时候m0.0还是0.当执行到第三个网络的时候m0.0变为1,捕捉到上升沿。因此程序可以继续顺序执行。


展开全文
优质商家推荐 拨打电话