1. Trang chủ
  2. » Luận Văn - Báo Cáo

Thiết kế mạch slave trong giao thức modbus

24 38 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Thiết Kế Mạch Slave Trong Giao Thức Modbus
Định dạng
Số trang 24
Dung lượng 0,92 MB

Nội dung

Lời tựa Như các bạn đã biết, hiện nay trong công nghiệp có rất nhiều hệ thống bus được sử dụng như: Profibus, Can, Interbus, DeviceNet,… Tuy nhiên, Modbus lại là giao thức phổ biến nhất,

Trang 1

M c l c ụ ụ

Trang 2

Lời tựa

Như các bạn đã biết, hiện nay trong công nghiệp có rất nhiều hệ thống bus được sử dụng như: Profibus, Can, Interbus, DeviceNet,… Tuy nhiên, Modbus lại là giao thức phổ biến nhất, được các nhà cung cấp lựa chọn cho cả thiết bị thế hệ cũ

và mới Modbus có thể chạy trên hầu hết các phương tiện truyền thông trong đó có các cổng kết nối dây xoắn, không dây, sợi quang, Ethernet, modem điện thoại, điện thoại di động và vi sóng Có nghĩa là kết nối này có thể được thiết lập trong các nhà máy thế hệ cũ hay mới khá dễ dàng

Chương I : Tổng quan về Modbus

1.1 Khái niệm về Modbus

Modbus là một giao thức do hang Modicon phát triển Theo mô hình ISO/OSI thì nó thực chất là một chuẩn giao thức và dịch vụ thuộc lớp ứng dụng.

Modbus là một cấu trúc mạng truyền thông kiểu nối tiếp Nó hỗ trợ hai chuẩn truyền dẫn là RS232 và RS485 Việc truyền dữ liệu được thực hiện theo cơ chế Master/Slave

1.2 Các đặc điểm của Modbus

1.2.1 Phân loại

Căn cứ vào cách thức truyền dữ liệu ta chia Modbus làm 3 dạng:

• Modbus RTU : Dữ liệu được truyền trên bus nối tiếp và được truyền theo định dạng mã hexadecimal Nó được sử dụng trong truyền thông thông thường.

• Modbus ASCII : Dự liệu được truyền trên bus nối tiếp và truyền dưới dạng mã ascii Nó có ưu điểm là có thể dễ dàng để người dùng hiểu được

dữ liệu đang truyền Được sử dụng trong việc kiểm tra và giới thiệu cho giao thức mạng Modbus

• Modbus TCP/IP : Dữ liệu có thể được truyền trên mạng Lan hoặc mạng ở trên một khu vực rộng Dữ liệu được định nghĩa dạng hexadecimal.

1.2.2 Cấu trúc đoạn tin trong Modbus

Đây là cấu trúc một đoạn tin trong giao thức Modbus:

Address field Function field Data field Error check field

1.2.2.1 Address field : 1 byte

Trang 3

Có độ dài 1 byte : đây là nơi cung cấp địa chỉ của slave mà master tác động tới Mỗi một slave sẽ có một địa chier Modbus riêng ( từ 0 đến 247).

1.2.2.2 Function field : 2 bytes

Mã này cho biết nhiệm vụ mà slave cần làm Đặc biệt, Modbus cung cấp một bảng mã chung cho tất cả các thiết bị

Hình 1.1 Mã hàm cung cấp bởi modbus

1.2.2.3 Data field : Variable

Khối này thường chứa địa chỉ của các vùng trên thiết bị slava mà master muốn tác động tới

Trong giao thức mạng Modbus, thì có một tiêu chuẩn địa chỉ chung cho tất

cả các thiết bị có hỗ trợ Modbus

Bảng dưới đây trình bày địa chỉ chuẩn Modbus của các thanh ghi trong các thiết bị hỗ trợ Modbus.

Trang 4

Hình 1.2 Địa chỉ chuẩn modbus của các thanh ghi

1.2.2.4 Error check field : 2 bytes

Chức năng : Giúp slave kiểm tra được lỗi có xuất hiện khi master truyền dữ liệu hay không

1.3 Ứng dụng của Modbus trong công nghiệp

• Là một phương pháp truyền thông mở, là giải pháp được sử dụng phổ biến để kết nối các thiết bị điện tử

• Chúng hay được dùng để truyền tín hiệu từ các thiết bị đo, thiết bị điều khiển trở về bộ điều khiển chính hay hệ thống thu nhập dữ liệu

