1. Xin chào Khách ! Ban quản trị sẽ tiến hành nâng cấp diễn đàn từ ngày 11/8/2017 Mọi truy cập có thể bị dán đoạn, mong bạn thông cảm!
    Dismiss Notice

8051 Thiết kế PLC: cơ sở lập trình cho VĐK

Thảo luận trong 'Họ 8051'

Đang xem chủ đề này ( Thành viên: 0, Khách: 0)

  1. nhan31416

    nhan31416 Học sinh phổ thông

    Tham gia ngày:
    12/5/17
    Bài viết:
    26
    Đã được thích:
    6
    Điểm thành tích:
    3
    Giới tính:
    Nam
    Nghề nghiệp:
    kỹ sư
    Nơi ở:
    tp HCM
    Để lập chương trình thực hiện các lệnh của chương trình PLC, ta cầ định nghĩa một biến quan trọng trong quá trình thực hiện các phép toán logic giữa các lệnh, đó là: biến term. Biến term là một biến được chỉ định lưu các trạng thái logic của kết quả sự thực hiện lệnh trong quá trình thực hiện các lệnh của chương trình PLC. Trong chương trình VĐK này có tất cả 8 biến term (từ term0 đến term7) được dùng, giá trị logic của các biến này là trị logic của bit D7 của các thanh ghi RAM trong của vi điều khiển, có địa chỉ từ 40h đến 47h. Ta cũng dùng thanh ghi term_add để lưu địa chỉ RAM của các term này. Có nghĩa là giá trị trong term_add chính là địa chỉ RAM của biến term trong chương trình.

    20170614_210446.
    Ví dụ:
    Mov a,term_add
    Có nghĩa là địa chỉ của term hiện tại có trong term_add chuyển vào trong thanh ghi Acc

    Ví dụ:
    Mov a,term_add
    Mov r1,a
    Mov a,@r1
    Đoạn chương trình trên thực hiện việc chuyển giá trị của term(n) hiện hành vào thanh ghi Acc. Ta có bảng sau:

    Ví dụ: ta có chương trình bật thang sau.

    ( xem hình trên)

    Chương trình PLC lưu trong EEprom có dạng:

    0000 LD 000
    0001 AND 001
    0002 OUT 300
    0003 END.

    Trước khi thực hiện chương trình PLC này, chương trình VĐK sẽ đọc chương trình này từ EEprom và nạp vào EXtram của vi điều khiển. Sau đó, chương trình VĐK thực thi chương trình PLC bằng cách truy vập các lệnh từ EXtram mà không qua EEprom nữa.

    Bắt đầu thi hành chương trình từ địa chỉ 0000 và gán địa chỉ của term(0) vào term_add, lúc này ta có:

    term(0):= 0. (logic 0)

    chương trình đọc lệnh LD 000 từ EXtram, lọc lấy bit trạng thái D7 của tham số lệnh và gán:

    term(0):= logic (D7)

    (bit D7 của byte địa chỉ thanh ghi ô nhớ relay thể hiện trang thái logic của relay)

    Lúc này, term(0) có logic của ngõ vào (000), kế đến chương trình đọc lệnh AND 001 từ EXtram, lọc lấy bit trang thái D7 của tham số lệnh và thực hiện phép And logic với term(0 và gán lại term(0).

    term(0):= term(0) And (ngõ vào 001).

    Lúc này term(0) có giá trị logic của hai lệnh:

    LD 000 và AND 001

    Lệnh kế tiếp là OUT 300, lệnh này chương trình sẽ đưa kết quả ra ngõ ra relay (300).

    OUT (300):=term(0)

    Tiếp đến lệnh END, chương trình sẽ xóa tất cả các term tham gia trong chương trình chạy, cài đặt lại địa chỉ đầu chương trình và cập nhật trạng thái ngõ vào ra. Bắt đầu cho vòng lặp mới.

    Thực hiện chương trình với các khối lệnh:

    Lệnh OR LD (Or nhiều dòng lệnh).

    Ví dụ:
    20170614_195752.


    Chương trình PLC trong EEprom nhưsau:

    0000 LD NOT 000
    0001 AND 001
    0002 LD NOT 000
    0003 AND 300
    0004 OR LD
    0005 OUT 300
    0006 END

    Lưu ý các lệnh OUT, lệnh TIM và lệnh CNT là những lệnh thi hành kết quả của dòng lệnh, nghĩa là những lệnh kết thúc dòng lệnh. Khi kết quả của dòng lệnh được thi hành thì chương trình VĐK sẽ đưa bit D7 của term lên 1, ngược lại khi bit D7 có giá trị 0 có ngĩa dòng lệnh chưa được thi hành.

    Bắt đầu một dòng lệnh bao giờ cũng là cá lệnh LD hay LD NOT.

    Nếu có nhiều dòng lệnh hay khối lệnh có ảnh hưởng lên cùng kết quà ra thì dùng các lệnh OR LD hay AND LD để để nối các dòng lệnh hay khối lệnh lại với nhau.

    Phân tích chương trình PLC trên ta có:

    Chương trình nhận giá trị logic ngõ vào (000) và đảo trạng thái logic bởi lệnh LD NOT, và gán trạng thái logic này cho term(0)

    Term(0):= NOT (000)

    Nhận tiếp lệnh AND 001, CT thực hiện phép And:

    Term(0):= term(0) And (001)

    Tiếp tục với lệnh LD NOT 000 và AND 300 ta có:

    Term (1):= NOT (000)

    Term(1):= term(1) And (300)

    Khi gặp lệnh OR LD, lệnh OR logic hai dòng lệnh song song

    Term(0):= term(0) Or term(1).

    Sau khi tực hiện lệnh OR LD, thì term(1) sẽ bị xóa, có nghĩa là: địa chỉ trong thanh ghi term_add chính là địa chỉ của term(0).

    Lập trình VĐK cho lệnh OR LD:

    OR LD -----------------------------------------

    (mã lệnh trong Acc)

    cjne a,#02h,Runnext ; lệnh OR LD?
    mov r1,Term ; nạp địa chỉ của Term (n) vào R1
    dec Term ; giảm 1, ta có địa chỉ term(n-1)
    mov r0,Term ; địa chỉ Term(n-1) vào R0
    mov a,@r0 ; lấy giá trị term (n-1)
    orl a,@r1 ; Term(n-1) OR Term(n)
    mov @r0,a ; giá trị mới vào Term(n-1)
    mov @r1,#0h ; xóa term (n)
    ljmp về CT chạy

    ------------------------------------------------------------------------------------------

    lệnh AND LD:

    Ví dụ:

    20170614_195728.


    Chương trình PLC lưu trong EEprom như sau:

    0000 LD NOT 000
    0001 AND 001
    0002 OR 300
    0003 LD 214
    0004 AND NOT 012
    0005 LD NOT 006
    0006 AND 107
    0007 OR LD
    0008 AND LD
    0009 OUT 300
    0010 END.




    Khối lệnh 1, có 3 lệnh: LD NOT 000 – AND 001 – OR 300 ta có kết quả như sau:

    term(0):= NOT(000) And (001) Or (300).

    Khối lệnh 2, có 4 lệnh: LD 214 – AND 012; LD NOT 006 – AND 107

    ta có kết quả:

    term(1):= (214) And NOT (012)

    và term(2):= NOT(006) And (107)

    thực hiện lệnh OR LD ta có:

    term(1):= term(1) Or term(2).

    Thực hiện lệnh AND LD ta có:

    term(0):= term(0) And term(1).

    Như vậy ngõ ra (300) có trị logic là: (300):= term(0)


    Lập trình với lệnh TIM:

    Ví dụ ta có mạch bật thang như sau:
    20170614_195752.



    Chương trình PLC là:

    0000 LD NOT 000
    0001 AND 001
    0002 LD NOT 000
    0003 AND 300
    0004 OR LD
    0005 OUT 300
    0006 TIM 00/ #50
    0007 END.


    Như trên ta có:

    term(0):= NOT(000) And (001).

    term(1):= NOT(000) And (300).

    Thực hiện lệnh OR LD ta có:

    term(0):= term(0) Or term(1)

    Out(300):=term(0)

    Vậy khi term(0) có logic 1 thì ngõ ra (300) lên 1 và bộ thời gian (00) cũng làm việc bắt đầu giảm giá trị cài đặt xuống, sau khi giảm xuống tới giá trị 0 thì relay thời gian có trị logic 1. Trạng thái này được duy trì cho đến khi term(0) có logic bằng 0. Độ dài trể phụ thuộc vào giá trị cài đặt và xung đồng hồ tạo ra bởi vi điều khiển. Trong lúc giảm giá trị cài đặt, nếu ở vòng lặp mới term(0) có giá trị 0 thì bộ thời gian sẽ bị ngắt trở về giá trị ban đầu, đợi khi term(0) có logic 1.


    Như vậy qua các phần trình bày, thì ngoài cách mã hóa các lệnh dùng cho PLC, các biến relay bộ nhớ, và đây là cơ sở nền tảng cho thiết kế và lập trình cho hệ vi điều khiển 8051 trở thành hệ điều khiển lập trình được PLC.

    Chương trình thực sự không phức tạp khi thực hiện các lệnh cơ bản của PLC như: LD, AND, OR, TR, hay OUT. Vì đây, chỉ là thi hành các phép tính logic giữa các lệnh PLC, nhưng đối với các lệnh không chỉ là trạng thái logic mà còn là lệnh thi hành theo thời gian như lệnh TIM, lệnh CNT. … thì chương trình sẽ phức tạp hơn. Trong phần lập trình cho hệ VĐK 8051 này ngoài các lệnh cơ bản của PLC, đã có chương trình cho hai lệnh TIM và CNT. Còn nhiều lệnh mở rộng ít dùng hoặc dùng trong các ứng dụng khác của PLC, người dùng có thể lập trình riêng và chèn vào trong chương trình chính.


    Cùng với chương trình thiết kế, bo mạch PLC8051 có thể được sử dụng như một PLC có khả năng lập trình mở rộng lệnh ứng dụng riêng. Đồng thời cũng có thể sử dụng như một hệ vi điều khiển mở rộng, thi hành các chương trình ứng dụng khác do người dùng lập thông qua các cổng giao tiếp dành cho các cổng vào ra mở rộng hay có sẵn trên mạch.


    Chân thành cám ơn đã đọc bài viết và đóng góp ý kiến
     
    dovanhieumbed thích bài này.
  2. huunho

    huunho Thạc sỹ

    Tham gia ngày:
    16/1/14
    Bài viết:
    3,165
    Đã được thích:
    1,412
    Điểm thành tích:
    113
    Giới tính:
    Nam
    bạn cho xem schemantic, mục đích sản xuất bo mạch này là gì?
     
  3. nhan31416

    nhan31416 Học sinh phổ thông

    Tham gia ngày:
    12/5/17
    Bài viết:
    26
    Đã được thích:
    6
    Điểm thành tích:
    3
    Giới tính:
    Nam
    Nghề nghiệp:
    kỹ sư
    Nơi ở:
    tp HCM
    Chào bạn. Cám ơn đã quan tâm tới bài viết.

    Sơ đồ mạch điện đã post lên trong bài đầu tiên Hướng dẫn thiết kế PLC.

    Một câu hỏi rất hay. Bo mạch này cũng như các hệ vi điều khiển có trên thị trường, người dùng có thể lập trình cho các ứng dụng cụ thể riêng cho việc học tập, nghiên cứu và áp dụng thực tiễn. Giao tiếp phần cứng với thiết bị ngoài, đặc biệt là lập trình tốn rất nhiều thời gian cho người mới làm quen hay đã làm qua với các hệ vi điều khiển. Vì vậy, bo PLC 8051 được thiết kế như một mạch điều khiển trực tiếp với thiết bị ngoài như một PLC ( ứng dụng rất nhiều hiện nay) cung cấp cùng với nhiều chương trình ứng dụng, có thể tham khảo trong một chương trình lập cho hệ Vi điều khiển thành một PLC thực thụ. Sử dụng như một nguồn cung cấp ban đầu để phát triển các ứng dụng riêng cho người dùng.

    - Dùng như hệ vi điều khiển mở rộng với các ngõ vào ra có sẳn giao tiếp thiết bị ngoài

    - Các chương trình ứng dụng có thể mở rộng hay tham khảo cung cấp theo bo mạch dùng ngôn ngữ ASM, có giải thích cụ thể.

    - Có thể thiết kế thêm mạch ngoài qua cổng mở rộng của bo mạch.

    - Có thể dùng như một PLC lập trình trực tiếp trên bàn phím bằng các lệnh của PLC

    - Ngoài các lệnh PLC cơ bản, người dùng có thể lập trình thêm nhiều lệnh PLC chèn vào chương trình chính để mở rộng ứng dụng.

    cùng nhiều ứng dụng khác như đo và điều khiển nhiệt độ, ... Sẽ post lên khi có thời gian
     

Chia sẻ trang này