找答案的高端用户(找答案钻石及双钻级别的用户)将尽可能从此问题下的所有回
答中,为您推荐最佳答案。届时您可以根据推荐数采纳答案。
如果自提问时间起7天内您仍无法选出最佳答案,您可以选择“无满意答案”关闭此问题。
{{itemCategory}}
STRUCT
VACOnCMD : BOOL ;
Q_VAC : BOOL ;
END_STRUCT ;
BEGIN
VACOnCMD := FALSE;
Q_VAC := FALSE;
END_DATA_BLOCK
FUNCTION FC 1 : VOID
TITLE =
//
AUTHOR : DZY
VERSION : 0.1
VAR_OUTPUT
Q : BOOL ;
END_VAR
BEGIN
NETWORK
TITLE =
A DB1.DBX 0.0;
S #Q;
R DB1.DBX 0.0;
END_FUNCTION
ORGANIZATION_BLOCK OB 1
TITLE = "Main Program Sweep (Cycle)"
VERSION : 0.1
VAR_TEMP
OB1_EV_CLASS : BYTE ; //Bits 0-3 = 1 (Coming event), Bits 4-7 = 1 (Event class 1)
OB1_SCAN_1 : BYTE ; //1 (Cold restart scan 1 of OB 1), 3 (Scan 2-n of OB 1)
OB1_PRIORITY : BYTE ; //Priority of OB Execution
OB1_OB_NUMBR : BYTE ; //1 (Organization block 1, OB1)
OB1_RESERVED_1 : BYTE ; //Reserved for system
OB1_RESERVED_2 : BYTE ; //Reserved for system
OB1_PREV_CYCLE : INT ; //Cycle time of previous OB1 scan (milliseconds)
OB1_MIN_CYCLE : INT ; //Minimum cycle time of OB1 (milliseconds)
OB1_MAX_CYCLE : INT ; //Maximum cycle time of OB1 (milliseconds)
OB1_DATE_TIME : DATE_AND_TIME ; //Date and time OB1 started
END_VAR
BEGIN
NETWORK
TITLE =
CALL FC 1 (
Q := DB1.DBX 0.1);
// CALL "TRIG"
// Q:="VAC"
END_ORGANIZATION_BLOCK
程序中DB1.DBX0.1不正常。下载到模拟器后变量表中不能手动置1或置0。如果将DB1.DBX0.1替换成Q0.0、M0.0等,正常。如果FC1中将OUT参数改为IN-OUT参数。正常。
手机扫码追踪该问题,
觉得实用,立即去分享!
点击复制链接
你可以看一下这个帖子
http://www.ad.siemens.com.cn/club/bbs/post.asp?myreply=&b_id=4&a_id=605538&s_id=0&num=0#anch
问题在于FC参数调用的问题,对于参数是I\Q\M等区域以及OPN打开DB块以DBX0.1这样访问,传送的是地址指针也就是直接访问的参数实际地址,对于DB.DBX0.1这样的则是保存在临时区域,如果你用
L P##Q
LAR1
在线可以看到AR1指向了V20.1,这个V区是哪里呢?这个V区被称为先前的本地数据或上一层程序的本地数据,也就是存在于OB的L区(临时变量区域),临时变量的使用原则是使用前先赋值,这里FC里使用R #Q则不一定对OUT值刷新,所以#Q的实参可能就不正常,如果用IN-OUT替换OUT,IN-OUT的特性先读入参数,如果实参还是DB1.DBX0.1,那么就把DB1.DBX0.1的值读入临时区域V区,这就实现了临时变量的先赋值的基本要求,就不会有问题了
回答者: Bob Wu - 中级工程师 第10级
参考:
http://www.ad.siemens.com.cn/service/answer/solution.asp?Q_ID=65967&cid=1029
http://www.ad.siemens.com.cn/service/answer/solution.asp?Q_ID=47751&cid=1029
首次回答问题,获得
双倍西币积分!
立即成为技术知识分享的一员!
欢迎您访问支持中心!
丰富的视频,全方位的文档,大量的网友交流精华……
为了更好的完善这些内容,我们诚邀您在浏览结束后,花20秒左右的时间,完成一个用户在线调查!
感谢您的支持!