Trong một dây chuyền sản xuất nếu một khâu nào đó gặp vấn đề nếu không được phát hiện kịp thời sẽ ảnh hưởng đến các khâu khác và toàn bộ dây chuyền, không chỉ nói đến thiệt hại về kinh t
Trang 1Chương 1: ĐẶT VẤN ĐỀ
1.1 Lý do chọn đề tài:
Đất nước ta đang trên đà phát triển, đời sống kinh tế của nhân dân đã từng buớc được cải thiện, bộ mặt đất nước cũng thay đổi hẳn ra, đường phố ngày một đẹp, xí nghiệp, nhà máy mọc lên ngày càng nhiều, xuất hiện nhiều khu công nghiệp Sự thay đổi lớn ấy chắc chắn có sự đóng góp không nhỏ của ngành công nghiệp
Trong công nghiệp vấn đề điều khiển, giám sát và thu thập dữ liệu (SCADA) là hết sức cần thiết và quan trọng Trong một dây chuyền sản xuất nếu một khâu nào đó gặp vấn đề nếu không được phát hiện kịp thời sẽ ảnh hưởng đến các khâu khác và toàn bộ dây chuyền, không chỉ nói đến thiệt hại về kinh tế mà còn nguy hiểm đến tính mạng người lao động
Công nghiệp nước ta tuy có phát triển nhưng các nhà máy xí nghiệp nước ta thường nhỏ và đã sữ dụng công nghệ cũ nên phần lớn trong dây chuyền sản xuất không có phần giám sát nếu có thì phần lớn là tự chế tạo nên không đồng bộ và không đảm bảo chất lượng Khi nuớc ta vào giai đoạn hội nhập quốc tế, các mặt hàng đều phải cạnh tranh cả về giá cả và chất lượng với những mặt hàng nhập từ nước ngoài Vì thế các công ty xí nghiệp thường đầu tư xây dựng lại hệ thống sản xuất mới Để đảm bảo chất lượng họ thường chọn những nhà cung cấp PLC đáng tin cậy để lắp đặp vào hệ thống của mình như Siemens, Omron, Mitsubishi Ngoài chọn PLC họ còn chọn các thiết bị khác để hình thành hệ thống sản xuất Đối với những công ty lớn họ sẽ thiết lập thành một mạng truyền thông công nghiệp Nhiệm vụ còn lại là giám sát hệ thống vừa lắp đặc
Có rất nhiều phần phần mền giám sát hệ thống nhưng Winlog Lite với khả năng có thể giám sát được các dòng PLC khác nhau, là một phần mền SCADA chưa được nghiên cứu kỹ cùng với sự định hướng của Thầy Đồng sĩ Linh, em quyết định chọn tên đề tài: TÌM HIỂU ỨNG DỤNG PHẦN MỀM WINLOG LITE GIÁM SÁT CÁC DÒNG PLC KHÁC NHAU
1.2.Mục tiêu_đối tượng nghiên cứu:
Nghiên cứu đề tài này người thực hiện đặt ra nhũng mục tiêu sau:
- Sử dụng thành thạo phần mềm này
- Thiết kế được giao diện giám sát
- Viết được chương trình của các dòng PLC
- Giám sát được các dòng PLC này
Đối tượng nghiên cứu: phần mềm Winlog Lite
1.3 Giới hạn đề tài:
Do thời gian và kiến thức có hạn nên người thực hiện đề tài này tập trung vào tìm hiểu cách sữ dụng phần mềm Winlog Lite, ứng dụng giám sát S7-200, S7-300
củaSiemens,CPM2AcủaOmron
Trang 2Chương 2: GIỚI THIỆU
2.1.Giới thiệu:
Phần mền này được cung cấp bởi công ty Sielco Sistemi là một công ty của Italia, chuyên cung cấp phần mềm giám sát hệ thống và xây dựng hệ thống tự động Phần mềm winlog lite là một phần mềm giám sát hệ thống dùng trong công nghiệp, nó thường ứng dụng để giám sát những hệ thống SCADA nhỏ, cho các máy khách Để giám sát các hệ thống SCADA lớn thì có Winlog Pro, thường dùng cho các máy chủ
Chúng có khả năng điều khiển giám sát trong dây chuyền sản xuất trong các nhà máy xí nghiệp, lưu trữ và xữ lý dữ liệu, điều khiển từ xa các thiết bị ngoại vi, điều khiển giám sát qua hệ thống mạng internet
Nó được vận dụng để điều khiển giámsát trong rất nhiều lịnh vực: từ ngành dệt đến sản xuất nhựa( chất dẻo), từ sản xuất gỗ đến chế biến thực phẩm, từ sản xuất đồ gốm đến lĩnh vực viễn thông …
Phần mềm Winlog lite có thể sữ dụng tất cả các công cụ và các hàm được cung cấp ở phần mềm Winlog Pro Có thể tải trực tiếp phần mềm này từ trang web: http://www.sielcosistemi.com với phiên bản dùng thử cho phép giám sát hệ thống trong 15 phút Để sữ dụng phiên bản chính thức ta phải mua với giá 49 Euro
2.2 Một số ứng dụng:
Một số ứng dụng mà nhà cung cấp đã thiết kế:( từ trang web http://www.sielcosistemi.com)
Điều kiển giám sát nhiệt độ trong nhà máy luyện kim
Hình 2.1 Giao diện giám sát nhiệt độ trong nhà máy luyện kim
Trang 3Trong nhà máy sản xuất kem:
Hình 2.2 Giao diện giám sát nhà máy sản xuất kem
Trong nhà máy sợi:
Hình 2.3 Giao diện giám sát nhà máy sản xuất sợi
Trang 4Chương 3: TÌM HIỂU CÁCH SỬ DỤNG PHẦN MỀM
Hình 3.1 Quản lý dự án
Bên trái của màn hình là liệt kê những danh sách các dự án Bên phải giao diện là các công cụ trong dụ án màta chọn
Mách nước:
Execute + Shift : Chạy dự án mà không cần lấy lấy mẫu các cổng
Execute + Ctrl: Chạy dự án mà không cần ghi dữ liệu
Tạo dự án mới:
Trang 5Tạo một dự án mới mà không cần định dạng các thiết bị, chọn mục project/ new Sau đó đánh tên vào nhưng không quá 255 ký tự
Sao chép dự án:
Để nhân đôi dự án bạn cần chọn nó và gọi lệnh copy từ project menu Ta đặt tên lại cho dự án
Xóa dự án:
Để xóa một dự án chọn nó và chọn lệnh delete từ project menu
Lưu ý: Khi xóa dự án rồi ta không thể phục hồi lại được!
Đổi tên dự án:
Chọn dự án và chọn rename từ project
Định dạng dự án:
Các mục mà ta cần hiệu chỉnh: Options, Channels, Devices, Access Groups
Để hiệu chỉnh ta double click lên mục mà ta cần hiệu chỉnh
Mục Options:
Thẻ General:
Caption: Tựa đề mà sẽ xuất hiện khi chạy thời gian thực
Description: Miêu tả đơn giản dự án
Default language: Ngôn ngữ mà sẽ được sữ dụng trong khi chạy Runtimes
Graphic update time (sec): Khoảng thời gian cách nhau giữa 2 lần làm tươi hình ảnh hiển thị
Trang 7Hide main menu: Dấu menu chính trong khi chạy chương trình Runtime
Hide main button bar: Dấu nút thể hiện thanh chính trong khi chạy Runtime
Hide template object popup menu: Dấu menu thiết kế dự án trog khi chạy Runtime Writing buffer size: Dung lượng nhớ đệm, nơi mà dữ liệu xếp nối đui nhau trước khi gởi đến các thiết bị Mổi kênh đều có dung lượng nhớ đệm
High priority write: Nếu được chọn, các dữ liệu mà gởi đến thiết bị sẽ gởi với quyền được ưu tiên lớn nhất, nếu không thì nó sẽ được gởi sau một chu kỳ lấy mẫu
Automatic alarm print:
Nếu được chọn, khi có một sự cảnh báo nào nó sẽ tự động in cảnh báo đó
Hình 3.6 Thẻ System
Trang 8Thẻ Client:
Utilize Client for Microsoft network: Chia sẽ thông tin mà ta thiết kế trên Template Builder cho các trạm khác nếu chúng được kết nối mạng với nhau qua giao thức TCP/IP Chúng ta cũng có thể đọc/viết trong thư mục DBTABLES trên tất cả các trạm
Timeout (s): Thời gian không tính của giao thức TCP/IP
Hình 3.7 Thẻ Client
Mục channels
Bạn phải nhớ rằng một kênh là một cổng truyền tin dùng để truyền tin với các thiết
bị mở rộng
Hình 3.8 Mẫu thiết lập kênh truyền
Trong ảnh trên bạn chọn kênh là 1, giao thức truyền tin là Simatic S5 Bạn có thể thiết lập các tham số của giao thức truyền tin bàng cách chọn vào nút Option
Mục devices
Phần mềm này cho phép giám sát sự truyền tin của tất cả các thiết bị đã kết nối Để làm được điều này các thiết bị phải nối vào một kênh nào đó và phải có địa chỉ riêng của nó Bạn cũng có thể miêu tả ngắn gọn về thiết bị, hiệu chỉnh lại, và cũng có thể bỏ các thiết hiện có
Trang 9Hình 3.9 Mẫu thiết lập thiết bị
Mục access groups
Có 15 nhóm từ nhóm 1 đến nhóm 15 Ta có thể đặt tên của từng nhóm nhưng không quá 12 ký tự Việc đặt các nhóm để dễ quản lý và trực quan hơn( Ta sẽ tìm hiểu kỹ hơn ở user’s code)
Hình 3.10 Mẫu thiết lập nhóm truy xuất
Mục template Configuration
Sử dụng họp thoại như bên dưới để lựa chọn cột để hiển thị trong thiết kế mẫu, chúng ta có thể đổi tên các cột cần hiển thị để làm cho rõ ý nghĩa hơn hơn
Trang 10Hình 3.11 Thiết lập sự kiện cảnh báo
Mục gates
Phần mềm quản lý được các cổng sau:
Kiểu số: số thực
Logic: giá trị 0 và 1
Kiểu chuổi: Các ký tự nối tiếp
Sự kiện và cảnh báo: hoạt động dựa vào giá trị các cổng
Để định dạng giá trị ta chỉ cần double click vào biểu tượng tương ứng
Nhấp double click vào tên ta sẽ mở giao diện Code Builder
Mách nước:
Double click + Shift là mở file với giao diện wordPad
Mục reports
Có 3 loại báo cáo: TXT, RTF, DAT
TXT: Là loại báo cáo chỉ chứa kiểu định dạng văn bản đơn giản
RTF: Là loại báo cáo chỉ chứa kiểu định dạng văn bản và đồ thị
DAT: Là loại báo cáo chứa đựng dữ liệu theo hàng định dạng kiểu văn bản
TXT Report (Standard Text Format) và RTF Report(Rich Text Format):
Hai loại Report này khi được tạo ra sẽ có hộp thoại như sau:
Trang 11Hình 3.12 Tạo báo cáo (report)
File type: là loại file thực thi, TXT hoặc RTF
Historical files: Số file report sinh ra được được giữ trên đĩa
Output file: Nơi lưu trữ file report được sinh ra cuối cùng
Show on creation: Trình diện report khi nó được tạo ra
Print on creation: In report khi nó được tạo ra
Period type: Xác định tần xuất in report
Lưu ý: Report có thể được sinh ra bởi những hàm đặc biệt trong code Builder hoặc Run time Report_creat
Time: Report sẽ được tạo ra tại hh:mm:ss
DayOfWeek: Report sẽ tạo tại tại ngày x của tuần
DayOfMonth: Report sẽ tạo tại ngày x của mỗi tháng
DayAndMonth: report sẽ tạo tại ngày x của tháng y
Synchronism time: Xác định thời gian mà bắt đầu giai đoạn đếm để sinh ra Report Modify: Chỉnh lại file nguồn, nó có thể chứa file văn bản hoặc lệnh
Chúng phải đặt trong dấu ngoặc đơn và chứa một biểu thức
Ví dụ:
{Beep()}{// đây là ghi chú}
Tạo một Report tự động
Mã code xuất hiện họp thông báo: {InputDialog("Insert a comment ","Report creation","")}
Giá trị hiện tại của cổng: {GetNumGateValue("Tr",1)}
Giá trị hiện tại Delta: {GetNumGateValue("Ts",1)-GetNumGateValue("Tr",1)}
Trang 12Report kiểu DAT
Dat report không giống như TXT hay RTF report được tạo ra trong một thời gian Những hàng của báo cáo được sinh ra phụ thuộc vào tần số lưu Khi một cổng thay đổi làm cho nó không thỏa điều kiện thì một hàng mới được sinh ra, sau đó nó được sinh ra nữa phụ thuộc vào tần số lưu mãi cho đến khi giá trị của cổng trở về trạng thái thỏa mãn điều kiện
Khi vượt quá điều kiện thì một bản Report mới lại được sinh ra Một bản Report chứa nhiều hàng, mổi hàng chứa nhiều cột; cột đầu tiên là ngày, tháng, năm, giờ, phút, giây sau đó là các biến được định nghĩa trong bảng table File columns
Nếu được xác định để thể hiện thì ta sẽ xuất hiện cửa sổ định dạng sau:
Hình 3.13 Báo cáo kiểu DAT
File type: Là loại file được ủng hộ (TXT HOẶC RTF)
Historical files: Số file được lưu trữ trên đĩa
Output file: Nơi lưu trữ tệp tin báo cáo
Trigger (cho phép ghi): Xác định cổng mà sẽ cho phép hoặc không cho phép lưu trữ vào bảng report
Condition: Định điều kiện của cổng làm “nút bấm”
Separator: Cho phép lựa chọn ký tự để ngăn cách giữa các cột trong một bản báo cáo
Save frequency: Định tần số lưu một hàng mới vào bảng Report
File columns: Định dữ liệu ghi vào một dòng đơn của tệp báo cáo Mổi dữ liệu là một đại diện của một trong các cổng: Số, Logic, Phức hợp, chuổi, sự kiện
Trang 13Template:
Thư mục này chứa tất cả các trang giám sát, nhấn chuột phải vào màn hình trắng bên phải, nếu dấu nháy không chọn trúng bất kỳ biểu tượng nào thì ta tạo một mẫu mới Ngược lại bạn có thể thao tác như một tập tin bất kỳ( copy, cut, paste, rename) Mách nước:
Double click + Shirt mở file ở giao diện WordPad
Giám sát trực tiếp trạng thái các cổng
Để giám sát trạng thái các cổng trước hết ta ta phải khái báo chúng trong (mẫu giám sát)
Trong thư mục recipe models chứa tất cả các mẫu giám sát, bằng việc nhấn chuột phải vào màn hình bên phải, nếu con trỏ không chọn được bất kỳ biểu tượng nào thì
ta tạo được một mô hình mới, nếu chọn được một biểu tượng thì ta có thể truy xuất nó như một tập tin bất kỳ (copy, cut, paste, rename)
Hình 3.14 Mẫu giám sát trạng thái các cổng trực tiếp
Trong hộp thoại trên, ở nửa trên là các cổng đơn, nửa dưới là các cổng gộp của dự án Ta sử dụng các nút add gate, delete gate để thêm và bỏ cổng Nút comment để ghi ghi chú
Images
Trong thư mục này chứa tất cả các hình ảnh sử dụng trong dự án Bằng việc nhấn chuột phải vào màn hình bên phải, nếu con trỏ không chọn được bất kỳ biểu tượng
Trang 14nào thì ta tạo được một mô hình mới, nếu chọn được một biểu tượngthì ta có thể truy xuất nó như một tập tin bất kỳ (copy, cut, paste, rename)
Double click vào ảnh ta sẽ mở hình ảnh đó ở một chương trình xem ảnh có khả năng mở được file ảnh đó
Keyboards
Khi một ứng dụng đang thực thi nếu không có bàn phím mà chỉ có màn hình giám sát, khi ấy ta sẽ sử dụng các phím ảo đã được định nghĩa cho việc nhập dữ liệu Trong thư mục này chứa tất cả các phím ảo dùng cho ứng dụng đó Bằng việc nhấn chuột phải vào màn hình bên phải, nếu con trỏ không chọn được bất kỳ biểu tượng nào thì ta tạo được một mô hình mới, nếu chọn được một biểu tượngthì ta có thể truy xuất nó như một tập tin bất kỳ (copy, cut, paste, rename)
Double click + Shirt mở file ở giao diện WordPad
3.2 Mã lệnh (Code Builder):
3.2.1 Giới thiệu:
Code Builder là một mối trường được thiết kế để tạohàm dễ hơn
Nó cho phép viết code, lưu, tạo mới, kiểm tra cấu trúc
Để giảm lổi các biến thường có màu khác nhau
3.2.1.1 Bước đầu tiên:
Mở code builder, xem môi trường code Builder
Bạn vào file=> open (để mở file code đã có sẵn)
Hoặc file =>new để tạo file code mới
Hình 3.15 Giao diện viết mã lệnh
Trang 15Hình 3.16 Mã lệnh mẫu
3.2.1.2 Thanh công cụ nhanh (Speedbar):
Thanh này thường hổ trợ cho những hàm được gọi từ menu
Bạn chỉ chuột vào sẽ xuất hiện ra một sự giải thích nhỏ
Trang 16Phím Hàm
CTRL + Z Trảng lại trạng thái trước đó
CTRL + F9 Kiểm tra cấu trúc mã làm việc
CTRL + Y Xóa hành tại vị trí dấu nhắc
CTRL + L Con trỏ chuột về phía trái của từ CTRL + R Con trỏ chuột về phía phải của từ CTRL + HOME Con trỏ chuột về đầu trang
CTRL + END Con trỏ chuột về cuối trang
Bảng 3.1 Sử dụng các phím tắt
Trang 17Structures : giống như những hàm cho phép bạn lướt qua và thêm vào ngôn ngữ cho cấu trúc
3.2.1.5.Sử dụng bộ nhớ đệm:
Vùng nhớ tạm là một khu vực mà không thể truy xuất trực tiếp, nơi mà bạn có thể chèn hoặc xóa mã lệnh
Chọn khu vực cần sao chép hoặc xóa(có nhiều cách chọn)
Sau đó chọn vị trí để gián
Trang 18Hình 3.17 Ví dụ về sao chép trong khi viết mã lệnh
3.2.2.Menus:
3.2.2.1.Giới thiệu:
Bây giờ chúng ta sẽ thấy chi tiết về những hàm những hàm được cung cấp bởi menu Khi bạn đang làm việc có 2 cách để truy xuất menu: đầu tiên là sữ dụng chuột, thứ hai là sữ dụng phím tắt kết hợp với những từ gạch dưới của menu
3.2.2.2.Menu File:
Là nơi lưu trữ tất cả các hàm cần thiết và in mã lệnh
Bạn có thể mở, đóng, lưu những gì bạn đang làm
3.2.2.3.Menu Edit:
Menu edit bao gồm tất cả những hàm cần thiết cho việc chỉnh sữu mã lệnh và thiết lập môi trường làm việc
Trang 193.2.2.8.Thiết lập môi trường làm việc
Chúng ta có thể thay đổi môi trường làm việc bằng cách chọn Preferences từ menu Edit sẽ xuát hiện một hộp thoại cho phép chúng tat hay đổi màu nền, tên hàm, biến…
Trang 20Hình 3.18 Thiết lập môi trường làm việc
3.2.3 Thư viện hàm API
Là những hàm đã được tạotrong thư viện, chúng được gọi trong bất cứ chương trình nào Trong chương này chúng ta sẽ liệt kê và miêu tả tất cả các hàm, chia chúng ra thành từng nhóm
3.2.3.1.Bit
BitMasK
Miêu tả: Nó xuất phát từ hàm AND giữa một số và một mặt nạ
Cấu trúc: int BitMask(int Num, int Mask)
Biến: Num: số để truy xuất
Mask: mặt nạ( vị trí bit từ 0 đến 31)
Giá trị trả về: Kết quả sau khi lấy hàm And giữa một số và một mặt nạ
Ví dụ:
LowByte=BitMask(Value,HexStrToInt("000000FF"));
GetBit:
Miêu tả: Trả lại một bit từ một số
Cấu trúc: int GetBit(int Num, int Bit)
Biến: Num: số để xữ lý
Bit: bit để kiểm tra
Trang 21Giá trị trả về: Bit trả về
Ví dụ: Even =GetBit(A,0);
ResetBit
Miêu tả: Thiết lập bit có giá tri bằng 0
Cấu trúc: int ResetBit(int Num, int Bit)
Biến: Num: số để truy xuất
Bit: bit mà bạn muốn reset
Giá trị trả về: Số với bit đã thay đổi
Ví dụ: A_even=ResetBit(A,0);
SetBit:
Miêu tả: Gán giá trị bằng 1 cho bit
Cấu trúc: int SetBit(int Num, int Bit)
Biến: Num: số để xữ lý
Bit: bit mà bạn muốn thiết lập
Giá trị trả về: Số sau khi thay đổi giá trị của bit
Cấu trúc: StringGetDateString (String Separator, Bool EuropeanStyle)
Biến: Separator: dấu phân cách
EuropeanStyle: truy vấn có dùng kiểu định dạng ngày Châu Âu không?
Trang 22Giá trị trả về: Chuổi ngày
Miêu tả: Trả lại số phút của giờ hiện tại
Cấu trúc: Int GetMinute()
Biến: -
Giá trị trả về: Số phút
Ví dụ: Secs=GetMinute()*60;
GetMonth:
Miêu tả: Cho biết hiện tại là tháng mấy
Cấu trúc: Int GetMonth();
Trang 23Biến: -
Giá trị trả về: Tháng hiện tại
Ví dụ: MonthLeft=12-GetMonth();
GetSecond:
Miêu tả: Cho biết số giây hiện tại
Cấu trúc: Int GetSecond()
Biến: -
Giá trị trả về: Số giây
Ví dụ: Secs=GetMinute()*60 + GetSecond();
Giá trị trả về: Số mili giây
Ví dụ: TimeFromStart = GetTickCount() / TickSize;
GetTimeString:
Miêu tả: Trả lại một chuổi chứa đựng thời gian trong đó giờ, phút, giây, mili giây được phân cách bằng dấu phân cách trong dấu ngoặc kép
Cấu trúc: String GetTimeString(String Separator)
Biến: Dấu phân cách
Giá trị trả về: Chuổi thời gian
Ví dụ: CurrentTime=GetTimeString(":");
GetYear:
Miêu tả: Nó trả lại năm hiện tại
Cấu trúc: Int GetYear()
Miêu tả: Nó tạo một thư mục mới
Cấu trúc: Bool DirectoryCreate(String DirName)
Biến: DirName: tên của thư mục mới
Giá trị trả về: True: nếu tạo thành công
False: bị lổi
Ví dụ: DirectoryCreate("MyProj");
Trang 24DirectoryDelete:
Miêu tả: Xóa một thư mục mới
Cấu trúc: Bool DirectoryDelete(String DirName)
Biến: DirName: tên của thư mục bạn muốn xóa
Giá trị trả về: True: nếu xóa thành công
False: nếu thất bại
Ví dụ: DirectoryDelete("MyProj");
DirectoryGetCurrent:
Miêu tả: Trả lại thư mục hiện hành
Cấu trúc: String DirectoryGetCurrent()
Biến: -
Giá trị trả về: Thư mục hiện hành
Ví dụ: SearchFor=DirectoryGetCurrent()+"\*.*";
DirectorySetCurrent:
Miêu tả: Thiết lập thư mục là thư mục hiện hành
Cấu trúc: Bool DirectorySetCurrent(String NewPath)
Biến: NewPath : tên đường dẫn mới làm thư mục hiện hành
Giá trị trả về: True: nếu đường dẫn được cập nhật
False: bị lổi
Ví dụ: DirectorySetCurrent("y:\projects");
3.2.3.4.FILES:
FileAttrFound: (Củ rồi thường ít dùng)
Miêu tả: Trả lại thuộc tính của một tệp tin được đọc bởi lệnh FileFindFirst hoặc FileFindNext
Cấu trúc: Int FileAttrFound()
Bảng 3.2.Thuộc tính của file
Nếu một file mà có nhiều hơn một thuộc tính thì kết quả là tổng của những thuộc tính đơn
Trang 25FileAttrFoundEx:
Miêu tả hàm: Trả lại thuộc tính của file được tìm thấy bởi các hàm FileFindFirstEx hoặc FileFindNextEx
Cấu trúc: Int FileAttrFoundEx(int biến điều khiển(Handle))
Biến: Biến điều khiển là một số nguyên
Giá trị trả về: Thuộc tính của file vừa tìm được
FileCopy:
Miêu Tả: Sao chép file
Cấu trúc: Bool FileCopy( String Src, String Dst, Bool IfExists)
Biến: Src: file muốn copy
Dst: nơi gởi tới
IfExists = true(không cho phép ghi đè file)/ false( cho phép ghi đè file) Giá trị trả về: True: nếu copy thành công
False: nếu copy thất bại
Miêu Tả: Đóng file đang mở
Cấu trúc: Int FileClose(int Handle)
Biến: Handle: biến điều khiển(kiểu số nguyên)
Giá trị trả về: 0: thành công
Không phải số 0 (thất bại)
Miêu Tả: Dùng để xóa một file
Cấu trúc: Bool FileDelete(string FileName)
Biến: FileName: Tên file cần xóa
Giá trị trả về: True (nếu thành công)
False (nếu có)
Ví dụ:
if (FileExist("Promem.bak")) then
FileDelete("Promem.bak");
End
Trang 26FileEof
Miêu Tả: Trả lại một số khác không nếu việc đọc hoặc ghi ở cuối file Cấu trúc: Int FileEOF (Int Handle)
Biến: Handle: Biến điều khiển của file đã mở
Giá trị trả về: Giá trị tại điểm cuối của file
Ví dụ:
int i=0;
FileHandle=FileOpen("MadeByAPI.dat","rb"); // mở nhị phân
cho việc đọc
While (FileEOF(FileHandle) == 0) // đọc 3 ký tự tại một thời điểm
Miêu Tả: Cho biết có tồn tại file không
Cấu trúc: Bool FileExist(String FileName)
Biến: FileNam: tên của file cần kiểm tra
Giá trị trả về: True (nếu tồn tại)
False (nếu không tồn tại)
Biến: Handle: Biến điều khiển
Giá trị trả về: -
Trang 27FileFindFirst:
Miêu Tả: Tìm có sự tồn tại file ở trong thư mục không Cấu trúc: Bool FileFindFirst(String Path)
Biến: Path: đường dẫn mà bạn cần tìm file
Giá trị trả về: True (nếu tồn tại ít nhất một file)
False ( thư mục rổng)
FileFindFirstEx:
Miêu Tả: Tìm có sự tồn tại file ở trong thư mục không Cấu trúc: int FileFindFirstEx(String Path)
Biến: Path: đường dẫn mà bạn cần tìm file
Giá trị trả về: 0 nghĩa là có lỗi
Nếu tồn tại trả về một chuỗi khác “”
FileFindNext:
Miêu Tả: Tìm một file khác trong thư mục
Cấu trúc: Bool FileFindNext()
Biến: -
Giá trị trả về: True (nếu có một file khác)
False (không có thêm một file nào khác)
FileFindNextEx:
Miêu Tả: Tìm trong thư mục có thêm file nào khác không Cấu trúc: Bool FileFindNextEx(int Handle)
Biến: Handle: biến điều khiển
Giá trị trả về: True: nếu có
False: ngược lại
FileGetAttr:
Miêu Tả: Trả lại những đặc tính của một file
Cấu trúc: Int FileGetAttr(String FileName)
Biến: FileName: tên của file
Giá trị trả về: Trả lại đặc tính của một file
FileSetAttr:
Miêu Tả: Thiết lập đặc tính của một file
Cấu trúc: Int FileGetAttr(String FileName,Int NewAttr) Biến: FileName: tên file
NewAttr: đặc tính của file
FileGetSize:
Miêu tả:Trả về kích cở của một file
Trang 28Cấu trúc: Int FileGetSize(String FileName)
Biến: FileName: Tên của file
Giá trị trả về: Kích cở của file t1inh bằng Byte
Ví dụ: CCDim=FileGetSize("Command.Com");
FileMove
Miêu tả: Di chuyển file
Cấu trúc: Bool FileMove(String From, String To)
Biến: From: tên của file bạn muốn di chuyển
To: đến moat đường dẫn mới
Giá trị trả về: True: nếu thành công
False: nếu that bại
Biến: Handle: Biến điều khiển trong việc tìm
Giá trị trả về: Tên của file
FileOpen
Miêu ta:û Mở một file
Cấu trúc: int FileOpen(String FileName, String Mode)
Biến: FileName: tên của file
Mode: chế độ mở
Giá trị trả về: Biến điều khiển(nếu thành công)
0 nếu thất bại
Trang 29FilePos:
Miêu Tả: Trả lại vị trí của file đang mở
Cấu trúc: Int FilePos(Int Handle)
Biến: Handle: biến điều khiển của file đang mở
Giá trị trả về: Vị trí của file đang đọc/ ghi
Ví dụ: CurPos=FileSeek(CurrHandle);
FileRead
Miêu Tả: Đọc những ký tự của file nhị phân
Cấu trúc: String FileRead(Int Handle, Int Length)
Biến: Handle: biến điều khiển của file nhị phân đang mở Length: Số ký tự được đọc
Giá trị trả về: Những ký tự được đọc
Ví dụ: Buffer=FileRead(FileHandle,16); // đọc 16 ký tự
FileReadLn:
Miêu Tả: Đọc tất cả các ký tự của một file text
Cấu trúc: String FileReadLn(Int Handle)
Biến: Handle: Biến điều khiển của file text đang mở
Giá trị trả về: Những ký tự đọc từ file
Ví dụ: CurrLine=FileReadLn(TextFileHandle);
FileRename
Miêu Tả: Thay đổi tên của file
Cấu trúc: Int FileRename(String OldName, String NewName) Biến: OldName: Tên của file cần đổi
NewName: tên của file
Giá trị trả về: 0: nếu thành
-1: nếu có lổi
Miêu Tả: Dời vị trí đọc file
Cấu trúc: int FileSeek(Int Handle, Int Offset, Whence)
Biến: Handle: Biến điều khiển của file
Offset: khoảng cách di dời
Whence: vị trí bắt đầu di chuyển
0: từ đầu file
1: tại điểm đang đọc
Trang 302: tại vị trí cuối file
Giá trị trả về: 0: thành công
Giá trị khác: thất bại
FileSize:
Miêu Tả: Trả lại kích cở của file đang mở
Cấu trúc: Int FileSize(Int Handle)
Biến: Handle: biến điều khiển của file đang mở
Giá trị trả về: Kích thước của file tính bằng bytes
Ví dụ: DirSize=DirSize+FileSize(CurrFileHandle);
FileSplitPath:
Miêu Tả: Trả về đường dẫn của một file
Cấu trúc: String FileSplitPath(String FileName, Int Elem) Biến: ileName: đường dẫn của một file
Elem: tham số yêu cầu
0: tên ổ đĩa
1: đường dẫn
2: tên file
3: phần mở rộng
Giá trị trả về: Trả về những gì mà tham số yêu cầu
Ext=FileSplitPath(FN,3); // ini
FileWrite:
Miêu Tả: Ghi những ký tự vào một file nhị phân
Cấu trúc: int FileWrite(Int Handle, String Data, Int Length) Biến: Handle: Biến điều khiển của file nhị phân
Data: những ký tự cần ghi
Length: số những ký tự cần ghi
Giá trị trả về: Số ký tự được ghi
Ví dụ: FileWrite(FileHandle,Buffer,16);
FileWriteLn
Miêu Tả: Ghi một chuổi vào file văn bản
Cấu trúc: Int FileWriteLn(Int Handle, String Line)
Trang 31Biến: Handle: biến điều khiển của file văn bản đang mở
Line: chuổi để ghi
Giá trị trả về: Không có giá trị nào trả về thì việc ghi thành công
Ví dụ: FileWriteLn(TextFileHandle,UserInserted);
3.2.3.5.Gates:
DeviceName:
Miêu Tả: Trả lại tên của thiết bị
Cấu trúc: String DeviceName(Int Channel, Int DevNum)
Biến: Channel: số của kênh
DevNum: số của thiết bị
Giá trị trả về: Tên của thiết bị
Ví dụ: DevName = DeviceName (1,3);
GetCmpGateValue:
Miêu Tả: Trả về giá trị đọc được từ cổng được xác định bởi tên của cổng và giá trị
ID
Cấu trúc: Real GetCmpGateValue(String Name, Int Id)
Biến: Name: tên của cổng mà bạn muốn đọc
Id: giá trị Id
Giá trị trả về: Giá trị của cổng đọc được đọc về
Miêu Tả: Trả lại trạng thái của cổng
Cấu trúc: Bool GetDigGateCommunicationStatus(String Name, Int Id)
Biến: Name: tên của cổng
Id: giá trị Id của cổng
Giá trị trả về: True: nếu cổng đọc tốt
False: nếu cổng ở trạng thái KO
GetDigGateValue:
Miêu Tả: Trả lại giá trị được đọc từ cổng số
Cấu trúc: Int GetDigGateValue(String Name, Int Id)
Biến: Name: tên của cổng cần đọc
Id: giá trị ID của cổng
Giá trị trả về: Giá trị đọc về ( nó là một số nguyên)
Ví dụ: DigiGate0001= GetDigGateValue("Gate0001",1);
SetDigGateValue
Trang 32Miêu Tả: Thay đổi giá trị của cổng lôgic
Cấu trúc: Bool SetDigGateValue(String Name, Int Id, Int Value) Biến: Name: tên của cổng
Id: giá trị Td của cổng
Value: Giá trị được nạp cho cổng
Giá trị trả về: True: nếu giá trị được nạp cho cổng thành công
False: nếu thất bại
Miêu Tả: Trả lại sự cảnh báo của một cổng
Cấu trúc: Bool GetEvnGateAckedStatus(String Name, Int Id) Biến: Name: tên của cổng
Id: giá trị Id của cổng
Giá trị trả về: True: nếu có thông báo trả về
False: Nếu không có thông báo trả về
Miêu Tả: Trả lại sự kiện của cổng
Cấu trúc: String GetEvnGateValue(String Name, Int Id)
Biến: Name: tên của cổng bạn muốn đọc
Id: giá tri Id của cổng
Giá trị trả về: Một tin nhắn về sự kiện của cổng
Ví dụ: GateA_Msg= GetEvnGateMsg(GateA_Name,1);
GetEvnGateValue
Miêu Tả: Trả lại giá trị của cổng được chọn làm sự kiện
Cấu trúc: Bool GetEvnGateValue(String Name, Int Id)
Biến: Name: tên của cổng muốn đọc
Id: giá trị Id của cổng
Giá trị trả về: Giá trị của cổng được chọn làm sự kiện
Ví dụ: GateModified= GetEvnGateValue("Gate0001",1);
GetNumGateCommunicationStatus:
Miêu Tả: Trả lại trạng thái của cổng số
Trang 33Cấu trúc: Bool GetNumGateCommunicationStatus(String Name, Int Id) Biến: Name: tên của cổng muốn đọc
Id: giá trị Id của cổng
Giá trị trả về: True: nếu cổng OK
False: nếu cổng KO
Ví dụ:
Bool ok;
ok = GetNumGateCommunicationStatus ("NUM 100",1);
GetNumGateProp:
Miêu Tả: Trả lại đặc tính của một cổng số
Cấu trúc: String GetNumGateProp(String Name, Int Id, int Property) Biến: Name: tên của cổng muốn đọc
Id: giá trị Id của cổng
Property: đặc tính của cổng muốn yêu cầu
Giá trị trả về: Một chuổi chủa đựng những đặc tính được yêu cầu
Ví dụ: samplingRate = GetnumeGateProp (NUM1, ID1, 10);
GetNumGateValue:
Miêu Tả: Nó trả lại giá trị đọc từ cổng số
Cấu trúc: Real GetNumGateValue(String Name, Int Id)
Biến: Name: tên của cổng bạn muốn đọc
Id: giá trị Id của cổng
Giá trị trả về: Giá trị trả về của cổng
Trang 34SetnumGateValue:
Miêu Tả: Thay đổi giá trị của cổng số
Cấu trúc: Bool SetNumGateValue(String Name, Int Id, Real Value) Biến:Name: tên của cổng
Id: giá trị Id của cổng
Value: giá trị cần truyền vào cho cổng
Giá trị trả về: True: truyền thành công
False: nêu thất bại
GetStrGateCommunicationStatus:
Miêu Tả: Tả lại trạng thái của cổng được xác định
Cấu trúc: Bool GetStrGateCommunicationStatus(String Name, Int Id) Biến: Name: tên của cổng muốn đọc
Id: giá trị Id của cổng
Giá trị trả về: True: nếu cổng OK
False: nếu cổng KO
Ví dụ:
Bool ok;
ok = GetStrGateCommunicationStatus ("NUM 100",1);
GetStrGateValue:
Miêu Tả: Trả lại giá trị của một cổng chuổi
Cấu trúc: StringGetStrGateValue(String Name, Int Id)
Biến: Name: tên của cổng
Id: giá trị Id của cổng
Giá trị trả về: Chuổi của cổng được đọc về
Ví dụ: CurrValue= GetStrGateValue("STRGate001",STRGateNo);
SetStrGateValue:
Miêu Tả: Thay đổi giá trị của cổng chuổi
Cấu trúc: Bool SetStrGateValue(String Name, Int Id, String Value) Biến: Name: tên của cổng
Id: giá trị Id của cổng
Value: giá trị mới cần chuyển đến cho cổng
Giá trị trả về: True: nếu cổng tồn tại và chuyển đổi thành công
False: nếu ngược lại
Ví dụ: GateModified= SetStrGateValue("Gate0001SS",1,"Alfa");
3.2.3.6.Những mã lệnh thường dùng khác:
Beep:
Miêu Tả: Tạo ra âm thanh
Cấu trúc: Void Beep()
Biến: -
Trang 35Giá trị trả về: -
Ví dụ:
Beep();
CloseSession:
CloseSession:
Miêu Tả: Đóng một tác vụ đã mở
Cấu trúc: Void CloseSession()
Biến: -
Giá trị trả về: -
Ví dụ: CloseSession();
CloseWindow:
Miêu Tả: Đóng một cửa sổ window
Cấu trúc: Void CloseWindow()
Biến: Flag: true (cho phép tự động tắt máy sau khi giám sát)
False (không cho phép)
Giá trị trả về: -
Ví dụ:
Function void DisablePCOff()
EnableShutdown(false); // không cho phép tắt máy End
Function void EnablePCOff()
EnableShutdown(true); // cho phép tắt máy End
Exec:
Miêu Tả: Thực thi một chương chình
Cấu trúc: Int Exec(String ProgName)
Biến: ProgName: Tên file của chương trình
Giá trị trả về: Giá trị >31 (thành công)
Ví dụ:
if (Exec("c:\windows\command\command.com") > 31) then
DosShellExecuted=true;
End
Trang 36ExecEx:
Miêu Tả: Thực thi một chương trình
Cấu trúc: Int ExecEx(String ProgName,int WindowType)
Biến: ProgName: tên file của chương trình
WindowType: 1 (chương trình mở trong của sổ lớn nhất)
2 (chương trình mở trong của số nhỏ nhất)
3 (chương trình mở trong của sổ mặt định) Giá trị trả về: Giá trị >31: thành công
Miêu Tả: Trả lại đường dẫn hiện tại của dự án
Cấu trúc: String GetProjectPath()
Biến: -
Giá trị trả về: Một chuổi với đường dẫn hiện tại
Ví dụ: ProjPath=GetProjectPath();
GetProjectName:
Miêu Tả: Trả lại tên của dự án
Cấu trúc: String GetProjectName()
Giá trị trả về: True: máy tính được phép tắt
False: máy tính không được phép
Trang 37if (GetUserName() != "MASTER") then
MessageBox("It is necessary to alert the MASTER","ALARMS");
End
GetUserGroups:
Miêu Tả: Nó trả lại những nhóm mà liên kết với người sữ dụng hiện tại
Cấu trúc: Integer GetUserGroups()
Miêu Tả: Chuyển đổi một số hex thành một số integer
Cấu trúc: Int HexStrToInt(String HexValue)
Biến: HexValue: một chuổi chứa đựng một số hex
Giá trị trả về: Giá trị integer trả về
Trang 38Ví dụ:
int RedColor;
RedColor=HexStrToInt("FF0000");
Keyboard:
Miêu tả: Xem bàn phím được xác định bởi tên
Trước hết bàn phím phải được định nghĩa trong công cụ Keyboard Builder
Hàm này được ứng dụng chop việc tiếp xúc với màn hình
Sau đây là một vài bàn phím được xây dựng với thanh công cụ Keyboard Builder
Cấu trúc: Keyboard(String Name)
Biến: Name: tên của keyboard cần mở
Giá trị trả về: -
Ví dụ: Keyboard("NumericKeyboard");
IconMessageBox:
Miêu Tả: Làm xuất hiện một hộp thông báo và chờ xác nhận của người dùng Cấu trúc: Int IconMessageBox(String Text, String Title, Int ButtonType, Int IconType, Int DefaultButton)
Biến: Text: nội dung trong của sổ
Title: tiêu đề của cửa sổ
ButtonType: loại nút nhấn xuất hiện trong cửa sổ
IconType: loại biểu tượng xuất hiện trong của sổ
DefaultButton: nút mặt định
Loại nút nhấn:
1 hộp thông báo xuât hiện 3 loại nút nhấn: Abort, Retry, Ignore
2 hộp tjông báo xuât hiện nút nhấn: OK
3 hộp thông báo xuất hiện nút nhân OK, Cancel
Trang 394 hộp thông báo xuất hiện nút nhấn: Retry, Cancel
5 hộp thông báo xuất hiện nút nhấn: Yes, No
6 hộp thông báo xuất hiện nút nhấn: Yes, No, Cancel
Loại biểu tượng xuất hiện:
1 dấu chấm than xuất hiện trong hộp tin
2 dấu chấm than xuất hiện trong hộp tin( cảnh báo nguy hiểm)
3 chữ “i” (thông tin)
4 dấu hoa thị
5 dấu chấm hỏi
6 stop-icon.( biểu tượng dừng)
7 stop-icon (biểu tượng lổi)
8 stop-icon( biểu tượng bàn tay)
Giá trị trả về:
0 nếu không đủ vùng nhớ để tạo hộp thông báo
1 nếu nút Abort được chọn
2 nếu nút Cancel được chọn
3 nếu nút Ignore được chọn
4 nếu nút No được chọn
5 nếu nút OK được chọn
6 nếu nút Retry được chọn
7 nếu nút Yes được chọn
Ví dụ: IconMessageBox("You can now switch off","Shutdown sequence:", 2, 3,1);
InputDialog:
Miêu Tả: Làm xuất hiện một hộp đối thoại
Cấu trúc: String InputDialog(String Text, String Title, String InitText)
Biến: Text: dòng chử trong hộp thoại
Title: tựa đề của hộp đối thoại
InitText: dòng chử xuất hiện đấu tiên trong trường chuổi
Giá trị trả về: Chuổi trong trường chuổi mà người sữ dụng thay đổi, chuổi rỗng nếu nếu người dùng không thay đổi gì cả
Ví dụ: User=InputDialog("User's name", "Personalized access", "default");
IntToHexStr:
Miêu Tả: Chuyển một số nguyên thành số trong hệ cơ số 16
Cấu trúc: String IntToHexStr(Int Value, Int Digits)
Trang 40Biến: Value: số nguyên được chuyển đổi
Digits: kích cở chuổi nhỏ nhất, nếu số chuyển đổi ngắn hơn thì thêm sô 0 vào bên trái mãi đến khi bằng kích cở chuổi nhỏ nhất
Giá trị trả về: Giá trị hexa được chuyển từ số nguyên
Ví dụ: Pattern = IntToHexStr(12800,4);
Logout:
Miêu Tả: Cho biết người bị từ chối không cho phép khi thác dữ liệu
Cấu trúc: Void Logout()
Biến: -
Giá trị trả về: -
Ví dụ: Logout();
Message Beep:
Miêu Tả: Gởi ra ngoài một tín hiệu âm thanh
Cấu trúc: Void MessageBeep(int type)
Biến: Type: một số xác định tín hiệu âm thanh sẽ phát ra
Giá trị: tín hiệu âm thanh
Biến: Text: dòng chữ xuất hiện trong của sổ
Title: dòng chữ xuất hiện trên thanh tiêu đề
Giá trị trả về: -
Ví dụ: MessageBox("You can now switch off", "Shutdown sequence:");
Play:
Miêu Tả: Chơi file nhạc có phần mở rộng:WAV
Cấu trúc: Void Play(String AudioFileName)
Biến: AudioFileName: tên của file nhạc cần mở