New functions

This commit is contained in:
Felix Weiß
2023-07-23 15:29:29 +02:00
parent eec1479406
commit bf78156a9d
17 changed files with 701 additions and 175 deletions

View File

@@ -1,5 +1,5 @@
# PLC Type Table
Auto Generated @ **2023-07-21 16:30:21Z**
Auto Generated @ **2023-07-22 17:21:07Z**
All supported PLC types for auto recognition are listed in this table. Other ones might also be supported but are shown as unknown in the library. Some models are never uniquely identifiable by their typecode and need extra hints like Prog Capacity in EXRT or RT.
@@ -7,9 +7,9 @@ Typecode explained:
```
From left to right
0x
07 <= extended code (00 non mewtocol 7 devices)
20 <= Is hex for 32 (Prog capacity)
A5 <= Is the actual typecode, can overlap with others
07 <= extended code (00 for non Mewtocol 7 devices)
0120 <= for 120k (Prog capacity), with RT/EXRT/MEW7 override order
A5 <= Is the actual typecode, with RT/EXRT/MEW7 override order
```
> <b>Discontinued PLCs</b><br>
> These are PLCs that are no longer sold by Panasonic. Marked with ⚠️
@@ -33,7 +33,7 @@ A5 <= Is the actual typecode, can overlap with others
<tr>
<td> ELC500 </td>
<td> 0k </td>
<td><code>0x070010</code></td>
<td><code>0x7000010</code></td>
<td><i>ECOLOGIX_0k__ELC500</i></td>
<td align=center>⚠️</td>
<td align=center> ❌ </td>
@@ -48,26 +48,26 @@ A5 <= Is the actual typecode, can overlap with others
<td><code>0x000340</code></td>
<td><i>FP0_2c7k__C10_C14_C16</i></td>
<td align=center>⚠️</td>
<td align=center> </td>
<td align=center> </td>
<td align=center> </td>
<td align=center> </td>
</tr>
<tr>
<td> C32, SL1 </td>
<td> 5k </td>
<td><code>0x000041</code></td>
<td><code>0x000541</code></td>
<td><i>FP0_5k__C32_SL1</i></td>
<td align=center>⚠️</td>
<td align=center> </td>
<td align=center> </td>
<td align=center> </td>
<td align=center> </td>
</tr>
<tr>
<td> T32 </td>
<td> 10k </td>
<td><code>0x000A42</code></td>
<td><code>0x001042</code></td>
<td><i>FP0_10c0k__T32</i></td>
<td align=center>⚠️</td>
<td align=center> </td>
<td align=center> </td>
<td align=center> </td>
<td align=center> </td>
</tr>
<tr>
<td colspan="7" height=50>📟 <b>FP0H</b> </td>
@@ -75,7 +75,7 @@ A5 <= Is the actual typecode, can overlap with others
<tr>
<td> C32ET/EP </td>
<td> 32k </td>
<td><code>0x0020B1</code></td>
<td><code>0x0032B1</code></td>
<td colspan="2"><i>FP0H_32k__C32ETsEP</i></td>
<td align=center> ✅ </td>
<td align=center> ❌ </td>
@@ -83,7 +83,7 @@ A5 <= Is the actual typecode, can overlap with others
<tr>
<td> C32T/P </td>
<td> 32k </td>
<td><code>0x0020B0</code></td>
<td><code>0x0032B0</code></td>
<td colspan="2"><i>FP0H_32k__C32TsP</i></td>
<td align=center> ✅ </td>
<td align=center> ❌ </td>
@@ -94,34 +94,34 @@ A5 <= Is the actual typecode, can overlap with others
<tr>
<td> C10, C14, C16 </td>
<td> 16k </td>
<td><code>0x000046</code></td>
<td><code>0x001646</code></td>
<td colspan="2"><i>FP0R_16k__C10_C14_C16</i></td>
<td align=center> ✅ </td>
<td align=center> </td>
<td align=center> </td>
</tr>
<tr>
<td> C32 </td>
<td> 32k </td>
<td><code>0x002047</code></td>
<td><code>0x003247</code></td>
<td colspan="2"><i>FP0R_32k__C32</i></td>
<td align=center> ✅ </td>
<td align=center> </td>
<td align=center> </td>
</tr>
<tr>
<td> F32 </td>
<td> 32k </td>
<td><code>0x002049</code></td>
<td><code>0x003249</code></td>
<td colspan="2"><i>FP0R_32k__F32</i></td>
<td align=center> ✅ </td>
<td align=center> </td>
<td align=center> </td>
</tr>
<tr>
<td> T32 </td>
<td> 32k </td>
<td><code>0x002048</code></td>
<td><code>0x003248</code></td>
<td colspan="2"><i>FP0R_32k__T32</i></td>
<td align=center> ✅ </td>
<td align=center> </td>
<td align=center> </td>
</tr>
<tr>
<td colspan="7" height=50>📟 <b>FP1</b> </td>
@@ -147,7 +147,7 @@ A5 <= Is the actual typecode, can overlap with others
<tr>
<td> C56, C72 </td>
<td> 5k </td>
<td><code>0x000006</code></td>
<td><code>0x000506</code></td>
<td><i>FP1_5k__C56_C72</i></td>
<td align=center>⚠️</td>
<td align=center> ❌ </td>
@@ -159,7 +159,7 @@ A5 <= Is the actual typecode, can overlap with others
<tr>
<td> - </td>
<td> 30k </td>
<td><code>0x001E20</code></td>
<td><code>0x003020</code></td>
<td><i>FP10_30k</i></td>
<td align=center>⚠️</td>
<td align=center> ❌ </td>
@@ -168,7 +168,7 @@ A5 <= Is the actual typecode, can overlap with others
<tr>
<td> - </td>
<td> 60k </td>
<td><code>0x003C20</code></td>
<td><code>0x006020</code></td>
<td><i>FP10_60k</i></td>
<td align=center>⚠️</td>
<td align=center> ❌ </td>
@@ -180,7 +180,7 @@ A5 <= Is the actual typecode, can overlap with others
<tr>
<td> - </td>
<td> 30k </td>
<td><code>0x001E20</code></td>
<td><code>0x003020</code></td>
<td><i>FP10S_30k</i></td>
<td align=center>⚠️</td>
<td align=center> ❌ </td>
@@ -192,28 +192,28 @@ A5 <= Is the actual typecode, can overlap with others
<tr>
<td> - </td>
<td> 30k </td>
<td><code>0x001E30</code></td>
<td><code>0x003030</code></td>
<td><i>FP10SH_30k</i></td>
<td align=center>⚠️</td>
<td align=center> </td>
<td align=center> </td>
<td align=center> ❌ </td>
</tr>
<tr>
<td> - </td>
<td> 60k </td>
<td><code>0x003C30</code></td>
<td><code>0x006030</code></td>
<td><i>FP10SH_60k</i></td>
<td align=center>⚠️</td>
<td align=center> </td>
<td align=center> </td>
<td align=center> ❌ </td>
</tr>
<tr>
<td> - </td>
<td> 120k </td>
<td><code>0x007830</code></td>
<td><code>0x012030</code></td>
<td><i>FP10SH_120k</i></td>
<td align=center>⚠️</td>
<td align=center> </td>
<td align=center> </td>
<td align=center> ❌ </td>
</tr>
<tr>
@@ -222,20 +222,20 @@ A5 <= Is the actual typecode, can overlap with others
<tr>
<td> - </td>
<td> 16k </td>
<td><code>0x001050</code></td>
<td><code>0x001650</code></td>
<td><i>FP2_16k</i></td>
<td align=center>⚠️</td>
<td align=center> </td>
<td align=center> </td>
<td align=center> </td>
<td align=center> </td>
</tr>
<tr>
<td> - </td>
<td> 32k </td>
<td><code>0x002050</code></td>
<td><code>0x003250</code></td>
<td><i>FP2_32k</i></td>
<td align=center>⚠️</td>
<td align=center> </td>
<td align=center> </td>
<td align=center> </td>
<td align=center> </td>
</tr>
<tr>
<td colspan="7" height=50>📟 <b>FP2SH</b> </td>
@@ -243,25 +243,25 @@ A5 <= Is the actual typecode, can overlap with others
<tr>
<td> - </td>
<td> 32k </td>
<td><code>0x002062</code></td>
<td><code>0x003262</code></td>
<td><i>FP2SH_32k</i></td>
<td align=center>⚠️</td>
<td align=center> ✅ </td>
<td align=center> </td>
<td align=center> </td>
</tr>
<tr>
<td> - </td>
<td> 60k </td>
<td><code>0x003C60</code></td>
<td><code>0x006060</code></td>
<td><i>FP2SH_60k</i></td>
<td align=center>⚠️</td>
<td align=center> ✅ </td>
<td align=center> </td>
<td align=center> </td>
</tr>
<tr>
<td> - </td>
<td> 120k </td>
<td><code>0x0078E0</code></td>
<td><code>0x012060</code></td>
<td><i>FP2SH_120k</i></td>
<td align=center>⚠️</td>
<td align=center> ✅ </td>
@@ -273,7 +273,7 @@ A5 <= Is the actual typecode, can overlap with others
<tr>
<td> - </td>
<td> 10k </td>
<td><code>0x000A03</code></td>
<td><code>0x001003</code></td>
<td><i>FP3_10k</i></td>
<td align=center>⚠️</td>
<td align=center> ❌ </td>
@@ -282,7 +282,7 @@ A5 <= Is the actual typecode, can overlap with others
<tr>
<td> - </td>
<td> 16k </td>
<td><code>0x001013</code></td>
<td><code>0x001613</code></td>
<td><i>FP3_16k</i></td>
<td align=center>⚠️</td>
<td align=center> ❌ </td>
@@ -294,7 +294,7 @@ A5 <= Is the actual typecode, can overlap with others
<tr>
<td> - </td>
<td> 16k </td>
<td><code>0x001002</code></td>
<td><code>0x001602</code></td>
<td><i>FP5_16k</i></td>
<td align=center>⚠️</td>
<td align=center> ❌ </td>
@@ -303,7 +303,7 @@ A5 <= Is the actual typecode, can overlap with others
<tr>
<td> - </td>
<td> 24k </td>
<td><code>0x001812</code></td>
<td><code>0x002412</code></td>
<td><i>FP5_24k</i></td>
<td align=center>⚠️</td>
<td align=center> ❌ </td>
@@ -315,7 +315,7 @@ A5 <= Is the actual typecode, can overlap with others
<tr>
<td> CPS21 </td>
<td> 64k </td>
<td><code>0x074009</code></td>
<td><code>0x7006409</code></td>
<td colspan="2"><i>FP7_64k__CPS21</i></td>
<td align=center> ❌ </td>
<td align=center> ❌ </td>
@@ -323,7 +323,7 @@ A5 <= Is the actual typecode, can overlap with others
<tr>
<td> CPS31 </td>
<td> 120k </td>
<td><code>0x077805</code></td>
<td><code>0x7012005</code></td>
<td colspan="2"><i>FP7_120k__CPS31</i></td>
<td align=center> ❌ </td>
<td align=center> ❌ </td>
@@ -331,7 +331,7 @@ A5 <= Is the actual typecode, can overlap with others
<tr>
<td> CPS31E </td>
<td> 120k </td>
<td><code>0x077804</code></td>
<td><code>0x7012004</code></td>
<td colspan="2"><i>FP7_120k__CPS31E</i></td>
<td align=center> ❌ </td>
<td align=center> ❌ </td>
@@ -339,7 +339,7 @@ A5 <= Is the actual typecode, can overlap with others
<tr>
<td> CPS31ES </td>
<td> 120k </td>
<td><code>0x077807</code></td>
<td><code>0x7012007</code></td>
<td colspan="2"><i>FP7_120k__CPS31ES</i></td>
<td align=center> ❌ </td>
<td align=center> ❌ </td>
@@ -347,7 +347,7 @@ A5 <= Is the actual typecode, can overlap with others
<tr>
<td> CPS31S </td>
<td> 120k </td>
<td><code>0x077808</code></td>
<td><code>0x7012008</code></td>
<td colspan="2"><i>FP7_120k__CPS31S</i></td>
<td align=center> ❌ </td>
<td align=center> ❌ </td>
@@ -355,7 +355,7 @@ A5 <= Is the actual typecode, can overlap with others
<tr>
<td> CPS41E </td>
<td> 196k </td>
<td><code>0x07C403</code></td>
<td><code>0x7019603</code></td>
<td colspan="2"><i>FP7_196k__CPS41E</i></td>
<td align=center> ❌ </td>
<td align=center> ❌ </td>
@@ -363,7 +363,7 @@ A5 <= Is the actual typecode, can overlap with others
<tr>
<td> CPS41ES </td>
<td> 196k </td>
<td><code>0x07C406</code></td>
<td><code>0x7019606</code></td>
<td colspan="2"><i>FP7_196k__CPS41ES</i></td>
<td align=center> ❌ </td>
<td align=center> ❌ </td>
@@ -374,7 +374,7 @@ A5 <= Is the actual typecode, can overlap with others
<tr>
<td> - </td>
<td> 16k </td>
<td><code>0x001013</code></td>
<td><code>0x001613</code></td>
<td><i>FPdC_16k</i></td>
<td align=center>⚠️</td>
<td align=center> ❌ </td>
@@ -416,7 +416,7 @@ A5 <= Is the actual typecode, can overlap with others
<tr>
<td> C20RC, C20TC, C32TC </td>
<td> 5k </td>
<td><code>0x000006</code></td>
<td><code>0x000506</code></td>
<td><i>FPdM_5k__C20RC_C20TC_C32TC</i></td>
<td align=center>⚠️</td>
<td align=center> ❌ </td>
@@ -428,7 +428,7 @@ A5 <= Is the actual typecode, can overlap with others
<tr>
<td> - </td>
<td> 12k </td>
<td><code>0x000C43</code></td>
<td><code>0x001243</code></td>
<td><i>FPdSIGMA_12k</i></td>
<td align=center>⚠️</td>
<td align=center> ✅ </td>
@@ -437,7 +437,7 @@ A5 <= Is the actual typecode, can overlap with others
<tr>
<td> - </td>
<td> 16k </td>
<td><code>0x0010E1</code></td>
<td><code>0x0016E1</code></td>
<td><i>FPdSIGMA_16k</i></td>
<td align=center>⚠️</td>
<td align=center> ✅ </td>
@@ -446,16 +446,16 @@ A5 <= Is the actual typecode, can overlap with others
<tr>
<td> - </td>
<td> 32k </td>
<td><code>0x002044</code></td>
<td><code>0x003244</code></td>
<td><i>FPdSIGMA_32k</i></td>
<td align=center>⚠️</td>
<td align=center> ✅ </td>
<td align=center> </td>
<td align=center> </td>
</tr>
<tr>
<td> - </td>
<td> 40k </td>
<td><code>0x0028E1</code></td>
<td><code>0x0040E1</code></td>
<td><i>FPdSIGMA_40k</i></td>
<td align=center>⚠️</td>
<td align=center> ✅ </td>
@@ -476,7 +476,7 @@ A5 <= Is the actual typecode, can overlap with others
<tr>
<td> C14R </td>
<td> 16k </td>
<td><code>0x001070</code></td>
<td><code>0x001670</code></td>
<td><i>FPdX_16k__C14R</i></td>
<td align=center>⚠️</td>
<td align=center> ✅ </td>
@@ -485,7 +485,7 @@ A5 <= Is the actual typecode, can overlap with others
<tr>
<td> C14T/P </td>
<td> 16k </td>
<td><code>0x001076</code></td>
<td><code>0x001676</code></td>
<td><i>FPdX_16k__C14TsP</i></td>
<td align=center>⚠️</td>
<td align=center> ✅ </td>
@@ -494,7 +494,7 @@ A5 <= Is the actual typecode, can overlap with others
<tr>
<td> L14 </td>
<td> 16k </td>
<td><code>0x001073</code></td>
<td><code>0x001673</code></td>
<td><i>FPdX_16k__L14</i></td>
<td align=center>⚠️</td>
<td align=center> ✅ </td>
@@ -503,7 +503,7 @@ A5 <= Is the actual typecode, can overlap with others
<tr>
<td> C30R, C60R </td>
<td> 32k </td>
<td><code>0x002071</code></td>
<td><code>0x003271</code></td>
<td><i>FPdX_32k__C30R_C60R</i></td>
<td align=center>⚠️</td>
<td align=center> ✅ </td>
@@ -512,7 +512,7 @@ A5 <= Is the actual typecode, can overlap with others
<tr>
<td> C30T/P, C60T/P, C38AT, C40T </td>
<td> 32k </td>
<td><code>0x002077</code></td>
<td><code>0x003277</code></td>
<td><i>FPdX_32k__C30TsP_C60TsP_C38AT_C40T</i></td>
<td align=center>⚠️</td>
<td align=center> ✅ </td>
@@ -521,7 +521,7 @@ A5 <= Is the actual typecode, can overlap with others
<tr>
<td> L30, L60 </td>
<td> 32k </td>
<td><code>0x002074</code></td>
<td><code>0x003274</code></td>
<td><i>FPdX_32k__L30_L60</i></td>
<td align=center>⚠️</td>
<td align=center> ✅ </td>
@@ -551,7 +551,7 @@ A5 <= Is the actual typecode, can overlap with others
<tr>
<td> L40, L60 </td>
<td> 16k </td>
<td><code>0x00107F</code></td>
<td><code>0x00167F</code></td>
<td><i>FPdX0_16k__L40_L60</i></td>
<td align=center>⚠️</td>
<td align=center> ✅ </td>
@@ -563,7 +563,7 @@ A5 <= Is the actual typecode, can overlap with others
<tr>
<td> C14R </td>
<td> 16k </td>
<td><code>0x0010A0</code></td>
<td><code>0x0016A0</code></td>
<td colspan="2"><i>FPdXH_16k__C14R</i></td>
<td align=center> ✅ </td>
<td align=center> ✅ </td>
@@ -571,7 +571,7 @@ A5 <= Is the actual typecode, can overlap with others
<tr>
<td> C14T/P </td>
<td> 16k </td>
<td><code>0x0010A4</code></td>
<td><code>0x0016A4</code></td>
<td colspan="2"><i>FPdXH_16k__C14TsP</i></td>
<td align=center> ✅ </td>
<td align=center> ❌ </td>
@@ -579,7 +579,7 @@ A5 <= Is the actual typecode, can overlap with others
<tr>
<td> C30R, C40R, C60R </td>
<td> 32k </td>
<td><code>0x0020A1</code></td>
<td><code>0x0032A1</code></td>
<td colspan="2"><i>FPdXH_32k__C30R_C40R_C60R</i></td>
<td align=center> ✅ </td>
<td align=center> ❌ </td>
@@ -587,7 +587,7 @@ A5 <= Is the actual typecode, can overlap with others
<tr>
<td> C30T/P, C40T, C60T/P </td>
<td> 32k </td>
<td><code>0x0020A5</code></td>
<td><code>0x0032A5</code></td>
<td colspan="2"><i>FPdXH_32k__C30TsP_C40T_C60TsP</i></td>
<td align=center> ✅ </td>
<td align=center> ✅ </td>
@@ -595,7 +595,7 @@ A5 <= Is the actual typecode, can overlap with others
<tr>
<td> C38AT </td>
<td> 32k </td>
<td><code>0x0020A7</code></td>
<td><code>0x0032A7</code></td>
<td colspan="2"><i>FPdXH_32k__C38AT</i></td>
<td align=center> ✅ </td>
<td align=center> ❌ </td>
@@ -603,7 +603,7 @@ A5 <= Is the actual typecode, can overlap with others
<tr>
<td> C40ET, C60ET </td>
<td> 32k </td>
<td><code>0x0020AE</code></td>
<td><code>0x0032AE</code></td>
<td colspan="2"><i>FPdXH_32k__C40ET_C60ET</i></td>
<td align=center> ✅ </td>
<td align=center> ❌ </td>
@@ -611,7 +611,7 @@ A5 <= Is the actual typecode, can overlap with others
<tr>
<td> C60ETF </td>
<td> 32k </td>
<td><code>0x0020AF</code></td>
<td><code>0x0032AF</code></td>
<td colspan="2"><i>FPdXH_32k__C60ETF</i></td>
<td align=center> ✅ </td>
<td align=center> ❌ </td>
@@ -619,7 +619,7 @@ A5 <= Is the actual typecode, can overlap with others
<tr>
<td> M4T/L </td>
<td> 32k </td>
<td><code>0x0020A8</code></td>
<td><code>0x0032A8</code></td>
<td colspan="2"><i>FPdXH_32k__M4TsL</i></td>
<td align=center> ✅ </td>
<td align=center> ❌ </td>
@@ -627,7 +627,7 @@ A5 <= Is the actual typecode, can overlap with others
<tr>
<td> M8N16T/P </td>
<td> 32k </td>
<td><code>0x0020AC</code></td>
<td><code>0x0032AC</code></td>
<td colspan="2"><i>FPdXH_32k__M8N16TsP</i></td>
<td align=center> ✅ </td>
<td align=center> ❌ </td>
@@ -635,7 +635,7 @@ A5 <= Is the actual typecode, can overlap with others
<tr>
<td> M8N30T </td>
<td> 32k </td>
<td><code>0x0020AD</code></td>
<td><code>0x0032AD</code></td>
<td colspan="2"><i>FPdXH_32k__M8N30T</i></td>
<td align=center> ✅ </td>
<td align=center> ❌ </td>

