回复:请教一个cp341的问题

大头大脑袋

  • 帖子

    433
  • 精华

    3
  • 被关注

    1

论坛等级:游侠

注册时间:2004-10-02

普通 普通 如何晋级?

发布于 2005-11-16 12:08:21

0楼


A #BSEND_TriggerSEND
AN #BSEND_REQ
AN #BSEND_DONE
AN #BSEND_ERROR
R #BSEND_TriggerSEND
S #BSEND_REQ //Set SEND_REQ

// ------------------------
// Generate edge SEND_REQ
// ------------------------
A(
O #BSEND_DONE
O #BSEND_ERROR
)
A #BSEND_REQ
R #BSEND_REQ

// ------------------------
// SEND with Instance-DB
// ------------------------


CALL "P_SND_RK" , #InstanceForFB8 //"DB50"
SF :='S'
REQ :=#BSEND_REQ //DB40.DBX0.0
R :=#BSEND_R //DB40.DBX0.1
LADDR :=#LADDR //DB40.DBW16
DB_NO :=#BSEND_DB_NO //42
DBB_NO :=#BSEND_DBB_NO //0
LEN :=#BSEND_Len //DB40.DBW10
R_CPU_NO:=
R_TYP :='X'
R_NO :=
R_OFFSET:=
R_CF_BYT:=
R_CF_BIT:=
DONE :=#BSEND_DONE //DB40.DBX0.4
ERROR :=#BSEND_ERROR //DB40.DBX0.5
STATUS :=#BSEND_STATUS //DB40.DBW12




// -------------------------------
// Check "Complete without error"
// -------------------------------
A #BSEND_DONE
JCN SND1
L #BSEND_CompleteWithoutErr
+ 1
T #BSEND_CompleteWithoutErr
L #Cyc_order //将当前发送完的顺序附给接收的顺序
T #RVC_Cyc_order


L #Cyc_order //判断当前的顺序是不是循环中最后的发送请求,判断Last属性是否为1
L 200
*I
SLD 3
LAR1
A DIX [AR1,P#0.2] //判断当前循环中当前顺序下Last属性是否为1
JCN SD1 //if no then jump to SD1

L #Cyc_order
L 200
*I
SLD 3
LAR1
L DIW [AR1,P#8.0] //将当前发送的顺序的等待返回报文的时间附值给计时程序,等待时间的定义与接收长度有关。
T #TimerInterval

L 0 //如果last是1则重新开始新的循环
T #Cyc_order



NXT1: L #Cyc_order //判断下一顺序是否Enable,如果为否则跳过,如果全部为否则只发送last为1的顺序,也就是说last为一的顺序一定会发送一,同时必须有一个顺序的last属性定为1次。
L 200
*I
SLD 3
LAR1
A DIX [AR1,P#0.0] //判断当前循环中当前顺序下Enable属性是否为1
JC OUT1
A DIX [AR1,P#0.2] //判断当前循环中当前顺序下Last属性是否为1
JC OUT1
L #Cyc_order
L 1
+I
T #Cyc_order
JC NXT1
OUT1: NOP 0

S #Enabled //重新开始等待接收数据的计时

JU SND3

SD1: L #Cyc_order
L 200
*I
SLD 3
LAR1
L DIW [AR1,P#8.0]
T #TimerInterval

L 1 //如果last是0则顺序加1
L #Cyc_order
+I
T #Cyc_order

NXT2: L #Cyc_order
L 200
*I
SLD 3
LAR1
A DIX [AR1,P#0.0] //判断当前循环中当前顺序下Enable属性是否为1
JC OUT2
A DIX [AR1,P#0.2] //判断当前循环中当前顺序下Last属性是否为1
JC OUT2
L #Cyc_order
L 1
+I
T #Cyc_order
JC NXT2
OUT2: NOP 0

S #Enabled //重新开始等待接收数据的计时

JU SND3


// -------------------------------
// Check "Complete with error"
// -------------------------------
SND1: A #BSEND_ERROR // DB40.DBX 0.5 //ERROR ?
JCN SND2 //if NO

L #Cyc_order //将当前发送完的顺序附给接收的顺序
T #RVC_Cyc_order

L #BSEND_CompleteWithErr // DB40.DBW 8 //"Complete with error"
+ 1 //increment counter
T #BSEND_CompleteWithErr // DB40.DBW 8

L S5T#500MS
T #TimerInterval


L #Cyc_order //判断当前的顺序是不是循环中最后的发送请求,判断Last属性是否为1
L 200
*I
SLD 3
LAR1
A DIX [AR1,P#0.2] //判断当前循环中当前顺序下Last属性是否为1
JCN SD2


L 0 //如果last是1则重新开始新的循环
T #Cyc_order



NXT3: L #Cyc_order
L 200
*I
SLD 3
LAR1
A DIX [AR1,P#0.0] //判断当前循环中当前顺序下Enable属性是否为1
JC OUT3
A DIX [AR1,P#0.2] //判断当前循环中当前顺序下Last属性是否为1
JC OUT3
L #Cyc_order
L 1
+I
T #Cyc_order
JC NXT3
OUT3: NOP 0

S #Enabled //重新开始等待接收数据的计时

JU SND3

SD2: L 1 //如果last是0则顺序加1
L #Cyc_order
+I
T #Cyc_order

NXT4: L #Cyc_order
L 200
*I
SLD 3
LAR1
A DIX [AR1,P#0.0] //判断当前循环中当前顺序下Enable属性是否为1
JC OUT4
A DIX [AR1,P#0.2] //判断当前循环中当前顺序下Last属性是否为1
JC OUT4
L #Cyc_order
L 1
+I
T #Cyc_order
JC NXT4
OUT4: NOP 0

S #Enabled //重新开始等待接收数据的计时

JU SND3

NOP 0
NOP 0 //Error-Handling
NOP 0

L 0
L #BSEND_STATUS // DB40.DBW 12 //if STATUS <> 0
==I
JC SND3

T #BSEND_STATUS_SAVE // DB40.DBW 14 //save STATUS
JU SND3

// ----------------------------
// Check "Error in STATUS"
// ----------------------------
SND2: L 0
L #BSEND_STATUS // DB40.DBW 12 //if STATUS <> 0
==I
JC SND3

T #BSEND_STATUS_SAVE //DB40.DBW 14 //save STATUS

NOP 0 //
NOP 0 //Error-Handling
NOP 0


SND3: CLR

评论
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-300/400

共有54618条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

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

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

  • 分享

  • 只看
    楼主

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