通过 P_SND_RK (CP 341) 从 CPU 到通信模块的数据传输
激活
通过指令 P_SND_RK 在输入 REQ 处的边沿信号来激活 MODBUS 函数代码的执行。
为 SEND 在 SF 参数处输入“S”。
在 LADDR 处输入逻辑模块地址。
必须为扩展数据块输入“X”,作为伙伴 CPU 的区域类型。 不必为伙伴 CPU (R_...) 的其他参数*值。
这样就确保了将执行函数代码所需要的参数传送到驱动程序。
数据源
当激活 P_SND_RK 时,通过参数 DB_NO 和 DBB_NO *的源数据区传送到通信模块,长度为 LEN。
长度指示
长度 LEN 取决于所使用的函数代码。
函数代码 | 长度 LEN(以字节为单位) |
---|---|
01 | 6 |
02 | 6 |
03 | 6 |
04 | 6 |
05 | 6 |
06 | 6 |
07 | 2 |
08 | 6 |
11 | 2 |
12 | 2 |
15 | >6 |
16 | >6 |
如果传送的数据数量与上面列出的各个函数代码的数据数量不同,则不会执行作业,P_SND_RK 通过输出 ERROR 处的边沿来拒绝该作业。
SEND 源 DB
执行函数代码所需要的参数必须作为用户数据,输入到源数据区中。
“函数代码”部分的相应函数代码说明中详细描述了各个 P_SND_RK 源 DB。
生成消息帧
到从站的请求消息帧是根据传送的 P_SND_RK 源数据生成的,并由通信模块发送。
首先,驱动程序检查在 P_SND_RK 处*的长度 LEN 是否与此函数代码的长度相符。
如果不是,则不会执行作业,同时在 P_SND_RK 的输出 ERROR 上生成一个边沿信号作为结束。
当使用上面列出的函数代码之外的其他函数代码时,也不会执行激活的作业,而是通过 P_SND_RK 上的 ERROR 来结束该作业。
请求消息帧中的“字节计数器”和“CRC 校验”元素是由通信模块生成的;不需要 P_SND_RK 源 DB 中的条目。
写入函数的作业完成
对于写入函数代码,在接收到响应消息帧且无错误后,激活的 P_SND_RK 完成。 这通过 P_SND_RK 的输出 DONE 上的边沿信号传送到 SIMATIC 用户程序。
如果在消息帧通信过程中检测到错误,或者从站发送了错误代码响应消息帧,则通过输出 ERROR 的边沿信号报告这一情况。
读取函数的作业完成
对于读取函数,在接收到响应消息帧且无错误,并且将接收的数据完全传送到 CPU 之后,激活的 P_SND_RK 完成。
这通过 P_SND_RK 的输出 DONE 上的边沿信号传送到 SIMATIC 用户程序。
此时,接收的数据已经在 CPU 中可用。
如果在消息帧通信过程中检测到错误,或者从站发送了错误代码响应消息帧,则通过输出 ERROR 的边沿信号报告这一情况。
在这种情况下,不会传送任何接收数据到 CPU。
作业完成时的 STATUS 条目
对于这些实例,在作业完成时通过 P_SND_RK 上的 ERROR 进行指示,同时在状态参数中输入附加的错误代码。
可以通过此错误代码确定错误的确切原因
shtxjd.cn.b2b168.com/m/