• Kết nối các máy tính giám sát với một thiết bị điều khiển ( RTU : remote terminal unit) trong hệ thống Scada

Trang 5

Chương 2 : Giao tiếp giữa PLC và Vi điều khiển.

2.1 Đặt vấn đề

MODBUS

Hình 2.0 Sơ đồ cầu trúc tổng quát của mạch

Ở đồ án I, chúng em sử dụng PLC S7-300 giao tiếp với vi điều khiển qua chuẩn truyền thông công nghiệp Modbus để thực hiện việc đo nhiệt độ và tắt bật đèn sáng

2.2 Giải quyết vấn đề

2.2.1 Hướng giải quyết tổng quát.

Để giải quyết vấn đề trên Chúng em sử dụng một mạch điện có chứa:

• Lm 35: cảm biến đo nhiệt độ.

Microcontroller

PLC

S7-300

Trang 6

• Rơ le đóng cắt điện 220V :

• Max 485 : chuyển đổi tín hiệu của chuẩn giao tiếp RS 232 sang RS 485,

sử dụng cặp đôi dây xoắn và phương pháp chặn song song (lắp trở 120 ôm)

Trang 7

Hình 2.1 Mạch in của mạch Slave

Trang 8

Hình 2.2 Ảnh 3D của mạch Slave.

Sử dụng phương pháp truy nhập bus kiểu Master/ Slave cho PLC và vdk atmega 8 Hai phần tử sẽ này sẽ giao tiếp qua giao thức Modbus với chuẩn truyền dẫn RS 485 ( phương thức chênh lệch đối xứng).

Với nhiệm vụ đo nhiệt độ, LM35 đo nhiệt độ truyền thông tin về atmega 8

Vi điều khiển này gửi dữ liệu về nhiệt độ khi Master- PLC yêu cầu.

Với nhiệm vụ bật và tắt bóng đèn, khi Master yêu cầu đóng cắt Nó sẽ gửi lệnh tới Slave- vi điều khiển Rồi vi điều khiển này lại tín hiệu điều khiển tới relay giúp đóng cắt tiếp điểm, giúp bóng đèn bật tắt.

2.2.2 Hướng giải quyết cụ thể.

2.2.2.1 Lập trình phần mềm

Sơ đồ thuật toán:

Trang 9

Dữ liệu lỗi?

Xử lý dữ liệu nhận được và gửi

phản hồi

Trang 10

Bộ truyền uart được thiết lập với các cài đặt: Baudrate: 19200 bps

1 Start bit

8 data bit

No parity

2 stop bit Cài đặt bộ ADC: 10 bit, điện áp tham chiếu 5V.

Cài đặt ngắt timer: chu kì ngắt: 1s.

Chương trình phục vụ ngắt timer có chức năng đọc giá trị nhiệt độ từ cảm biến lm35 theo chu kì 1s.

Chương trình được lập trình bằng phần mềm CodevisionAVR:

