Giáo trình Siemens S7-200 - Chương 2: Tập lệnh S7-200 (Phần 2)
Söï kieän ngaét 8 (Port 0), 25 (Port 1) seõ xaûy ra khi thu moät kyù töï, luùc naøy SMB2 chöùa
kyù töï vöøa nhaän coøn SM3.0 chöùa keát quaû kieåm tra parity (0: khoâng coù loãi parity, 1: coù loãi
parity).
Chuù yù laø khoâng cuøng luùc nhaän vaø gôûi döõ lieäu qua port, giöõa hai cheá ñoä caàn coù
khoaûng nghæ.
Ví duï: Truyeàn duøng leänh XMT vaø nhaän kyù töï duøng SMB2, maùy tính gôûi xuoáng kyù töï
A thì Q0.0 ON, gôûi kyù töï B thì Q0.0 OFF, khi I0.0 coù caïnh leân thì PLC gôûi leân kyù töï A, I0.1
coù caïnh leân thì PLC gôûi leân kyù töï B, maùy tính nhaän ñöôïc A thì ñeøn Start saùng, maùy tính
nhaän ñöôïc B thì ñeøn Stop saùng, Coù thôøi gian nghæ 5ms töø khi PLC nhaän döõ lieäu ñeán khi
gôûi leân
modem, ñaët switch 6 vò trí remote (1), maùy tính laø Master neân choïn switch 5 vò trí 1, neáu choïn vaän toác truyeàn 9600 thì vị trí caùc switch laø 01001000 Töông töï PLC Omron, ôû cheá ñoä freeport coù theå truyeàn vaø nhaän data baèng hai leänh XMT vaø RCV. Khi duøng leänh XMT, döõ lieäu truyeàn laáy töø baûng coù ñòa chæ ñaàu ôû TABLE, coøn döõ lieäu nhaän chöùa vaøo TABLE, chieàu daøi baûng toái ña 255. Byte ñaàu cuûa baûng cho bieát chieàu daøi döõ lieäu. Khi kyù töï cuoái cuûa baûng ñöôïc gôûi seõ baùo söï kieän ngaét 9 hay 26 hay taùc ñoäng SM4.5 (port 0), SM4.6 (port 1), hai bit naøy ON khi ñaõ thöïc hieän xong vieäc truyeàn vaø OFF khi ñang truyeàn. Söï kieän ngaét 8 (Port 0), 25 (Port 1) seõ xaûy ra khi thu moät kyù töï, luùc naøy SMB2 chöùa kyù töï vöøa nhaän coøn SM3.0 chöùa keát quaû kieåm tra parity (0: khoâng coù loãi parity, 1: coù loãi parity). Chuù yù laø khoâng cuøng luùc nhaän vaø gôûi döõ lieäu qua port, giöõa hai cheá ñoä caàn coù khoaûng nghæ. Ví duï: Truyeàn duøng leänh XMT vaø nhaän kyù töï duøng SMB2, maùy tính gôûi xuoáng kyù töï A thì Q0.0 ON, gôûi kyù töï B thì Q0.0 OFF, khi I0.0 coù caïnh leân thì PLC gôûi leân kyù töï A, I0.1 coù caïnh leân thì PLC gôûi leân kyù töï B, maùy tính nhaän ñöôïc A thì ñeøn Start saùng, maùy tính nhaän ñöôïc B thì ñeøn Stop saùng, Coù thôøi gian nghæ 5ms töø khi PLC nhaän döõ lieäu ñeán khi gôûi leân //Chöông trình chính //Network 1 LD SM0.1 MOVB 9, SMB30 ATCH INT_0, 8 ENI MOVB 'B', VB103 MOVB 'A', VB101 MOVB 1, VB102 MOVB 1, VB100 // Network2 LDN M1.0 A I0.0 EU XMT VB100, 0 S Q0.1, 1 // Network3 LDN M1.0 A I0.1 EU XMT VB102, 0 R Q0.1, 1 //Chöông trình ngaét0 //Network1 LD SM0.0 LPS S M1.0,1 AB= SMB2, 'A' S Q0.0, 1 LPP AB= SMB2, 'B' R Q0.0, 1 //Network2 LD M1.0 MOVB 5, SMB34 ATCH INT1, 10 //Chöông trình ngaét1 LD SM0.0 R M1.0, 1 DTCH 10 Chöông trình VB Private Sub cmdQuit_Click() MSComm1.PortOpen = False End End Sub Private Sub cmdSendA_Click() MSComm1.Output = "A" End Sub Private Sub cmdSendB_Click() MSComm1.Output = "B" End Sub Private Sub Form_Load() If MSComm1.PortOpen Then MSComm1.PortOpen = False With MSComm1 CommPort = 3 . Settings = "9600,n,8,1" InputLen = 0 . InputMode = 0 . RThreshold = 1 . PortOpen = True End With With Shape1 . FillColor = vbWhite . Shape = 3 . FillStyle = 0 End With With Shape2 . FillColor = vbWhite . Shape = 3 . FillStyle = 0 End With End Sub Private Sub MSComm1_OnComm() Dim data If MSComm1.CommEvent = comEvReceive Then data = MSComm1.Input Select Case data Case "A" Shape1.FillColor = vbBlue Shape2.FillColor = vbWhite Case "B" Shape1.FillColor = vbWhite Shape2.FillColor = vbRed End Select End If End Sub Leänh RCV duøng ñeå nhaän moät baûn tin chöùa vaøo moät baûng, ta phaûi qui ñònh caùc ñieàu kieän khôûi ñaàu vaø keát thuùc cho baûn tin vaø duøng caùc oâ nhôù SMB86..SMB94 (Port 0), SMB186..SMB194 (Port 1) hoã trôï, Khi thu xong baèng leänh RCV seõ taùc ñoäng söï kieän ngaét 23 Port 0 (24 Port 1) . Chuù yù laø hai leänh XMT vaø RCV khoâng theå söû duïng ñoàng thôøi, neáu hai leänh thöïc hieän cuøng luùc thì leänh sau khoâng thöïc hieän vaø ENO laø 0. Chuù yù laø thay ñoåi caáu hình chæ hieäu quaû khi thöïc hieän leänh RCV. Khi leänh RCV ñaõ gaây ngaét thì ngöøng hoaït ñoäng Ñeå nhaän bieát baét ñaàu baûn tin coù theå duøng nhieàu caùch: - Qui ñònh kyù töï baét ñaàu trong oâ nhôù SMB88 (SMB188), trong byte ñieàu khieån cho bit sc SM87.6 (SM187.6) logic 1 (thöôøng duøng khi truyeàn kyù töï) - Phaùt giaùc ñöôøng daây roãi: qui ñònh thôøi gian ñöôøng daây roãi giöõa hai laàn phaùt baûn tin, thöôøng laø hôn ba laàn thôøi gian truyeàn moät byte, trong oâ nhôù SMW90 (SMW190) ñôn vò laø ms. Khi leänh RCV ñöôïc thöïc hieän PLC seõ tính thôøi gian ñöôøng daây roãi, caùc byte nhaän tröôùc thôøi gian naøy seõ laøm khôûi ñoäng laïi boä tính thôøi gian naøy, sau thôøi gian roãi qui ñònh môùi chaáp nhaän caùc byte ñöa vaøo baûng (thöôøng duøng khi truyeàn nhò phaân) trong byte ñieàu khieån cho bit il SM87.4 (SM187.4) leân 1 - Phaùt giaùc tín hieäu break: ñöôøng truyeàn ôû ñieàu kieän break khi noù ôû möùc zero hôn thôøi gian truyeàn moät byte, luùc ñoù PLC seõ nhaän caùc kyù töï sau ñieàu kieän break, bit 1 (bk) cuûa byte ñieàu khieån ñaët leân 1 Ñeå nhaän bieát keát thuùc baûn tin gaây ra ngaét coù theå duøng: - Kyù töï cuoái trong oâ nhôù SMB89 (SMB189), bit 5 (ec) byte ñieàu khieån logic 1 - Timer giöõa kyù töï: neáu thôøi gian giöõa hai kyù töï lôùn hôn thôøi gian trong oâ nhôù SMW92 (SMW192) ñôn vò ms thì coi nhö keát thuùc truyeàn baûn tin, bit 2 (tmr) cuûa byte ñieàu khieån möùc 1, bit 3 (c/m) möùc 0 - Timer baûn tin: qui ñònh thôøi gian truyeàn moät baûn tin trong oâ nhôù SMW92 (SMW192) , sau thôøi gian naøy coi nhö keát thuùc nhaän, bit 2 (tmr) cuûa byte ñieàu khieån möùc 1, bit 3 (c/m) möùc 1 - Soá kyù töï toái ña: qui ñònh truyeàn toái ña bao nhieâu kyù töï SMB94 (SMB194), neáu nhaän quaù gaây ra ngaét - Sai parity - Do keát thuùc thu, ñaët bit 7 (en) cuûa byte ñieàu khieån veà 0 Ví duï: nhaän baûn tin vaø truyeàn trôû laïi baûn tin ñaõ nhaän duøng leänh RCV vaø XMT NETWORK 1 // Main Program LD SM0.1 //On the first scan, MOVB 16#09 SMB30 //Initialize Freeport: // - Select 9600 baud // - Select 8 data bits // - Select no parity MOVB 16#B0 SMB87 //Initialize RCV message control byte: // RCV enabled, detect end of message character, detect idle line condition as message start condition MOVB 16#0A SMB89 //Set end of message character to hex 0A (line feed) MOVW +5 SMW90 //Set idle line timeout to 5 ms. MOVB 100 SMB94 //Set maximum number of characters to 100. ATCH INT_0 23 //Attach interrupt 0 to the receive complete event. ATCH INT_2 9 //Attach interrupt 2 to the transmit complete event. ENI RCV VB100 0 //Enable receive box with buffer at VB100 for port 0 NETWORK 1 // Interrupt 0 //Receive complete interrupt routine LDB= SMB86 16#20 //If receive status shows receive of end character, MOVB 10 SMB34 //then attach a 10 ms timer ATCH INT_1 10 //to trigger a transmit CRETI //and return. NOT RCV VB100 0 //If the receive completed for any other reason, then start a new receive. NETWORK 1 // Interrupt 1 //10 ms timer interrupt LD SM0.0 DTCH 10 //Detach timer interrupt XMT VB100 0 //Transmit message back to user on port 0 NETWORK 1 // Interrupt 2 LD SM0.0 RCV VB100 0 Ví dụ: Viết chương trình PLC nhận dữ liệu nối tiếp dạng mã ASCII, baudrate 19200. Lệnh thứ nhất ký tự “A” sau đó là sáu byte, sẽ được PLC cất vào ba ô nhớ từ VB0, dùng làm chu kỳ xung và số lượng xung cho lệnh phát xung PTO ở Q0.0. Lệnh thứ hai “BC” cho M0.0 ON.. Khi nhận được dữ liệu PLC gởi trả lại thông tin đã nhận, nếu M0.0 chuyển trạng thái từ OFF sang ON thì PLC cho M0.0 OFF và phát xung, phát đủ xung gởi lên máy tính ký tự ‘@’. Viết chương trình VB gởi và nhân dữ liệu với PLC như hình dưới. Trong ô txtPeriod gõ hai số hex, ô txtNumber gõ bốn số hex, bầm cmdSend gởi lệnh thứ nhất, bấm nút cmdRun gởi lệnh thứ hai. Khi PLC gởi trả lại lệnh thứ nhất hiển thị sáu byte trong hai ô text dạng số nguyên, khi PLC gởi trả lại lệnh thứ hai cho đèn shpRun màu xanh, khi PLC gởi “@” cho đèn này màu đỏ. Khi máy tính gởi lệnh, nếu sau 0.1s không nhận được trả lời từ PLC thì báo nhãn lblError “NOT CONNECTED” Private Declare Function Beep Lib "kernel32" (ByVal dwFreq As Long, ByVal dwDuration As Long) As Long Dim datain Dim received Dim timeout Private Sub cmdQuit_Click() MSComm1.PortOpen = False End End Sub Private Sub cmdRun_Click() lblError.Visible = False datain = "" Shape1.FillColor = vbRed MSComm1.Output = "BC" Timer1.Enabled = True received = False End Sub Private Sub cmdSend_Click() lblError.Visible = False datain = "" MSComm1.InBufferCount = 0 Text3.Text = "" Text4.Text = "" datain = "" MSComm1.Output = "A" & Text1.Text & Text2.Text cmdRun.Enabled = True Timer1.Enabled = True received = False End Sub Private Sub Form_Load() With MSComm1 .CommPort = 3 .Settings = "19200,n,8,1" .RThreshold = 1 .InputLen = 0 .PortOpen = True End With lblError.Visible = False Timer1.Interval = 500 Timer1.Enabled = False Text1.Text = F0 Text2.Text = 0056 cmdRun.Enabled = False received = False datain = "" End Sub Private Sub MSComm1_OnComm() If MSComm1.InBufferCount > 0 Then received = True datain = datain & MSComm1.Input End If Text5.Text = datain If (Mid(datain, 1, 2) = "BC") Then Shape1.FillColor = vbBlue cmdRun.Enabled = False datain = "" End If If (Mid(datain, 1, 1) = "A") And Len(datain) > 6 Then Text3.Text = Mid(datain, 2, 2) Text4.Text = Mid(datain, 4, 4) datain = "" End If If Mid(datain, 1, 1) = "@" Then Shape1.FillColor = vbRed cmdRun.Enabled = True Beep 2000, 500 datain = "" End If End Sub Private Sub Timer1_Timer() If Not (received) Then lblError.Visible = True Beep 1000, 200 timeout = True End If Timer1.Enabled = False End Sub Chương trình PLC Chương trình chính MAIN Network 1 AENO LD SM0.1 MOVB 1, VB20 LPS AENO MOVB 5, SMB30 MOVB '@', VB21 ATCH INT1, 19 LRD AENO MOVB 0, SMB68 ATCH INT0, 9 AENO AENO MOVW 50, SMW90 ATCH INT2, 23 AENO LRD MOVW 20, SMW92 ENI LRD MOVD 0, VD10 MOVB 2#10011101, SMB67 AENO AENO MOVD 0, VD14 MOVB 2#10010100, SMB87 AENO AENO MOVW 0, SMW72 MOVB 100, SMB94 LPP LRD RCV VB10, 0 Ngắt Thu INT4 Network 1 LD SM0.0 XMT VB10, 0 = M0.1 = Q0.1 Network 2 LDB= VB10, 7 ATH VB12, VB0, 6 MOVB VB0, SMB69 MOVW VW1, SMW74 Network 3 LDB= VB10, 2 R Q0.0, 1 PLS 0 S M0.0, 1 Ngắt Truyền INT0 Network 1 LDN M0.0 RCV VB10, 0 Ngắt PTO INT1 Network 1 / LD SM0.0 R M0.0, 1 XMT VB20, 0
File đính kèm:
- giao_trinh_siemens_s7_200_chuong_2_tap_lenh_s7_200_phan_2.pdf