Tightening machine as a PLC device

From PlcWiki

(Difference between revisions)
Jump to: navigation, search
(Stanley :)
 
(One intermediate revision not shown)
Line 9: Line 9:
''.settings.channelnumber'' should match operation's ''.ChannelNumber'' value and the device name (i.e. ''tmachine_1'') should match operation's ''.Device'' value.
''.settings.channelnumber'' should match operation's ''.ChannelNumber'' value and the device name (i.e. ''tmachine_1'') should match operation's ''.Device'' value.
 +
 +
== CLEVER & OpenProtocol ==
 +
 +
 +
Generally we send these messages to controllers however it also depends on the configuration:
 +
 +
      <table cellspacing="2" cellpadding="2" width="100%" border="1">
 +
          <tr>
 +
            <td>MID 1 (rev 3)</td>
 +
            <td valign="top">Communication start<br>
 +
            </td>
 +
          </tr>
 +
          <tr>
 +
            <td>MID 60 (rev 2)</td>
 +
            <td valign="top">Last tightening result data subscribe<br>
 +
            </td>
 +
          </tr>
 +
          <tr>
 +
            <td>MID 14</td>
 +
            <td valign="top">Parameter set selected subscribe<br>
 +
            </td>
 +
          </tr>
 +
          <tr>
 +
            <td valign="top">MID 17<br>
 +
            </td>
 +
            <td valign="top">Parameter set selected unsubscribe</td>
 +
          </tr>
 +
          <tr>
 +
            <td>MID 34</td>
 +
            <td valign="top">Job info subscribe<br>
 +
            </td>
 +
          </tr>
 +
          <tr>
 +
            <td valign="top">MID 37<br>
 +
            </td>
 +
            <td valign="top">Job info unsubscribe</td>
 +
          </tr>
 +
          <tr>
 +
            <td valign="top">MID 70<br>
 +
            </td>
 +
            <td valign="top">Alarm subscribe<br>
 +
            </td>
 +
          </tr>
 +
          <tr>
 +
            <td>MID 18</td>
 +
            <td valign="top">Select Parameter set<br>
 +
            </td>
 +
          </tr>
 +
          <tr>
 +
            <td valign="top">MID 38<br>
 +
            </td>
 +
            <td valign="top">Select job<br>
 +
            </td>
 +
          </tr>
 +
          <tr>
 +
            <td valign="top">MID 127<br>
 +
            </td>
 +
            <td valign="top">Abort job<br>
 +
            </td>
 +
          </tr>
 +
          <tr>
 +
            <td>MID 16</td>
 +
            <td valign="top">Parameter set selected acknowledge<br>
 +
            </td>
 +
          </tr>
 +
          <tr>
 +
            <td>MID 43</td>
 +
            <td valign="top">Enable tool<br>
 +
            </td>
 +
          </tr>
 +
          <tr>
 +
            <td>MID 42</td>
 +
            <td valign="top">Disable tool<br>
 +
            </td>
 +
          </tr>
 +
          <tr>
 +
            <td>MID 9999</td>
 +
            <td valign="top">Keep alive message<br>
 +
            </td>
 +
          </tr>
 +
          <tr>
 +
            <td>MID 62</td>
 +
            <td valign="top">Last tightening result data acknowledge</td>
 +
          </tr>
 +
          <tr>
 +
            <td valign="top">MID 50<br>
 +
            </td>
 +
            <td valign="top">Vehicle ID Number download request<br>
 +
            </td>
 +
          </tr>
 +
          <tr>
 +
            <td valign="top">MID 19<br>
 +
            </td>
 +
            <td valign="top">Set Parameter set batch size<br>
 +
            </td>
 +
          </tr>
 +
          <tr>
 +
            <td valign="top">MID 224<br>
 +
            </td>
 +
            <td valign="top">Set digital input function<br>
 +
            </td>
 +
          </tr>
 +
      </table>
 +
<br>
 +
 +
We accept any MID from the controller, the most important MIDs for us are these:
 +
 +
