• Vui lòng đọc nội qui diễn đàn để tránh bị xóa bài viết
  • Tìm kiếm trước khi đặt câu hỏi

Kết nối Cân điện tử với VB6 - Problem

Góc trao đổi, hỏi đáp của ngôn ngữ Visual Basic 6 và Visual Basic Script

Moderator: tungblt

nhphuduc
Posts: 4
Joined: Sat 02/08/2008 6:24 pm

Kết nối Cân điện tử với VB6 - Problem

Postby nhphuduc » Sat 02/08/2008 6:32 pm

Mình đang viết chương trình nhận giá trị từ Cân điện tử qua RS232 như sau:
- Form Load
If MSComm1.PortOpen = True Then
MSComm1.PortOpen = False
End If

MSComm1.CommPort = 1
MSComm1.Settings = "9600,n,8,1"
MSComm1.InBufferCount = 0
MSComm1.RThreshold = 1
MSComm1.PortOpen = True

- On Comm
Dim str As String
If MSComm1.CommEvent = comEvReceive Then
If MSComm1.InBufferCount >= 5 Then
str = MSComm1.Input
If Len(str) >= 8 Then
txtGiatrican.Caption = st
End If
End If
End If

********* Nhưng các Bác ơi mình gặp các vấn đề sau: Khó quá nhờ các bác giúp với :
- Chuỗi cân truyền qua 1 nùi và cứ chạy liên tục (lần 1 8 ký tự, lần sau Debug thấy nó lên tới...4096 ký tự), độ dài chuỗi cân kg phải là hằng số (có 4 ký tự cuối là chr(13)chr(10)chr(13)chr(10)), làm sao bắt lấy giá trị chính của cân? (lưu ý nó truyền đến hơn 40 mẫu tin / 1 giây, sợ rằng dùng các hàm xử lý chuỗi thì chưa kịp cắt chuỗi str đã thành chuỗi khác mất rồi)
- Cái này khó hơn nè: Chương trình lúc nhận lúc không các giá trị từ cân qua cổng com (đôi khi tắt mở chương trình vài lần liên tiếp nó lại nhận được), thông thường phải tắt cân, chạy chương trình, mở cân lên lại thì nó mới nhận, còn khi cân đag truyền dữ liệu, mở chương trình thì nó cứ đứng trơ ra, kg đọc được giá trị cân qua cổng Com (có thể cổng Com đang bị treo). Có cách nào khắc phục tình trạng này kg các bác, mở chương trình lên là đọc được dữ liệu từ cổng COm ngay (hay cổng Com bản chất nó là vậy?)
********* Help Me các bác ơi!!! Tks nhiều nhiều.....



User avatar
hoangthu1974
Guru
Guru
Posts: 813
Joined: Thu 09/03/2006 9:30 am
Location: Hà Nội --> Tp. Hồ Chí Minh
Been thanked: 13 times
Contact:

Re: Kết nối Cân điện tử với VB6 - Problem

Postby hoangthu1974 » Sun 03/08/2008 8:20 am

:)) Viết chương trình giao tiếp kiểu này đố ai có thể debug được.

Bạn không nắm được cách thức giao tiếp với thiết bị ngoại vi qua RS232 nên đã gặp phải tình trạng này. Nếu giảng giải trên này thì sẽ rất khó. Bái một tiếng sư phụ đi!!! Vụ này quá đơn giản với tôi.

User avatar
playgemboy
Thành viên danh dự
Thành viên danh dự
Posts: 289
Joined: Sun 13/04/2008 6:10 am
Location: Bình Phú, Quận 6, TP.HCM
Been thanked: 1 time
Contact:

Re: Kết nối Cân điện tử với VB6 - Problem

Postby playgemboy » Sun 03/08/2008 3:46 pm

hoangthu1974 wrote::)) Bái một tiếng sư phụ đi!!! Vụ này quá đơn giản với tôi.

