在用314cpu+cp341模块做与电量变送器的串行通讯时,编程遇到了问题,自己在这方面基础太差找不出来问题所在,只好求教大家了。程序如下:
OB35 段1 将M0.0置位,得到上升沿,触发发送功能
A M 0.1
S M 0.0
段2 将发送指令放在DB1.DBB0-DB1.DBB4里边,字节存放
A M 0.1
= L 20.0
A L 20.0
JNB _001
L B#16#23
T DB1.DBB 0
_001: NOP 0
A L 20.0
JNB _002
L B#16#30
T DB1.DBB 1
_002: NOP 0
A L 20.0
JNB _003
L B#16#33
T DB1.DBB 2
_003: NOP 0
A L 20.0
JNB _004
L B#16#41
T DB1.DBB 3
_004: NOP 0
A L 20.0
JNB _005
L B#16#D
T DB1.DBB 4
_005: NOP 0
段3 调用FB108,发送指令,M0.2判断是否发送完成,M0.3显示是否有错误
A M 0.0
= L 20.0
BLD 103
CALL "P_SND_RK_OLD" , DB8
SF :=
REQ :=L20.0
R :=
LADDR :=256
DB_NO :=1
DBB_NO :=0
LEN :=5
R_CPU_NO:=
R_TYP :=
R_NO :=
R_OFFSET:=
R_CF_BYT:=
R_CF_BIT:=
DONE :=M0.2
ERROR :=M0.3
STATUS :=
NOP 0
OB1 段1 将M0.0清零
A M 0.1
R M 0.0
段2 调用FB107,使CP341始终接收
A M 0.1
= L 20.0
BLD 103
CALL "P_RCV_RK_OLD" , DB7
EN_R :=L20.0
R :=
LADDR :=256
DB_NO :=10
DBB_NO :=0
L_TYP :=
L_NO :=
L_OFFSET:=
L_CF_BYT:=
L_CF_BIT:=
NDR :=
ERROR :=
LEN :=MW2
STATUS :=
NOP 0
JNB _001
L MW 2
T MW 4
_001: NOP 0
程序如上,OB35的循环调用时间设置的1s,程序运行时,将M0.1强制为1,用变量表监视时,M0.0偶尔会从0-1,大部分时间为0,M0.2一直为0,说明一直都没有发送完成,然后我就再OB35中加了如下一段程序
AN M 0.2
JC SEND
想说只要没发送结束,一直循环发送(SEND在OB35段3处),可是结果导致cpu停机了,是因为调用周期1s短于OB35的运行时间,可是不知道为什么会这样?指令发送完后不就结束OB35了吗?还有我编写的程序哪儿出问题了?为何实现不了每隔1s发送指令并接收变送器传回来的数据?看在发这么多字的诚意上,希望大家帮忙解答一下疑惑吧!