找答案的高端用户(找答案钻石及双钻级别的用户)将尽可能从此问题下的所有回
答中,为您推荐最佳答案。届时您可以根据推荐数采纳答案。
如果自提问时间起7天内您仍无法选出最佳答案,您可以选择“无满意答案”关闭此问题。
问题
取消精华
首页精华问答
取消推荐
高端用户推荐
申请置评
已申请置评
修改
修改标签
添加标签
官方认证
取消官方认证
修改标签
添加标签
转移分类
删除
{{itemCategory}}
会出现这样的情况么?
如果会出现这样的情况,是不是必须把局部变量全部做到IN_OUT里去,一一赋予不同的实参?
收藏({{answerDetail.Q_FavoriteCounts}})
手机扫码追踪该问题,
觉得实用,立即去分享!
点击复制链接
专家建议
取消最佳答案
修改
FC和FB快中的TEMP变量为临时局部数据存储区,在CPU内部由CPU根据所执行的程序快的情况临时分配。一旦程序执行完毕,该区域被收回(临时变量数据丢失),在下一个扫描周期中,执行到该程序时再重新分配TEMP存储区,而FN和FP指令是要必须把前一扫描周期的信号状态保存在边沿标志地址(一般为位地址)中,在当前的程序扫描周期,把RLO位的信号状态都将与前一周期获得的结果进行比较,看信号状态是否有变化。而FB、FC中的TEMP变量中数据在上一周期调用结束已经被清除,因此是无法用FC、FB中的TEMP临时变量作为检测RLO状态的;
局部变量
在程序的开始必须有对该存贮区地址的赋值操作(即初始化),否则可能会出现错误的执行结果。
局部变量在所在块结束时被清零,局部变量是分配给每个子程序的临时存贮区。局部存储区是应该用于临时的,存放中间过程的。.call子程序时,IN会把数值先送给分配好的局部变量,然后运行子程序。结束时,系统自动把分配好的局部变量传输给OUT。
局部变量是公共区间,所有程序中的局部变量都会使用这片区域。它保存的值不会程序调用的结束而自动清零,因此所有程序使用局部变量之前应该遵守先赋值,再使用的原则。同样的,应该警惕子程序返回CRET指令对局部变量OUT的影响,先赋值,再退出。
对于计数,建议用保持寄存器V区间。
当子程序被调用时,系统分配局部变量区给子程序;子程序执行完成后,该局部变量区被释放。释放时其中存贮的值也同时丢失,不能再下一扫描周期再被子程序使用。
局部变量区的大小为64个字节,其中最后4个字节被系统所占用,实际可供子程序使用的为60个字节。
由于局部变量区的数据不能带到下一扫描周期,因此只能用于存迪程序运算中的中间值,可以减少对全局变量区的占用。
由于局部变量区在子程序被调用时才被分配,且分配时并不对数据区进行初始化,所以其初始值是不确定的。因此在程序中用到这些存贮区的值的指令前,必须有对该存贮区地址的赋值操作,否则可能会出现错误的执行结果。
尤其在子程序中存在大量的跳转指令时,很容易出现漏掉对局部变量赋值的情况,要格外注意。
为了较可简便地监视与检查程序,建议应用M存储区。
局部变量教程:
http://www.ad.siemens.com.cn/service/elearning/cn/CourseV2.aspx?CourseID=533
等您来回答
换一换
{{item.CoinValue}}西币
{{item.VisitNum}}人想问
本版相关问题
换一换
专家置评
首次回答问题,获得
双倍西币积分!
立即成为技术知识分享的一员!
欢迎您访问支持中心!
丰富的视频,全方位的文档,大量的网友交流精华……
为了更好的完善这些内容,我们诚邀您在浏览结束后,花20秒左右的时间,完成一个用户在线调查!
感谢您的支持!

西门子商城