Il y a quelque temps j'ai travaillé sur le remplacement d'automates TSX07 (appelés également TSX Nano) par des nouveaux M221.
Le M221 a été conçu pour remplacer le Twido qui lui-même remplaçait le TSX07. Il est donc assez facile de convertir les programmes PL7-07 vers TwidoSoft/TwidoSuite puis vers SoMachine Basic/EcoStruxure Machine Expert Basic. (Vous remarquerez que le nom du logiciel s'est considérablement allongé au fil des ans... heureusement que le nom de l'automate n'a pas suivi cette tendance !)
Bref, rien n'a été prévu pour récupérer les symboles des variables du programme PL7-07. Celui-ci permet d'exporter la table des symboles dans un fichier portant l'extension SYM. Et après ?
J'ai donc programmé un petit outil pour convertir le fichier SYM en fichier CSV car c'est le format utilisé par EcoStruxure Machine Expert Basic.
Le fichier CSV peut être vérifié et corrigé avec Excel (par exemple). PL7-07 autorisait par exemple des commentaires de variables comportant plusieurs lignes.
Je vous livre la version du programme en VBScript :
Code : Tout sélectionner
'/// SymToCsv.vbs \\\
'\\\ forum-automatisme.net ///
'Version 1.0 - 16/05/2021
'Ce script permet de convertir un fichier SYM (symboles) généré par PL7-07
'en un fichier texte de type CSV.
'La conversion peut être lancée en ligne de commande ou par glisser-déposer
'du fichier à convertir sur ce fichier SymToCsv.vbs.
Option Explicit
Const ForReading = 1, ForWriting = 2
Dim oFSO, oArgs
Dim oFichierSym, oLectureSym, oEcritureCsv
Dim sFicSym, sFicCsv, s
Dim sID
Dim sContenuSYM
Dim lCar, sCar
Dim lEspaceDebut, lEspaceFin
Dim lNbVariables, lIndexVariable
Dim lTailleInfos
Dim sInfosVariable
Dim sSymbole, sAdresse, sCommentaire
Dim i
Const lOffsetNbVariables = &H37
Const lOffsetVariable1 = &H3B
Set oFSO = CreateObject("Scripting.FileSystemObject")
'--- Récupération du fichier de symboles en argument
Set oArgs = WScript.Arguments
If oArgs.Count<1 Then
s= "Script de conversion d'un fichier SYM au format CSV" & vbCrLf
s=s & vbCrLf
s=s & "Syntaxe :" & vbCrLf
s=s & " SymToCsv <sym>" & vbCrLf
s=s & " <sym> : fichier de symboles généré par PL7-07" & vbCrLf
s=s & vbCrLf
s=s & "Le fichier résultat 'Conversion de <sym>.csv'" & vbCrLf
s=s & "sera créé ou écrasé, le cas échéant, dans le même répertoire." & vbCrLf
WScript.Echo s
WScript.Quit
Else
sFicSym = oArgs(0)
If Not oFSO.FileExists(sFicSym) Then
MsgBox "Le fichier " & sFicSym & " n'existe pas.", vbCritical, "Erreur"
WScript.Quit
End If
Set oFichierSym = oFSO.GetFile(sFicSym)
sFicCsv = Replace(oFichierSym.ParentFolder & "\Conversion de " & oFichierSym.Name, ".sym", ".csv", 1, -1, vbTextCompare)
End If
Set oArgs = Nothing
'---Lecture de tout le contenu du fichier SYM
Set oLectureSym = oFSO.OpenTextFile(sFicSym, ForReading)
sContenuSYM = oLectureSym.Read(oFichierSym.Size)
oLectureSym.Close
Set oFichierSym = Nothing
'--- Vérification de la signature du fichier
sID = Left(sContenuSYM,32)
If sID <> (Chr(&H0) & Chr(&H80) & Chr(&H0) & Chr(&H0) & Chr(&H0) & Chr(&H83) & Chr(&H0) & Chr(&H83) _
& Chr(&H2) & Chr(&H0) & Chr(&H13) & Chr(&H0) & Chr(&H13) & Chr(&H0) _
& "PL707 SYMBOL TABLE") Then
MsgBox "Le fichier à convertir n'est pas un fichier de symboles PL7-07.", vbCritical, "Fichier non reconnu"
WScript.Quit
End If
'--- Création du fichier CSV
Set oEcritureCsv = oFSO.OpenTextFile(sFicCsv, ForWriting, True)
'écriture de l'en-tête
oEcritureCsv.WriteLine "Symbole;Adresse;Commentaire"
'lecture du nombre de variables
lNbVariables = CLng(Asc(Mid(sContenuSYM, lOffsetNbVariables + 1, 1))) _
+ 256 * CLng(Asc(Mid(sContenuSYM, lOffsetNbVariables + 2, 1)))
lCar = lOffsetVariable1 + 1
For lIndexVariable = 1 To lNbVariables
'positionnement sur le valeur de taille (en octets) des infos de la variable
lCar = lCar + 2
lTailleInfos = CLng(Asc(Mid(sContenuSYM, lCar, 1))) _
+ 256 * CLng(Asc(Mid(sContenuSYM, lCar + 1, 1)))
'positionnement sur la 1re info de la variable et recopie de la totalité des infos
lCar = lCar + 4
sInfosVariable = Mid(sContenuSYM, lCar, lTailleInfos)
' 1er champ : adresse
lEspaceFin = InStr(1, sInfosVariable, Chr(&H20)) 'position du 1er caractère 'espace' rencontré
sAdresse = Left(sInfosVariable, lEspaceFin - 1)
' 2e champ : symbole
lEspaceDebut = lEspaceFin
lEspaceFin = InStr(lEspaceDebut + 1, sInfosVariable, Chr(&H20)) 'position du 2e caractère 'espace' rencontré
sSymbole = Mid(sInfosVariable, lEspaceDebut + 1, lEspaceFin - lEspaceDebut - 1)
' 3e à 10e champs non traités
For i = 3 To 10
lEspaceDebut = lEspaceFin
lEspaceFin = InStr(lEspaceDebut + 1, sInfosVariable, Chr(&H20))
Next
' 11e et dernier champ : commentaire
sCommentaire = Mid(sInfosVariable, lEspaceFin + 1, lTailleInfos - lEspaceFin - 2) 'le commentaire est le dernier champ mais on enlève les 2 octets finaux
'écriture des informations dans le fichier CSV
oEcritureCsv.WriteLine sSymbole & ";" & sAdresse & ";" & Chr(34) & Replace(sCommentaire, Chr(34), Chr(34) & Chr(34)) & Chr(34)
'positionnement sur la variable suivante
lCar = lCar + lTailleInfos
Next
'fermeture du fichier CSV
oEcritureCsv.CloseJe sais que le VBScript est en cours de disparition programmée par Microsoft, mais c'est assez facile à convertir en VBA.

