-
- Tổng tiền thanh toán:

Part 17. Phần mềm SCADA Cimon Ultimate Access - ODBC (Open DataBase Connectivity)
Part 17. Phần mềm SCADA Cimon Ultimate Access - ODBC (Open DataBase Connectivity)
ODBC (Open DataBase Connectivity) là một chuẩn phương pháp truy cập vào cơ sở dữ liệu. Bằng cách kết nối CIMON-SCADA với các cơ sở dữ liệu chung như Access, Oracle, người dùng có thể đăng ký dữ liệu vào các cơ sở dữ liệu chung hoặc lấy dữ liệu từ hệ thống cơ sở dữ liệu. Ngoài ra, sử dụng truy vấn SQL chuẩn cho phép người dùng quản lý cơ sở dữ liệu bằng cách cập nhật, đăng ký, xóa dữ liệu.
1 Window Composition
Double-click [ODBC] or select [Tools] – [ODBC] to bring up the [ODBC] window.
Ở phía bên trái của cửa sổ, DSN (Data Source Name) của hệ thống cơ sở dữ liệu được kết nối với CIMON-SCADA và các truy vấn của nó được hiển thị dưới dạng cây. Ở phía bên phải của cửa sổ, các truy vấn của DSN đã chọn được liệt kê.
2 Menu
(1) New DBMS
You can configure the DSN of the new DBMS, which will be connected to CIMONSCADA system. You can bring up the [DBMS Configuration] system by selecting [Edit] – [New DBMS]
Item | Description |
DB Name | Nhập ODBC DSN. Tên phải giống với tên DSN đã đăng ký tại “Control Panel\System and Security\Administrative Tools\ODBC Data Sources”. |
User ID | Nhập User ID để kết nối cơ sở dữ liệu được gán cho ‘DB Name’. User ID phải có thẩm quyền để xử lý các truy vấn. Nếu bạn không cần User ID, bạn có thể để trống trường này. |
Password | Nếu bạn đã chỉ định một ID người dùng, hãy nhập mật khẩu cho ID đó. Nếu bạn chưa chỉ định một ID người dùng hoặc không cần sử dụng mật khẩu, hãy để trống trường này. |
Description | Nhập mô tả về cơ sở dữ liệu đang cấu hình |
(2) New Query
Sau khi đăng ký DBMS mới, hãy nhấn biểu tượng để mở cửa sổ [Query Configuration]. Bạn có thể cấu hình các truy vấn của DBMS trong cửa sổ này.
Item | Description | |
Query Name | Enter the name of the Query. | |
Description | Enter the short description of the Query. | |
Query Type | Select the Query type between ‘SELECT Statement’ and ‘Others’. | |
SELECT Statement |
Kiểu truy vấn này thường được sử dụng để đọc nhiều bản ghi. | |
Others | Kiểu truy vấn này thường được sử dụng để đọc một bản ghi đơn lẻ hoặc cập nhật, đăng ký, xóa bản ghi. | |
Create SQL | Hiển thị cửa sổ cấu hình của loại Truy vấn đã chọn. | |
Query Operation | Regular Interval | Tự động thực hiện Truy vấn theo khoảng thời gian đều đặn. Khoảng thời gian có thể được chỉ định từ 0 đến 100 giây. Nếu bạn chọn tùy chọn ‘Running Base’, truy vấn sẽ được thực hiện tại thời điểm thực hiện CIMON-SCADA. |
On Time | Thực hiện truy vấn tại thời điểm đã chỉ định. | |
Event | Thực hiện Truy vấn theo điều kiện được chỉ định. Bạn có thể sử dụng biểu thức điều kiện để thực hiện Truy vấn. |
|
Execute By Command | Thực hiện Truy vấn bằng hàm được sử dụng trong Script hoặc biểu thức lệnh. |
(3) Query Type
[SELECT Statement]
Bạn có thể cấu hình Câu lệnh SELECT khi bạn đã chọn ‘Câu lệnh SELECT’ trong cửa sổ [Cấu hình truy vấn]. Bạn có thể cấu hình Câu lệnh SELECT trong 4 phần
Khi bạn liên kết một thẻ, kiểu dữ liệu trong DBMS và CIMON-SCADA phải giống hệt nhau. Ngoài ra, hãy lưu ý đến dung lượng dữ liệu khi bạn sử dụng trường chuỗi.
Ví dụ) Nếu kiểu dữ liệu trong DBMS là ‘SMALLINT’, ‘SMALLINT’ phải được chọn trong ODBC.
No Duplicate Data | Chọn checkbox để tránh dữ liệu trùng lặp trong kết quả truy vấn. | |||||||||
New Field |
Xác định trường bản ghi được tạo ra bởi việc thực hiện truy vấn. Bạn có thể liên kết trường bản ghi và thẻ CIMON-SCADA. |
|||||||||
Field Name | Nhập tên trường được xác định trong bảng cơ sở dữ liệu. | |||||||||
Tag Name | Gán thẻ để liên kết với trường. Giá trị của thẻ có thể được ghi vào cơ sở dữ liệu hoặc giá trị từ cơ sở dữ liệu có thể được ghi vào thẻ. Nói chung, các thẻ ảo được gán. | |||||||||
Browse | Hiển thị danh sách các thẻ trong CIMON-SCADA. Bạn có thể chọn một thẻ để gán giá trị cho trường ‘Tag Name’. | |||||||||
Data Type |
Chọn kiểu dữ liệu của trường được chỉ định. Kiểu dữ liệu được chọn phải giống hệt với kiểu dữ liệu được chỉ định trong DBMS.
|
|||||||||
Description | Nhập mô tả ngắn gọn về trường. | |||||||||
Edit | Bạn có thể chọn trường đã cấu hình trong danh sách và chỉnh sửa trường. | |||||||||
Delete | Xóa trường đã chọn | |||||||||
˄/˅ | Di chuyển trường đã chọn lên trên hoặc xuống dưới. | |||||||||
FROM | Gán tên bảng nơi các trường được gán thuộc về. Tên bảng phải giống hệt với tên được sử dụng trong cơ sở dữ liệu thực tế. | |||||||||
WHERE | Gán câu lệnh SQL để tìm dữ liệu mong muốn. Bạn có thể sử dụng SQL chuẩn. | |||||||||
ORDER BY | Gán tiêu chí căn chỉnh bản ghi |
[Others]
You can configure the other statement when you have selected the ‘Others’ in the [Query Configuration] window
Khi bạn viết một câu lệnh SQL, bạn phải sử dụng dấu ngoặc kép cho giá trị thẻ tương ứng với trường chuỗi trong DBMS.
Ví dụ) Khi có các thẻ số [1], [2] và thẻ chuỗi [3] trong bản ghi có tên là ‘DataTable’, hãy viết câu lệnh như được hiển thị bên dưới.
INSERT INTO DataTable
VALUES ([1], [2], ‘[3]’)
Binding | Gán thẻ tương ứng với các câu lệnh SQL. Khi bạn chỉnh sửa câu lệnh SQL, hãy gán vùng giá trị là “[n]”(n: Số nguyên thập phân). Vùng này sẽ được thay thế bằng giá trị thẻ tương ứng | ||||||||
New Tag |
Chỉ định một thẻ để liên kết với câu lệnh SQL |
||||||||
Tag Name | Nhập tên thẻ. Giá trị thẻ được gán sẽ thay thế vùng [n] của câu lệnh SQL. | ||||||||
Browse | Hiển thị danh sách các thẻ trong CIMON-SCADA. Bạn có thể chọn một thẻ để gán giá trị cho trường ‘Tag Name’. | ||||||||
Data Type |
Chọn kiểu dữ liệu của trường được chỉ định. Kiểu dữ liệu được chọn phải giống hệt với kiểu dữ liệu được chỉ định trong DBMS.
|
||||||||
Description | Nhập mô tả ngắn gọn về trường. | ||||||||
Edit | Bạn có thể chọn trường đã cấu hình trong danh sách và chỉnh sửa trường. | ||||||||
Delete | Xóa trường đã chọn | ||||||||
˄/˅ | Di chuyển trường đã chọn lên trên hoặc xuống dưới. | ||||||||
SQL | Viết một SQL chuẩn. Bạn có thể gán vùng giá trị là [n]. [n] sẽ được thay thế bằng giá trị thẻ của số tương ứng. |
(4) Edit
Press icon to edit the selected DBMS or queries in the corresponding configuration window.
(5) Delete
Press icon to delete the selected DBMS or queries
3 Related Features
Trong phần này, bạn có thể tìm thấy các hàm và chương trình con thường được sử dụng cho ODBC.
Command | Description | |
Subroutine | CSqlOpen | Let the database manager execute the query and receive the result. |
Subroutine | CsqlClose | Closes the query in the database and ends the operation. |
Subroutine | CSqlDelete | Deletes the currently displayed record from the database manager. |
Subroutine | CSqlFirst | Transfers the topmost record data to the tag. |
Subroutine | CSqlGetRecord | Reads the data according to the assigned record number. |
Function | CSqlGetRecordNo | Returns the number of active records in the database manager. |
Subroutine | CSqlInsert | Inserts a new record to the database manager. |
Subroutine | CSqlLast | Reads the last record data from the database |
Subroutine | CSqlNext | Reads the next record data. |
Subroutine | CSqlPrev | Reads the previous record data. |
Subroutine | CSqlReconnect | Reconnects to the DBMS in case of the disconnection. |
Subroutine | CsqlRequery | Executes the query again and reads the record data again. |
Subroutine | CSqlRun | Let the database manager execute the query. |
Subroutine | CSqlUpdate | Updates the record data from database manager with the current tag value. |
Subroutine | RawSqlRun | Executes the command in SQL statement to database. |
Function | CSqlGetError | You can find the error with the return value of the function. |
3.1 Functions for ODBC
CSqlOpen | Để trình quản lý cơ sở dữ liệu thực hiện truy vấn và nhận kết quả | |
Subroutine | Command | CSqlOpen (“Query Name”) |
Script | CSqlOpen “Query Name” | |
Description | ‘‘Query Name’ phải được đăng ký là câu lệnh SELECT trong cửa sổ cấu hình ODBC. Chương trình con này phải được gọi trước khi thực hiện bất kỳ hàm nào khác liên quan đến bản ghi và con trỏ. Khi hoạt động kết thúc, hàm CSqlClose phải được sử dụng để kết thúc hoạt động. Các hàm liên quan đến con trỏ bao gồm đọc, xóa, sửa đổi và chạy lại các bản ghi. | |
Example | Thực hiện truy vấn có tên ‘RetrieveAll’ và nhận kết quả. CSqlOpen (“RetrieveAll”) |
CSqlClose | Đóng truy vấn trong cơ sở dữ liệu và kết thúc hoạt động | |
Subroutine | Command | CSqlClose (“Query Name”) |
Script | CSqlClose “Query Name” | |
Description | Kết thúc truy vấn khi các thao tác với CSqlOpen và các hàm liên quan đến con trỏ đã hoàn tất. ‘‘Query Name’ phải được đăng ký dưới dạng câu lệnh SELECT trong cửa sổ cấu hình ODBC. |
|
Example | Ends the query named ‘RetrieveAll’. CSqlClose(“RetrieveAll”) |
CSqlDelete | Xóa bản ghi hiện đang hiển thị khỏi trình quản lý cơ sở dữ liệu | |
Subroutine | Command | CSqlDelete (“Query Name”) |
Script | CSqlDelete “Query Name” | |
Description | Xóa bản ghi đã chọn khỏi DBMS. ‘Query Name’ phải được đăng ký là câu lệnh SELECT trong cửa sổ cấu hình ODBC. Ngoài ra, hàm CSqlOpen phải được thực thi trước. | |
Example | Deletes the currently displayed record from the query named ‘RetrieveAll’. CSqlDelete(“RetrieveAll”) |
CSqlFirst | Chuyển dữ liệu bản ghi trên cùng sang thẻ | |
Subroutine | Command | CSqlFirst (“Query Name”) |
Script | CSqlFirst “Query Name” | |
Description | Di chuyển con trỏ hiện tại đến bản ghi trên cùng. Dữ liệu bản ghi được chỉ định sẽ thay thế giá trị thẻ tương ứng. ‘Query Name’ phải được đăng ký dưới dạng câu lệnh SELECT trong cửa sổ cấu hình ODBC. Ngoài ra, hàm CSqlOpen phải được thực thi trước. |
|
Example | Retrieves the topmost record data of query named ‘RetrieveAll’ to the corresponding tag. CSqlFirst(“RetrieveAll”) |
CSqlGetRecord | Đọc dữ liệu theo số bản ghi được chỉ định | |
Subroutine | Command | CSqlGetRecord(“Query Name”, Record Number) |
Script | CSqlGetRecord“Query Name”, Record Number | |
Description | Đọc dữ liệu của Record Number được chỉ định từ ‘Query Name’ đến thẻ được kết nối. ‘Record Number’ bắt đầu từ 1. Nếu bạn chỉ định ‘Record Number’ là –n, nó biểu thị dữ liệu thứ n từ bản ghi cuối cùng. |
|
Example | Reads the first record data of the query named ‘RetrieveAll’ to the bound tag. CSqlGetRecord(“RetrieveAll”, 1) |
CSqlGetRecordNo | Trả về số lượng bản ghi đang hoạt động trong trình quản lý cơ sở dữ liệu | |
Function | Operation | CSqlGetRecordNo (“Query Name”) |
Script | n = CSqlGetRecordNo (“Query Name”) | |
Description | Trả về số lượng bản ghi từ ‘Query Name’. | |
Example | Returns the number of record from the query named ‘RetrieveAll’. CSqlGetRecordNo (“RetrieveAll”) = n |
CSqlInsert | Chèn một bản ghi mới vào trình quản lý cơ sở dữ liệu | |
Subroutine | Command | CSqlInsert (“Query Name”) |
Script | CSqlInsert “Query Name” | |
Description | Gán các giá trị thẻ làm giá trị trường tại thời điểm thực hiện chương trình con. Sau đó tạo một bản ghi mới và thêm vào DBMS. ‘Query Name’ phải được đăng ký làm câu lệnh SELECT trong cửa sổ cấu hình ODBC. Ngoài ra, hàm CSqlOpen phải được thực thi trước. |
|
Example | Inserts a new record to the query named ‘RetrieveAll’. CSqlInsert (“RetrieveAll”) |
CSqlLast | Đọc dữ liệu bản ghi cuối cùng từ cơ sở dữ liệu | |
Subroutine | Command | CSqlLast (“Query Name”) |
Script | CSqlLast “Query Name” | |
Description | Di chuyển con trỏ hiện tại đến bản ghi cuối cùng và giá trị trường được chỉ định được di chuyển đến thẻ được kết nối. ‘Query Name’ phải được đăng ký dưới dạng câu lệnh SELECT trong cửa sổ cấu hình ODBC. Ngoài ra, hàm CSqlOpen phải được thực thi trước. |
|
Example | Reads the last record data from the database and saves it to the connected tag. CSqlLast (“RetrieveAll”) |
CSqlNext | Đọc dữ liệu bản ghi tiếp theo | |
Subroutine | Command | CSqlNext (“Query Name”) |
Script | CSqlNext “Query Name” | |
Description | Di chuyển con trỏ hiện tại đến bản ghi tiếp theo và giá trị trường được chỉ định được di chuyển đến thẻ được kết nối. ‘Query Name’ phải được đăng ký dưới dạng câu lệnh SELECT trong cửa sổ cấu hình ODBC. Ngoài ra, hàm CSqlOpen phải được thực thi trước. |
|
Example | Reads the next record data from the database and saves it to the connected tag. CSqlNext (“RetrieveAll”) |
CSqlPrev | Đọc dữ liệu bản ghi trước đó | |
Subroutine | Command | CSqlPrev (“Query Name”) |
Script | CSqlPrev “Query Name” | |
Description | Di chuyển con trỏ hiện tại đến bản ghi trước đó và giá trị trường được chỉ định được di chuyển đến thẻ được kết nối. ‘Query Name’ phải được đăng ký dưới dạng câu lệnh SELECT trong cửa sổ cấu hình ODBC. Ngoài ra, hàm CSqlOpen phải được thực thi trước. |
|
Example | Reads the previous record data from the database and saves it to the connected tag. CSqlPrev (“RetrieveAll”) |
CSqlReconnect | Kết nối lại với DBMS trong trường hợp bị ngắt kết nối | |
Subroutine | Command | CSqlReconnect (“DBMS Name”) |
Script | CSqlReconnect “DBMS Name” | |
Description | Kết nối lại với DBMS. Để sử dụng DBMS khi kết nối bị ngắt do lý do bất ngờ, bạn phải sử dụng chương trình con này. DBMS có tên là ‘DBMS Name’ phải được đăng ký trong cấu hình CIMON ODBC. |
|
Example | Reconnects to the DBMS named ‘SampleDB’. CSqlReconnect (“SampleDB”) |
CSqlRequery | Thực hiện lại truy vấn và đọc lại dữ liệu bản ghi | |
Subroutine | Command | CSqlRequery (“Query Name”) |
Script | CSqlRequery “Query Name” | |
Description | Thực thi câu lệnh SELECT của truy vấn được chỉ định và đọc lại dữ liệu bản ghi. ‘Query Name’ phải được đăng ký là câu lệnh SELECT trong cửa sổ cấu hình ODBC. Ngoài ra, hàm CSqlOpen phải được thực thi trước. |
|
Example | Executes the query named ‘RetrieveAll’ again and reads the record data again. CSqlRequery (“RetrieveAll”) |
CSqlRun | Để trình quản lý cơ sở dữ liệu thực hiện truy vấn | |
Subroutine | Command | CSqlRun (“Query Name”) |
Script | CSqlRun “Query Name” | |
Description | Thực thi truy vấn đã được đăng ký trong CIMON-SCADA ODBC | |
Example | Executes the query named ‘RetrieveAll’. CSqlRun (“RetrieveAll”) |
CSqlUpdate | Cập nhật dữ liệu bản ghi từ trình quản lý cơ sở dữ liệu với giá trị thẻ hiện tại. | |
Subroutine | Command | CSqlUpdate (“Query Name”) |
Script | CSqlUpdate “Query Name” | |
Description | Cập nhật dữ liệu bản ghi từ trình quản lý cơ sở dữ liệu với giá trị thẻ được chỉ định bởi con trỏ. ‘Query Name’ phải được đăng ký dưới dạng câu lệnh SELECT trong cửa sổ cấu hình ODBC. Ngoài ra, hàm CSqlOpen phải được thực thi trước. |
|
Example | Updates the record data from database manager with the tag value indicated by the cursor. CSqlUpdate (“RetrieveAll”) |
RawSqlRun | Thực thi lệnh trong câu lệnh SQL tới cơ sở dữ liệu | |
Subroutine | Command | RawSqlRun(“DBMS Name”, “SQL Statement”) |
Script | RawSqlRun “DBMS Name”, “SQL Statement” | |
Description | Thực thi lệnh trong câu lệnh SQL tới cơ sở dữ liệu. Bạn có thể sử dụng dấu ngoặc kép (“ “) để sử dụng SQL làm tham số thứ hai | |
Example | Execute the SQL in ‘SampleDB’ , which changes the ‘Data1’ field value of the record number 4, into 66. RawSqlRun("SampleDB", "UPDATE DataTable SET Data1 = 66 WHERE Number = 4") |
3.2 ODBC Function for Error
CSqlGetError | Bạn có thể tìm thấy lỗi thông qua giá trị trả về của hàm | |
Function | Operation | CsqlGetError (“Query Name”) |
Script | n = CsqlGetError “Query Name” | |
Description | Hàm này kiểm tra trạng thái hoạt động của các hàm ODBC mới nhất như SCqlInsert và CSqlOpen. Nếu hàm hoạt động bình thường, hàm này trả về 0. Các giá trị trả về khác chỉ ra lỗi. | |
Example | Checks the operation state of the latest function which is executed on the query named ‘RetrieveAll’. X = CSqlGetError(“RetrieveAll”) |
Return Value | Description |
-2 | Invalid configuration, bind or statement. |
-1 | The function did not operate properly. |
0 | The function operated properly. |
1 | Undefined query. The query is not registered in the ODBC manager. |
2 | An error occurred in the memory. |
100 | The query is not in format of SELECT statement. |
101 | CSqlOpen subroutine is not executed. |
102 | Exceeded the record index. |
103 | Cannot close the record due to other references. The function is executed while the database is opened. |
1001 | The name of the data source does not exist and the base driver is not assigned. Data source name and the base driver are not assigned in Windows. |
1002 | Failed to read data since the data does not exist beyond the cursor on the data source. |
1003 | Failed to find the assigned field from the record. Or, the query requested by the SELECT or Other statements are invalid. |
1004 | The data type of the record and tag data are not equal. |
1005 | Failed to update or delete the record. CsqlUpdate or CsqlDelete function is used for the data which have been already changed. The error occurs when the function is executed again when the changes are not updated. |
1006 | Duplicated values are entered in the index, basic key or relation, but the requested changes are not applied. The error occurs when the data is duplicated in the same field. |
1007 | There is no record in the database. |
1008 | Tried data loading after the deletion of the record data. |
1012 | ODBC driver does not support Dynaset |