Trời ui, giúp được thì giúp người ta đi, có sao đâu, danh sư phụ "hữu danh vô thực" thì lấy làm gì? , mấy bạn ây không biết thì mới lên đây nhờ mình mà :-S, ra tay nghĩa hiệp một chút anh hoangthu ơi! (em cũng cần mừ lị ;)), mà anh nắm được cách thức giao tiếp với thiết bị ngoại vi qua RS232 rồi thì "thả" ra cho bọn em một ít đi, bọn em còn mù mấy cái này lắm.Lập trình giao tiếp qua cổng COM (ko phải truyền nhận dữ liệu giữa 2 máy đâu nha, mà là một thiết bị nào đấy.VD: làm sao để chương trình nhận từng chuỗi tín hiệu(8kí tự) chứ không phải là nhận một chuỗi dài ngoằng (hic, có khi làm treo luôn)
<I Come Back>

nhphuduc
Posts: 4
Joined: Sat 02/08/2008 6:24 pm

Re: Kết nối Cân điện tử với VB6 - Problem

Postby nhphuduc » Mon 04/08/2008 12:44 am

Hì hì... Bác hoangthu1974 này! Cao thủ phải có đẳng cấp của cao thủ chứ! Giúp Em Út nó 1 vé đi mà! Sư Đồ muôn vàn mang ơn! Giúp mình với nhé Sư Phụ!!! Chịu chưa nhỉ???!!! :"> ;;) :">

User avatar
hoangthu1974
Guru
Guru
Posts: 813
Joined: Thu 09/03/2006 9:30 am
Location: Hà Nội --> Tp. Hồ Chí Minh
Been thanked: 13 times
Contact:

Re: Kết nối Cân điện tử với VB6 - Problem

Postby hoangthu1974 » Mon 04/08/2008 10:08 am

Kết nối RS232 thì tôi vẫn làm từ PC tới một thiết bị ngoại vi. Còn kết nối PC thì chuyện quá nhỏ, không đề cập làm gì.

Với một cái cân điện tử, nó sẽ gửi dữ liệu lên bất cứ khi nào có thay đổi trên mặt cân, vì vậy bạn phải dùng một vòng lặp Do While... Loop để luôn luôn lắng nghe... lâu lâu mới hiểu.

Khi nó gửi cho bạn dữ liệu, bạn phải kiểm tra tính hợp lệ của dữ liệu. Nếu hợp lệ thì gửi cho nó lệnh ACK để nó biết, còn trường hợp không hiểu thì gửi cho nó lệnh NAK để nó gửi lại. Tùy theo từng thiết bị NAK có thể khác, nhưng ACK thì vẫn giữ nguyên. Nếu nó lắng nghe không thấy ACK sau một gói tin, mặc định nó sẽ thừa nhận là bạn chưa nhận được gói tin, nó sẽ gửi lại và sau khi hết số lần retry mà không thấy ACK, nó sẽ gửi lệnh init lại thiết bị của bạn...

nhphuduc
Posts: 4
Joined: Sat 02/08/2008 6:24 pm

Re: Kết nối Cân điện tử với VB6 - Problem

Postby nhphuduc » Mon 04/08/2008 10:28 am

Hì hì.... tìm đúng "Sư Phụ" rồi. Nhưng cấu trúc lệnh trong VB như thế nào đây? Làm thế nào để bắt đúng chuỗi cân và dữ liệu nhận qua cổng COM kg bị lúc được lúc kg (mở chương trình lên là nhận được giá trị ngay)?

User avatar
hoangthu1974
Guru
Guru
Posts: 813
Joined: Thu 09/03/2006 9:30 am
Location: Hà Nội --> Tp. Hồ Chí Minh
Been thanked: 13 times
Contact:

Re: Kết nối Cân điện tử với VB6 - Problem

Postby hoangthu1974 » Mon 04/08/2008 11:00 am

nhphuduc wrote:Hì hì.... tìm đúng "Sư Phụ" rồi. Nhưng cấu trúc lệnh trong VB như thế nào đây? Làm thế nào để bắt đúng chuỗi cân và dữ liệu nhận qua cổng COM kg bị lúc được lúc kg (mở chương trình lên là nhận được giá trị ngay)?

khi cái Form Active, cho chạy vòng lặp Do While... Loop hoặc khi nào cần thì chạy vòng đó.
Nhận dữ liệu về và tìm xem khi nào nó kết thúc gửi với lệnh EOT hoặc ETX tùy theo định dạng protocol. Khi có kết thúc gửi, kiểm tra dữ liệu có hợp lệ không bằng cách so sánh chuỗi với BCC rồi trả lệnh ACK để xác nhận hoặc NAK để nó gửi lại.

nhphuduc
Posts: 4
Joined: Sat 02/08/2008 6:24 pm

Re: Kết nối Cân điện tử với VB6 - Problem

Postby nhphuduc » Mon 04/08/2008 4:07 pm

à, mình hiểu rồi. Như thế sẽ tránh được tình trạng nhận dữ liệu liên tục, lung tung, cổng Com cũng kg bị đụng. Tuy nhiên cú pháp những hàm này trong VB6 mình chưa rành lắm, Sư Phụ gửi cho các đoạn CODE với (lên đây hoặc email cho đệ tử đi: nhphuduc@gmail.com) tìm mãi trên Google cũng chỉ những đoạn Code truyền nhận thông thường, kg như cơ cấu của Cân! Giúp dùm đệ tử đi!!! ở phương thức Form Load và On_Comm, nhận đơn giản thôi, khóa để tìm là chr(13) là được rồi!!
tks nhiều nhiều... Hì hì...

User avatar
hoangthu1974
Guru
Guru
Posts: 813
Joined: Thu 09/03/2006 9:30 am
Location: Hà Nội --> Tp. Hồ Chí Minh
Been thanked: 13 times
Contact:

Re: Kết nối Cân điện tử với VB6 - Problem

Postby hoangthu1974 » Mon 04/08/2008 4:24 pm

nhphuduc wrote:à, mình hiểu rồi. Như thế sẽ tránh được tình trạng nhận dữ liệu liên tục, lung tung, cổng Com cũng kg bị đụng. Tuy nhiên cú pháp những hàm này trong VB6 mình chưa rành lắm, Sư Phụ gửi cho các đoạn CODE với (lên đây hoặc email cho đệ tử đi: nhphuduc@gmail.com) tìm mãi trên Google cũng chỉ những đoạn Code truyền nhận thông thường, kg như cơ cấu của Cân! Giúp dùm đệ tử đi!!! ở phương thức Form Load và On_Comm, nhận đơn giản thôi, khóa để tìm là chr(13) là được rồi!!
tks nhiều nhiều... Hì hì...

Mình có thể gửi cho bạn cả chục cái sample. Nhưng quan trọng là protocol khác nhau nên đọc xong mà mô phỏng làm theo là pohand.com liền. Có nhiều cái nó bắt phải init thiết bị, có cái thì thiết bị init ngược lại phần mềm, v.v... chung quy các bước thì như sau:
1. Cố mà mở được cái cổng COM. Nếu giả sử có thằng nào dùng rồi thì đá nó đi mà cướp lấy.
2. Gửi mã khởi tạo truyền thông để PC và cân điện tử nhận ra nhau.
3. Chạy vòng lắp Do While... Loop để đón dữ liệu từ cân gửi lên. Trong quá trình nhận được dữ liệu thì cuối EOT sẽ có BCC và ETX. Khi nhận được ETX thì tiến hành kiểm tra chuỗi từ STX đến EOT để xác nhận dữ liệu hợp lệ. Khi hợp lệ thì gửi trả ACK và EOT. Còn không hợp lệ thì gửi trả NAK. Sau khi gửi NAK thì xóa phần dữ liệu vừa có vì cân sẽ gửi lại dữ liệu.
4. Cuối cùng, nhớ cho chương trình đóng cổng lại khi không cần thiết và / hoặc khi thoát chương trình.
Hãy gửi Protocol của cái cân cho mình vào nguyenhoangthu1974@gmail.com, mình sẽ chỉ cho bạn biết từng step chi tiết một. Trường hợp là cân của CAS thì mình sẽ về lục lại đống lưu trữ để tìm chương trình cho bạn.

Vo Hoang Long
Posts: 2
Joined: Thu 31/07/2008 3:56 pm

Re: Kết nối Cân điện tử với VB6 - Problem

Postby Vo Hoang Long » Tue 05/08/2008 4:15 pm

Mình hôm nay mới đọc bài của bạn. Mình cũng có chút ít kiến thức về vấn đề này. Nếu chưa xử lý được thì gửi mail cho mình trangan_tech@vnn.vn. Mình đoán bạn là dân đo lường điều khiển, vậy là cùng ngành đấy!

phamhoangdung
Posts: 4
Joined: Wed 18/06/2008 10:22 am

Re: Kết nối Cân điện tử với VB6 - Problem

Postby phamhoangdung » Wed 06/08/2008 11:34 am

Chào bạn nhphuduc !
Trước đây mình đã từng viết chương trìn để nhận chuỗi dữ liệu từ đầu can CAS
Vấn đề của bạn có thể giải quyết theo hướng sau :
1. Bạn xác định độ dài của chuổi truyền từ đầu cân CAS (có thể dùng chương trình Hyperterminal của Windows để biết được độ dài chuỗi khi kết nối đầu cân với Hyperterminal)
2. Sau đó, bạn viết chương trình trên VB để nhận chuỗi và chặt chuỗi cần lấy. Quan trọng nhất là bạn phải bắt được ký tự cuối cùng trong chuỗi, thông thường đầu cân CAS sẽ truyền ký tự cuối cùng là ENTER(chr(13)). VD : SS1234kgchr(10)chr(13). Bạn dùng lệnh Instring để nhận biết ký tự ENTER trong chuỗi.
3. Kế tiếp bạn dùng lệnh hàm Left, Right, Mid để chặt chuỗi mang số liệu cân cần dùng.
4. Bạn có thể dùng trong sự kiện On_com và không cần dùng vòng lặp cũng ok.
Nếu cần bạn cứ liên hệ với mình : phamhoangdung1980@yahoo.com mình sẽ gửi đoạn code nhận chuỗi dữ liệu của đầu cân CAS cho bạn.

t3hhaiquy
Posts: 1
Joined: Mon 11/08/2008 10:00 am

Re: Kết nối Cân điện tử với VB6 - Problem

Postby t3hhaiquy » Mon 11/08/2008 10:06 am

hoangthu1974 wrote:1. Cố mà mở được cái cổng COM. Nếu giả sử có thằng nào dùng rồi thì đá nó đi mà cướp lấy.

Mình cũng đang làm chương trình với đầu cân, mình cũng đang bị trường hợp tương tự như trên diễn đàn là khi mình chạy chương trình cân mình viết bằng VB kg thì kg sao cả nhưng nếu mình chạy Hyper Terminal lên rồi Disconnect sau đó chạy lại chương trình thì nó cũng bị treo máy mà tắt mở gì cũng kg được, đang đau đầu chuyện đó lắm! Nếu khắc phục được mình cũng bái làm sư phụ, hihi nhưng kg biết có nhận đệ tử nữ kg nữa!


Return to “Visual Basic 6 và Visual Basic Script (VB & VBS)”

Who is online

Users browsing this forum: No registered users and 6 guests