Cơ điện tử ( Mechatronics) là một ngành học mới ở nước ta, nhưng nó ngày càng khẳng định được vai trò trong giai đoạn công nghiệp hóa hiện đại hóa ngày nay và sự phát triển của đất nước trong tương lai. Đây là ngành có sự hội tụ và đúc kết của ba chuyên ngành là cơ khí, tin học và điện tử mà sản phẩm cuối cùng của nó là một hệ thống tự động hóa góp phần giải phóng sức lao động của con người.
Trong quãng thời gian học tập và nghiên cứu của bất kỳ sinh viên nào trong trường đại học, chúng ta đều được các Thầy giảng dạy kiến thức từ cơ sở đến chuyên ngành. Song song với lý thuyết luôn là những bài thực hành thực tế để sinh viên làm quen với công việc và củng cố lại kiến thức lý thuyết. Thực tập chuyên ngành là một cơ hội lớn để sinh viên có thể tạo cho mình những bước đệm vững chắc trước khi ra trường và đi làm.
Nằm trong chương trình đào tạo bậc đại học chuyên ngành Công nghệ Cơ điện tử - Khoa cơ khí - Trường Đại học Nha Trang, Thực tập chuyên ngành công nghệ Cơ điện tử là vô cùng quan trọng cho em và các bạn sinh viên.
Sau một thời gian học tập, nghiên cứu, thiết kế và thi công, được sự hướng dẫn tận tình của Thầy Nguyễn Văn Định cùng quý Thầy trong Bộ môn Cơ điện tử, em đã hoàn thành đợt thực tập và bổ sung được cho mình rất nhiều kiến thức bổ ích.
42 trang |
Chia sẻ: ngtr9097 | Lượt xem: 3551 | Lượt tải: 7
Bạn đang xem trước 20 trang tài liệu Điều khiển Đèn giao thông bằng PLC ( Sử dụng ngôn ngữ LAD), để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
MỤC LỤC
Trang
MỤC LỤC
DANH MỤC CÁC HÌNH
LỜI NÓI ĐẦU
Chương 1: VI ĐIỀU KHIỂN 1
1.1. Giới thiệu chung về Vi Điều Khiển 2
1.1.1. Vi Điều Khiển 2
1.1.2. Giới thiệu họ AVR 3
1.2. Tìm hiểu về ATmega8 4
1.3. Truyền thông ATmega8 8
1.3.1 Giao tiếp RS232 8
1.3.2 Sơ đồ mạch 9
1.3.3 Phần mềm lập trình và cách khởi tạo 10
1.3.4 Chương trình 12
1.3.4.1. Phần khai báo. 12
1.3.4.2. Phần chương trình. 15
Chương 2: PLC 19
2.1. Giới thiệu chung về PLC 20
2.1.1. Khái niệm PLC 20
2.1.2. Lịch sử phát triển 21
2.1.3. Phạm vi ứng dụng 21
2.1.4. Vai trò của PLC trong quá trình tự động hóa sản xuất 21
2.1.5. Khả năng của PLC 21
2.1.6. Ưu điểm của PLC 22
2.1.7. Lập trình cho PLC 22
2.2. Cấu trúc phần cứng của bộ PLC S7-300 23
2.2.1. Các tín hiệu kết nối với PLC 23
2.2.2. Các modul của PLC S7-300 23
2.2.3. Kiểu dữ liệu và phân chia bộ nhớ 25
2.2.4. Cấu trúc bộ nhớ của CPU 25
2.2.5. Vòng quét chương trình 26
2.3. Điều khiển Đèn giao thông bằng PLC ( Sử dụng ngôn ngữ LAD) 26
2.3.1. Giới thiệu bộ Đèn giao thông 26
2.3.2. Linh kiện trong mạch điều khiển Đèn giao thông 27
2.3.3. Quét led 7 đoạn 28
2.3.4. Giải thuật điều khiển 29
2.3.5. Chương trình 30
KẾT LUẬN 38
TÀI LIỆU THAM KHẢO 39
DANH MỤC CÁC HÌNH
Trang
Hình 1.1: ATmega8 4
Hình 1.2: Sơ đồ chân của ATmega8 5
Hình 1.3: Sơ đồ khối của ATmega8 7
Hình 1.4: Sơ đồ chân cổng RS232 8
Hình 1.5: Mạch nguồn 9
Hình 1.6: Sơ đồ chân Max 232 9
Hình 1.7: Mạch RS232 10
Hình 1.8: Mạch truyền thông Atmega8 10
Hình 1.9: Phần mềm CodeVisionAVR C Compiler 11
Hình 1.10: Khởi tạo USART 11
Hình 2.1: Tổng quan bộ PLC 20
Hình 2.2: Ngôn ngữ STL 22
Hình 2.3: Ngôn ngữ LAD 23
Hình 2.4: Modul CPU 24
Hình 2.5: Các Modul của PLC 24
Hình 2.6: Mở rộng PLC 24
Hình 2.7: Mô hình đèn giao thông 26
Hình 2.8: IC giải mã 7447 27
Hình 2.9: Các chân của 7447 27
Hình 2.10: Bảng Logic của IC 7447 28
Hình 2.11: Led 7 đoạn 28
Hình 2.12: Quét Led 7 đoạn 29
Hình 2.13: Giải thuật điều khiển 29
LỜI NÓI ĐẦU
Cơ điện tử ( Mechatronics) là một ngành học mới ở nước ta, nhưng nó ngày càng khẳng định được vai trò trong giai đoạn công nghiệp hóa hiện đại hóa ngày nay và sự phát triển của đất nước trong tương lai. Đây là ngành có sự hội tụ và đúc kết của ba chuyên ngành là cơ khí, tin học và điện tử mà sản phẩm cuối cùng của nó là một hệ thống tự động hóa góp phần giải phóng sức lao động của con người.
Trong quãng thời gian học tập và nghiên cứu của bất kỳ sinh viên nào trong trường đại học, chúng ta đều được các Thầy giảng dạy kiến thức từ cơ sở đến chuyên ngành. Song song với lý thuyết luôn là những bài thực hành thực tế để sinh viên làm quen với công việc và củng cố lại kiến thức lý thuyết. Thực tập chuyên ngành là một cơ hội lớn để sinh viên có thể tạo cho mình những bước đệm vững chắc trước khi ra trường và đi làm.
Nằm trong chương trình đào tạo bậc đại học chuyên ngành Công nghệ Cơ điện tử - Khoa cơ khí - Trường Đại học Nha Trang, Thực tập chuyên ngành công nghệ Cơ điện tử là vô cùng quan trọng cho em và các bạn sinh viên.
Sau một thời gian học tập, nghiên cứu, thiết kế và thi công, được sự hướng dẫn tận tình của Thầy Nguyễn Văn Định cùng quý Thầy trong Bộ môn Cơ điện tử, em đã hoàn thành đợt thực tập và bổ sung được cho mình rất nhiều kiến thức bổ ích.
Em xin chân thành cảm ơn Quý thầy đã giúp đỡ em hoàn thành đợt thực tập này.
Vì thời gian và kiến thức có hạn nên trong đợt thực tập có nhiều phần còn hạn chế và còn nhiều điểm chưa khắc phục được. Mong quý Thầy giúp đỡ để đợt thực tập của em được hoàn thiện hơn.
Chương 1
VI ĐIỀU KHIỂN
(Truyền thông 3 board)
1.1. Giới thiệu chung về Vi Điều Khiển
1.1.1. Vi Điều Khiển
Vi điều khiển là một máy tính được tích hợp trên một chíp, nó thường được sử dụng để điều khiển các thiết bị điện tử. Vi điều khiển thực chất là một hệ thống bao gồm một vi xử lý có hiệu suất đủ dùng và giá thành thấp (khác với các bộ vi xử lý đa năng dùng trong máy tính) kết hợp với các khối ngoại vi như bộ nhớ, các mô đun vào/ra, các mô đun biến đổi số sang tương tự và tương tự sang số,... Ở máy tính thì các mô đun thường được xây dựng bởi các chíp và mạch ngoài. Vi điều khiển thường được dùng để xây dựng các hệ thống nhúng. Nó xuất hiện khá nhiều trong các dụng cụ điện tử, thiết bị điện, máy giặt, lò vi sóng, điện thoại, đầu đọc DVD, thiết bị đa phương tiện, dây chuyền tự động, v.v.
Hầu hết các vi điều khiển ngày nay được xây dựng dựa trên kiến trúc Harvard, kiến trúc này định nghĩa bốn thành phần cần thiết của một hệ thống nhúng. Những thành phần này là lõi CPU, bộ nhớ chương trình (thông thường là ROM hoặc bộ nhớ Flash), bộ nhớ dữ liệu (RAM), một hoặc vài bộ định thời và các cổng vào/ra để giao tiếp với các thiết bị ngoại vi và các môi trường bên ngoài - tất cả các khối này được thiết kế trong một vi mạch tích hợp. Vi điều khiển khác với các bộ vi xử lý đa năng ở chỗ là nó có thể hoạt động chỉ với vài vi mạch hỗ trợ bên ngoài.
Các vi điều khiển thông dụng :
Họ vi điều khiển AMCC (do tập đoàn "Applied Micro Circuits Corporation" sản xuất). Từ tháng 5 năm 2004, họ vi điều khiển này được phát triển và tung ra thị trường bởi IBM.
403 PowerPC CPU
PPC 403GCX
405 PowerPC CPU
…
Họ vi điều khiển Atmel
Dòng Atmel AT91 (Kiến trúc ARM THUMB)
Dòng AT90, Tiny & Mega – AVR (Atmel Norway design)
Dòng Atmel AT89 (Kiến trúc Intel 8051/MCS51)
Dòng MARC4
Họ vi điều khiển Cypress MicroSystems
CY8C2xxxx (PSoC)
Họ vi điều khiển Freescale Semiconductor. Từ năm 2004, những vi điều khiển này được phát triển và tung ra thị trường bởi Motorola.
Dòng 8-bit : 68HC05 (CPU05), 68HC08 (CPU08).
Dòng 16-bit : 68HC12 (CPU12), 68HC16 (CPU16).
Dòng 32-bit : Freescale 683XX (CPU32), MPC500.
Họ vi điều khiển Fujitsu
F²MC Family (8/16 bit)
Họ vi điều khiển Intel
Dòng 8-bit : 8XC42, MCS48.
Dòng 16-bit : 80186/88, MCS96, MXS296
Dòng 32-bit : 386EX, i960
Họ vi điều khiển Microchip
12-bit instruction PIC
14-bit instruction PIC
PIC16F84
16-bit instruction PIC
Họ vi điều khiển National Semiconductor
COP8
CR16
Họ vi điều khiển STMicroelectronics
ST 62
ST 7
Họ vi điều khiển Philips Semiconductors
LPC2000
LPC900
LPC700
1.1.2. Giới thiệu họ AVR
AVR là một họ vi điều khiển do hãng Atmel sản xuất (Atmel cũng là nhà sản xuất dòng vi điều khiển 89C51). AVR là chip vi điều khiển 8 bits với cấu trúc tập lệnh đơn giản hóa-RISC ( Reduced Instruction Set Computer ), một kiểu cấu trúc đang thể hiện ưu thế trong các bộ xử lí.
So với các chip vi điều khiển 8 bits khác, AVR có nhiều đặc tính hơn hẳn, hơn cả trong tính ứng dụng (dễ sử dụng) và đặc biệt là về chức năng :
Gần như chúng ta không cần mắc thêm bất kỳ linh kiện phụ nào khi sử dụng AVR, thậm chí không cần nguồn tạo xung clock cho chip (thường là các khối thạch anh).
Thiết bị lập trình (mạch nạp) cho AVR rất đơn giản, có loại mạch nạp chỉ cần vài điện trở là có thể làm được. Một số AVR còn hỗ trợ lập trình on - chip bằng bootloader không cần mạch nạp…
Bên cạnh lập trình bằng ASM, cấu trúc AVR được thiết kế tương thích C.
Nguồn tài nguyên về source code, tài liệu, application note...rất lớn trên internet.
Hầu hết các chip AVR có những tính năng (features) sau :
Có thể sử dụng xung clock lên đến 16Mhz, hoặc sử dụng xung clock nội lên đến 8 MHz (sai số 3%)
Bộ nhớ chương trình Flash có thể lập trình lại rất nhiều lần và dung lượng lớn, có SRAM (Ram tĩnh) lớn, và đặc biệt có bộ nhớ lưu trữ lập trình được EEPROM.
Nhiều ngõ vào ra (I/O PORT) 2 hướng (bi-directional).
8 bits, 16 bits timer/counter tích hợp PWM.
Các bộ chuyển đổi Analog - Digital phân giải 10 bits, nhiều kênh.
Chức năng Analog comparator.
Giao diện nối tiếp USART (tương thích chuẩn nối tiếp RS-232)
Giao diện nối tiếp Tow - Wire - Serial (tương thích chuẩn I2C) Master và Slaver.
Giao diện nối tiếp Serial Peripheral Interface (SPI).
…
Một số chip AVR thông dụng :
AT90S1200
AT90S2313
AT90C8534
Attiny10, Attiny11, Attiny12, Attiny15, Attiny22, Attiny16, Attiny28.
ATmega8/8515/8535
ATmega16, ATmega161, ATmega162, ATmega163, ATmega169.
ATmega32, ATmega323, ATmega103.
ATmega64/128/2560/2561.
…
1.2. Tìm hiểu về ATmega8
Hình 1.1: ATmega8
Vi điều khiển ATmega8 thuộc họ AVR, là họ vi điều khiển 8 bits theo công nghệ mới, với những tính năng rất mạnh được tích hợp trong chip của hãng Atmel theo công nghệ RISC (viết tắt của Reduced Instructions Set Computer - Máy tính với tập lệnh đơn giản hóa ), nó mạnh ngang hàng với các họ vi điều khiển 8 bits khác như PIC, Pisoc. Do ra đời muộn hơn nên họ vi điều khiển AVR có nhiều tính năng mới đáp ứng tối đa nhu cầu của người sử dụng. So với họ 8051, 89xx thì nó có độ ổn định, khả năng tích hợp, sự mềm dẻo trong việc lập trình và tiện lợi hơn rất nhiều.
ATmega8 có đầy đủ tính năng của họ AVR, có giá thành vừa phải, rất phù hợp dùng để thiết kế những hệ thống vừa và nhỏ.
Hình 1.2: Sơ đồ chân của ATmega8
Một số đặc tính của Vi điều khiển ATmega8 :
+ Bộ nhớ 8K Bytes (Flash) .
+ Bộ nhớ 512 Bytes (EEPROM) .
+ Bộ nhớ 1K Bytes (SRAM) .
+ Đóng vỏ 28 chân, trong đó có 23 chân vào ra dữ liệu chia làm 3 PORT B, C, D. Các chân này đều có chế độ điện trở treo (pull_up resistors).
+ Các đường dẫn vào/ra (I/O) lập trình được .
+ Giao tiếp SPI.
+ Giao tiếp I2C.
+ Có 4 kênh ADC 10 bits (ADC0, ADC1, ADC2, ADC3), 2 kênh ADC 8 bits (ADC4, ADC5).
+ Bộ so sánh analog.
+ Ba kênh băm xung PWM .
+ Hai bộ timer/counter 8 bits, 1 bộ timer/counter1 16 bits .
+ Một bộ định thời Watchdog .
+ Một bộ truyền nhận USART lập trình được .
+ Các chế độ tiết kiệm năng lượng như sleep, stand by..vv .
*Các đặc tính của Vi điều khiển AVR cụ thể hơn tại Web site: www.atmel.com
Hình 1.3: Sơ đồ khối của ATmega8
1.3. Truyền thông ATmega8
1.3.1 Giao tiếp RS232
Cổng nối tiếp RS232 là một giao diện phổ biến rộng rãi nhất. Người ta còn gọi cổng này là cổng COM1. Giống như cổng máy in cổng COM cũng được sử dụng một cách thuận tiện cho việc giao tiếp với thiết bị ngoại vi. Việc truyền dữ liệu qua cổng COM được tiến hành theo cách nối tiếp. Nghĩa là các bit dữ liệu được truyền đi nối tiếp nhau trên một đường dẫn. Loại truyền này có khả năng dùng cho những ứng dụng có yêu cầu truyền khoảng cách lớn hơn, bởi vì các khả năng gây nhiễu là nhỏ đáng kể hơn khi dùng một cổng song song (cổng máy in). Cổng COM không phải là một hệ thống bus nó cho phép dễ dàng tạo ra liên kết dưới hình thức điểm với điểm giữa hai máy cần trao đổi thông tin với nhau, một thành viên thứ ba không thể tham gia vào cuộc trao đổi thông tin này.
Các chân và đường dẫn được mô tả như sau:
Hình 1.4: Sơ đồ chân cổng RS232
Phích cắm COM có tổng cộng 8 đường dẫn, chưa kể đến đường nối đất. Trên thực tế có hai loại phích cắm, một loại 9 chân và một loại 25 chân. Cả hai loại này đều có chung một đặc điểm.
Việc truyền dữ liệu xảy ra ở trên hai đường dẫn. Qua chân cắm ra TXD máy tính gởi dữ liệu của nó đến KIT Vi điều khiển. Trong khi đó các dữ liệu mà máy tính nhận được, lại được dẫn đến chân RXD các tín hiệu khác đóng vai trò như là tín hiệu hổ trợ khi trao đổi thông tin, và vì thế không phải trong mọi trường hợp ứng dụng đều dùng hết.
Vì tín hiệu cổng COM thường ở mức +12V, -12V nên không tương thích với điện áp TTL nên để giao tiếp KIT Vi điều khiển ATmega8 với máy tính qua cổng COM ta phải qua một vi mạch biến đổi điện áp cho phù hợp với mức TTL, ta chọn vi mạch MAX232 để thực hiện việc tương thích điện áp.
1.3.2 Sơ đồ mạch
a. Mạch nguồn
Hình 1.5: Mạch nguồn
b. Mạch giao tiếp MAX 232
Vi mạch MAX 232 của hãng MAXIM là một vi mạch chuyên dùng trong giao diện nối tiếp với máy tính. Chúng có nhiệm vụ chuyển đổi mức TTL ở lối vào thành mức +10V hoặc –10V ở phía truyền và các mức +3…+15V hoặc -3…-15V thành mức TTL ở phía nhận.
Hình 1.6: Sơ đồ chân Max 232
Vi mạch MAX 232 có hai bộ đệm và hai bộ nhận. Đường dẫn điều khiển lối vào CTS, điều khiển việc xuất ra dữ liệu ở cổng nối tiếp khi cần thiết, được nối với chân 9 của vi mạch MAX 232. Còn chân RST (chân 10 của vi mạch MAX ) nối với đường dẫn bắt tay để điều khiển quá trình nhận. Thường thì các đường dẫn bắt tay được nối với cổng nối tiếp qua các cầu nối, để khi không dùng đến nữa có thể hở mạch các cầu này. Cách truyền dữ liệu đơn giản nhất là chỉ dùng ba đường dẫn TxD, RxD và GND (mass).
Sơ đồ mạch :
Hình 1.7: Mạch RS232
Hình 1.8: Mạch truyền thông Atmega8
1.3.3 Phần mềm lập trình và cách khởi tạo
a. Phần mềm lập trình
Sử dụng phần mềm CodeVisionAVR C Compiler viết trên nền ngôn ngữ C
Hình 1.9: Phần mềm CodeVisionAVR C Compiler
b. Cách khởi tạo
Chọn chip ATmega8, tần số thạch anh 11.0592MHz
Khởi tạo USART như hình vẽ :
Hình 1.10: Khởi tạo USART
Truyền nhận dữ liệu có sử dụng ngắt. Sử dụng bộ đệm 8bits, tốc độ truyền 9600, chế độ truyền đồng bộ: 8bits Data, 1bits Stop, No Parity.
1.3.4 Chương trình
1.3.4.1. Phần khai báo.
a. Master :
#include
#include
#define len_F 3
#define led PORTC
#define RXB8 1
#define TXB8 0
#define UPE 2
#define OVR 3
#define FE 4
#define UDRE 5
#define RXC 7
#define FRAMING_ERROR (1<<FE)
#define PARITY_ERROR (1<<UPE)
#define DATA_OVERRUN (1<<OVR)
#define DATA_REGISTER_EMPTY (1<<UDRE)
#define RX_COMPLETE (1<<RXC)
char ch,chon;
unsigned char index_F,start_F;
unsigned char frame_Rx[100];
unsigned char data1,data2,i;
// USART Receiver buffer
#define RX_BUFFER_SIZE 8
char rx_buffer[RX_BUFFER_SIZE];
#if RX_BUFFER_SIZE<256
unsigned char rx_wr_index,rx_rd_index,rx_counter;
#else
unsigned int rx_wr_index,rx_rd_index,rx_counter;
#endif
// This flag is set on USART Receiver buffer overflow
bit rx_buffer_overflow;
// USART Receiver interrupt service routine
interrupt [USART_RXC] void usart_rx_isr(void)
{
char status,data;
status=UCSRA;
data=UDR;
if ((status & (FRAMING_ERROR | PARITY_ERROR | DATA_OVERRUN))==0)
{
rx_buffer[rx_wr_index]=data;
if (++rx_wr_index == RX_BUFFER_SIZE) rx_wr_index=0;
if (++rx_counter == RX_BUFFER_SIZE)
{
rx_counter=0;
rx_buffer_overflow=1;
};
};
}
#ifndef _DEBUG_TERMINAL_IO_
// Get a character from the USART Receiver buffer
#define _ALTERNATE_GETCHAR_
#pragma used+
char getchar(void)
{
char data;
while (rx_counter==0);
data=rx_buffer[rx_rd_index];
if (++rx_rd_index == RX_BUFFER_SIZE) rx_rd_index=0;
#asm("cli")
--rx_counter;
#asm("sei")
return data;
}
#pragma used-
#endif
// USART Transmitter buffer
#define TX_BUFFER_SIZE 8
char tx_buffer[TX_BUFFER_SIZE];
#if TX_BUFFER_SIZE<256
unsigned char tx_wr_index,tx_rd_index,tx_counter;
#else
unsigned int tx_wr_index,tx_rd_index,tx_counter;
#endif
// USART Transmitter interrupt service routine
interrupt [USART_TXC] void usart_tx_isr(void)
{
if (tx_counter)
{
--tx_counter;
UDR=tx_buffer[tx_rd_index];
if (++tx_rd_index == TX_BUFFER_SIZE) tx_rd_index=0;
};
}
#ifndef _DEBUG_TERMINAL_IO_
// Write a character to the USART Transmitter buffer
#define _ALTERNATE_PUTCHAR_
#pragma used+
void putchar(char c)
{
while (tx_counter == TX_BUFFER_SIZE);
#asm("cli")
if (tx_counter || ((UCSRA & DATA_REGISTER_EMPTY)==0))
{
tx_buffer[tx_wr_index]=c;
if (++tx_wr_index == TX_BUFFER_SIZE) tx_wr_index=0;
++tx_counter;
}
else
UDR=c;
#asm("sei")
}
#pragma used-
#endif
#include
….
PORTB=0x00;
DDRB=0x00;
PORTC=0xFF;
DDRC=0xFF;
PORTD=0x00;
DDRD=0x00;
// USART initialization
// Communication Parameters: 8 Data, 1 Stop, No Parity
// USART Receiver: On
// USART Transmitter: On
// USART Mode: Asynchronous
// USART Baud Rate: 9600
UCSRA=0x00;
UCSRB=0xD8;
UCSRC=0x86;
UBRRH=0x00;
UBRRL=0x33;
ACSR=0x80;
SFIOR=0x00;
#asm("sei")
b. Slave 1 :
#define len_F 3
#define led PORTC
#define station 0x00
char ch;
unsigned char index_F,start_F,received;
unsigned char frame_Rx[100];
unsigned char data1,data2,i;
c. Slave 2 :
#define len_F 3
#define led PORTC
#define station 0x01
1.3.4.2. Phần chương trình.
a. Master :
void truyen (char station, char data1, char data2)
{
putchar('s');
putchar('t');
putchar(station);
putchar(data1);
putchar(data2);
}
void sent_frame(void)
{
truyen(0x00,1,2);
delay_ms(10);
truyen(0x01,3,4);
delay_ms(10);
}
void nhan_dulieu(void)
{
ch=getchar();
if( (index_F>=1) && (ch=='t') && (frame_Rx[index_F-1]=='s') )
{
index_F=0;
start_F=1;
}
else
frame_Rx[index_F++]=ch;
if( (start_F) && (index_F>len_F) )
{
start_F=0;
if (frame_Rx[0]==0x00)
{
chon=1;
}
if (frame_Rx[0]==0x01)
{
chon=2;
}
}
if(index_F>RX_BUFFER_SIZE)
{
frame_Rx[0]=frame_Rx[index_F-3];
frame_Rx[1]=frame_Rx[index_F-2];
frame_Rx[2]=frame_Rx[index_F-1];
index_F=3;
}
if(chon==1)
{
data1 = frame_Rx[1];
data2 = frame_Rx[2];
if( (data1==1)||(data2==2) )
{
led=0x00;
delay_ms(500);
}
}
if(chon==2)
{
data1 = frame_Rx[1];
data2 = frame_Rx[2];
if( (data1==3)||(data2==4) )
{
led=0xAA;
delay_ms(500);
}
}
}
void main(void)
{
while (1)
{
if(rx_counter!=0)
{
nhan_dulieu();
data1=data2=0;
}
if(rx_counter==0)
{
sent_frame();
UDR=0x00;
led=0xFF;
}
};
}
b. Slave 1 :
void sent_frame(void)
{
putchar('s');
putchar('t');
putchar(station);
putchar(1);
putchar(2);
}
void nhan(void)
{
ch=getchar();
if( (index_F>=1)&&(ch=='t')&&(frame_Rx[index_F-1]=='s') )
{
index_F=0;
start_F=1;
}
else
frame_Rx[index_F++]=ch;
if( (start_F)&&(index_F>len_F) )
{
if(frame_Rx[0]==station)
{
start_F=0;
received=1;
sent_frame();
}
}
if(index_F>RX_BUFFER_SIZE)
{
frame_Rx[0]=frame_Rx[index_F-3];
frame_Rx[1]=frame_Rx[index_F-2];
frame_Rx[2]=frame_Rx[index_F-1];
index_F=3;
}
if(received)
{
data1=frame_Rx[1];
data2=frame_Rx[2];
}
if(data1==1)
{
led=0x55;
delay_ms(500);
}
if(data2==2)
{
led=0xAB;
delay_ms(500);
}
}
void main(void)
{
while (1)
{
if(rx_counter)
{
nhan();
}
else
{
UDR=0x00;
received=data1=data2=0;
led=0xFF;
}
};
}
c. Slave 2 :
if(data1==3)
{
led=0xAB;
delay_ms(500);
}
if(data2==4)
{
led=0x55;
delay_ms(500);
}
Chương 2
PLC
(Điều khiển mô hình đèn giao thông)
2.1. Giới thiệu chung về PLC
2.1.1. Khái niệm PLC
PLC là viết tắt của tiếng Anh: Programmable Logic Controller là một bộ điều khiển logic lập trình được. PLC dùng để thay thế các mạch relay (rơ le) trong thực tế. PLC hoạt động theo phương thức quét các trạng thái trên đầu ra và đầu vào. Khi có sự thay đổi ở đầu vào thì đầu ra sẽ thay đổi theo. Ngôn ngữ lập trình của PLC có thể là Ladder hay State Logic. Hiện nay có nhiều hãng sản xuất ra PLC như Siemens, Allen-Bradley, Mitsubishi Electric, General Electric, Omron, Honeywell... Thiết bị này có các đầu vào logic, sau quá trình xử lý theo chương trình bên trong, nó cho đầu ra mức logic có quan hệ với các đầu vào. Các thiết bị PLC có ứng dụng rộng rãi và dần không thể thiếu được trong các dây truyền sản xuất hiện đại.