8051 Hướng dẫn thiết kế PLC và lập trình

nhan31416

Học sinh phổ thông
#1
Chào các bạn. Tôi muốn chia sẻ với các bạn về ứng dụng vi điều khiển để thiết kế một PLC ( bộ điều khiển lập trình). Bài viết này nhằm hướng dẫn thiết kế và lập trình một hệ vi điều khiển trở thành bộ PLC, có thể ứng dụng trong thực tế với các chương trình PLC đơn giản. Bướt qua thiết kế lập trình cơ bản này, các bạn có thể lập trình nhiều lệnh PLC phức tạp hơn để giải quyết các vấn đề trong những ứng dụng thực tế.

Để theo dõi phần trình bày này, cần thiết phải hiểu về các vi mạch,chức năng hoạt động của nó trong các mạch điện, cũng như cần có kiến thức cơ bản về lập trình cho các hệ vi điều khiển (cụ thể dung ngộn ngữ Assambly cho họ 8051 cho thiết kế này). Bài viết chủ yếu đi sâu vào phân tích các lệnh PLC và làm thế nào để lập trình cho hệ vi điều khiển trở thành bộ PLC có khả năng lập trình các ứng dụng thực tế và phát triển chúng.

Sau đây là bo mạch PLC và mạch sơ đồ điện dùng vi điều khiển 89C51RD++

IMG_0026.JPG


IMG_0029.JPG

Bo vi điều khiển 89C51RD++ (họ vi điều khiển 8051).

Trên bo gồm có:
· Chip vi điều khiển 89C51RD++
· Chip nhớ 24C32 (hoặc 24C64)
· Chip giao tiếp máy tính nối tiếp RS232
· Mạch ngõ vào 16 ngõ dùng 74245
· Mạch ngõ ra 16 ngõ dùng 74573 cùng các transitor thúc relay

Sau đây là mạch sơ đồ điện:

MCU.jpg


Mạch vi điều khiển 89C51RD++


Keyboard.jpg


Mạch giao tiếp bàn phím và màn hình Lcd


Input.jpg


Mạch ngõ vào cách ly, 16 ngõ vào điện áp 24VDC


Output.jpg


Mạch ngõ ra, 16 ngõ ra và các transitor thúc relay ngoài 24VDC

Relay.jpg


Mạch ngõ ra dùng relay

Các chương trình viết cho hệ vi điều khiển có các địa chỉ vào ra như trong mạch trên.

Phần 1. Các chương trình giao tiếp bàn phím và màn hình.

Bàn phím gồm 16 phím, là những phím có giá trị từ 0 – 9 và từ A – F. trên cùng các phím này cũng được mở rộng thêm 16 phím có chức năng là các lệnh của cơ bản của PLC như: TR/0; DOWN/1; NOT/2; LD/3; OUT/4; OR/ 5; AND/6; UP/7; TIM/8; CNT/9; WRT/A; SHF/B; CLR/NOP/C; INS/D; DEL/E và SRCH/F

Các phím chức năng sẽ được bàn tới trong chương trình PLC

Sau đây là các chương trình quét bàn phím:
;------------------------------------------------------------------------------------
; Chương trình đọc bàn phím có chống nảy phím.
; mã phím ra trong Acc và trong codekey

;------------------------------------------------------------------------------------

key_board:
push 03h
mov r3,#50d ; vòng lặp chống nảy 50 lần
back:
lcall get_key ; gọi CT con nhận phím
jnc back4 ; không có phím, trở về CT gọi
djnz r3,back ; có phím ấn, kiểm tra chống nảy phím
push Acc ; cất mã phím tring ACC
back2:
mov r3,#50d
back3:
lcall get_key ; đợi phím nhả
jc back2
djnz r3,back3 ; vòng lặp chống nảy phím
setb C ; có phím ấn đặt C:=1
pop Acc ; lấy lại phím ấn
mov codekey,a ; cất mã phím trong codekey
back4:
mov P1,#0FFh ; P1_1 lên cao
pop 03h
ret

;---------------------------------------------------------------------------------
; Quét và đọc bàn phím.
; C:=0 không có phím ấn
; C:=1 có phím ấn, mã phím trong Acc

;---------------------------------------------------------------------------------

get_key:
push 01h
push 02h
push 05h
mov a,#0FEh ; bắt đầu với hàng 0
mov r1,#4h ; quét 4 hàng
test:
mov P1,a ; cho cho hang xuống 0
nop
mov r2,a ; cất mã phím
mov a,P1 ; đọc lại phím ấn, giá trị cột
anl a,#0F0h ; chọn 4 bit cao
cjne a,#0F0h,key_hit ; Acc # F0h, có phím ấn?
mov a,r2 ; không lấy mã hàng vào trong Acc
rl a ; quay trái cho hàng kế
djnz r1,test ; đã đủ 4 hàng? Chưa thì tiếp tục
clr C ; không có phím ấn xóa C
mov a,#0FFh
mov P1,a
sjmp exit ; trở về với C=0
key_hit:
mov r2,a ; lấy phím ấn trong R2
mov a,#4 ; tính mã phím
clr c ; xóa cờ C
subb a,r1 ; 4 – r1 = trọng số
mov r1,a ; cất lại trong r1
mov a,r2 ; lấy lại mã phím trong R2
swap a ; tráo 4 bit cao xuống thấp
mov r5,#4
again:
rrc a ; quay phải qua cờ nhớ để tìm mã phím
jnc done ; nếu C = 0, thoát
inc r1 ;tăng r1
inc r1
inc r1
inc r1
djnz r5,again ; lặp đủ 4 lần
done:
setb C ; có mã phím, đặt cờ C.
mov a,r1 ; lấy mã phím trong R1 vào Acc
exit:
pop 05h
pop 02h
pop 01h
ret

