上升沿的困惑

发布时间:2024-03-15
北京多日的雾霾在今天终于有所缓解,今天天气不错挺风和日丽的,所以心情也格外不错。早早的来到公司,坐到自己的工位上打开电脑,登陆平台……一切准备工作就绪 准备开始迎接新一天case的挑战。
叮铃铃……。“喂。您好 这里是西门子热线您需要咨询什么技术问题。”
客户:“工程师您好。我想咨询一下关于s7-200 modbus通信的问题”
早晨第一个case是s7-200的modbus通信,这个在我们的micro win软件里面添加一个专用的modbus 指令库,对应需要读取或者写入的地址,通过done位的轮询就能实现通信的功能。想到这里于是就对客户说
“ 您如果希望使用s7-200plc进行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,捕捉到上升沿。因此程序可以继续顺序执行。
上一个:无权处分的买卖合同的效力
下一个:苹果x前置摄像头突然黑屏怎么回事(iphonex前置摄像头突然黑屏用不了)

用工夫茶的形式泡一壶蜜兰香
英特尔cpu排行图
RC2512FK-07499RL,2512 499Ω 1% 1W 电阻
连接耳放时电脑声音该开多大(耳放和电脑怎么接-)
离婚财产孩子怎么分配
彩电开关电源常见故障检修方法
百度输入法翻译在哪里(百度输入法海外版)
快速温变试验箱漏油有哪些地方
鸡冠花怎么播种?
国槐球坚蚧的防治