Bài toán đặt ra là ta có hai tag giá trị quá trình và một nút lệnh "Update CSV". Khi ta click nút lệnh, ta sẽ đọc các giá trị này rồi ghi ra file .csv định sẵn, ta ghi vào cuối file, không xóa các dữ liệu có sẵn, tức là ghi ở chế độ append.
Chuẩn bị
Ta sẽ tạo giao diện như hình:
- Tạo project WinCC
- Tạo hai tag với thông số như bảng sau
- TênKiểu dữ liệusi32ValueSigned 32-bit valuefValueFloating-point number 32-bit IEEE 754
- Tạo nút lệnh và hai IOFiled như hình.
- Gán text của nút lệnh là "Update CSV". Khi ta click nút này sẽ cập nhật dữ liệu mới vào cuối file csv.
- Liên kết tag cho một IOFiled là tag "si32Value". Ta dùng IOField để thay đổi giá trị của tag "si32Value".
- Liên kết tag cho IOFiled còn lại là tag "fValue". Ta dùng IOField để thay đổi giá trị của tag "fValue".
Tạo mã
Cập nhật file csv gồm các bước sau:
- Mở file, nếu lỗi thì không làm gì cả. Nếu mở file thành công thì làm các bước sau.
- Đọc các giá trị quá trình.
- Ghi các giá trị quá trình vào dòng cuối file trong định dạng ([si32Value],[fValue])
Các bạn có thể tham khảo các hàm dùng cho file như fopen, fprintf, fclose trên mạng nhé.
/*
Script
ghi du lieu vao cuoi file. cac gia tri cach nhau boi dau ','
Dinh
dang: [si32Value],[fValue]
*/
//
Duong dan file csv, nguoi dung co the thay doi no theo y minh
#define
CSV_FILE_PATH "D:/csv/export_wincc.csv"
//
Khai bao bien
FILE*
file = NULL;
int
si32Value = 0;
float
fValue = 0.0f;
//
Mo file va ghi du lieu vao cuoi file. Neu file khong ton tai ->
tao file
file
= fopen(CSV_FILE_PATH, "a");
if(file
== NULL) //
Neu khong the mo file -> khong lam gi ca
return;
//
doc du lieu tu cac tag
si32Value
= GetTagSDWord("si32Value");
fValue
= GetTagFloat("fValue");
//
Ghi du lieu vao dong cuoi file
fprintf(file,
"%d,%f\n",
si32Value, fValue);
//
Dong file
fclose(file);
|
Đến đây ta đã hoàn tất các công việc, bây giờ bạn quay trở lại WinCC Explorer rồi active WinCC runtime để test nhé. Nhớ là phải kích hoạt "Global Script Runtime" cho WinCC Runtime nhé. Các bạn có thể tham khảo cách kích hoạt "Global Script Runtime" và tạo Global Action ở link dưới.
http://step7control.blogspot.com/2015/10/tao-chuyen-ong-dung-c-script-va-timer.html
Sau đây là dữ liệu của file mà tôi đã test.
Sau đây là dữ liệu của file mà tôi đã test.
Các bài liên quan:
- http://step7control.blogspot.com/2015/10/protectunprotect-cac-khoi-s7-300-s7-400.html
- http://step7control.blogspot.com/2014/02/vi-du-mau-s7-300-lap-trinh-va-mo-phong.html
- http://step7control.blogspot.com/2014/02/tao-connection-trong-wincc.html
- http://step7control.blogspot.com/2014/02/kha-nang-ket-noi-cua-wincc-voi-plc.html
- http://step7control.blogspot.com/2014/02/vi-du-mau-s7-300-mo-phong-tren-wincc.html
C-Script của sự kiện "Mouse Click", chổ này mình tìm hoài không thấy, bạn cho mình hỏi thêm, khi các iofield tự động thay đổi thì trong file excell có tự động thay đổi và xuống dòng không
ReplyDeletecho mình hỏi là muốn hiện thêm ngày giờ thì dùng lệnh nào vậy a?
ReplyDelete