<br>
 +
      <table cellspacing="2" cellpadding="2" width="100%" border="1">
 +
          <tr>
 +
            <td>MID 5</td>
 +
            <td valign="top">Command accepted<br>
 +
            </td>
 +
          </tr>
 +
          <tr>
 +
            <td>MID 61</td>
 +
            <td valign="top">Last tightening result data<br>
 +
            </td>
 +
          </tr>
 +
          <tr>
 +
            <td>MID 15</td>
 +
            <td valign="top">Parameter set selected<br>
 +
            </td>
 +
          </tr>
 +
          <tr>
 +
            <td>MID 35</td>
 +
            <td valign="top">Job info<br>
 +
            </td>
 +
          </tr>
 +
      </table>
 +
<br>
 +
<br>
 +
<hr size="2" width="100%"><br>
 +
<br>
 +
 +
The communication starts like this:
 +
 +
<br>
 +
      <table cellspacing="2" cellpadding="2" width="667" border="1"
 +
        height="326">
 +
          <tr>
 +
            <td><b>PC</b></td>
 +
            <td align="center"><b>direction</b></td>
 +
            <td><b>controller</b></td>
 +
            <td valign="top"><b>meaning</b><br>
 +
            </td>
 +
          </tr>
 +
          <tr>
 +
            <td>MID 1</td>
 +
            <td align="center">-&gt;</td>
 +
            <td><br>
 +
            </td>
 +
            <td valign="top">Communication start<br>
 +
            </td>
 +
          </tr>
 +
          <tr>
 +
            <td><br>
 +
            </td>
 +
            <td align="center">&lt;-</td>
 +
            <td>MID 2</td>
 +
            <td valign="top">Communication start acknowledge<br>
 +
            </td>
 +
          </tr>
 +
          <tr>
 +
            <td>MID 60</td>
 +
            <td align="center">-&gt;</td>
 +
            <td><br>
 +
            </td>
 +
            <td valign="top">Last tightening result data subscribe</td>
 +
          </tr>
 +
          <tr>
 +
            <td><br>
 +
            </td>
 +
            <td align="center">&lt;-</td>
 +
            <td>MID 5</td>
 +
            <td valign="top">Command accepted</td>
 +
          </tr>
 +
          <tr>
 +
            <td>MID 14</td>
 +
            <td align="center">-&gt;</td>
 +
            <td><br>
 +
            </td>
 +
            <td valign="top">Parameter set selected subscribe</td>
 +
          </tr>
 +
          <tr>
 +
            <td><br>
 +
            </td>
 +
            <td align="center">&lt;-</td>
 +
            <td>MID 5</td>
 +
            <td valign="top">Command accepted</td>
 +
          </tr>
 +
          <tr>
 +
            <td>MID 34</td>
 +
            <td align="center">-&gt;</td>
 +
            <td><br>
 +
            </td>
 +
            <td valign="top">Job info subscribe</td>
 +
          </tr>
 +
          <tr>
 +
            <td><br>
 +
            </td>
 +
            <td align="center">&lt;-</td>
 +
            <td>MID 5</td>
 +
            <td valign="top">Command accepted</td>
 +
          </tr>
 +
          <tr>
 +
            <td>MID 70</td>
 +
            <td align="center">-&gt;</td>
 +
            <td><br>
 +
            </td>
 +
            <td valign="top">Alarm subscribe</td>
 +
          </tr>
 +
          <tr>
 +
            <td><br>
 +
            </td>
 +
            <td align="center">&lt;-</td>
 +
            <td>MID 5</td>
 +
            <td valign="top">Command accepted</td>
 +
          </tr>
 +
      </table>
 +
 +
That's the initial handshake.<br>
 +
<br>
 +
Then communication is driven by the needs of the client.<br>
 +
<br>
 +
A typical conversation using parameter sets looks like this:<br>
 +
