Wednesday, October 28, 2015

Tạo chuyển động dùng C-Script và Timer trong WinCC

Trong bài này, ta sẽ tạo chuyển động cho một hình tròn chuyển động tịnh tiến từ điểm đầu đến điểm cuối. Yêu cầu bài toán là tạo một picture, trong picture có hai nút nhấn "Start" và "Stop" và một hình tròn. Khi bấm nút "Start" thì hình tròn được đưa về vị trí ban đầu và bắt đầu chuyển động, khi bấm nút "Stop" thì dừng.

Chuẩn bị:

  • Trước hết ta tạo một project "example".
  • Trong project tạo một tag nội kiểu "Binary Tag" với tên là "bRun", gán giá trị khởi tạo cho nó là FALSE.
  • Tiếp theo ta tạo 1 picture "main", trong picture main ta thêm các đối tượng với các thuộc tính như trong bảng sau.

Name
Global Shadow
Global Color Scheme
Position X
Position Y
Width
Height
btnStart
Yes
Yes
30
30


btnStop
Yes
Yes
160
30


circle
No
No
30
100
40
40


Tạo chuyển động

Để tạo chuyển động cho circle, ta sẽ gán giá trị cho thuộc tính "Position X" và "Position Y" của circle để thay đổi vị trí của circle. Trong WinCC, ta có thể liên tục xác lập vị trí của circle bằng cách dùng timer với action, sau mỗi chu kỳ của timer, ta xác lập lại vị trí của circle bằng cách viết mã trong action.

Tạo một action trong C-Script và gán nó với một timer


  • Trong view bên trái của WinCC Explorer, right click trên "Global Script -> Open C Editor" để mở Global Script C.
  • Trong Global Script C ở view bên trái right click "Actions -> New" để tạo một action.


  • Click biểu tượng trên thanh toolbar để mở hộp thoại "Properties", chọn tab "Trigger".
  • Click chọn "Timer -> Cyclic" rồi click "Add" để mở hộp thoại "Add Trigger".
  • Chọn kiểu Event là "Standard Cycle", Trigger name là "tmr250", Cycle là "250 ms".
                                      

  • Click OK trên các hộp thoại để hoàn tất việc tạo timer cho action.
Đến đây ta đã gán timer 250 ms cho action này, action này sẽ chạy sau mỗi 250 ms.

Tạo mã cho action

Bây giờ chúng ta sẽ tạo mã cho action để nó xác lập lại vị trí cho circle sau mỗi chu kỳ của timer 250 ms. Các bạn copy đoạn code dưới đây rồi paste vào trình soạn thảo C-Script của WinCC.


#include "apdefap.h"
#define PIC_NAME "main"
#define CIRCLE_NAME "circle"
#define TAG_RUN "bRun"
int gscAction( void )
{
int iStepX = 5;
int iStepY = 5;
int iMaxX = 200;
int x, y;
BOOL bRun;
bRun = GetTagBit(TAG_RUN);
if(!bRun) // Neu khong chay -> khong lam gi ca
return 0;
x = GetLeft(PIC_NAME, CIRCLE_NAME); // Lấy tọa độ X của circle
y = GetTop(PIC_NAME, CIRCLE_NAME); // Lấy tọa độ Y của circle
if( x < iMaxX ){
x += iStepX; // Tịnh tiến theo phương X
y += iStepY; // Tịnh tiến theo phương Y
// Kiểm tra nếu đã đạt tới điểm cuối thì dừng
if( x >= iMaxX ){
x = iMaxX;
}
SetLeft(PIC_NAME, CIRCLE_NAME, x); // Xác lập tọa độ X mới
SetTop(PIC_NAME, CIRCLE_NAME, y); // Xác lập tọa độ Y mới
}
return 0;
}

Sau khi tạo mã xong, bạn click trên biểu tượng để compile action, sau đó lưu lại với tên "rotate_circle.pas". Đến đây ta đã xong phần tạo chuyển động cho circle. Bây giờ ta tạo event cho hai nút "Start" và Stop". Ta chỉ cần SET bit "bRun" khi nhấn nút "Start" và RESET nó khi nhấn nút "Stop", ta cũng phải cần xác lập lại vị trí ban đầu cho circle khi nhấn nút "Start".

Tạo event cho button "Start"
Trong Graphic Designer, click chọn nút "Start" -> click biểu tượng để mở hộp thoại "Object Properties" -> chọn tab "Events" -> chọn "Mouse" ở view bên trái -> chọn "Mouse Click" ở view bên phải -> right click -> "C-Action..." -> Mở hộp thoại "Edit Action". 


Trong "Edit Action" bạn tạo mã như sau

#include "apdefap.h"
void OnClick(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName)
{
#define PIC_NAME "main"
#define CIRCLE_NAME "circle"
SetLeft(PIC_NAME, CIRCLE_NAME, 30); // Xác lập tọa độ X cua diem dau
SetTop(PIC_NAME, CIRCLE_NAME, 100); // Xác lập tọa độ Y cua diem dau
SetTagBit("bRun", TRUE);
}

Click trên biểu tượng để compile rồi click OK để đóng hộp thoại. 

Tạo event cho button "Stop"

Làm tương tự như nút "Start".
Tạo mã như bên dưới


#include "apdefap.h"
void OnClick(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName)
{
SetTagBit("bRun", FALSE);
}

Đến đây ta đã xong tất cả các bước, bây giờ ta có thể chạy WinCC Runtime để xem thành quả.

Chạy WinCC Runtime

Do ta dùng Global Action C-Script nên ta phải kích hoạt "Global Script Runtime" cho WinCC Runtime. Ta làm theo các bước sau.
Trong WinCC Explorer, click chọn "Computer" ở view bên trái -> chọn máy tính của bạn ở view bên phải ->double click để mở hộp thoại "Computer properties" -> chọn tab "Starup"
Tick chọn vào mục "Global Script Runtime" trong hộp danh sách
Click OK để đóng hộp thoại.




Cuối cùng bạn quay trở lại WinCC Explorer và Activate WinCC Runtime, bạn hãy thử click nút "Start" và "Stop" để xem hiệu ứng nhé.


Các bài liên quan:

6 comments:

  1. bài viết rất hay và chi tiêt
    nhưng minh dùng Wincc trong Tia Portal , minh không biết làm sao để đặt 1 action theo timer trong nay được. bạn có thể hướng dẫn mình vs k?

    ReplyDelete
    Replies
    1. Siemens Automation: Tạo Chuyển Động Dùng C-Script Và Timer Trong Wincc >>>>> Download Now

      >>>>> Download Full

      Siemens Automation: Tạo Chuyển Động Dùng C-Script Và Timer Trong Wincc >>>>> Download LINK

      >>>>> Download Now

      Siemens Automation: Tạo Chuyển Động Dùng C-Script Và Timer Trong Wincc >>>>> Download Full

      >>>>> Download LINK c1

      Delete
  2. hay lắm bạn ah thanks bạn nhiều nhé

    ReplyDelete
  3. Siemens Automation: Tạo Chuyển Động Dùng C-Script Và Timer Trong Wincc >>>>> Download Now

    >>>>> Download Full

    Siemens Automation: Tạo Chuyển Động Dùng C-Script Và Timer Trong Wincc >>>>> Download LINK

    >>>>> Download Now

    Siemens Automation: Tạo Chuyển Động Dùng C-Script Và Timer Trong Wincc >>>>> Download Full

    >>>>> Download LINK CL

    ReplyDelete