Cơ sở dữ liệu
5.2 PHÁT HIỆN KÝ TỰ ĐẾN BỘ ĐỆM NHẬN CỦA MÁY TÍNH VÀ PHÂN LOẠI ĐÁP ỨNG TỪ MOĐEM.
PHÂN LOẠI ĐÁP ỨNG TỪ MOĐEM.
Phát hiện ký tự đến và lƣu trữ
Như đã trình bày ở trên, để chương trình hoạt động một cách thơng suốt và hoàn toàn tự động, chúng ta phải thực hiện các biện pháp nhằm phát hiện ra các ký tự mới ngay khi chúng được chuyển từ mođem vào bộ đệm nhận của máy tính.
Hệ thống nhắn tin nội bộ trên cơ sở ghép nối môđem GSM ứng dụng SMS
nhằm thuận tiện cho việc sử lý sau này. Việc phát hiện ký tự đến này được thực hiện thông qua sự kiện OnComm của MSComm. Chương trình 5-2 dưới đây minh họa kỹ thuật phát hiện và lưu trữ chuỗi ký tự nhận được.
Chƣơng trình 5-2
Private Sub comm1_OnComm()
Static stEvent As String Dim stComChar As String * 1 Select Case Comm1.CommEvent
Case comEvReceive „Nếu phát hiện có dữ liệu ở bộ đệm nhận
Do
stComChar = Comm1.Input „ đọc ký tự ở bộ đệm nhận If bMessageStore Then
„lưu các ký tự đọc được vào biến
strMessageBuffer = strMessageBuffer & stComChar End If
Loop While Comm1.InBufferCount End Select
End Sub
Như vậy, việc phát hiện ký tự đến được thực hiện thơng qua thuộc tính comEvReveive, ký tự đến bộ đệm nhận được lưu vào biến stComChar và chuỗi các ký tự đến bộ đệm nhận của máy tính được lưu vào biến strMessageBuffer. Giá trị của stComChar và strMessageBuffer thay đổi mỗi khi có một ký tự mới được gửi đến bộ đệm nhận. Chương trình đọc lần lượt các ký tự cho đến khi bộ đệm nhận của máy tính rỗng hồn tồn.
Phân loại thông tin nhận đƣợc từ mođem.
Như đã trình bày ở các chương trước, mỗi khi gửi một từ máy tính tới mođem, mơđem sẽ trả lời bằng một mã đáp ứng tùy thuộc vào lệnh, các mã này có thể bao gồm: “OK”, “ERROR”, “+CMTI”, “>” ... trong đó mã “OK” và “ERROR” thể hiện lệnh vừa gửi ra từ máy tính đã được thực hiện thành công hay không thành cơng; mã “+CMTI” cho biết có tin nhắn mới đến trong bộ nhớ của mođem; mã “>” dùng để nhắc đưa chuỗi tin cần gửi khi sử dụng lệnh “+CMGS” để gửi tin nhắn. Việc phát hiện được từng loại mã này là mấu chốt trong việc lập trình truyền nhận giữa mođem và máy tính vì nếu không ta không thể điều khiển luồng dữ liệu gửi, nhận một cách hiệu quả.
Trong chương trình 5-2a, chúng ta đã đọc ký tự đến bộ đệm nhận của máy tính vào biến stComChar, xử lý biến này, ta có thể thu được thơng tin cần thiết:
Hệ thống nhắn tin nội bộ trên cơ sở ghép nối môđem GSM ứng dụng SMS
Case ">"
bGreaterSign = True
lstEvents.AddItem stComChar Case vbLf
Case vbCr „nếu phát hiện ký tự hết dòng,
„hiểu là đã kết thúc một đáp ứng If Len(stEvent) > 0 Then
ProcessEvent stEvent „ chạy chương trình xử lý Event stEvent = ""
End If Case Else
stEvent = stEvent + stComChar „ lưu các ký tự vào biến End Select
Như đã biết, mỗi mã trả lại của môđem đều kết thúc bằng ký tự trở về đầu dòng vbCr, và như vậy, khi phát hiện ký tự này trong bộ đệm nhận, nghĩa là các ký tự đến trước đó đã tập thành một mã trả lại đầy đủ, khi đó, gọi chương trình con xử lý ProcessEvent để xử lý chuỗi ký tự đó ta có thể phát hiện xem đó là đáp ứng gì.
Sub ProcessEvent
If Mid$(stEvent, 1, 5) = "+CMTI" Then strMessageBuffer = ""
stEvent = ""
FetchSMS_Click „Gọi chương trình lấy tin nhắn End If
Select Case stEvent Case "OK" bOK = True Case "ERROR" bError = True Case Else End Select End sub
Việc phát hiện ra các mã “OK” và “ERROR” rất quan trọng vì rằng chúng ta cần phải biết xem lệnh gửi ra mođem có được thực hiện hay không, đồng thời việc phát hiện ra chuỗi “+CMTI” cũng rất quan trọng vì rằng nó là thơng tin thơng báo có tin nhắn mới đến.