<br>
 +
      <table cellspacing="2" cellpadding="2" width="647" border="1"
 +
        height="471">
 +
          <tr>
 +
            <td><b>PC</b></td>
 +
            <td align="center"><b>direction</b></td>
 +
            <td><b>controller</b></td>
 +
            <td valign="top"><b>meaning</b><br>
 +
            </td>
 +
          </tr>
 +
          <tr>
 +
            <td>MID 42<br>
 +
            </td>
 +
            <td align="center">-&gt;</td>
 +
            <td><br>
 +
            </td>
 +
            <td valign="top">Disable tool<br>
 +
            </td>
 +
          </tr>
 +
          <tr>
 +
            <td><br>
 +
            </td>
 +
            <td align="center">&lt;-</td>
 +
            <td>MID 5<br>
 +
            </td>
 +
            <td valign="top">Command accepted<br>
 +
            </td>
 +
          </tr>
 +
          <tr>
 +
            <td>MID 18<br>
 +
            </td>
 +
            <td align="center">-&gt;</td>
 +
            <td><br>
 +
            </td>
 +
            <td valign="top">Select Parameter set </td>
 +
          </tr>
 +
          <tr>
 +
            <td><br>
 +
            </td>
 +
            <td align="center">&lt;-</td>
 +
            <td>MID 5</td>
 +
            <td valign="top">Command accepted</td>
 +
          </tr>
 +
          <tr>
 +
            <td><br>
 +
            </td>
 +
            <td align="center">&lt;-</td>
 +
            <td>MID 15</td>
 +
            <td valign="top">Parameter set selected</td>
 +
          </tr>
 +
          <tr>
 +
            <td valign="top">MID 43<br>
 +
            </td>
 +
            <td valign="top" align="center">-&gt;<br>
 +
            </td>
 +
            <td valign="top"><br>
 +
            </td>
 +
            <td valign="top">Enable tool<br>
 +
            </td>
 +
          </tr>
 +
          <tr>
 +
            <td valign="top"><br>
 +
            </td>
 +
            <td valign="top" align="center">&lt;-<br>
 +
            </td>
 +
            <td valign="top">MID 5<br>
 +
            </td>
 +
            <td valign="top">Command accepted</td>
 +
          </tr>
 +
          <tr>
 +
            <td valign="top"><br>
 +
            </td>
 +
            <td valign="top" align="center">&lt;-<br>
 +
            </td>
 +
            <td valign="top">MID 61<br>
 +
            </td>
 +
            <td valign="top">Last tightening result data</td>
 +
          </tr>
 +
          <tr>
 +
            <td valign="top"><br>
 +
            </td>
 +
            <td valign="top" align="center">&lt;-<br>
 +
            </td>
 +
            <td valign="top">MID 61</td>
 +
            <td valign="top">Last tightening result data</td>
 +
          </tr>
 +
          <tr>
 +
            <td valign="top"><br>
 +
            </td>
 +
            <td valign="top" align="center">&lt;-<br>
 +
            </td>
 +
            <td valign="top">MID 61</td>
 +
            <td valign="top">Last tightening result data</td>
 +
          </tr>
 +
          <tr>
 +
            <td valign="top">MID 42<br>
 +
            </td>
 +
            <td valign="top" align="center">-&gt;</td>
 +
            <td valign="top"><br>
 +
            </td>
 +
            <td valign="top">Disable tool</td>
 +
          </tr>
 +
          <tr>
 +
            <td valign="top"><br>
 +
            </td>
 +
            <td valign="top" align="center">&lt;-</td>
 +
            <td valign="top">MID 5<br>
 +
            </td>
 +
            <td valign="top">Command accepted</td>
 +
          </tr>
 +
      </table>
 +
<br>
 +
<br>
 +
A typical conversation using jobs looks like this:<br>
 +
