Thí nghiệm 1: Khảo sát hoạt động của ngõ vào và ngõ ra Thí nghiệm 1.1 a Nói dụng Làm quen PLC với bài toán điều khiển START/STOP.. Thí nghiệm 2: Giả lập hoạt động của máy trang thai
Trang 1Ũ : a ñ : c q B : : Ũ D Ũ E E E Ễ Ễ : Ễ Ễ Ễ Ễ : sĩ (s1
TRUONG DAI HOC BACH KH
THANH PHO HO CHI MINH
BAO CÁO THÍ NGHIỆM
ĐO LƯỜNG DIEU KHIEN BANG MAY TINH
Trang 2
BÀI THÍ NGHIỆM 2: TRUYÊN THÔNG NÓI TIẾP GIỮA PC VÀ PLC 16
I Bài thí nghiệm 1: Làm quen với PLC S7-200 Tnhh hệt 16
II Thí nghiệm 2: Giao tiếp giữa PC và PLC sử dụng ngắt nhận kí tự, truyền thông qua
IB9Ìa1I9089)/:e01ìi 20001 AIIánnn 24
lII Các đoạn chương trình liên quan đến thuật toán điều khiến ON/OFF - 32
IV Các đoạn chương trình liên quan đến thuật toán điều khiến PID : 5+: 35
V Các giái pháp khác có thẻ thực hiện cho hai bài thí nghiệm trên . - 5- 37
E.1IMEIR)IEIn)190)/8:19Ẽ ng jäậỘỪộỘộỘọỌọỪịỪ¿53% 39
I Thí nghiệm 1: Lập trình vi điều khiên sử dụng Keil-C -¿- + ++2+2>s<z<+c+xzxzezsss 39
II Thí nghiệm 2: Tao window form app CZ: nhàn ng kh ket 44
Ill Thí nghiệm 3: Điều khiển vị trí động cơ bằng bộ điều khiển PID 2 2-5:55¿ 61
Trang 3BAI THI NGHIEM 1: LAP TRINH PLC $7— 1200 CAC UNG DUNG LAP
TRINH CO BAN
| Thí nghiệm 1: Khảo sát hoạt động của ngõ vào và ngõ ra
Thí nghiệm 1.1
a) Nói dụng
Làm quen PLC với bài toán điều khiển START/STOP Yêu cầu:
e START — nut nhan BT1
e STOP — nit nhan BT2
e - Dèn báo RUN - Đèn DO 1, chớp nháy chu kỳ 1s, sử dụng xung nhịp hệ thông b)_ Tiến hành láp trình
Trang 4Thi nghiém 1.2
d) Nói dụng
Điều khiển các đèn ngõ ra theo điều khiện ngõ vào như sau:
e _ Default: 8 LED ngõ ra nhấp nháy chu kỳ 2s
o ROR: quay bit qua phải
o ROL: dé quay bit qua trai
“» Bang tag:
PLC tags Name Data type Address
a START Bool %I0.3
“yj Ssem Byte Byte %MB100
<a FirstScan Bool %M100.0
Trang 7-_ Nhân BT1: nạp giá trị 16#01 vào QB0 Sử dụng hàm ROL đề quay bit sang trái làm
các LED sáng từ phải sang trái với thời gian sáng 0.5s
7
Trang 8e Nhan BT2: Ting dén LED sang réi tat trong 0.5s, lần lượt từ phải sang trái và lặp
lại
II Thí nghiệm 2: Giả lập hoạt động của máy trang thai
Khảo sát, giá lập và điều khiền vận hành hệ thống phân loại sản pham
Mô tá: Hệ thống phân loại sản phẩm được biêu diễn như hình dưới:
e _ Có 3 loại sản phâm được phân biệt theo chiều dài, bao gồm D — San pham dai; N
- Sản phâm ngắn, TB: Sản phẩm có chiều dài trung bình
e _ Chiều dài của sản phâm được xác định bởi các cảm biên CB1, CB2 và CB3 o_ Sản phâm là N khi chí có 1 cảm biến phát hiện được sản phẩm
o San pham la TB khi chi c6 2 cam biến phát hiện được sản phẩm
o San pham la D khi chi c6 3 cam bién phat hién duoc san pham
e Cac cam bién trong ng voi cac ngd vao PLC 10.2, 10.3, 10.4
Q0.2 Các tín hiệu này báo trong thời gian 2s
Xây dựng mô phỏng tín hiệu cảm biến cho các loại sản phẩm khác nhau:
Trang 9|
b) Tién hanh lap trinh
% Bảng thông sô ngõ vào và ngõ ra:
Default tag table [35]
Trang 10
%Q0.4 CR2 —"CB2”
Trang 12+ Hoạt động của chương trình:
Dùng Timer TP để mô phỏng thời gian vật đi qua các cảm biến
Nhan BT1, vat NGAN đi qua cảm biến 1 từ 0s đến 4s, di qua cảm biến 2 từ 5s đến 9s và đi qua cảm biến 3 từ 10s đến 14s
Nhan BT2, vật TRUNG BÌNH đi qua cảm biến 1 từ 0s đến 8s, đi qua cảm biên 2 từ 5s đến 13s, đi qua cảm biến 3 từ 10s đến 18s.
Trang 13¢ Nhan BT3, vat DAI di qua cam bién 1 ttr 0s dén 12s, di qua cam bién 2 tir 5s dén 17s, đi qua cảm biến 3 từ 10s đến 22s
c) Két qua
e _ Chương trình hoạt động theo đúng yêu cầu đặt ra
e - Khuyết điểm của chương trình: Hệ thông chỉ hoạt động đúng khi từng loại sản phẩm đi qua có thời gian cách nhau Ở trường hợp, nhiều sản phẩm đi qua hệ
thống liên tiếp nhau sẽ không còn đúng nữa Ví dụ ở trường hợp, trên băng tải
gồm có vật ngắn và vật dài cách nhau 1s thì khi chí nhìn vào tín hiệu cảm biến ta
sẽ không phát hiện có vật ngắn đi qua
e - Phương pháp, giải thuật khác giá lập hoạt động của hệ thông: Vì chỉ thực hiện ở
dạng mô phỏng nên giải thuật trên là chấp nhận được
Thí nghiệm 2.2
d) Néi dung
Viết chương trình phân loại sản pham với tin hiệu giả lập vừa xây dựng được
e - Phương pháp 1: Giái quyết bài toán theo phương pháp tuần tự với bộ tín hiệu ngõ
Trang 14%q04 C82 —CÊ2'
%Q05 œ3 —C83
“+ Chương trình FB Sensor Simulation: sử dụng ở thí nghiệm trên
* Chương trình FB TN3: Chương trình phân loại sản phẩm:
Trang 15“+ Hoat déng cua chuong trình:
Chương trình Main: gồm một khói mô phỏng vật và một khói phân loại vật
Khói FB1: đã trình bày ở thí nghiệm 2.1
Khói FB2: néu 3 cảm biến cùng sáng thì biến đếm vật DÀI sẽ tăng 1 Nếu trường hợp 3 cảm biến không sáng sẽ xét trường hợp 2 cám biến sáng, nếu 2 cảm biến
sáng thì biến đếm vật TRUNG BÌNH sẽ tăng 1 Trường hợp còn lại của vật
NGAN
f)_ Kết quả Gia chương trình:
Trường hợp từng sản phâm đi qua hệ thống phân loại thời gian cách nhau thì hệ
thống hoạt động chính xác
Trường hợp nhiều sản phâm đi qua hệ thống liên tiếp nhau thì có trường hợp chương trình đếm không đúng loại sản pham.
Trang 16BAI THi NGHIEM 2: TRUYEN THONG NOI TIEP GIU'A PC VA PLC
| Bai thi nghiém 1: Lam quen véi PLC S7-200
Trang 19Thí nghiêm 1.2:
Cái tiền chương trình của thí nghiệm 1.1 hoạt động theo các ché độ khác nhau
- KhiSWI tac động, đèn hoạt động theo chu kì XA=30s, VA=3s, VA=3s, DA=43s,XB=40s, VB=3s, DB=33s
- KhiSW2? tác động đèn hoạt động theo chu kì XA=60s, VA= 5s, DA=63s,
XB=60s,VB=5s, DB=63s
- _ Khi SW8 tác động đèn VA và VB nhấp nháy chu ky 1s
"_ Chương trình PUC:
Trang 2310.4
—]
Thí nghiệm cho kết quả của đèn giao thông sáng đúng yêu cầu thí nghiệm
khi chuyên các ché độ hoạt động của đèn giao thông
Trang 24II Thí nghiệm 2: Giao tiếp giữa PC và PLC sử dụng ngắt nhận kí tự, truyền thông qua
PORTO0, giao thức “9600,N,8”
Thí nghiệm 2.1:
Thực hiện Liên kết đơn giản giữa PLC và PC
Code C# trên Visual Studio:
using System Text;
using System.Threading Tasks;
Trang 26«+ Chuwong trinh PLC:
—( ENI )
Network 2 Network Title
26
Trang 27SM0.1
MOV_B
ENO OUT)
SN
FVB100
!A'4 MOV_B
ENO} OUT
—3
PVB101
Trang 28
©)
1 XMT
VB1024 TBL 04POBT
M1.1
—*)
28
Trang 29+ Kết quả trên Form và đèn báo kết nói
Wl Form (o|S| & |
I
Motor Status MOTOR ON
Trang 30Thí nghiệm 2.2:
Thực hiện cái tiến bài toán điều khiển đèn giao thông của thí nghiệm 1.1 và quan sát trên
giao diện
+ Yêu cầu:
Thay đôi thông sô của các đèn XA, VA, XB, VB
Hien thi trang thai cac dén Xanh, Vang, Do
Hien thi thoi gian dem ngugc dang decimal
Hiên thị thời gian đêm ngược dang led 7 SEG
Rat tiếc thí nghiệm này nhóm em chua hoàn thành được
> Kết luận: Qua bài thí nghiệm này giúp nhóm em hiệu được cách két nói PC với PLC qua truyèn thông nồi tiếp
30
Trang 31BAI THi NGHIEM 3: GIAO TIEP TCP/IP
| Giải thuật điều khiển ON/OFF
thay đối tín hiệu nhiệt độ vào bộ
điều khiễn lò nhiệt nhớ
Sai số > độ trễ 2
PC gửi tín hiệu yêu cầu tắt lò
Trang 32II Giai thuat diéu khién PID
Bat dau
t
PLC doc nhiét do
PC lay truyén dir
liệu nhiệt đô từ
Đọc dữ liệu từ PC
lò nhiệt PLC thông qua
chuẫn Modbus
Gửi dữ liệu nhiệt
đô cho PC hoặc <a ee oe >
thay đỗi tín hiệu ¬ + alee
liêu khiên lò nhiệt
PLC lưu giá trị
PC gửi giá trị tín hiệu điều khien cho PLC thông
Trang 33}
WiteSingleRegister(0, (Int16)cv); // Truyền tín hiệu điều khiển về PLC
txt€V.Text = cv ToString(); ?? update textbox
+ Hàm đọc 1 thanh ghi tir ple:
private void ReadSingleRegister(ushort RegAddress, short[] Outdata)
byte[] buffReceiver = this.Read();
int SizeByte = bufferReceiver[8];
short[] temp = null;
if (function != bufferReceiver[7])
{
byte[] byteMsg = new byte[9];
Array.Copy(bufferReceiver, 9, byteMsg, 9, byteMsg.Length); byte[] errorbytes = new byte[3];
Array.Copy (bufferReceiver, 6, errorbytes, 9, errorbytes.Length); this.CheckValidate(errorbytes) ;
else
byte[] byteMsg = new byte[9 + SizeByte];
Array.Copy(bufferReceiver, 9, byteMsg, 9, byteMsg.Length); byte[] data = new byte[SizeByte];
Array.Copy(bufferReceiver, 9, data, 9, data.Length);
33
Trang 34+ Hàm gửi tín hiệu vào 1 thanh ghi của PLC:
private void WriteSingleRegister(ushort RegAddress, Int16 Data)
byte slaveAddress = 1;
byte function = 16;
ushort id = function;
ushort[] input = new ushort[1] { (ushort)Data };
byte[] values = ConvertIntArrayToByteArray (input) ;
byte[] frame = WriteMultipleRegistersMsg(id, slaveAddress, RegAddress, function, values);
int code = this.Write(frame) ;
//txtError.Text = "OK";
Thread Sleep(20) ;
byte[] buffReceiver = this.Read();
int SizeByte = bufferReceiver[8];
byte[] byteMsg = null;
if (function != bufferReceiver[7])
{
byte[] errorbytes = new byte[3];
Array.Copy(bufferReceiver, 6, errorbytes, 9, errorbytes.Length); this.CheckValidate(errorbytes) ;
34
Trang 35Array.Copy(bufferReceiver, 9, byteMsg, 9, byteMsg.Length);
}
else
{
byteMsg = new byte[READ BUFFER_SIZE];
Array.Copy(bufferReceiver, 9, byteMsg, 9, byteMsg.Length);
& Hàm kết nối PLC với PC qua chuẩn Modbus:
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;
Trang 36pv = RegData[@] / 27648.0 * 625.0 - 125.0; // Chuyển điện áp thành nhiệt độ txtPV.Text = pv.ToString();
PlotChart((double)timControl.Interval / 1000.0 * (double)counter, pv); counter++;
// Giải thuật điều khiển PID
WriteSingleRegister(@, (Int16)cv); // Truyền tín hiệu về PLC
txtCV.Text = cv.ToString(); // Cập nhật Textbox
36
Trang 374 Các hàm kết nói PLC, đọc và viết thanh ghi tương tự như các hàm liên quan ở giải
thuật điều khiển ON-OFF
1 Cách thiết lập PLC hoạt động phát xung PWM
+ Kích hoạt bộ tạo xung PWMI như hình sau:
Time base: | Milliseconds
Pulse duration format: | Hundredths
Cycle time: [1000 ms [=]
Initial pulse duration: | 50 Hundredths iS]
{_) Allow runtime modification of the cycle time
+ Kéo bộ tao xung PWM ra network va cau hinh nhu sau:
“Always TRUE” — ENABLE STATUS —— DB”.STATUS
+ Do giá trị tín hiệu điều khiên từ PC gửi về đang ở thang 1000 nên cần được scale lại về
thang 100:
¡0— IN2 OUT —— ”Tag_3”
V Các giải pháp khác có thể thực hiện cho hai bài thí nghiệm trên
+ Đối với bài thí nghiệm điều khiển ON - OFF:
Thay vì tính toán giá trị tín hiệu điều khiên trên PC rồi gửi về cho PLC thực hiện thì
ta có thê tính trực tiếp trên PLC băng ngôn ngữ ladder hoặc SCL PC luc nay chi giam sat nhiệt độ lò và gửi tín hiệu bắt đầu hay kết thúc điều khiên
37
Trang 384 Đối với bài thí nghiệm điều khiển PID:
Thay vì tính toán giá trị điều khiển PID trên PC rồi gửi về cho PLC thực hiện thì ta có
thể tính trực tiếp trên PLC bằng ngôn ngữ SCL PC luc nay chi giam sat nhiệt độ lò, gửi giá tri Kp, Ki, Kd và tín hiệu bắt đầu hay kết thúc điều khiên từ người giám sát
38
Trang 39BÀI THÍ NGHIỆM SÓ 4:
LAP TRINH CARD USB GIAO TIEP VGI MAY TINH
I Thí nghiệm 1: Lập trinh vi diéu khién sw dung Keil-C
static uint8_t DI_value;
static float AO _value[2];
static int AI_value[3];
static uint32_t C@_value;
static uint32_t DO_pwm_frequency[3];
static uint16_t Ts_ms =100;//ms
static uint8_t usb_rx_buffer[64];
static uint8_t usb_tx_buffer[17];
static volatile uint8_t usb_tx_flag = 9;
static volatile uint8 t usb rx flag = 9;
Trang 40Sample Timer Init();
Trong ham “main” dau tién ta sé khéi tao cac ngoai vi va cau hinh xung clock
Trang 41Sau đó chương trình sẽ vào hàm “while(1)”, Kiếm tra co “usb_tx_flag”, néU bang 1
thì thi reset lai co vé 0 sau do thiet lap cac ham dé truyén di cac gia tri DI, Al, va gia
tri cua counter
AO_value[1] = ((float)usb_rx_buffer[11 ]*256+(float)usb_rx_buffer[12 ])/1999;
AO Write Al1(AO value);
Trang 42Nếu nhận được kí tự “F° thì thiết lập tần số PWM
Nếu nhận được kí tự ‘G’ thi thiết lập độ lợi cho ADC 18 bit
Nếu nhận được kí tự “T? thì thiết lập thời gian lầy mẫu
Trang 43/* USER CODE BEGIN Error_Handler_Debug */
/* User can add his own implementation to report the HAL error return state */
/* USER CODE BEGIN 6 */
/* User can add his own implementation to report the file name and line number,
tex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */
/* USER CODE END 6 */
Trang 44Il Thí nghiêm 2: Tao window form app C#
Trang 45
{
#region variable
byte DI_value;
byte[] DO_value = new byte[8];
byte[] DO_text = new byte[8];
double[] PWM_text = new double[8];
double[] F_text = new double[3];
byte[] F_value = new byte[3];
double AO_@ text;
double AO_1_ text;
Int1i6é AO_@ value;
Tnt16 AO_1_value;
byte[] AO 9 = new byte[2];
byte[] AO 1 = new byte[2];
//
double AI_@ VALUE;
double AI_1_ VALUE;
double AI_2 VALUE;
int ai_@ value;
int ai_1_value;
int ai_2_ value;
byte[] AI_@ value = new byte[4];
byte[] AI_1 value = new byte[4];
byte[] AI_2_ value = new byte[4];
//
byte[] c_value = new byte[4];
45
Trang 46double pPart = 9, iPart = 9, dPart = 0;
bool enablePID = false;
#region Declaring Global Variable
public static UsbDevice myUsbDevice, myUsbDevice_temp;
if (MessageBox.Show("Are you want to exit ?", "Confirmation",
MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
{
else
46
Trang 48
UsbRegDeviceList allDevices = UsbDevice.AllDevices;
foreach (UsbRegistry usbRegistry in allDevices)
txtmanufacturer.Text = myUsbDevice Tnfo.ManufacturerString;
USB_DATA_RECEIVER_INIT();
btnconnection.Text = "Disconnect";
timer1.Enabled = true;
} } }