Creating a Real-time robot torque monitor in PLC HMI

  • As the title says, I am trying to create a real time robot torque monitor screen where the end-user will be able to monitor real time robot crucial parameters like disturbance torque, torque average from servo DSPs, OVCs and temperature simulated from servos all these in an effort to give my clients a better way to understand if their programs are smooth and healthy for their robots and take actions if not.


    My strategy was at first to pull all the system variables I need and store them into 16bit Group Outputs in a BG LOGIC program and from there directly to the PLC but to my bad luck all of the values read are 90% decimal so I cannot store them in GOs.
    Second approach was to store them directly to Registers and have the PLC pull them out using explicit messaging but this solution will not work really well because having a PLC bit always open for the explicit message, doesnt update the data continuously and having a reset output of the explicit message bit every cycle doesnt seem like a good option to me.


    Also I must account for the fact that every PLC variable needs at least 100ms to reach the HMI. BG LOGIC scan time and Ethernet IP communication between Robot and PLC are 8ms set.


    Is there any other optimal way of storing these decimal values directly to GOs?

  • Thank you HawkMe. I browsed the forum all weekend before creating the thread but all I found was a solution to apply a strategy that would send have the integer half the decimal portion and have the PLC re-assemble the number. I will go with the Timer reset function strategy but I would be curious to know how could I brake a decimal number at the robot side without the Math add-on option on the robot ?

    I guess its not possible yes ?

  • I don't have the HMI

    What HMI model you have? If it's possible why not read the data directly into the HMI, without sending it to the PLC and then to the HMI?

    I am using an OMRON NA5 HMI. I also just checked that I have the HMI Device (SNPX) R553 installed on the robot but I never bothered to learn SNPX . Can you please point me to the correct manual describing in debth the HMI SNPX function ?

  • I don't have the HMI

    I am using an OMRON NA5 HMI. I also just checked that I have the HMI Device (SNPX) R553 installed on the robot but I never bothered to learn SNPX . Can you please point me to the correct manual describing in debth the HMI SNPX function ?

    The manual for the GE Series 90 SNPX is MARUCHMID06121E ... depending on the version of software you are using you might also be able to use Modbus/TCP or OPC UA to read registers with the PLC. These are available with option R553 in version 9.10 or later I believe. The manual for the Modbus/TCP and OPCUA is MARUCHOPM05191E.


    Also, if you have troubles configuring your SNPX addresses, there are some posts on this forum for assigning the SNPX addresses.

  • This is an example of some entries in the $SNPX_ASG variables. The HMI will be able to see robot registers, string registers, last alarm, alarm number, alarm text, alarm history, TP program, etc. The HMI can see robot variables by adding them to the $SNPX_ASG list. The HMI variable references the number in the $ADDRESS field. You also need to set the $NUM_CIMP variable to at least a 1 or higher to allow the HMI to see the variables, this is in the $SNPX_PARAM variable. I've had to set the number to 2 or higher on some cells to make it work properly.


    [*SYSTEM*]$SNPX_ASG Storage: CMOS Access: RW : ARRAY[80] OF SNPX_ASG_T

    Field: $SNPX_ASG[1].$ADDRESS Access: RW: SHORT = 1

    Field: $SNPX_ASG[1].$SIZE Access: RW: SHORT = 1000

    Field: $SNPX_ASG[1].$VAR_NAME Access: RW: STRING[37] = 'R[1]@1.1'

    Field: $SNPX_ASG[1].$MULTIPLY Access: RW: REAL = 1

    Field: $SNPX_ASG[2].$ADDRESS Access: RW: SHORT = 1001

    Field: $SNPX_ASG[2].$SIZE Access: RW: SHORT = 2000

    Field: $SNPX_ASG[2].$VAR_NAME Access: RW: STRING[37] = 'R[1]'

    Field: $SNPX_ASG[2].$MULTIPLY Access: RW: REAL = 0

    Field: $SNPX_ASG[3].$ADDRESS Access: RW: SHORT = 3001

    Field: $SNPX_ASG[3].$SIZE Access: RW: SHORT = 1000

    Field: $SNPX_ASG[3].$VAR_NAME Access: RW: STRING[37] = 'SR[1]'

    Field: $SNPX_ASG[3].$MULTIPLY Access: RW: REAL = 1

    Field: $SNPX_ASG[4].$ADDRESS Access: RW: SHORT = 4001

    Field: $SNPX_ASG[4].$SIZE Access: RW: SHORT = 40

    Field: $SNPX_ASG[4].$VAR_NAME Access: RW: STRING[37] = '$alm_if.$last_alm'

    Field: $SNPX_ASG[4].$MULTIPLY Access: RW: REAL = 1

    Field: $SNPX_ASG[5].$ADDRESS Access: RW: SHORT = 4041

    Field: $SNPX_ASG[5].$SIZE Access: RW: SHORT = 60

    Field: $SNPX_ASG[5].$VAR_NAME Access: RW: STRING[37] = 'ALM[1]@6.6'

    Field: $SNPX_ASG[5].$MULTIPLY Access: RW: REAL = 1

    Field: $SNPX_ASG[6].$ADDRESS Access: RW: SHORT = 4101

    Field: $SNPX_ASG[6].$SIZE Access: RW: SHORT = 400

    Field: $SNPX_ASG[6].$VAR_NAME Access: RW: STRING[37] = 'ALM[1]@12.40'

    Field: $SNPX_ASG[6].$MULTIPLY Access: RW: REAL = 1

    Field: $SNPX_ASG[7].$ADDRESS Access: RW: SHORT = 4501

    Field: $SNPX_ASG[7].$SIZE Access: RW: SHORT = 600

    Field: $SNPX_ASG[7].$VAR_NAME Access: RW: STRING[37] = 'ALM[E1]@6.6'

    Field: $SNPX_ASG[7].$MULTIPLY Access: RW: REAL = 1

    Field: $SNPX_ASG[8].$ADDRESS Access: RW: SHORT = 5101

    Field: $SNPX_ASG[8].$SIZE Access: RW: SHORT = 4000

    Field: $SNPX_ASG[8].$VAR_NAME Access: RW: STRING[37] = 'ALM[E1]@12.40'

    Field: $SNPX_ASG[8].$MULTIPLY Access: RW: REAL = 1

    Field: $SNPX_ASG[9].$ADDRESS Access: RW: SHORT = 9101

    Field: $SNPX_ASG[9].$SIZE Access: RW: SHORT = 40

    Field: $SNPX_ASG[9].$VAR_NAME Access: RW: STRING[37] = '$TP_DEFPROG'

    Field: $SNPX_ASG[9].$MULTIPLY Access: RW: REAL = 1

    Field: $SNPX_ASG[10].$ADDRESS Access: RW: SHORT = 9141

    Field: $SNPX_ASG[10].$SIZE Access: RW: SHORT = 40

  • I finally chose to use the explicit message way as I was unable to setup the SNP communication successfully on the HMI side. I was not able to establish a connection from the HMI to the robot as an external device. The only external devices I could add from sysmac studio were other Omron CPUs and the vendor list was only Omron. anyway, here is a quick video with the result IMG_1036.mp4


    Yeah, J6 is partying a lot on those kinds of programs

Advertising from our partners