18.3.4.3. Inovance EtherCAT Configuration
XML File Import
Open Inovance AutoShop programming software and create a new PLC project. Select “EtherCAT Devices” from the right toolbox:
Right-click after selecting “EtherCAT Devices” to open the “Import Device XML” dialog. Locate the folder containing the card’s XML file. After successful import, the card name will appear under “EtherCAT Devices”. Close and reopen the project to complete the import process.
Variable Mapping
Double-click the variable table in the left toolbar. Create: - 256-byte input array (Soft element address: D0) - 256-byte output array (Soft element address: D200)
Under “EtherCAT” in the left toolbar, double-click “Xone-PCIe-ECATs”. In the dialog, click “I/O Mapping”, then bind variable addresses by selecting from the variable table. Repeat sequentially for other addresses.
Program Download
Open the test program and change PLC IP from default “192.168.1.88” to “192.168.0.88”:
Click “Modify IP/Device Name” and update both IP and gateway to “192.168.0.88”:
Confirm modification by clicking “Yes” in the popup dialog when clicking “Modify IP”.
After successful communication, download the PLC program.
18.3.5. HMI setting (CC-Link IEF Basic emulation)
After logging into the HMI interface, enable ‘Enable Task’ to establish the communication connection between PLC and controller.
Click ‘01_MC_EnableRobot’ interface and then click ‘EnableRobot’ to enable the robot, and click ‘Reset’ to reset if there is any error during the process.
Click ‘02_MC_ToolData’ to enter the tool information interface, enter the parameters on the left and click WriteToolData to write the tool information; on the right, click ReadToolData to read the existing tool information.
Click ‘03_MC_FrameData’ to enter the interface of workpiece information. On the left side, after inputting parameters, click WriteFrameData to write workpiece information; on the right side, click ReadFrameData to read existing workpiece information.
Click ‘04_MC_LoadData’ to enter the load information interface, enter the parameters on the left and click WriteLoadData to write load information; on the right, click ReadLoadData to read the existing load information.
Click ‘05_MC_RobotReferenceDynamics’ to enter the interface of Maximum Velocity and Maximum Acceleration of Robot, enter the parameters on the left side and then click WriteRobotRefD to write the information of Maximum Velocity and Maximum Acceleration; click ReadRobotRefD on the right side to read the information of Maximum Velocity and Maximum Acceleration. On the right side, click ReadRobotRefD to read the max speed and max acceleration information.
Click ‘06_MC_Robot DefaultDynamics’ to enter the interface of robot default speed and default acceleration, enter the parameters on the left side and click WriteRobotDefD to write the default speed and default acceleration information; on the right side, click ReadRobotDefD to read the default speed and default acceleration information. on the left side, and then click WriteRobotDefD to write the default speed and default acceleration information; on the right side, click ReadRobotDefD to read the information.
Click ‘07_MC_RobotSwLimits’ to enter the coordinate limit interface. On the left side, input the maximum limit and minimum limit parameter values and click WriteRobotSwLimits to write the limit parameter information; on the right side, click ReadRobotSwLimits to read the existing limit parameter information. parameter information.
Click ‘08_MC_ReadActualPosition’ to enter the read actual position interface, click ReadPosition to read the existing position information.
Click ‘09_MC_MoveLinearAbsolute’ to enter the Linear Motion interface, input the coordinate parameter and click MoveLinearAbsolute to make the robot move linearly at the target position.
Click ‘10_MC_MoveAxesAbsolute’ to enter the interface of axis coordinate movement, input the coordinate parameter and click MoveAxesAbsolute to make the robot move to the target position with the input axis coordinate as the end point.
Click ‘11_MC_MoveDirectAbsolute’ to enter the direct motion interface, input the coordinate parameter and click MoveDirectAbsolute to make the robot move directly to the target position with the input parameter as the end point.
Click ‘12_MC_Groups’ to enter the direct motion interface, in which, clicking GroupInterrupt can interrupt the movement of the robot in the process of movement, and clicking GroupContinue can make the robot continue to move to the target position. Click GroupStop to stop (end) the ongoing position movement. If an alarm or error is triggered during the process, click GroupReset to reset the robot to the error.
Click ‘13_MC_PositionConversion’ to enter the position conversion interface, XtoJ1 can be converted from Cartesian position to joint angle, and J1toX can be converted from joint angle to Cartesian position.
Click ‘14_MC_GroupJog’ to enter the interface of robot jogging, after the configuration is finished, drop down the axes to select the axis you need to jog, and then select the rotation direction of the axis. Click JogMove to move. MC_ChangeSpeedOverride on the right side can adjust the moving speed of the robot arm.
18.3.6. HMI setting (Profinet emulation)
After opening the programme, click on ‘HMI_1[ktp700 Basic PN]’ in the project tree, and then click on ‘Online’→‘Simulation’→‘Start’ in the menu bar. Click ‘Online’→‘Simulation’→‘Start’ in the menu bar. Wait for the software to compile and simulate.
The function after emulation is the same as the content of the Velcro screen (CC-Link IEF Basic). You can refer to the above content to set up.
18.4. Robot Slave Mode Operation Manual
18.4.1. Loading Slave Mode
Step 1: Open the WebApp, navigate to Initial Setup -> Peripherals -> Board Communication -> Manual Configuration.
Figure 17.3-1 Board Communication Manual Configuration
First, configure the IP address of the FRJ-PCIeN board. If left blank, the board will use the default IP: 192.168.0.100 for startup configuration. Currently, IP configuration only applies to EIP and CC-Link IEF Basic protocols. For PN protocol, the IP is assigned by the PLC master station scanning slave devices.
Note
After changing the IP address on the page, you need to load the slave mode for the changes to take effect.
Select the required mapping functions for DI, DO, and AO (see Appendix 1). The parameters are defined as follows:
DI (Robot Control): The robot slave accepts external input signals and executes the mapped functions.
DO (Robot Status Output): The robot slave feeds back status signals to the master station.
AO (Robot Status Feedback): The robot slave feeds back status data to the master station. AO0~AO15 are signed integers (int16), and AO16~AO31 are single-precision floating-point numbers (float).
Step 2: Click the “Configure” button to generate the open protocol Lua file.
Figure 17.3-2 Device Operation and Status
Note
The open protocol Lua file supports download and can be imported in the auto-configuration interface.
Example generated program:
local id = 3
local ctrlDI = {0, 0, 0, 0, 0, 0}
local funcDI = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
local DOState = {0, 0, 0, 0, 0, 0, 0, 0}
local AOState = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
-- Launch the board communication process
LoadFieldBusSlave()
sleep_ms(8000)
while(1) do
-- Set the DO status
CtrlBoxDO, CtrlBoxCO, CtrlBoxDI, CtrlBoxCI, errState, motionState, moveToOriginState, robotStartDoneState, modeChangeState, programStartStopState, emergencyState, reduceState, collision, enablestate, safetyStop0, safetyStop1, pauseState, interfereState = GetRobotFuncDOState()
DOState[1] = CtrlBoxDO
DOState[2] = CtrlBoxCO
DOState[3] = CtrlBoxDI
DOState[4] = CtrlBoxCI
local ctrlWord0 = 0
ctrlWord0 = SetBitWithIndex(ctrlWord0, 0, errState)
ctrlWord0 = SetBitWithIndex(ctrlWord0, 1, motionState)
ctrlWord0 = SetBitWithIndex(ctrlWord0, 2, moveToOriginState)
ctrlWord0 = SetBitWithIndex(ctrlWord0, 3, robotStartDoneState)
ctrlWord0 = SetBitWithIndex(ctrlWord0, 4, modeChangeState)
ctrlWord0 = SetBitWithIndex(ctrlWord0, 5, programStartStopState)
ctrlWord0 = SetBitWithIndex(ctrlWord0, 6, emergencyState)
ctrlWord0 = SetBitWithIndex(ctrlWord0, 7, reduceState)
DOState[5] = ctrlWord0
local ctrlWord1 = 0
ctrlWord1 = SetBitWithIndex(ctrlWord1, 0, collision)
ctrlWord1 = SetBitWithIndex(ctrlWord1, 1, enablestate)
ctrlWord1 = SetBitWithIndex(ctrlWord1, 2, safetyStop0)
ctrlWord1 = SetBitWithIndex(ctrlWord1, 3, safetyStop1)
ctrlWord1 = SetBitWithIndex(ctrlWord1, 4, pauseState)
ctrlWord1 = SetBitWithIndex(ctrlWord1, 5, interfereState)
DOState[6] = ctrlWord1
SetFieldBusDOState(DOState)
-- Set the AO status
mainErrCode, subErrCode, TCPSpeed, axisPos1, axisPos2, axisPos3, axisPos4, axisPos5, axisPos6, jointVelFeedback1, jointVelFeedback2, jointVelFeedback3, jointVelFeedback4, jointVelFeedback5, jointVelFeedback6, jointCurFeedback1, jointCurFeedback2, jointCurFeedback3,jointCurFeedback4,jointCurFeedback5,jointCurFeedback6, jointTorqueFeedback1, jointTorqueFeedback2,jointTorqueFeedback3,jointTorqueFeedback4, jointTorqueFeedback5, jointTorqueFeedback6, cartPosx, cartPosy, cartPosz, cartPosrx, cartPosry, cartPosrz = GetRobotFuncAOState()
AOState[1] = mainErrCode
AOState[2] = subErrCode
AOState[17] = axisPos1
AOState[18] = axisPos2
AOState[19] = axisPos3
AOState[20] = axisPos4
AOState[21] = axisPos5
AOState[22] = axisPos6
AOState[23] = cartPosx
AOState[24] = cartPosy
AOState[25] = cartPosz
AOState[26] = cartPosrx
AOState[27] = cartPosry
AOState[28] = cartPosrz
SetFieldBusAOState(AOState)
sleep_ms(10)
-- Set the DI status
-- Configure the DI function and update it in real-time
ctrlDI[1],ctrlDI[2],ctrlDI[3],ctrlDI[4],ctrlDI[5],ctrlDI[6] = GetFieldBusDIState()
funcDI[1] = ctrlDI[1]
funcDI[2] = ctrlDI[2]
funcDI[3] = GetBitWithIndex(ctrlDI[3], 0)
funcDI[4] = GetBitWithIndex(ctrlDI[3], 1)
funcDI[5] = GetBitWithIndex(ctrlDI[3], 2)
funcDI[6] = GetBitWithIndex(ctrlDI[3], 3)
funcDI[7] = GetBitWithIndex(ctrlDI[3], 4)
funcDI[8] = GetBitWithIndex(ctrlDI[3], 5)
funcDI[9] = GetBitWithIndex(ctrlDI[3], 6)
funcDI[10] = GetBitWithIndex(ctrlDI[3], 7)
funcDI[11] = GetBitWithIndex(ctrlDI[4], 0)
funcDI[12] = GetBitWithIndex(ctrlDI[4], 1)
funcDI[13] = GetBitWithIndex(ctrlDI[4], 2)
funcDI[14] = GetBitWithIndex(ctrlDI[4], 3)
funcDI[15] = GetBitWithIndex(ctrlDI[4], 4)
funcDI[16] = GetBitWithIndex(ctrlDI[4], 5)
SetRobotFuncDIState(funcDI)
local stopFlag = GetOpenLUAStopFlag(id)
if(stopFlag ~= 0) then
UnloadFieldBusSlave()
break
end
sleep_ms(10)
end
Step 3: Click the “Load” button to load the robot slave mode.

