Ya hemos visto este mismo ejemplo con AVEVA Intouch-System Platform – WinCC y ahora por simpatia le ha tocado a Factory Talk View SE.
Pues al igual que anteriormente para Factory Talk View vamos a necesitar los mismos requisitos que para WinCC , con lo cual copia y pega del artículo anterior
Que necesitamos?
- Vamos a necesitar los drivers para crear la conexión
Donde lo descargo?
- Aqui tenemos toda la información SQLite ODBC Driver que nos interesa y enlace directo para su descarga
Aquí directamente ya he instalado los drivers de 32bits , porque Factory Talk View Studio, donde voy a realizar las pruebas está instalado en C:\Program Files (x86) , pero para agregar algo diferente al artículo, si tienes curiosidad de saber si un ejecutable que tengas es de x32/x64 puedes probar el siguiente PowerShell.
Es mas , Factory Talk View SE , con la versión 13 sino me equivoco incorporo la novedad de ejecutar Scripting PowerShell en el HMIServer , es decir del lado de Servidor , no del Cliente. Solo se pueden ejecutar los script en el HMIServer.
Cambia la ruta del archivo que quieras comprobar , abre una consola de powershell como administrador y pega el código
function Get-PEHeader {
param (
[string]$Path
)
$buffer = New-Object byte[] 4096
[System.IO.File]::Open($Path, [System.IO.FileMode]::Open, [System.IO.FileAccess]::Read).Read($buffer, 0, $buffer.Length) | Out-Null
# Check for 'MZ' signature
if ($buffer[0] -ne 0x4D -or $buffer[1] -ne 0x5A) {
Write-Error "Not a valid PE file"
return
}
# Get PE header offset
$peOffset = [System.BitConverter]::ToInt32($buffer, 0x3C)
# Check for 'PE\0\0' signature
if ($buffer[$peOffset] -ne 0x50 -or $buffer[$peOffset+1] -ne 0x45 -or $buffer[$peOffset+2] -ne 0x00 -or $buffer[$peOffset+3] -ne 0x00) {
Write-Error "Not a valid PE file"
return
}
# Get Machine field
$machine = [System.BitConverter]::ToUInt16($buffer, $peOffset + 4)
switch ($machine) {
0x014C { "x86 (32-bit)" }
0x8664 { "x64 (64-bit)" }
default { "Unknown or not a PE file" }
}
}
$archivo = "C:\Program Files (x86)\Rockwell Software\RSView Enterprise\VStudio.exe"
$resultado = Get-PEHeader -Path $archivo
Write-Output "El archivo $archivo es de arquitectura: $resultado"
Siguiendo con la instalación del drivers, ya lo tenemos listo.
Y pasamos al código que vamos a ejecutar. Que es el mismo 🙂 , solo he modificado para ver en la consola el formateo del resultado, pero está vez se ejecuta en Visual Basic for Applications (VBA)
Para quien se incorpore o sea nuevo en Factory Talk View, vamos a escribir el código como hemos mencionado en VBA , pero en las propiedades del botón, debes exponerlo a VBA, tienes que cambiar esa propiedad para que sea visible y accesible desde VBA
Y si quieres probarlo tu mismo aquí tienes el código
Dim conn, rst, strSQL, results, i
Set conn = CreateObject("ADODB.Connection")
Set rst = CreateObject("ADODB.Recordset")
LogDiagnosticsMessage "--> Start"
' ABRIR CONEXIÓN
conn.Open "DRIVER=SQLite3 ODBC Driver;Database=C:\Resources\PHS.db;LongNames=0;Timeout=1000;NoTXN=0;SyncPragma=NORMAL;StepAPI=0;"
strSQL = "SELECT * FROM Configuration"
' ABRIR RECORDSET
rst.Open strSQL, conn
' MOSTRAR RESULTADOS EN MSGBOX
results = ""
'Do Until rst.EOF
' For i = 0 To rst.Fields.Count - 1
' results = " " & rst.Fields(i).Name & ": " & rst.Fields(i).Value
' LogDiagnosticsMessage results
' Next
' rst.MoveNext
'Loop
Do Until rst.EOF
results = " " & rst.Fields(0).Name & ": " & rst.Fields(0).Value & " " & rst.Fields(1).Name & ": " & rst.Fields(1).Value
LogDiagnosticsMessage results
rst.MoveNext
Loop
' CERRAR RECORDSET
rst.Close
LogDiagnosticsMessage "--> End"
' LIBERAR RECURSOS
Set rst = Nothing
Set conn = Nothing
Y aquí nuestro resultado.
NOTA: Si trabajas con una arquitectura distribuida, recuerda que el Driver lo debes instalar en todos los clientes, que vayan a conectarse a la base de datos SQLite.