Proyecto de TwinCAT HMI que conecta con una base de datos MySQL remota para leer y modificar valores. Utiliza la extensión TF2120 Hmi Database. Para acceder se configuran Queries de MySQL, que se mapean como símbolos. Tambien es posible utilizar Queries con parámetros. Los resultados se pueden mostrar en tablas DataGrid
Testeado con las siguientes versiones: HMI Engineering/Server v14.13.1 Paquete TwinCAT.HMI.Database v14.5.12 MySQL Connector/ODBC 9.6 (64bits)
Licencias necesarias (en todas ellas las licencias Trial son válidas): TF2000 HMI TF2120 HMI Database o bien TF6410 TwinCAT Database
Es necesario tener instalado el driver MySQL para ODBC para poder establecer la conexión hacia las bases de datos MySQL. Por lo que se tiene que instalar en el pc de ingeniería y en el pc donde vaya a correr el Hmi Server. Se puede descargar gratuitamente desde: https://dev.mysql.com/downloads/connector/odbc/
En la configuracion de ODBC x64 de Windows hay que crear la conexnion desde el menú User DSN y System DSN
Hay que darle un nombre a la conexión, introducir los datos del usuario y el puerto (3306). Desde la misma ventana se puede testear la conexión y ver las bases de datos disponibles en el servidor MySQL.
- En primer lugar hay que instalar el paquete "TwinCAT.HMI.Database" via TwinCAT Package Manager. Si en lugar de hacerlo desde la aplicación de escritorio se hace por consola de Windows, es ejecutando el comando:
tcpkg install TwinCAT.HMI.Database
- Desde un proyecto de TwinCAT HMI, hay que añadir el Nuget Package "Beckhoff.TwinCAT.HMI.Database". Nota: Es recomendable tener activado en Package Sources: 'Beckhoff Offline Packages' para que no busque una version de este paquete desde otro repositorio y que quede desalineada del resto. Así los paquetes se actualizaran solo con el Package Manager de TwinCAT.
- Una vez instalado, la configuración del acceso se hará desde el menú HmiDatabase dentro de las opciones del Server
- Crear una nueva conexión; se pueden crear varias. Añadir el Connection String de la conexión. Puede tener varias combinaciones, es importante indicar la versión del driver
- Añadir después las Queries necesarias. Ejemplo de una Query llamada 'valores' para hacer una consulta de tipo SELECT:
- Desde la pestaña Diagnostics se puede comprobar el estado de la conexión hacia la base de datos y de las consultas Queries
- Ahora se puede mapear el resultado de la consulta como un símbolo más. Desde la ventana de Hmi Configuration Server Symbols>All Symbols se muestran los elementos mapeables de las consultas. En este ejemplo, valores:
- Al mapear el símbolo valores se puede utilizar en objetos gráficos como tablas Datagrid.
- El uso de parámetros SQL permite añadir valores dinámicamente en la consulta. Esto permite hacer escrituras (comando INSERT, UPDATE) o también lecturas que permitan filtrar resultados. En este ejemplo se añade una consulta que retorne entradas que tengan un valor de una columna superior al valor de un parámetro. En este ejemplo se ha creado una consulta llamada SuperiorAParam con esta consulta:
- Ahora se añaden los parámetros dentro de esta Query. En este ejemplo se le ha llamado rValue
- En la pestaña de Diagnostics podemos comprobar si la consulta es correcta.
- Ahora se puede mapear la consulta como otro símbolo más como se ha hecho en el caso anterior.
- Para poder pasar el parámetro hay que ejecutar una función de escritura por javascript. En este ejemplo es un código javascript que se ejecuta ante un evento de pulsación. En él recoge el valor de una variable interna newrValue y ejecuta la escritura en el símbolo SuperiorAParam, que es la query mapeada como símbolo.
// recoge el valor de una variable interna
var symVal = TcHmi.Symbol.readEx('%i%newrValue%/i%');
console.log(symVal);
// escribe el parámetro rValue de la query SuperiorAParam
TcHmi.Server.writeSymbolEx(
'TcHmiDatabase.testdb.SuperiorAParam',
{ rValue: symVal },
null,
function (data) {
if (data && data.error === TcHmi.Errors.NONE) {
console.log('Consulta SQL con parámetro correcta');
//Representar el resulado en el DataGrid que tiene mapeado en el campo SrcData la variable interna ResultGrid
TcHmi.Symbol.writeEx('%i%ResultGrid%/i%', data.results[0].value);
} else {
console.error('Error de consulta SQL con parámetros');
}
});












