为什么modbus-RTU(从站)在S7-226中可以使用,而在S7-222中就不行呢,程序没改动,就是V库从2000变为1000,因为V库为2000则超出S7-222的范围,只能改成1000,其它没变,但是用串口软件调试则是通讯超时,为什么??”
问题补充:
这是下载的例子程序!!!! 用的是功能6 01 06 00 0A AA 55 17 57在S7-226中行,在S7-222中不行? 为什么??
LD First_Scan_On:SM0.1
CALL MBUS_INIT:SBR3, 1, 1, 9600, 0, 0, 128, 32, 1000, &VB0, M10.1, MB11
LD Always_On:SM0.0
CALL MBUS_SLAVE:SBR1, M10.2, MB12
最佳答案
32改为16,因为CPU222不能带那么多模拟量。
论坛里有一个和你一样的问题,已经解决了,你可以看看。
[quote][b]以下是引用[i]LaoHuai在2008-12-07 14:38:26[/i]的发言:[/b][br]是从站库吧?从站库错误详解
MBUS_INT的 ERROR值有以下5种:
ERROR=1=memory range error
1 MaxIQ大于128或小于0
2 MaxAI大于32或小于0
3 MaxAI大于16,而AIW32不存在(cpu222)
若CPU为221,MaxAI小于16则不会发生该错误。
4 MaxHold小于0
5 HodStart不是V区地址(应该是&vbXXX)
6 V区最高地址(即HodStart+2*MaxHold-1字节)不存在
ERROR=2=illegal baudrate/parity
1 Baud不是1200、2400、4800、9600、19200、38400、57600或115200.
2 Parity大于2 (Parity小于0作0处理).
ERROR=3=illegal slave address
Addr等于0或大于247
ERROR=4=invalid protocol (modbus parameter)
Mode不等于1,也不等于0.
ERROR=5=holding registers overlap modbus buffers
区域1(主机读写区 V) 区域2(库内存区,780字节 V)重叠
只有MBUS_INT的 ERROR=0,从站才容许接收信息。
所以此错误和要传递到初始化子程序的参数有关,和请求帧无关。
MBUS_SLAVE的ERROR:
ERROR=6=receive parity error
奇偶检验错误或接收缓冲区达到255个字节。发生该错误时,从站重新使能RCV,无响应信息。
ERROR=7=receive CRC error
发生该错误时,从站重新使能RCV,无响应信息。
字符间超时将导致从站接收完成,如果一帧没接收完,一定会产生该错误。
ERROR=8=illegal function request
请求帧的功能码不对,响应帧为:
站号,128 OR 功能码,1,CRC 共5个字节。
ERROR=9=illegal memory address in request
请求中的非法内存地址,响应帧为:
站号,128 OR 功能码,2,CRC 共5个字节。
如果是功能1,2,那么可能原因是:
请求帧的起始位地址或点数小于0,
或起始位地址与点数的和大于MaxIQ。
如果是功能3,4,那么可能原因是:
请求帧的首字地址或字数小于0,
或字数大于120,
或首字地址与字数的和大于MaxHold(功能3)
或首字地址与字数的和大于MaxAI(功能4)
如果是功能5,那么原因是:
请求帧的输出位地址值大于等于modbusMaxIQ或小于0。
如果数据字不等于0也不等于16#FF00,那么ERROR=0,不执行写操作,原帧返回。
如果写入成功,那么原帧返回。
如果是功能6,那么原因是:
请求帧的字地址值大于等于MaxHold或小于0。
如果写入成功,那么请求帧原帧返回(8个字节)。
如果是功能15,那么可能原因是:
请求帧的起始位址或位数小于0
或起始位址与位数和大于MaxIQ
或起始位址与位数不是8的整数倍。
或检查请求帧的字节数不等于位数/8+9
如果写入成功,那么取请求帧的前6个字节加CRC共8个字节作为响应帧。
如果是功能16,那么可能原因是:
请求帧的首字地址址或字数小于0
或首字地址址与字数的和大于MaxHold
或字数的2倍不等于请求帧的字节数减9
或字数的2倍不等于字节数
或请求帧的字节数大于249
如果写入成功,那么取请求帧的前6个字节加CRC共8个字节作为响应帧。
ERROR=10=modbus not initialized
当MBUS_INT的ERROR不等于0时,MBUS_SLAVE的ERROR=10
所以ERROR=6,7,8,9时都和接收信息有关。
主站接收不到信息是因为:
MBUS_SLAVE的ERROR=6,7,10或请求帧的地址不对。
[/quote]
提问者对于答案的评价:
xiexie
原创文章,作者:ximenziask,如若转载,请注明出处:https://www.zhaoplc.com/plc354651.html