<br>
 +
      <table cellspacing="2" cellpadding="2" width="647" border="1"
 +
        height="471">
 +
          <tr>
 +
            <td><b>PC</b></td>
 +
            <td align="center"><b>direction</b></td>
 +
            <td><b>controller</b></td>
 +
            <td valign="top"><b>meaning</b><br>
 +
            </td>
 +
          </tr>
 +
          <tr>
 +
            <td>MID 42<br>
 +
            </td>
 +
            <td align="center">-&gt;</td>
 +
            <td><br>
 +
            </td>
 +
            <td valign="top">Disable tool<br>
 +
            </td>
 +
          </tr>
 +
          <tr>
 +
            <td><br>
 +
            </td>
 +
            <td align="center">&lt;-</td>
 +
            <td>MID 5<br>
 +
            </td>
 +
            <td valign="top">Command accepted<br>
 +
            </td>
 +
          </tr>
 +
          <tr>
 +
            <td>MID 127<br>
 +
            </td>
 +
            <td align="center">-&gt;</td>
 +
            <td><br>
 +
            </td>
 +
            <td valign="top">Abort job<br>
 +
            </td>
 +
          </tr>
 +
          <tr>
 +
            <td><br>
 +
            </td>
 +
            <td align="center">&lt;-</td>
 +
            <td>MID 5</td>
 +
            <td valign="top">Command accepted</td>
 +
          </tr>
 +
          <tr>
 +
            <td>MID 38<br>
 +
            </td>
 +
            <td align="center">-&gt;</td>
 +
            <td><br>
 +
            </td>
 +
            <td valign="top">Select job<br>
 +
            </td>
 +
          </tr>
 +
          <tr>
 +
            <td><br>
 +
            </td>
 +
            <td align="center">&lt;-</td>
 +
            <td>MID 5</td>
 +
            <td valign="top">Command accepted</td>
 +
          </tr>
 +
          <tr>
 +
            <td>MID 37</td>
 +
            <td align="center">-&gt;</td>
 +
            <td><br>
 +
            </td>
 +
            <td valign="top">Job info unsubscribe</td>
 +
          </tr>
 +
          <tr>
 +
            <td><br>
 +
            </td>
 +
            <td align="center">&lt;-</td>
 +
            <td>MID 5</td>
 +
            <td valign="top">Command accepted</td>
 +
          </tr>
 +
          <tr>
 +
            <td>MID 34</td>
 +
            <td align="center">-&gt;</td>
 +
            <td><br>
 +
            </td>
 +
            <td valign="top">Job info subscribe</td>
 +
          </tr>
 +
          <tr>
 +
            <td><br>
 +
            </td>
 +
            <td align="center">&lt;-</td>
 +
            <td>MID 5</td>
 +
            <td valign="top">Command accepted</td>
 +
          </tr>
 +
          <tr>
 +
            <td valign="top"><br>
 +
            </td>
 +
            <td valign="top" align="center">&lt;-<br>
 +
            </td>
 +
            <td valign="top">MID 35<br>
 +
            </td>
 +
            <td valign="top">Job info<br>
 +
            </td>
 +
          </tr>
 +
          <tr>
 +
            <td valign="top">MID 43<br>
 +
            </td>
 +
            <td valign="top" align="center">-&gt;<br>
 +
            </td>
 +
            <td valign="top"><br>
 +
            </td>
 +
            <td valign="top">Enable tool<br>
 +
            </td>
 +
          </tr>
 +
          <tr>
 +
            <td valign="top"><br>
 +
            </td>
 +
            <td valign="top" align="center">&lt;-<br>
 +
            </td>
 +
            <td valign="top">MID 5<br>
 +
            </td>
 +
            <td valign="top">Command accepted</td>
 +
          </tr>
 +
          <tr>
 +
            <td valign="top"><br>
 +
            </td>
 +
            <td valign="top" align="center">&lt;-<br>
 +
            </td>
 +
            <td valign="top">MID 61<br>
 +
            </td>
 +
            <td valign="top">Last tightening result data</td>
 +
          </tr>
 +
          <tr>
 +
            <td valign="top"><br>
 +
            </td>
 +
            <td valign="top" align="center">&lt;-<br>
 +
            </td>
 +
            <td valign="top">MID 61</td>
 +
            <td valign="top">Last tightening result data</td>
 +
          </tr>
 +
          <tr>
 +
            <td valign="top"><br>
 +
            </td>
 +
            <td valign="top" align="center">&lt;-<br>
 +
            </td>
 +
            <td valign="top">MID 61</td>
 +
            <td valign="top">Last tightening result data</td>
 +
          </tr>
 +
          <tr>
 +
            <td valign="top">MID 42<br>
 +
            </td>
 +
            <td valign="top" align="center">-&gt;</td>
 +
            <td valign="top"><br>
 +
            </td>
 +
            <td valign="top">Disable tool</td>
 +
          </tr>
 +
          <tr>
 +
            <td valign="top"><br>
 +
            </td>
 +
            <td valign="top" align="center">&lt;-</td>
 +
            <td valign="top">MID 5<br>
 +
            </td>
 +
            <td valign="top">Command accepted</td>
 +
          </tr>
 +
      </table>
 +
