Xin chào các anh chị trong diễn đàn. Đây là lần đầu tiên em tham gia diễn đàn nên còn thiếu nhiều kinh nghiệm, mong các anh chị chỉ giáo. Hiện tại, em đang làm báo cáo: truy xuất dữ liệu từ SQL sử dụng VBS. Em đã lưu các dữ liệu sang SQL nhưng hiện tại việc truy xuất lại từ SQL sang WinCC để hiển thị lên ListViewCtrl là không thể, hay nói cách khác là em không làm được. Anh chị nào có tâm huyết hay hứng thú với vấn đề này thì chỉ giáo em với ạ. Em sẽ đính kèm code ở phía dưới ạ. Cảm ơn anh chị đã đọc, chúc diễn đàn phát triển.
Sub OnClick(Byval Item)
Dim objCn
Dim objR
Dim objCm
Dim strC
Dim strSQL
Dim lngCount
Dim list
Dim ssss,aaaa
Dim s,a
Dim rs
Dim row
Dim li
Dim oItem
Dim objCommand
Set ssss = HMIRuntime.Tags("ssss") 'Thiet lap bien trong WinCC
s=ssss.Read 'Doc bien tu WinCC
Set aaaa = HMIRuntime.Tags("aaaa")
a=aaaa.Read
Set list=ScreenItems("Control2") 'Gan bien list nay bang Control2, Control2 chinh la ListGirlView
Set Cn=CreateObject("ADODB.Connection")
cnStr="Provider=MSDASQL;DSN=CC_HbZz_cl_11_01_13_17 _18_14;UID=;PWD=;"
strSQL="biaobiao" 'Bang chua du lieu gia tri da duoc luu
Cn.ConnectionString=cnStr
Cn.Open
Set objCommand = CreateObject("ADODB.Command")
With objCommand
.ActiveConnection = Cn
.CommandText = cnStr
End With
objCommand.Execute
Set objCommand = Nothing
'----------------------------------------------------------------------------
Set rs=CreateObject("ADODB.Recordset")
rs.open strSQL,Cn,3,3
row=0
li=1
Do While Not rs.EOF
Row=Row+1
If CStr(rs.Fields(11).Value)>= CStr(s) And CStr(rs.Fields(11).Value)<=CStr(a) Then
Set oItem=list.ListItems.Add()
oItem.Text=Left(CStr(li),50)
oItem.SubItems(1)=CStr(rs.Fields(1).Value)
oItem.SubItems(2)=CStr(rs.Fields(2).Value)
oItem.SubItems(3)=CStr(rs.Fields(3).Value)
oItem.SubItems(4)=CStr(rs.Fields(4).Value)
oItem.SubItems(5)=CStr(rs.Fields(5).Value)
oItem.SubItems(6)=CStr(rs.Fields(6).Value)
oItem.SubItems(7)=CStr(rs.Fields(7).Value)
oItem.SubItems(8)=CStr(rs.Fields(8).Value)
oItem.SubItems(9)=CStr(rs.Fields(9).Value)
oItem.SubItems(10)=CStr(rs.Fields(10).Value)
oItem.SubItems(11)=CStr(rs.Fields(11).Value)
oItem.SubItems(12)=CStr(rs.Fields(12).Value)
End If
li=li+1
Row=Row+1
rs.MoveNext
Loop
MsgBox "Finish"
Cn.Close
End Sub
'-----------------------------------------------------
'Em muon lay du lieu tu bang "biaobiao" nay de hien thi len ListViewCtrl thi sua o cho nao ha anh?
'Day la chuong trinh cua Trung Quoc viet tren phan mem WinCC, phan bao cao Report.
Lần sửa cuối bởi kochodoi, ngày 01-22-2015 lúc 03:20 PM.
Mình có một thắc mắc, xin được giải đáp:
Mình đã tạo ra CSDL trên SQL rồi và lưu giá trị theo thời gian lên đó, nhưng mình không biết là lưu giới hạn dung lượng bao nhiêu, hay là unlimit. Và có cách nào để đẩy dữ liệu khi nó đầy lên không?
Ví dụ mình đặt giới hạn của nó là 20Gb thì khi đến 20Gb thì nó sẽ xoá dữ liệu cũ để lấy chỗ lưu dữ liệu mới vào.
Mong mọi người cho ý kiến.
What's DataAccessHelper?
Giúp bạn thực hiện việc thao tác với CSDL bằng ngôn ngữ VBScript một cách nhanh chóng, hiệu quả.
Tránh việc viết đi viết lại nhiều lần câu lệnh tạo đối tượng kết nối, đối tượng lệnh(Command), đối tượng chứa tập kết quả trả về từ một câu lệnh truy vấn Select (Recordset).
1. Trong DataAccessHelper có Config.bmo chứa thông tin cấu hình kết nối CSDL và thông tin về tác giả(Thư viện)
2. Trong Management có EmployeeManagement với các Function AddEmployee, UpdateEmployee, DeleteEmployee, SelectEmployees(Sử dụng cho việc test thư viện DataAccessHelper)Code:' Thong tin ve tac gia. Public Const Author = "HOANG VAN LUU" ' Ten tac gia Public Const Mobile = "0934353510" ' So dien thoai Public Const Email = "[email protected]" ' Hop thu dien tu. Public Const Profile = "ISS" ' Profile ' Thong tin Server. Private Const SERVER_NAME = "HOANGLUU-PC\WINCC" ' Ten Server Private Const DATABASE_NAME = "ODBC_SQL_SERVER_ADVANCE" ' Ten CSDL. Private Const USER_NAME = "itda" ' Ten nguoi su dung. Private Const PASSWORD = "123456" ' Mat khau nguoi su dung. ' Ham doc chuoi ket noi Csdl. Function GetSQLConnectionString(Byref SQLConnectionString) ' Ket noi Csdl thong qua OLEDB. SQLConnectionString = "Provider=SQLOLEDB.1; Data Source ="& SERVER_NAME &"; uid=" & USER_NAME & "; pwd=" & PASSWORD & "; Initial Catalog = " & DATABASE_NAME & ";" ' Ket noi Csdl thong qua DNS. 'SQLConnectionString = "Provider=MSDASQL;DSN=ODBC_SQL_SERVER_ADVANCE;UID=;PWD=;" End Function
Chú ý các Tags:
EmpId : kiểu Int
EmpName : kiểu String
EmpAge: kiểu Int.
3. Tải ví dụ mẫu: http://www.mediafire.com/?79oo0s0lxfug9r7Code:' Khai bao bien va hang so. Const TableName = "tblEmployee" Const EmpId = "EmpId" Const EmpName = "EmpName" Const EmpAge = "EmpAge" ' Them moi nhan vien. Public Function AddEmployee() Dim columnNames ' Ten cot trong csdl. Dim values ' Gia tri ban can insert vao csdl. ' Gan gia tri cho mang columnNames, values. columnNames = Array(EmpId, EmpName, EmpAge) values = Array(HMIRuntime.Tags(EmpId).Read, HMIRuntime.Tags(EmpName).Read, HMIRuntime.Tags(EmpAge).Read) ' Goi ham insert vao csdl. Call Insert(TableName, columnNames, values) End Function ' Cap nhat thong tin nhan vien. Public Function UpdateEmployee() Dim columnNames ' Ten cot trong csdl. Dim values ' Gia tri ban can insert vao csdl. Dim keyColumns ' Cot dieu kien. Dim keyValues ' Cot gia tri dieu kien. ' Gan gia tri cho mang columnNames, values, keyColumns va keyValues. columnNames = Array(EmpName, EmpAge) values = Array(HMIRuntime.Tags(EmpName).Read, HMIRuntime.Tags(EmpAge).Read) keyColumns = Array(EmpId) keyValues = Array(HMIRuntime.Tags(EmpId).Read) ' Goi ham update vao csdl. Call Update(TableName, columnNames, values, keyColumns, keyValues) End Function ' Xoa nhan vien. Public Function DeleteEmployee() Dim keyColumns ' Cot dieu kien. Dim keyValues ' Cot gia tri dieu kien. keyColumns = Array(EmpId) keyValues = Array(HMIRuntime.Tags(EmpId).Read) ' Gan gia tri cho mang keyColumns va keyValues. Call Delete(TableName, keyColumns, keyValues) End Function ' Doc danh sach nhan vien. Public Function SelectEmployees() Dim strSQLParam ' Chuoi truy van csdl. Dim objRecordset ' Tap ket qua sau khi thuc hien truy van. On Error Resume Next strSQLParam = "SELECT * FROM " & TableName ' Goi Ham Selects tu csdl. Call Selects(strSQLParam, objRecordset) Do While objRecordset.EOF = False HMIRuntime.Trace objRecordset.Fields("EmpId").Value & ": " & objRecordset.Fields("EmpName").Value & ": " & objRecordset.Fields("EmpAge").Value &vbCrLf objRecordset.MoveNext Loop If Err.Number <> 0 Then MsgBox CStr(Err.Number) & Err.Description, vbOKOnly, "Thong bao" Err.Clear End If Call CloseConnection() ' Goi ham dong ket noi voi csdl. End Function
Tải xong giả nén, mở file "ODBC_SQL_SERVER_ADVANCE_QUERY" trong thư mục vừa giả nén bằng SQL Server 2005/2008/2012 rồi nhần F5 hoặc nhấn Execute trên thanh công cụ của IDE SQL Server để tạo DataBase và bảng CSDL để test.
Mở Project "SQL_SERVER_UTILS" trong thư mục vừa giả nến để chạy test thử thao tác với CSDL SQL Server là OK.
4. Hướng dẫn sử dụng thư viện:
1. Tạo 1 Project từ IDE của WINCC.
2. Tải 2 files DataAccessHelper.rar và Management.rar về rồi giả nén.
3. Copy 2 thư mục vừa giả nén vào ScriptLib bên trong thư mục project bạn vừa tạo là có thể sử dụng được.
Lần sửa cuối bởi luuhoang, ngày 10-28-2013 lúc 11:08 PM.
có bạn nào sử dụng vb, hoặc visua c# lập trình opc liên kết với plc. mình có thể dùng cách đó để đọc và ghi các biến trong plc và thao tác với cơ sở dữ liệu sql hoặc access cũng rất dễ dàng. Bạn nào đang làm cái này rồi cho mình trao đổi với nhé
Mình cũng đang viết chương trình giám sát cho vb thông qua OPC để giám sát và điều khiển PLC. mô phỏng thì cũng ok rồi. có chạy thực tế với PLC S7200 Với PCacess thấy cũng ổn định. Bạn đã làm thực tế với nó bao giờ chưa. Còn việt đọc dữ liệu từ Wincc thì có lệnh VB rất đơn giản thôi. Khi muốn ghi dữ liệu ở 1 Tag của Wincc vào Database mình tạo ra và sau đó xử lý ở trên đó cũng được. Lúc này Wincc chính là 1 OPC và chỉ việc đọc và hiển thị dữ liệu mà thôi. Code để mình tìm lại sau
Chao ae.hien tai trong nha may minh co he thong dieu khien PCS7. Bay gio minh muon lay du lieu qua trinh trong wincc(tich hop trong PCS7) ra excel thi minh lap trinh VBS trong global script va tao database trong sql 2000.Nhung khi tao nut an (button) trong wincc de goi file excel ra thi trong file excel nay khong co gia tri qua trinh. Mong ae cao thu nao da lam ve cai nay roi to giup minh voi. thanks
http://www.mediafire.com/download/66...arm+Export.xls
Đây là file excel OLE-DB , trong file này đã có code lấy dữ liệu từ database, và giao diện. Các bác có thể xem và nghiên cứu code @@.
@@ copyright ?> siemens forums
Đánh dấu