/******************************************************

Chip type : ATmega8

Program type : Application

AVR Core Clock frequency: 11.059200 MHz

Memory model : Small

External RAM size : 0

Data Stack size : 256

#define relay_on PORTB.0=1

#define relay_off PORTB.0=0

#define TRcontrol DDRD.2=1

#define Tx_enable PORTD.2=1

#define Rx_enable PORTD.2=0

// Declare your global variables here

//nhiet do

unsigned int nhiet_do;

bit relay;

bit frameIsBroadcast =0;

unsigned char modbus_frame[16];

unsigned char response_frame[16];

#define DATA_REGISTER_EMPTY (1<<UDRE)

#define RX_COMPLETE (1<<RXC)

#define FRAMING_ERROR (1<<FE)

#define PARITY_ERROR (1<<UPE)

#define DATA_OVERRUN (1<<DOR)

Trang 11

// USART Receiver buffer

// USART Receiver interrupt service routine

interrupt [USART_RXC] void usart_rx_isr(void)

Trang 12

// USART Transmitter interrupt service routine

interrupt [USART_TXC] void usart_tx_isr(void)

Trang 13

// Voltage Reference: AVCC pin

#define ADC_VREF_TYPE ((0<<REFS1) | (1<<REFS0) | (0<<ADLAR)) // Read the AD conversion result

unsigned int read_adc(unsigned char adc_input)

// Wait for the AD conversion to complete

while ((ADCSRA & (1<<ADIF))==0);

if ((crc&0x0001) != 0) { // If the LSB is set

crc >>= 1; // Shift right and XOR 0xA001

Trang 14

crc ^= 0xA001;

}

else // Else LSB is not set

crc >>= 1; // Just shift right

Trang 15

checksum=crc_checksum(response_frame,2); response_frame[3]=checksum>>8;

Trang 16

// Declare your local variables here

unsigned int mas_check, slv_check;

unsigned char len, function_code;

// Input/Output Ports initialization

// Port B initialization

// Function: Bit7=In Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In

DDRB=(0<<DDB7) | (0<<DDB6) | (0<<DDB5) | (0<<DDB4) | (0<<DDB3) | (0<<DDB2) | (0<<DDB1) | (0<<DDB0);

// State: Bit7=T Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T

PORTB=(0<<PORTB7) | (0<<PORTB6) | (0<<PORTB5) | (0<<PORTB4) | (0<<PORTB3) | (0<<PORTB2) | (0<<PORTB1) | (0<<PORTB0);

// Port C initialization

// Function: Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In

DDRC=(0<<DDC6) | (0<<DDC5) | (0<<DDC4) | (0<<DDC3) | (0<<DDC2) | (0<<DDC1) | (0<<DDC0);

// State: Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T

PORTC=(0<<PORTC6) | (0<<PORTC5) | (0<<PORTC4) | (0<<PORTC3) | (0<<PORTC2) | (0<<PORTC1) | (0<<PORTC0);

// Port D initialization

// Function: Bit7=In Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In

DDRD=(0<<DDD7) | (0<<DDD6) | (0<<DDD5) | (0<<DDD4) | (0<<DDD3) | (0<<DDD2) | (0<<DDD1) | (0<<DDD0);

// State: Bit7=T Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T

PORTD=(0<<PORTD7) | (0<<PORTD6) | (0<<PORTD5) | (0<<PORTD4) | (0<<PORTD3) | (0<<PORTD2) | (0<<PORTD1) | (0<<PORTD0);

// Timer/Counter 0 initialization

// Clock source: System Clock

// Clock value: Timer 0 Stopped

// Mode: Normal top=0xFFFF

// OC1A output: Disconnected

// OC1B output: Disconnected

// Noise Canceler: Off

// Input Capture on Falling Edge

Trang 17

// Timer Period: 1 s

// Timer1 Overflow Interrupt: On

// Input Capture Interrupt: Off

// Compare A Match Interrupt: Off

// Compare B Match Interrupt: Off

TCCR1A=(0<<COM1A1) | (0<<COM1A0) | (0<<COM1B1) | (0<<COM1B0) | (0<<WGM11) | (0<<WGM10);

TCCR1B=(0<<ICNC1) | (0<<ICES1) | (0<<WGM13) | (0<<WGM12) | (1<<CS12) | (0<<CS11) | (0<<CS10);

// Clock source: System Clock

// Clock value: Timer2 Stopped

// Mode: Normal top=0xFF

// OC2 output: Disconnected

ASSR=0<<AS2;

TCCR2=(0<<PWM2) | (0<<COM21) | (0<<COM20) | (0<<CTC2) | (0<<CS22) | (0<<CS21) | (0<<CS20);

TCNT2=0x00;

OCR2=0x00;

// Timer(s)/Counter(s) Interrupt(s) initialization

TIMSK=(0<<OCIE2) | (0<<TOIE2) | (0<<TICIE1) | (0<<OCIE1A) | (0<<OCIE1B) | (0<<TOIE1) | (0<<TOIE0);

// External Interrupt(s) initialization

// USART Mode: Asynchronous

// USART Baud Rate: 19200

UCSRA=(0<<RXC) | (0<<TXC) | (0<<UDRE) | (0<<FE) | (0<<DOR) | (0<<UPE) | (0<<U2X) | (0<<MPCM);

UCSRB=(1<<RXCIE) | (1<<TXCIE) | (0<<UDRIE) | (1<<RXEN) | (1<<TXEN) | (0<<UCSZ2) | (0<<RXB8) | (0<<TXB8);

UCSRC=(1<<URSEL) | (0<<UMSEL) | (0<<UPM1) | (0<<UPM0) | (1<<USBS) | (1<<UCSZ1) | (1<<UCSZ0) | (0<<UCPOL);

Trang 18

UBRRL=0x23;

// Analog Comparator initialization

// Analog Comparator: Off

// The Analog Comparator's positive input is

// connected to the AIN0 pin

// The Analog Comparator's negative input is

// connected to the AIN1 pin

ACSR=(1<<ACD) | (0<<ACBG) | (0<<ACO) | (0<<ACI) | (0<<ACIE) | (0<<ACIC) | (0<<ACIS1) | (0<<ACIS0);

// ADC initialization

// ADC Clock frequency: 691.200 kHz

// ADC Voltage Reference: AVCC pin

TWCR=(0<<TWEA) | (0<<TWSTA) | (0<<TWSTO) | (0<<TWEN) | (0<<TWIE);

// Global enable interrupts

Trang 19

else if(function_code==read_coil&&frameIsBroadcast==0) Funct_readcoil_response(); else if(function_code==write_coil)

// Timer1 overflow interrupt service routine

interrupt [TIM1_OVF] void timer1_ovf_isr(void)

{

unsigned int buff;

// Reinitialize Timer1 value

Trang 20

2.2.2.2 Mô phỏng & sửa lỗi phần mềm:

Sử dụng phần mềm COM PORT toolkit để mô phỏng và kiểm tra dữ liệu truyền / nhận tới vi điều khiển:

Hình 2.3 Giao diện của phần mềm COM PORT

Trang 21

Hình 2.4 Cửa sổ gửi lệnh của COM PORT

Thông số kỹ thuật của slave: địa chỉ: 0xCD

Các hàm chức năng cung cấp: 04 – đọc giá trị từ một thanh ghi (giá trị nhiệt độ)

05 – thay đổi trạng thái của một cuộn hút ( relay)

01 – đọc trạng thái của một cuộn hút (relay)

Trang 22

Hình 2.5 Khung truyền mà Slave ( vdk Atmega 8) trả về

Trang 23

Chương 3: Kết quả thực nghiệm 3.1: Chức năng đọc giá trị nhiệt độ:

- Frame truyền đi: CD 04 00 00 49 7F

Trang 24

3.3: Chức năng đọc trạng thái relay:

Frame truyền đi: CD 01 E0 94

Frame nhận về:

- Nếu relay đang đóng: CD 01 01 6F 20

- Nếu relay đang ngắt: CD 01 00 AF E1

3.4: Trả lời báo lỗi:

Nếu Frame truyền đi chứa hàm chức năng mạch không hỗ trợ:

VD: CD 09 26 95

Trả lời báo lỗi: CD 89 01 86 94

*Tài liệu tham khảo :

• Mang công nghiệp – Hoàng Minh Sơn.

• Bài giảng Hệ thống đo & ĐKCN- Thầy Đào Đức Thọ.

• https://ctlsys.com/support/how_to_compute_the_modbus_rtu_message_crc/

• modbus-rtu-pc-master-2plc-slave-26628/

Ngày đăng: 15/11/2020, 14:43

HÌNH ẢNH LIÊN QUAN

Hình 1.1 Mã hàm cung cấp bởi modbus - Thiết kế mạch slave trong giao thức modbus
Hình 1.1 Mã hàm cung cấp bởi modbus (Trang 3)
Hình 1.2 Địa chỉ chuẩn modbus của các thanh ghi - Thiết kế mạch slave trong giao thức modbus
Hình 1.2 Địa chỉ chuẩn modbus của các thanh ghi (Trang 4)
Hình 2.0 Sơ đồ cầu trúc tổng quát của mạch - Thiết kế mạch slave trong giao thức modbus
Hình 2.0 Sơ đồ cầu trúc tổng quát của mạch (Trang 5)
Hình 2.1 Mạch in của mạch Slave - Thiết kế mạch slave trong giao thức modbus
Hình 2.1 Mạch in của mạch Slave (Trang 7)
Hình 2.2 Ảnh 3D của mạch Slave. - Thiết kế mạch slave trong giao thức modbus
Hình 2.2 Ảnh 3D của mạch Slave (Trang 8)
Hình 2.3 Giao diện của phần mềm COM PORT - Thiết kế mạch slave trong giao thức modbus
Hình 2.3 Giao diện của phần mềm COM PORT (Trang 20)
Hình 2.4 Cửa sổ gửi lệnh của COM PORT - Thiết kế mạch slave trong giao thức modbus
Hình 2.4 Cửa sổ gửi lệnh của COM PORT (Trang 21)
Hình 2.5 Khung truyền mà Slave ( vdk Atmega 8) trả về - Thiết kế mạch slave trong giao thức modbus
Hình 2.5 Khung truyền mà Slave ( vdk Atmega 8) trả về (Trang 22)
Hình 3.1 Đèn tắt khi relay cắt. - Thiết kế mạch slave trong giao thức modbus
Hình 3.1 Đèn tắt khi relay cắt (Trang 23)

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w