Figure 17.3-3 Loading Slave Mode
Note
After successfully loading the robot slave mode, the auto-start function is supported. To use remote mode, unload the slave mode first.
Step 4: Click the status bar button on the right to monitor DI, DO, AI, and AO interaction information. The parameters are as follows:
CtrlDO: Input signal value from the master device controlling the robot control box DO.
DI: Input signal value from the external master control.
DO: Output signal value fed back by the robot slave.
AI: Input value from the external master. AI0~AI15 are int16 type, and AI16~AI31 are float type.
AO: Output value from the robot slave. AO0~AO15 are int16 type, and AO16~AO31 are float type.

Figure 17.3-4 DI, DO, AI, AO Interaction Information
Step 5:After loading is complete, you can use the Teach Program -> Communication Command -> Board Card to generate Lua commands for the board. This allows you to:
Set Slave DO (Digital Output) and AO (Analog Output).
Read Slave DI (Digital Input) and AI (Analog Input).
Wait for Slave DI and AI signals.

Figure 17.3-5 Board Lua Commands
Appendix 1: Slave Mode Address Mapping Table
18.5. Board Communication Cycle Configuration
The communication cycle of the board can be configured via the host computer. Currently, only PN protocol firmware is provided, with future compatibility for EIP, CC-Link IE Basic, and EtherCAT protocols.
Directly connect the PC (Windows 11 system) network port to the board’s network port. Open Device Assistant v1.1.0, double-click “Ethernet,” and click the “Refresh” button in the upper left corner to scan for currently connected board devices.
In the firmware update interface, upload the new version of PN firmware and click the “Update” button. A prompt reading “Upgrade Successful” will appear in the lower left corner when printed.
Enter the desired communication cycle (supports 1~100ms) and click the “Set” button. A prompt reading “Cycle Setting Successful” will appear in the lower left corner when printed.
18.6. Appendice
18.6.1. Instruction List
Command code | Command description |
0x1000 | Robot enablement |
0x1001 | Reset all error |
0x1002 | Robot stops moving |
0x1003 | Read actual position |
0x1004 | Set robot speed |
0x1005 | Resume robot motion |
0x1006 | Robot pauses motion |
0x1007 | Calculate the Cartesian position from the joint position |
0x1008 | Calculate joint position from Cartesian position |
0x2000 | Write tool information |
0x2001 | Read tool information |
0x2002 | Write workpiece information |
0x2003 | Read workpiece information |
0x2004 | Write load information |
0x2005 | Read load information |
0x2006 | Write reference dynamic information |
0x2007 | Read reference dynamic information |
0x2008 | Write default dynamic information |
0x2009 | Read default dynamic information |
0x2010 | Write soft limit information |
0x2011 | Read soft limit information |
0x3000 | MoveAxes (based on joint angle) |
0x3001 | MoveLinear |
0x3002 | MoveDirect (based on Cartesian coordinate system) |
0x3003 | jog motion |
0x3004 | jog stop |