MC_BR_InitReceiveNetworkData with ACP10

Good morning,
i want to use this function because i want to connect 24 digital inputs (connected on an X20DI9371. Mounted on an X20BC0083) to trigger input interface of servo drive . Each digital input are connected to 1 servo drive. So, at the end i need 24 trigger for each servo drive (that are also 24).
I know exist already the function block ‘MC_BR_SetHardwareInput’, but i want to analyse another solution for reduce the transfer latency between servodrive and variable mapped on X20Digital input.

The reason, it is related to the application, that uses function block MC_BR_MoveVelocityTriggerStop, and i want to remove some delay for improving the performance.

As far as i’ve understood from ASH, i need to define this step for each drive (steps)

Question: i have to thinking about some limitation? for example ,max number of receive par id in the network?
Is it a solution that is able to remove the transfer latency between I/O → PLC → DRIVE ? So at the end , the information are transferred between I/O-> DRIVE --only powerlink latency without PLC task class?

Thanks

Hi,

ACOPOS can read I/O data directly from the POWERLINK network, so it doesn’t have to wait for the PLC to process the data. This eliminates the delay caused by the PLC cycle.

Unfortunately, I don’t have my laptop with me at the moment, so I can’t check the exact procedure.

If I remember correctly, you need to determine the POWERLINK process data offset and configure the CYCLIC_DP_DATA_OFFSET parameter in ACOPOS so that it reads the required I/O data directly from the POWERLINK frame.

Jan

ok this is another good solution thanks!..I remember that i have done same things for sending a quota via X20 to ACOPOS but i don’t remember how to know CYCLIC_DP_DATA_OFFSET parameter (this is the difficult part as i remember)..do you have some example ? I have seen the help but for me is not easy to understand (related to my case). Thanks

This is an interesting sample that i’ve found inside ASH
ASH

Some question:

1- CYCLIC_DP_DATA_OFFSET=Bit Offset?? What means bit offset, is a variable, is a constant defined for SPT or whatever?
It is obtained from this fb `for example:``
PlActionGetDPInfo.DeviceName := ADR(‘SS1.IF2.ST12.IF1.ST2’);
PlActionGetDPInfo.ChannelName := ADR(‘DigitalInput01’);
plActionStatus := plAction(0,plACTION_GET_DP_INFO,ADR(PlActionGetDPInfo),SIZEOF(PlActionGetDPInfo));


2- MA1_CYCLIC_POS contain the information about X20BC where the X20DI it is connected? So in our case after read the  properly bit offset we know already that PLK frame area is cover by the other digital inputs? e.g. 16 bits for 16 digital inputs?

3-Imagine my situation where i have to bring 16 digital input and connect each digital input to a Trigger interface. This means, i have to create different SPT function with properly BIT shift function in SPT.. eg. if drive 1 require trigger 1 connected to digital input 1, means BIT_B1+0 =0 and BIT_A1+0=1 , for drive 8 BIT_B1+0 =7 ..etc . Am i right? 

4: if i create all of these SPT where CONFIG_MA1_CYCLIC_POS is the same

Sorry if i sent you many question, but it is needed for analyse the scenario and understand if this could be our solution

Hello Tullio Quirini,

it is not possible to route digital input signals this way to the ACOPOS triggers.

See Help: Digital input ParIDs

The ParIDs TRIGGER1_PARID and TRIGGER2_PARID only exist on ACOPOS P3 modules and it is only possible to route them to some fast inputs of a plug-in card in the same drive.

The best way to use trigger signals on ACOPOS is to connect them directly to the drive.
E.g. ACOPOS P3 trigger inputs

Everything is described in the help documentation at the following link.

https://help.br-automation.com/#/en/6/libraries/acp10_mc/alphabetische_ubersicht/mc_br_initreceivenetworkdata/empfang_info_buscontroller.html

First, you must use the plAction function to obtain information about the connected I/O. Adjust the Device Name according to your hardware.

	PlActionGetDPInfo.DeviceName  = "SL1.IF1.ST1.IF1.ST12";
	PlActionGetDPInfo.ChannelName = "DigitalInput01";
	plActionStatus = plAction(0,plACTION_GET_DP_INFO,&PlActionGetDPInfo,sizeof(PlActionGetDPInfo));

Next, you must configure the ACOPOS to receive data. You can do this in one of the following ways:

  • Using the MC_BR_InitReceiveNetworkData function block (I don’t use the ACP10_MC library, so I can’t provide guidance on this method)
  • Directly in the SPT via the Parameter Table (this is the simplest approach, but all parameters are constants, so you must calculate them beforehand)
  • From the PLC (I use my own function blocks based on ncAction)
	CYCLIC_DP_DATA_OFFSET   (PlActionGetDPInfo.OffsetAbs / 32) * 32
    CYCLIC_DP_DATA_TYPE     7
	CONFIG_MA1_CYCLIC_POS   PlActionGetDPInfo.SrcNode, ACP10PAR_CYCLIC_DP_DATA_OFFSET
	MA1_CYCLIC_IPL_MODE     0

Next, you need to configure the BIT FBK.

    FUNCTION_BLOCK_CREATE	BIT_MODE+0
    BIT_A1+0                1
    BIT_B1+0                0 // 0 is DigitalInput01, 1 is DigitalInput02, etc.
    BIT_IN1_PARID+0	        MA1_CYCLIC_POS
    BIT_MODE+0	            10

Finally, you need to configure the trigger input. I used this method to control the ACOPOS PosLimitSwitch, NegLimitSwitch, and ReferenceSwitch inputs, but I’m not sure whether the trigger inputs can be used in the same way. If not, you would need to use a force command on the trigger input instead.

    REFERENCE_SWITCH_PARID  BIT_VALUE1+0   // this is working
    TRIGGER1_PARID          BIT_VALUE1+0   // you have to try, if not working use trigger force function

Perfect thanks. Unfortunately i need to set trigger input with ACOPOS motor compact so i cannot try this solution (like Martin Schrott say). Thank you

YES you are right but i could use the mechanism that it is already implemented on ‘SetHardwareInput FB’ inside SPT