Để tạo các phím chức năng trên cùng một phím, ta có thể dùng 2 cách:
- Gán phím chức năng trong khi ấn một phím khác
- Ấn phím có chức năng chuyển và các phín ấn sau này sẽ được gán cho công dụng mới.
Với bàn phím có số phím giới hạn thì việc dung chung rất là hữu ích.

Cám ơn các bạn đã đọc bài viết. Bài kế sẽ là phần lập trình hiển thị cho màn hình LCD
 
Sửa lần cuối:

ga_cong

Kỹ sư
#2
Sao bạn không dùng đầu ra role luôn cho tiện dùng transistor hơi bất tiện với PLC
 

kosovo

Sinh viên đại học
#3
Cái này hay đấy, những kĩ sư nước ngoài cũng làm ra PLC từ những ý tưởng kiểu này, module hóa, thư viện hóa các việc cơ bản, rồi nhân rộng, phát triển lên.....:-) tôi thích là ở chỗ bạn dùng đồ cổ để tạo ra cái mới.
Nếu nói đến mức như PLC thì chắc là rất xa, hiện giờ bạn vẫn làm lại mấy ví dụ tương tự như với vi điều khiển thôi. Tôi có vài lời khuyên, đừng nghĩ đến làm nó như PLC, chỉ cần làm nó thành module để dùng chung là được rồi. Cần gì thì mình lập trình như vdk thôi. Nhưng như bo mạch hiện giờ thì khó ứng dụng trong máy móc, bạn biết sao không?
-Chỉ cần một con công suất như contactor nhảy đóng tải là bo mạch của bạn sẽ treo ngay, thí nghiệm trên bàn, trong điều kiện máy lạnh, yên tĩnh, lí tưởng, thậm chí có âm nhạc du dương nữa...thì chẳng sao cả, reset nó lại thôi. Nhưng nếu nó nằm trong cái máy đang làm việc, ví dụ đang làm một mẻ vài trăm sản phẩm seri gì đó, nếu bị đơ thì tiêu rồi, có khi còn ảnh hưởng cho người đứng máy vì sự cố bất ngờ. Vấn đề là ổn định, chống nhiễu tốt.
-Theo hướng đó, thì input của bạn đã có cách li opto, thêm vài kiểu nữa dập xung, tránh từ trường xung quanh. Output cũng đã có cách li opto, nên sử dụng thêm theo hướng SSR nhé.
-Nếu bạn dùng cái đó thì làm ví dụ của PLC như dưới đây như thế nào? Thử xem:

1.jpg
 

nhan31416

Học sinh phổ thông
#5
Cái này hay đấy, những kĩ sư nước ngoài cũng làm ra PLC từ những ý tưởng kiểu này, module hóa, thư viện hóa các việc cơ bản, rồi nhân rộng, phát triển lên.....:-) tôi thích là ở chỗ bạn dùng đồ cổ để tạo ra cái mới.
Nếu nói đến mức như PLC thì chắc là rất xa, hiện giờ bạn vẫn làm lại mấy ví dụ tương tự như với vi điều khiển thôi. Tôi có vài lời khuyên, đừng nghĩ đến làm nó như PLC, chỉ cần làm nó thành module để dùng chung là được rồi. Cần gì thì mình lập trình như vdk thôi. Nhưng như bo mạch hiện giờ thì khó ứng dụng trong máy móc, bạn biết sao không?
-Chỉ cần một con công suất như contactor nhảy đóng tải là bo mạch của bạn sẽ treo ngay, thí nghiệm trên bàn, trong điều kiện máy lạnh, yên tĩnh, lí tưởng, thậm chí có âm nhạc du dương nữa...thì chẳng sao cả, reset nó lại thôi. Nhưng nếu nó nằm trong cái máy đang làm việc, ví dụ đang làm một mẻ vài trăm sản phẩm seri gì đó, nếu bị đơ thì tiêu rồi, có khi còn ảnh hưởng cho người đứng máy vì sự cố bất ngờ. Vấn đề là ổn định, chống nhiễu tốt.
-Theo hướng đó, thì input của bạn đã có cách li opto, thêm vài kiểu nữa dập xung, tránh từ trường xung quanh. Output cũng đã có cách li opto, nên sử dụng thêm theo hướng SSR nhé.
-Nếu bạn dùng cái đó thì làm ví dụ của PLC như dưới đây như thế nào? Thử xem:

