从从站读取数据
此指令从MEWNET-F从站的指定智能单元读取数据。
输入
存储主/从配置的控制数据
要读取的内存区的起始地址
要读取的字数(最多32字)
在其中存储读取的起始16位区域(请参见F153)
变量s2_Start和d_Start必须为相同的数据类型。
无法同时执行多个F152_RMRD指令和F153_RMWT指令。应设置程序,以便在F152_RMRD/F153_RMWT指令执行启用标志sys_bIsMewnetFNotActive为TRUE时执行这些指令。
sys_bIsMewnetFNotActive | 0:禁止执行(正在执行的F152_RMRD/F153_RMWT指令) 1:已启用执行 |
F152_RMRD指令仅启用要接受的请求。在扫描结束时执行实际处理。F152_RMRD/F153_RMWT指令完成标志(R9036)可用于确认指令是否已执行。
sys_bIsMewnetFError | 0:正常完成 1:已完成,存在错误(错误代码存储在sys_wMewnetFErrorCode中) |
sys_wMewnetFErrorCode | 如果传输已完成,存在错误(sys_bIsMewnetFError(变为TRUE并保持为TRUE) ),将存储错误内容(错误代码)。 |
错误代码(HEX) |
描述 |
---|---|
16#5B |
超时错误(未在指定位置找到智能单元) |
16#68 |
无内存错误(指定地址不存在内存) |
16#71 |
发送应答超时错误 |
16#72 |
发送缓冲区满超时错误 |
16#73 |
响应超时错误 |
如果错误代码为16#71–16#73,则已发生通信超时错误。使用系统寄存器32的设置,可以在10.0ms至81.9s(以10ms为单位)的范围内更改超时时间。默认值设置为2秒。
s1存储网络中主从单元配置的控制数据。从s2_Start指定智能单元中的共享存储器地址编号开始读取n字。结果存储在d中。
s1_Control的指定:
带有库的智能单元: FP3扩展数据存储单元
序号:AFP32091 AFP32092
如果控制数据s1_Control超出指定范围的限制
如果未找到MEWNET-F主站单元
如果读取的数据超出s2_Start的区域
如果控制数据s1_Control超出指定范围的限制
如果未找到MEWNET-F主站单元
如果读取的数据超出s2_Start的区域
所有用于编程此函数的输入和输出变量已在POU头中声明。所有编程语言使用相同的POU头。
VAR
Start: BOOL:=FALSE;
ControlData: DWORD:=16#000A0105;
(*No bank,
slot no. 10,
Master station 1,
Slave station 5*)
StartingAddress: WORD:=0;
NoWordsWrite: INT:=5;
WordsWritten: ARRAY [0..4] OF WORD:=[5(0)];
END_VAR
BODY
WORKSPACE
NETWORK_LIST_TYPE := NWTYPELD ;
ACTIVE_NETWORK := 0 ;
END_WORKSPACE
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 8 ;
NETWORK_BODY
B(B_F,F152_RMRD,,11,1,20,8,,?DEN?D@'s1'?Ds2?Dn?Dd?AENO);
B(B_CONTACT,,Start,5,1,7,3,);
B(B_VARIN,,ControlData,9,3,11,5,);
B(B_VARIN,,StartingAddSlave,9,4,11,6,);
B(B_VARIN,,NumberWordsRead,9,5,11,7,);
B(B_VARIN,,WordsRead[0],9,6,11,8,);
L(1,0,1,8);
L(1,2,5,2);
L(7,2,11,2);
L(11,2,11,3);
END_NETWORK_BODY
END_NET_WORK
END_BODY
If (Start) Then
F152_RMRD(s1_Control := ControlData,
s2_Start := StartingAddress,
n_Number := NoWordsWrite,
d_Start := WordsRead[0]);
End_if;