菜鸟:
比如说我定义RCV VB100,0
接收的数据是放到VB100开始之后的几个寄存器中
还是放到VB101开始之后的几个寄存器中?
大虾:
如果对方发送 16#DD 16#32 16#5D 16#89 16#00 16#1D 16#99,PLC依次接收,接收完毕 VB100=7 VB101= 16#DD VB102= 16#32等等
菜鸟:
如果我设置了结束字符,而发送的数据中含有结束字符,那么就上面的例子,接收完毕,VB100还会是7吗,
之后的7个寄存器中依次都存有我发送的数据吗?
大虾:
如果结束字符是16#89,那么VB100=4
菜鸟:
大神帮我看下程序哪里有问题:
主程序:
LD SM0.1
///串口0设置///
MOVB 16#09, SMB30 ///8位数据///
///2400波特率///
///自由端口///
///无较检///
MOVB 16#B0, SMB87 //初始化RCV信息控制字节:
//--RCV使能
//--检测信息结束字符
//--检测空闲线信息条件
MOVB 16#FF, SMB88 //设定信息开始字符为FF(开始字符)
MOVW +5, SMW90 //设置空闲线超时为5ms
MOVW 15, SMW92 //设置接收超时为15ms
MOVB 9, SMB94 //设置*大字符数为9
ATCH INT_0:INT0, 23 //串口0接收结束事件
ATCH INT_1:INT1, 9 // 串口0发送结束事件 26 数据发送完毕必须RCV VB100, 0
ENI
RCV VB100, 0
LD M0.2
MOVB VB101, VB111
MOVB VB102, VB112
MOVB VB103, VB113
MOVB VB104, VB114
MOVB VB105, VB115
MOVB VB106, VB116
MOVB VB107, VB117
MOVB VB108, VB118
MOVB VB109, VB119
R SM87.7, 1
RCV VB100, 0
MOVB 9, VB110
XMT VB110, 0
MOVB 16#B0, SMB87
RCV VB100, 0
R M0.2, 1
接收结束中断:
LD SM0.0
S M0.2, 1
MOVB 16#B0, SMB87
RCV VB100, 0
CRETI
发送结束中断:
LD SM0.0
MOVB 16#B0, SMB87
RCV VB100, 0
CRETI
实验中出现的问题:在发送给plc的数据中含有0a字符,送回来的数据就不是我发送的数据内容。
如果数据中不含0a,送回来的数据就是我发送的数据。(给的数据首位为FF,9位)
如果发送的数据首位为FF ,*后一位是0A返回的数据没有问题。(中间的字符不含0a)
大虾:
MOVB 16#09, SMB30 波特率是多少?
游民:
9600 注释可能有错误~~
菜鸟:
补充一点 ,在这个程序实验之前,我做了另外一个实验:实验程序和上面的一样,只多加了结束字符0a。
去掉结束字符做的实验后 就出现了上面所说的情况
大虾:
MOVB 16#B0, SMB87 //初始化RCV信息控制字节:
//--RCV使能
//--检测信息结束字符
//--检测空闲线信息条件
SMB89没赋值嘛