View File

@@ -0,0 +1,2 @@
# Reading and writing programs

View File

@@ -145,6 +145,111 @@ FP-XH 16k C14R
| 2819 | System register size
| 20130000080070004 | ?
## FP0 5k C32,SL1
### %EE$RT
|Reponse Byte|Description|
|------------|-----------|
| 06 | Model code |
| 12 | Version |
| 05 | Prog capacity |
| 82 | Op mode |
| 00 | Link unit |
| 00 | Error flag |
| 0000 | Self diag error |
### %EE$EX00RT
|Reponse Byte|Description|
|------------|-----------|
| 00 | Extended mode
| 32 | Data item count
| 41 | Machine type
| 00 | Version (Fixed to 00)
| 03 | Prog capacity in K
| 82 | Operation mode / status
| 00 | Link unit
| 00 | Error flag
| 0000 | Self diag error
| 23 | Version
| 01 | Hardware information
| 0 | Number of programs
| 4100 | Program size BCD
| 0501 | Header size (no. of words) bcd
| 2819 | System register size
| 20130000080070004 | ?
## FP0 10k
### %EE$RT
|Reponse Byte|Description|
|------------|-----------|
| 42 | Model code |
| 12 | Version |
| 10 | Prog capacity |
| 82 | Op mode |
| 00 | Link unit |
| 00 | Error flag |
| 0000 | Self diag error |
### %EE$EX00RT
|Reponse Byte|Description|
|------------|-----------|
| 00 | Extended mode
| 32 | Data item count
| 42 | Machine type
| 00 | Version (Fixed to 00)
| 10 | Prog capacity in K
| 82 | Operation mode / status
| 00 | Link unit
| 00 | Error flag
| 0000 | Self diag error
| 23 | Version
| 01 | Hardware information
| 0 | Number of programs
| 4100 | Program size BCD
| 1001 | Header size (no. of words) bcd
| 2819 | System register size
| 20130000080070004 | ?
## FP2SH 60k
### %EE$RT
|Reponse Byte|Description|
|------------|-----------|
| 60 | Model code |
| 12 | Version |
| 00 | Prog capacity |
| 82 | Op mode |
| 00 | Link unit |
| 00 | Error flag |
| 0000 | Self diag error |
### %EE$EX00RT
|Reponse Byte|Description|
|------------|-----------|
| 00 | Extended mode
| 32 | Data item count
| 60 | Machine type
| 00 | Version (Fixed to 00)
| 00 | Prog capacity in K
| 82 | Operation mode / status
| 00 | Link unit
| 00 | Error flag
| 0000 | Self diag error
| 23 | Version
| 01 | Hardware information
| 0 | Number of programs
| 4100 | Program size BCD
| 6001 | Header size (no. of words) bcd
| 2819 | System register size
| 20130000000080004 | ?
# Mewtocol-7 Com
## Getting the status of the plc

View File

@@ -0,0 +1,16 @@
3 byte system registers, read with RR
|RR Adress|Interpreting type|Description|
|-|-|-|
|RR000|uint16|Program size steps capacity|
|RR005|uint16|Start address counter|
|RR006|uint16|Start address timer/counter|
|RR007|uint16|Start WR area (self reliant)|
|RR008 - RR009|uint32|Start DT area (self reliant)|
4 byte / 1 word system registers read with R
|WR Adress|Interpreting type|Description|
|-|-|-|
|R900|uint16|Self diag error|
|R902|uint16|Mode info|