<br>
 +
<br>
 +
We need to send "Abort job" before selecting one to make sure there is no job in progress.<br>
 +
Also the unsubscribe/subscribe trick is used to force sending "Job info" even if the job isn't changed, we need this message as a confirmation of successful job selection and as a flag we are good to enable the tool (Only Stanley controllers need this trick, AtlasCopco sends "Job info" in all cases after "Select job").<br>
 +
<br>
 +
      <hr size="2" width="100%"><br>
 +
== Georges Renault : ==
== Georges Renault : ==
Line 51: Line 557:
== Stanley : ==
== Stanley : ==
-
As Atlas Copco 3000 + these parameter are also available:
+
As Atlas Copco 3000 + these parameters are also available:
<pre>
<pre>

Current revision as of 10:36, 13 January 2020

The most important properties of a tightening machine defined as a PLC device are its name and channelnumber. These two entries uniquely identify a tightening machine or its spidle.

channelnumber is a logical ID of single tightening spindle connected to a PLC client. It can be any non-zero positive integer as it's only purpose is to assign the tightening tool to appropriate operation. It has no other meaning.

Be aware to use channelnumber setting, not channel. channel is a deprecated setting with many side effects and should not be used anymore.

When a tightening machine has more than one spindle, this setting applies to the first of them. Other spindles' channelnumbers are assigned in sequential order. E.g. if this option is set to 3 and the machine has 2 spindles, then the first spindle has the channelnumber 3 and the second one has the channelnumber 4. The next usable channenumber value is 5.

.settings.channelnumber should match operation's .ChannelNumber value and the device name (i.e. tmachine_1) should match operation's .Device value.

Contents

CLEVER & OpenProtocol

Generally we send these messages to controllers however it also depends on the configuration:

MID 1 (rev 3) Communication start
MID 60 (rev 2) Last tightening result data subscribe
MID 14 Parameter set selected subscribe
MID 17
Parameter set selected unsubscribe
MID 34 Job info subscribe
MID 37
Job info unsubscribe
MID 70
Alarm subscribe
MID 18 Select Parameter set
MID 38
Select job
MID 127
Abort job
MID 16 Parameter set selected acknowledge
MID 43 Enable tool
MID 42 Disable tool
MID 9999 Keep alive message
MID 62 Last tightening result data acknowledge
MID 50
Vehicle ID Number download request
MID 19
Set Parameter set batch size
MID 224
Set digital input function


We accept any MID from the controller, the most important MIDs for us are these:


MID 5 Command accepted
MID 61 Last tightening result data
MID 15 Parameter set selected
MID 35 Job info






The communication starts like this:


PC direction controller meaning
MID 1 ->
Communication start

<- MID 2 Communication start acknowledge
MID 60 ->
Last tightening result data subscribe

<- MID 5 Command accepted
MID 14 ->
Parameter set selected subscribe

<- MID 5 Command accepted
MID 34 ->
Job info subscribe

<- MID 5 Command accepted
MID 70 ->
Alarm subscribe

<- MID 5 Command accepted

That's the initial handshake.

Then communication is driven by the needs of the client.

A typical conversation using parameter sets looks like this:

PC direction controller meaning
MID 42
->
Disable tool

<- MID 5
Command accepted
MID 18
->
Select Parameter set

