回复:USS通讯的问题

伊默

西门子1847工业学习平台

  • 帖子

    4259
  • 精华

    118
  • 被关注

    220

论坛等级:至圣

注册时间:2003-10-24

白金 白金 如何晋级?

发布于 2006-05-01 19:10:13

0楼

我不知道你们说的轮询机制具体是什么样的,呵,但是我用的方法应该是确何安全的:
1、通讯过程由四个中断控制: 发送完成中断、发送超时中断、接收完成中断、接收超时中断。
2、在发送的时候使能发送完成中断和发送超时中断, 若发送超时则再一次发送,连续三次发送超时,则报警,同时切断变频器输入侧电源。
3、在发送完成中断子程序内(说明发送顺利完成),禁止发送超时中断, 同时开始接收指令,使能接收完成中断、使能接收超时中断。
4、若接收超时,则返回到主程序中再一次发送原来的控制字,并接收( 意思是把该通讯指令重来一次,同理,连续三次接收超时,则报警,同时切断变频器输入侧电源。
5、若发送顺利完成,且接收也顺利完成,则在主程序中判断:启始字符是否为16#02?变频器站地址是否相一致?接收到的字符全数是否刚好是一帧的字符数?BCC校验是否正确? 以上任何一项不一致,则也要和第4项一样重新发送,接收一次; 若连续三次以上,则报警,同时切断变频器输入侧电源。

主程序当中做了一个表,只有触发了相应的动作,才会写相应的指令到这个表中,当这个表非空,才会执行通讯程序,否则不执行,这样则节省了主程序的扫描时间。 比如我规定16#02为正转运行,I0.0为外部触发正转命令。 则在主程序中写入
LD I0.0
EU
ATT 16#0302 VW200 //16#03表示变频器站地址为3,16#02表示需要的操作为正转运行。
然后程序在每个扫描周期都是检测VW202=0 ? 若VW202<>0,则说明有通讯指令需要执行,这时用LIFO/FIFO读出VW200表里面的指令,再根据自己规定的动作类型写PZD区,之后进行上面的通讯操作。
I can do it
评论
编辑推荐: 关闭

请填写推广理由:

本版热门话题

MicroMaster

共有6821条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

快扫描右侧二维码晒一晒吧!

再发帖或跟帖交流2条,就能晋升VIP啦!开启更多专属权限!

  • 分享

  • 只看
    楼主

top
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。