Conversion du fichier SYM de symboles PL7-07

Forum traitant des automates industriels de marque Schneider - Telemecanique
Répondre
Avatar du membre
Bruce33
Dieu du process
Dieu du process
Messages : 932
Enregistré le : 28 oct. 2015, 06:54
Localisation : Pas-de-Calais

Conversion du fichier SYM de symboles PL7-07

Message par Bruce33 »

Bonjour à tous,

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.Close
Le script est également téléchargeable.

Je sais que le VBScript est en cours de disparition programmée par Microsoft, mais c'est assez facile à convertir en VBA.
Avatar du membre
Bernardo59
Mi homme - Mi automate
Mi homme - Mi automate
Messages : 1054
Enregistré le : 20 oct. 2015, 05:48
Localisation : Nimes
Contact :

Re: Conversion du fichier SYM de symboles PL7-07

Message par Bernardo59 »

Salut,

Merci pour le partage.
Avatar du membre
JC87
Mi homme - Mi automate
Mi homme - Mi automate
Messages : 2243
Enregistré le : 20 oct. 2015, 13:00
Localisation : Nouvelle Aquitaine

Re: Conversion du fichier SYM de symboles PL7-07

Message par JC87 »

Bonjour,

Merci c'est sympa.

JC
"On veut faire du zéro défaut mais on a zéro bonhomme et zéro budget, et bien à la fin on a zéro résultat..."
Avatar du membre
itasoft
Mi homme - Mi automate
Mi homme - Mi automate
Messages : 7807
Enregistré le : 20 oct. 2015, 10:15
Localisation : Lyon
Contact :

Re: Conversion du fichier SYM de symboles PL7-07

Message par itasoft »

slts,
'La conversion peut être lancée en ligne de commande
--------
Préciser qu'il faut mettre en paramètres le nom du fichier SYM
ex: SymToCsv.vbs D:\myFile.sym
Automaticien privé (de tout)
itasoft@free.fr
Avatar du membre
Bruce33
Dieu du process
Dieu du process
Messages : 932
Enregistré le : 28 oct. 2015, 06:54
Localisation : Pas-de-Calais

Re: Conversion du fichier SYM de symboles PL7-07

Message par Bruce33 »

itasoft a écrit : 17 mai 2021, 11:47 Préciser qu'il faut mettre en paramètres le nom du fichier SYM
ex: SymToCsv.vbs D:\myFile.sym
Oui, merci pour l'exemple Itasoft.
Je n'ai pas été bavard sur le fonctionnement de ce programme.
(On trouve quelques informations dans le code.)
Mais je sais qu'il n'y a que des automaticien.ne.s balèzes ici.
Et puis un forum c'est fait pour poser des questions en cas de besoin.
;)
Répondre