<- MID 5 Command accepted

<- MID 15 Parameter set selected
MID 43
->

Enable tool

<-
MID 5
Command accepted

<-
MID 61
Last tightening result data

<-
MID 61 Last tightening result data

<-
MID 61 Last tightening result data
MID 42
->
Disable tool

<- MID 5
Command accepted



A typical conversation using jobs looks like this:

PC direction controller meaning
MID 42
->
Disable tool

<- MID 5
Command accepted
MID 127
->
Abort job

<- MID 5 Command accepted
MID 38
->
Select job

<- MID 5 Command accepted
MID 37 ->
Job info unsubscribe

<- MID 5 Command accepted
MID 34 ->
Job info subscribe

<- MID 5 Command accepted

<-
MID 35
Job info
MID 43
->

Enable tool

<-
MID 5
Command accepted

<-
MID 61
Last tightening result data

<-
MID 61 Last tightening result data

<-
MID 61 Last tightening result data
MID 42
->
Disable tool

<- MID 5
Command accepted



We need to send "Abort job" before selecting one to make sure there is no job in progress.
Also the unsubscribe/subscribe trick is used to force sending "Job info" even if the job isn't changed, we need this message as a confirmation of successful job selection and as a flag we are good to enable the tool (Only Stanley controllers need this trick, AtlasCopco sends "Job info" in all cases after "Select job").




Georges Renault :

# Georges Renault
#include "drivers/GR_IXPIO_COMBO.inc"
workplace.devicehub.tmachine_io_combo_1 = yes
workplace.devicehub.tmachine_io_combo_1.settings.debug_mode = yes
workplace.devicehub.tmachine_io_combo_1.high_level.device.tmachine_1.settings.channelnumber = 1

# Only results from given spindle are delivered
workplace.devicehub.tmachine_io_combo_1.high_level.device.tmachine_1.settings.accept_spindle = 2

# Spindle reported by the tightening machine will be overridden by given value
workplace.devicehub.tmachine_io_combo_1.high_level.device.tmachine_1.settings.spindle_override = 1

Atlas Copco 3000 :

#include "/usr/local/plc/etc/drivers/AC3000_R2.drv"
#include "/usr/local/plc/etc/drivers/AC3000E_R2.drv"
workplace.device.ac3000_1 = yes
workplace.device.ac3000_1.driver = AC3000E_R2
#workplace.device.ac3000_1.driver = AC3000_R2
workplace.device.ac3000_1.settings.host = 10.8.4.180
#workplace.device.ac3000_1.settings.tty = /dev/ttyS1
workplace.device.ac3000_1.settings.log_file = /usr/local/plc/log/ac3000_1.log
workplace.device.ac3000_1.settings.debug_mode = yes
workplace.device.ac3000_1.settings.channelnumber = 1

Atlas Copco 6000 :

As Atlas Copco 3000 + this additional line:

workplace.device.ac6000_1.settings.ac6000_mode = yes

Stanley :

As Atlas Copco 3000 + these parameters are also available:

workplace.device.ac3000_1.settings.ac3000_spindle = 01
workplace.device.ac3000_1.settings.ac3000_scanner = yes

Desoutter

#include "/usr/local/plc/etc/drivers/AC3000E.drv"
workplace.device.ac3000_dessoutter = yes
workplace.device.ac3000_dessoutter.driver = AC3000E
workplace.device.ac3000_dessoutter.settings.host = 192.168.1.10
workplace.device.ac3000_dessoutter.settings.log_file = /usr/local/plc/log/tmachine_dessoutter.log
workplace.device.ac3000_dessoutter.settings.debug_mode = yes
workplace.device.ac3000_dessoutter.settings.channelnumber = 1
workplace.device.ac3000_dessoutter.settings.requestresenddelay = 0
workplace.device.ac3000_dessoutter.settings.waitforgroupchange = no
workplace.device.ac3000_dessoutter.settings.commstart_revision = 1
#workplace.device.ac3000_dessoutter.settings.looseningjobnumber = 07
Personal tools