WinCC OA-CTRL-操作MySQL數據庫


目的

有的時候我們需要 將WinCC OA里的數據定時的導出,這無可避免的要用到數據庫,

今天就來帶領大家 使用control腳本通過ODBC 連接mysql 數據庫,讀取並寫入數據.

什么是ODBC?

先套用百度百科:開放數據庫連接(Open Database Connectivity,ODBC)是為解決異構數據庫間的數據共享而產生的,

現已成為WOSA(The Windows Open System Architecture(Windows開放系統體系結構))的主要部分和基於Windows環境的一種數據庫訪問接口標准ODBC 為異構數據庫訪問提供統一接口,

允許應用程序以SQL 為數據存取標准,存取不同DBMS管理的數據;

使應用程序直接操縱DB中的數據,免除隨DB的改變而改變。用ODBC 可以訪問各類計算機上的DB文件,甚至訪問如Excel 表和ASCI I數據文件這類非數據庫對象。

廢話太多了,一張圖概括

image

簡而言之 ,就是我在windows 操作系統里要訪問數據庫(多種數據庫)可以通過微軟提供的ODBC這個程序,

使用統一的接口與數據庫交互,這樣就不用考慮數據庫多樣性的差異,簡化了數據庫的操作難度及復雜度

連接數據庫

OK  知道原理后,來擼點代碼

1) 下載MySQL ODBC 驅動並配置

ODBC 程序為windows 提供的,但是不同數據庫的驅動需要我么手動下載 下載鏈接ttps://dev.mysql.com/downloads/connector/odbc/

image

按圖示配置ODBC 連接

2) 讀取數據庫內容

我們在WinCC OA 里新建了一個panel 添加了個按鈕,對點擊事件進行編輯

main(mapping event)
{
  int rc;
  //聲明一個dbconnectin類型conn用來管理數據庫連接
  dbConnection conn;
  //連接語句 DNS 剛剛起的ODBC實例名字 UID數據庫用戶名 
  string conStr = "DSN=WINCCOA;UID=eric;PWD=123456;";
  //打開 ODBC 連接
  rc = dbOpenConnection(conStr,conn);
  //SQL 查詢語句
  string  queryStr = "SELECT * FROM pump_station";
  //定義一個查詢結果集存放數據類型rs 
  dbRecordset rs;
  //執行SQL語句
  rc = dbOpenRecordset (conn, queryStr, rs);
  if (!rc)
  {
    //遍歷結果集 打印取出結果
    while (!rc && !dbEOF (rs))
    {
      anytype id,name,addr;
      rc = dbGetField (rs, 0, id);
      rc = dbGetField (rs, 1, name);
      rc = dbGetField (rs, 2, addr);
      DebugN(id,name,addr);
      rc = dbMoveNext (rs);
     }
    dbCloseRecordset (rs);
  }
  //關閉數據庫
  dbCloseConnection(conn);
}

現在運行下 查看結果

image

可以看到查詢結果與數據庫內容一致

3) 插入語句

同樣的套路(建panel增加按鈕) 直接上代碼

main(mapping event)
{
  int rc = 0;
  //聲明一個dbconnectin類型conn用來管理數據庫連接
  dbConnection conn;
  //連接語句 DNS 剛剛起的ODBC實例名字 UID數據庫用戶名
  string conStr = "DSN=WINCCOA;UID=eric;PWD=123456;";
  //打開 ODBC 連接
  rc = dbOpenConnection(conStr,conn);
  dbCommand dbCmd;
//配置SQL 語句
  string sql = "INSERT INTO pump_station (id,name,addr) VALUES (?,?,?)";
  rc = dbStartCommand(conn, sql, dbCmd);
//替換SQL 中的?
  rc = dbSetParameter(dbCmd, 1, DB_PARAM_IN, 1535);
  rc = dbSetParameter(dbCmd, 2, DB_PARAM_IN, "rockwell");
  rc = dbSetParameter(dbCmd, 3, DB_PARAM_IN, "shanghai");
  //執行命令
  rc = dbExecuteCommand(dbCmd);
  //關閉數據庫
  dbCloseConnection(conn);
}

執行 看數據庫結果

image

OK  操作成功!

后記

結合上一節的定時器 大家可以做些好玩的東西出來

WinCC OA-CTRL-圖形界面の定時器


掃碼關注 及時獲取OA最新消息


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM