You are on page 1of 6

Trường Đại Học Bách Khoa Đáp án Đề Thi Học Kỳ 1 – 2018-2019

Tp.HCM Môn: ĐO LƯỜNG ĐIỀU KHIỂN BẰNG MÁY TÍNH


Khoa Điện – Điện Tử Thời gian: 90 phút
Bộ Môn Tự Động (Được sử dụng tài liệu giấy, chú thích tất cả câu lệnh)

Câu 1 : Viết chương trình PLC S7-1200 và thực hiện giao tiếp máy tính qua cổng TCP/IP điều
khiển và giám sát hoạt động của đèn giao thông, chuẩn truyền Modbus TCP.

a. (L.O.1) (1đ)
- Nêu phần mềm lập trình PLC và giao diện máy tính để thực hiện bài toán.
o Lập trình cho PLC Siemens s71200 : TIA Portal
o Lập trình giao diện: Visual Studio, Labview,…
- Lập bảng mapping thông số và tín hiệu điều khiển giữa PLC và giao diện máy tính.

Sinh viên lập bảng liên kết dữ liệu giữa PC và PLC

Vi dụ:

STT Data Block Tín hiệu PLC Ghi/đọc Ghi chú


1 [0] Tín hiệu đèn Đọc Đèn báo tín hiệu
2 [1] Thời gian trụ A (H) Đọc Trụ A
3 [2] Thời gian trụ A (L) Đọc Trụ A
… …

b. (L.O.2) (1.5đ) Viết chương trình PLC thực hiện liên kết thông số từ PC và thực hiện điều
khiển đèn giao thông.
- Sử dụng hàm Modbus server V4.0 để liên kết dữ liệu với datablock theo bảng mapping ở câu a:

- Sinh viết chương trình điều khiển đèn giao thông sử dụng 1 timer hoặc 4 timer; không hiển thị
led 7 đoạn; sử dụng hàm move để sao chép các dữ liệu liên quan vào datablock.

c. (L.O.4) (1.5đ) Thiết kế giao diện và viết chương trình giao diện cho PC.
- Xác định và nêu hoạt động cơ bản các hàm Modbus liên kết dữ liệu giữa PC PLC

Sinh viên giải thích hoạt động của các hàm ReadmultiRegister và WritemultiRegister theo giao thức
Modbus TCP trên C#.
- Viết chương trình cấu hình và kết nối giữa PLC và PC

Sinh viên viết đoạn chương trình kết nối TCP/IP trên C#:

public void Connect()

this.mSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

this.bufferReceiver = new byte[READ_BUFFER_SIZE];

this.bufferSender = new byte[WRITE_BUFFER_SIZE];

this.mSocket.SendBufferSize = READ_BUFFER_SIZE;

this.mSocket.ReceiveBufferSize = WRITE_BUFFER_SIZE;

IPEndPoint sever = new IPEndPoint(IPAddress.Parse(txtIPAddress.Text),


Convert.ToInt16(txtPort.Text));

this.mSocket.Connect(sever);

- Giã sử các hàm Modbus có sẵn, viết chương trình cho nút nhấn “Update_Pars” cho phép
cập nhật nội dung đèn XA, VA, XB, VB xuống PLC; và chương trình cho Timer cập nhật
trạng thái PLC.

Sinh viên sử dụng hàm WriteMultiRegister() trong Update_Pars để cập nhật thông tin xuống PLC;
Sử dụng ReadMutiRegister() trong ngắt timer để đọc thông tin từ PLC về trạng thái đèn.

Câu 2: Truyền thông nối tiếp

a. (L.O.3) (1.5đ) Thiết kế và vẽ mạch card thu thập dữ liệu thỏa mãn các yêu cầu sau:
 Ngõ vào, ngõ ra: 3 kênh ADC input hoạt động đồng thời, 4 kênh PWM.
 Chip Vi Xử lý AVR, PIC hoặc ARM; Chip ADC 0808
 Kết nối với PC qua chuẩn RS-485 full duplex.

Mạch thiết kế mẫu cho ATmega8 như sau:


U2
AI1 26 25
IN0 ADD A
27 24
IN1 ADD B
28 23
IN2 ADD C
1 22 ADC_Start
IN3 ALE
2
IN4
3 21 Data0
IN5 2 -1MSB
4 20 Data1
IN6 2 -2
5 19 Data2
IN7 2 -3
18 Data3
2 -4
ADC_Start 6 8 Data4
START 2 -5
ADC1_Read7 15 Data5
EOC 2 -6
9 14 Data6
OUTPUT ENABLE 2 -7 U1
CLK 10 17 Data7
CLOCK 2 -8LSB
11 13 Data0 12 23 PWM1
VCC GND PB0/ICP1 PC0/ADC0
Data1 13 24 PWM2
PB1/OC1A PC1/ADC1
12 Data2 14 25 PWM3
VREF(+) PB2/SS/OC1B PC2/ADC2
16 Data3 15 26 PWM4
VREF(-) PB3/MOSI/OC2 PC3/ADC3
Data4 16 27 ADC1_Read
PB4/MISO PC4/ADC4/SDA
ADC0808 Data5 17 28 ADC2_Read
PB5/SCK PC5/ADC5/SCL
Data6 7 29 ADC3_Read
PB6/TOSC1/XTAL1 PC6/RESET
Data7 8
U3 PB7/TOSC2/XTAL2
30 RXD
PD0/RXD
AI2 26 25 31 TXD
IN0 ADD A PD1/TXD
27 24 32
IN1 ADD B PD2/INT0
28 23 19 1
IN2 ADD C ADC6 PD3/INT1
1 22 ADC_Start 22 2
IN3 ALE ADC7 PD4/T0/XCK
2 9
IN4 PD5/T1
3 21 Data0 20 10
IN5 2 -1MSB AREF PD6/AIN0
4 20 Data1 18 11 ADC_Start
IN6 2 -2 AVCC PD7/AIN1
5 19 Data2
IN7 2 -3
18 Data3 ATMEGA8
2 -4
ADC_Start 6 8 Data4
START 2 -5
ADC2_Read7 15 Data5
EOC 2 -6
9 14 Data6
OUTPUT ENABLE 2 -7
CLK 10 17 Data7
CLOCK 2 -8LSB U5
11 13
VCC GND
RXD 1 7 RX-
RO B
12
VREF(+)
16 2
VREF(-) RE
ADC0808 3
DE
U4 4 6 RX+
DI A
AI3 26 25
IN0 ADD A
27 24 MAX487
IN1 ADD B
28 23
IN2 ADD C U6
1 22 ADC_Start
IN3 ALE
2 1 7 TX-
IN4 RO B
3 21 Data0
IN5 2 -1MSB
4 20 Data1 2
IN6 2 -2 RE
5 19 Data2
IN7 2 -3
18 Data3 3
2 -4 DE
ADC_Start 6 8 Data4
START 2 -5
ADC3_Read7 15 Data5 TXD 4 6 TX+
EOC 2 -6 DI A
9 14 Data6
OUTPUT ENABLE 2 -7
CLK 10 17 Data7 MAX487
CLOCK 2 -8LSB
11 13
VCC GND
12
VREF(+)
16
VREF(-)
ADC0808

b. (L.O.4)(1.5đ) Viết firmware


 Nêu phần mềm và công cụ thiết lập, cấu hình VXL hoạt động theo yêu cầu
 Vẽ lưu đồ giải thuật của firmware VXL
 Xác định giao thức kết nối giữa PC và VXL
 Viết các hàm đọc dữ liệu ADC, xuất PWM và xử lý thông tin từ PC

+ Phần mềm AVR Studio hoặc CodeVisionAVR

+ Giao thức kết nối: <Mã lệnh><Format_Data>:

Vd: “A0” – đọc ADC0; “P0,050,0100” xuất PWM0, độ rộng xung 50%, chu kỳ 100ms

+ Các hàm

- Hàm xử lý thông tin: Kiểm tra <Mã lệnh>, thực thi các mã lệnh liên quan
- Hàm đọc ADC có nội dung như sau:
ADC_Start = 1;
ADC_Start =0;
Delay_us(1)
ADC1_Read = 1;
ADC1_Data = PINB;
ADC1_Read = 0;

ADC2_Read = 1;
ADC2_Data = PINB;
ADC2_Read = 0;

ADC3_Read = 1;
ADC3_Data = PINB;
ADC3_Read = 0;
- Hàm xuất PWM1
If (PWM1time_count<PW1) PORTC.0=1;
Else PORTC.0=0;
If (PWM1time _count>=T1) PWM1time _count =0;
Tương tự cho các chân PWM2,3,4 với PORTC.1; PORTC.2 và PORTC.3.
c. (L.O.6) (2đ) Thiết kế giao diện và viết chương trình điều khiển ON/OFF trên PC điều khiển
2 lò nhiệt với mạch vừa được thiết kế trên. Biết rằng: Chu kỳ lấy mẫu là 1000ms, tầm nhiệt
độ của lò 1 là 150OC; lò 2 là 250OC; các cảm biến nhiệt độ đã được xử lý và cho ra điện áp 0-
5V trong tầm nhiệt độ 0-400OC.
- Trong ngắt timer sử dụng ReadADC cho phép đọc dữ liệu cả 3 kênh ADC
- Trong hàm ngắt nhận nối tiếp
o Kiểm tra mã lệnh trã dữ liệu ADC về
o Sử dụng hàm Split để tách các dữ liệu ADC1, ADC2,ADC3.
o Sử dụng hàm convert để chuyển sang dạng dữ liệu số nguyên
o Chuẩn hóa nhiệt độ T1 = ADC1_Value*400/255; T2 = ADC2_Value*400/255
o Xuất các giá trị T1, T2 ra các ô PV
o So sánh với nhiệt độ đặt và điều khiển

If T1<T1_ref OutPWM(0,100,1000)

Else OutPWM(0,0,1000”)

If T2<T2_ref OutPWM(1,100,1000)

Else OutPWM(1,0,1000”)

Câu 3 (2.5đ): Giao tiếp USB, viết driver:

Cho Card giao tiếp USB như sau:


U1
2 15
RA0/AN0 RC0/T1OSO/T1CKI
3 16
RA1/AN1 RC1/T1OSI/CCP2/UOE
4 17
RA2/AN2/VREF-/CVREF RC2/CCP1/P1A
5 23 D-
RA3/AN3/VREF+ RC4/D-/VM
6 24 D+
RA4/T0CKI/C1OUT/RCV RC5/D+/VP
7 25
RA5/AN4/SS/LVDIN/C2OUT RC6/TX/CK
OSC2 14 26
C1 RA6/OSC2/CLKO RC7/RX/DT/SDO
OSC1 13
OSC1/CLKI
LD0 33 19
RB0/AN12/INT0/FLT0/SDI/SDA RD0/SPP0

2
27pF LD1 34 20 RS
RB1/AN10/INT1/SCK/SCL RD1/SPP1
X1 LD2 35
RB2/AN8/INT2/VMO RD2/SPP2
21 RW
LD3 36 22 E
20MHz RB3/AN9/CCP2/VPO RD3/SPP3
C2 PB1 37 27 D4
RB4/AN11/KBI0/CSSPP RD4/SPP4
PB2 D5

1
38 28
RB5/KBI1/PGM RD5/SPP5/P1B
PB3 39 29 D6
RB6/KBI2/PGC RD6/SPP6/P1C
27pF 40 30 D7
RB7/KBI3/PGD RD7/SPP7/P1D
R1
8 10k
RE0/AN5/CK1SPP
9
RE1/AN6/CK2SPP
10
RE2/AN7/OESPP
18 1
VUSB RE3/MCLR/VPP
J1 PIC18F4550
USBCONN

R6 R7 R8

LD0

LD1

LD2

LD3
100R 100R 100R

D1 D2 D3 D4
GND
VCC
D+
D-

R2 R3 R4 R5
100R 100R 100R 100R
1
3
2
4
D+
D-

PB3

PB2

PB1

Biết cấu hình USB của VXL như sau: Manufacture = USB CARD, Product ID = 20182512; Vendor
ID = 2018

a. (L.O.1) Xác định frame dữ liệu giữa PC và mạch giao tiếp trên

Buffer[0] – mã lệnh

Buffer[i],i>0; thông tin dữ liệu

b. (L.O.2) Viết hàm đọc DI và xuất DO cho firmware.

Đọc DI: Data_in = input(PIN_B)

Xuất DOi: Output(PINout[i], Dataout & 2^i)

c. (L.O.6) Viết bộ thư viện liên kết động cho Card trên với các hàm sau:
 Card_connect(): kiểm tra và kết nối với đúng Card
 Write_MultiDO(channel1, value,… channelx, value): điều khiển nhiều DO của Card;

Hàm đọc và kiểm tra Card


private void detectHIDDevicesToolStripMenuItem_Click(object sender, EventArgs e)

int i;

HID_Connected.DropDownItems.Clear();

ToolStripMenuItem[] items = new ToolStripMenuItem[USB_Devices.Count];

for (i = 0; i < USB_Devices.Count; i++)

{
USBDevice Devices = USB_Devices[i];

PID_USB[i] = Devices.ProductID;

VID_USB[i] = Devices.VendorID;

items[i] = new ToolStripMenuItem();

items[i].Name = "SubItem" + i.ToString();

items[i].Text = Devices.Product;

if (Devices.Product == "20182512")

items[i].Click += new EventHandler(MenuItemClickHandler);

My_Device = i;

HID_Connected.DropDownItems.AddRange(items);

CNBM CBGD

You might also like