Xem đính kèm 78622
Cám ơn bạn đã đóng góp. Đây là mạch hướng dẫn lập trình cho một hệ Vi điều khiển trở thành PLC. khi ứng dụng thực tiễn thì cần thiết kế kỹ hơn như bạn góp ý.
mạch này đã được thử nghiệm trên những điều khiển thực tế.
chương trình PLC của bạn là một chương trình đơn giản. mình đã thử với những CT phứt tạp hơn để test nó.
Khi thiết kế C trình PLC, nên phân tích ra những dòng lệnh đơn giản.
hãy xem CT của bạn: ta có thể phân tích thành như hình:
20170515_162742.jpg

nhưng Q1 của bạn không bao giờ làm việc.
Chân thành cám ơn bạn
 

mbed

Kỹ sư
#6
Cám ơn bạn đã đóng góp. Đây là mạch hướng dẫn lập trình cho một hệ Vi điều khiển trở thành PLC. khi ứng dụng thực tiễn thì cần thiết kế kỹ hơn như bạn góp ý.
mạch này đã được thử nghiệm trên những điều khiển thực tế.
chương trình PLC của bạn là một chương trình đơn giản. mình đã thử với những CT phứt tạp hơn để test nó.
Khi thiết kế C trình PLC, nên phân tích ra những dòng lệnh đơn giản.
hãy xem CT của bạn: ta có thể phân tích thành như hình:
Xem đính kèm 78625
nhưng Q1 của bạn không bao giờ làm việc.
Chân thành cám ơn bạn
Mình tin mạch phần cứng của bạn chạy được, như vậy là đúng tiêu chuẩn thiết kế chống nhiểu của PLC rồi, trong các board mạch của Omron hay Mishubishi củng chỉ có như vậy thôi, của bạn còn thiếu phần lọc nguồn 24VDC đầu vào.

Cái sơ đồ lapder của bạn kosovo. Sau tiếp điễm thường đóng I1 là hai mạch tự giử ON/OFF ,nhưng chỉ có nhánh Q2 hoạt động được, bạn kosovo đưa ra cái sơ đồ điên rồ.
 

kosovo

Sinh viên đại học
#7
Cái gì có giá trị thì họ không share đâu, bạn ấy chắc là thầy giáo nên có máu giảng dạy, :-) mình không tốt như vậy nên ủng hộ tinh thần thôi. Nói đơn giản cái gì bán được mới tốt, mà muốn bán được thì phải dùng được, ngược lại thì chỉ là thử nghiệm.
Bo PLC không phải đơn giản như bạn nhìn thấy, chắc là bạn chưa thấy. Sơ đồ mạch ấy, không cần bắt bẻ kĩ thế, dễ hiểu là sự nhầm lẫn, mình làm nhanh để lấy ví dụ thôi. Cứ sửa thành I3, I4 gì đó nhé. Thích nhất là ở chỗ bạn ấy dùng asm, cặm cụi, nhưng hiểu rất rõ mọi thứ cần làm. Giống mình...hehe..
 

nhan31416

Học sinh phổ thông
#8
Cái gì có giá trị thì họ không share đâu, bạn ấy chắc là thầy giáo nên có máu giảng dạy, :-) mình không tốt như vậy nên ủng hộ tinh thần thôi. Nói đơn giản cái gì bán được mới tốt, mà muốn bán được thì phải dùng được, ngược lại thì chỉ là thử nghiệm.
Bo PLC không phải đơn giản như bạn nhìn thấy, chắc là bạn chưa thấy. Sơ đồ mạch ấy, không cần bắt bẻ kĩ thế, dễ hiểu là sự nhầm lẫn, mình làm nhanh để lấy ví dụ thôi. Cứ sửa thành I3, I4 gì đó nhé. Thích nhất là ở chỗ bạn ấy dùng asm, cặm cụi, nhưng hiểu rất rõ mọi thứ cần làm. Giống mình...hehe..
Cám ơn bạn. tiếp tục với bài viết của mình, bạn sẽ thấy PLC làm việc như thế nào, không cần quá cầu kỳ như bạn nghĩ. mạch điều khiển trung tâm là mạng độc lập, cách ly với mạch ngoài kể cả nguồn cấp, và là hệ điều khiển vòng kín. nguồn ngoài 24VDC không cần lọc cũng khg ảnh hưởng gì. Phần cứng bạn thiết kế kiểu gì bạn thích khg thành vấn đề. Cái khó các chương trình lệnh để điều khiển nó.
tôi viết nài này nhằm tiết kiệm thời gian cho những ai thích phát triển các hệ vi điều khiển đa năng, khg phải cặm cụi mất nhiều thời gian như tôi. Tôi chuyên thiết kế và sản xuất máy dệt, nhuộm công nghiệp, có xưởng sản xuất nên vấn đề áp dụng và cải tiến khg phải là khó.
 

Quảng cáo Google