F146_READ_DATA_TYPE_OFFS

スレーブからのデータ読み出し(タイプ、オフセット指定)

この命令は、MEWTOCOL-COMまたはModbus RTUプロトコルを使って、通信ポートを介して、スレーブ側にデータを要求するときに使用します。使用するポートのシステムレジスタで設定します。 Modbusプロトコルを使用したデータ転送では、コンパイラは、Modbus参照番号に基づいてModbusコマンドを生成します。

パラメータ

入力

Port (WORD, INT, UINT)

通信ポートの指定(PLC機種による):

  • COMポート、例:SYS_COM0_PORT

  • Ethernetポート 例: SYS_ETHERNET_USER_CONNECTION_1

  • MCU/SCU、例:16#xx01 (xx =スロット番号) COM01

SlaveAddress (WORD, INT, UINT)

スレーブの局番 (MEWTOCOL: 1~99、MODBUS:1~255)、ブロードキャスト:0)

SYS_ETHERNET_USER_CONNECTION_xxを入力Portに割り付けるには、1をセットします。

SlaveWordAddressType (WORD, INT, UINT)

スレーブ側格納先のアドレス型。ゼロのオフセットを指定します(例: DT0またはWL0)。

SlaveWordAddressOffs (WORD, INT, UINT)

データが読み出されるスレーブの先頭アドレス用オフセット。アドレス型はSlaveWordAddressTypeで定義されます。

NumberOfWords_BitsInWords (WORD, INT, UINT)

転送されるワード(ビット)数

以下のいずれかを指定:

  • ワード数

    Modbus RTUの場合:16#001–16#07F

    MEWTOCOL-COMの場合:16#001–16#1FDまたは16#001–16#1B (FP0FP-e)

または:

  • ビット転送用の制御ワード:16#8T0FTは「to bit」の意でマスター側のビット、Fは「from bit」の意でスレーブのビット番号を示します(FP7には適用されません)。

出力

MasterWordData (ANY)

要求されたデータが書き込まれるマスターユニットのワードエリアまたはレジスタ。

解説

  • F命令を使用する代わりに、対応するFP7命令を使用することをおすすめします。FP_READ_FROM_SLAVE_AREA_OFFS

  • F145またはF146命令は、いずれの命令もアクティブでない場合にのみ実行することができます。プログラム上で"F145/F146命令実行不可"フラグを確認し、命令の状態をチェックします。

  • "F145/F146エラー"フラグを確認し、転送が正常に完了したか、あるいはエラーが発生したかどうかをチェックします。

  • 格納先アドレスが特殊内部フラグ(R9000~)、特殊データレジスタ(DT9000/DT90000~)、またはファイルレジスタFLの場合には、F145またはF146命令を実行することはできません。

エラーフラグ

sys_bIsOperationErrorHold (TRUEになり、TRUEを保持)

  • スレーブまたはマスターデータが、アドレスの有効範囲を超えているとき
  • SlaveWordAddressType:オフセット¹0のとき

  • 通信モードがMEWTOCOL-COMマスター/スレーブまたはModbus RTUマスター/スレーブに設定されていないとき
  • 選択されたCOMポートが、装着されていない通信カセットを必要としているとき
sys_bIsOperationErrorNonHold (1回のスキャンに対してTRUE)

  • スレーブまたはマスターデータが、アドレスの有効範囲を超えているとき
  • SlaveWordAddressType:オフセット¹0のとき

  • 通信モードがMEWTOCOL-COMマスター/スレーブまたはModbus RTUマスター/スレーブに設定されていないとき
  • 選択されたCOMポートが、装着されていない通信カセットを必要としているとき

POUヘッダ

POUヘッダには、このプログラムで使用するすべての入力変数と出力変数を宣言します。 POUヘッダは全プログラム言語で使用できます。

	VAR
		bBool2: BOOL:=FALSE;
		bRead1: BOOL:=FALSE;
		bWrite2: BOOL:=FALSE;
		Bool16_OverlappingDut_1: BOOL16_OVERLAPPING_DUT;
	END_VAR

POUボディ

bRead1sys_bIsComPort1F145F146NotActiveTRUEにセットされている場合、スレーブ2の出力Y38を読み出し、Bool16_OverlappingDut_1.w0のビット1に書き込みます。このビットは、Bool16_OverlappingDut_1.b1によって読み出され、bBool2にコピーされます。

LDボディ

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_CONTACT,,bRead1,3,1,5,3,);
B(B_CONTACT,,sys_bIsComPort1F145F146NotActive,12,1,14,3,);
B(B_COIL,,bWrite2,45,1,47,3,S);
B(B_VARIN,,2,22,3,24,5,);
B(B_VARIN,,WY0,22,4,24,6,);
B(B_VARIN,,3,22,5,24,7,);
B(B_VARIN,,SYS_COM1_PORT,22,2,24,4,);
B(B_COIL,,bRead1,41,1,43,3,E);
B(B_F,F146_READ_DATA_TYPE_OFFS!,Instance,24,0,39,8,,?DEN?DPort?DSlaveAddress?DSlaveWordAddressType?DSlaveWordAddressOffs?DNumberOfWords_BitsInWords?AENO?CMasterWordData);
B(B_VARIN,,16#8108,22,6,24,8,);
B(B_VAROUT,,Bool16_OverlappingDut_1.w0,39,2,41,4,);
L(1,2,3,2);
L(5,2,12,2);
L(43,2,45,2);
L(14,2,24,2);
L(39,2,41,2);
L(1,0,1,8);
        END_NETWORK_BODY
    END_NET_WORK
    NET_WORK
        NETWORK_TYPE := NWTYPELD ;
        NETWORK_LABEL :=  ;
        NETWORK_TITLE :=  ;
        NETWORK_HEIGHT := 3 ;
        NETWORK_BODY
B(B_CONTACT,,Bool16_OverlappingDut_1.b1,8,1,10,3,);
B(B_COIL,,bBool2,20,1,22,3,);
L(10,2,20,2);
L(1,2,8,2);
L(1,0,1,3);
        END_NETWORK_BODY
    END_NET_WORK
END_BODY

STボディ

if (bRead1 and sys_bIsComPort1F145F146NotActive) then
    F146_READ_DATA_TYPE_OFFS(Port := SYS_COM1_PORT, 
                                SlaveAddress := 2, 
                                SlaveWordAddressType := WY0, 
                                SlaveWordAddressOffs := 3, 
                                NumberOfWords_BitsInWords := 16#8108, 
                                MasterWordData => Bool16_OverlappingDut_1.w0);
end_if;
bBool2 := Bool16_OverlappingDut_1.b1;

最終修正日: 2022-04-21このページに関するフィードバックお問い合わせ窓口