PDA

View Full Version : VB giao tiep voi PLC



vandung
06-06-2011, 10:45 PM
Chào các bác.
Em đang làm giao tiếp giữa VB và PLC S7 200 chưa có kinh nghiệm nên đang gặp khó khăn mong các bác chỉ giáo.
Nội dung là thế này, VB em truyền kí tự xuống PLC, PLC nhận thông qua ngắt nhận dữ liệu ( Chế độ freeport) sau đó truyền trả lại kí tự lên PC và bật ON Q0.0. VB dùng ngắt ONCOM để nhận dữ liệu và hiển thị lên edit text.
Khi em kết nối với cổng COM với PLC thì trên VB luôn xảy ra ngắt nhận dữ liệu, nó nhận dữ liệu đâu đâu không ah.
Phần cứng của em gồm một con CPU 222, cáp USB/RS232 và bộ chuyển đổi RS232/RS485 . Không biết phần cứng của em như vậy đúng không, tại sao nó luôn nhận dữ liệu khi mà chưa truyền, em có truyền nhưng nó im lặng ah. em nghi đó do nhiễu hoặc sai phần cứng nhưng chưa biết cách khắc phục mong được sự chỉ giáo của các bác. Cảm ơn sự giúp đỡ của các bác nhiều.

anhlv.ddt
06-07-2011, 09:03 AM
Chào các bác.
Em đang làm giao tiếp giữa VB và PLC S7 200 chưa có kinh nghiệm nên đang gặp khó khăn mong các bác chỉ giáo.
Nội dung là thế này, VB em truyền kí tự xuống PLC, PLC nhận thông qua ngắt nhận dữ liệu ( Chế độ freeport) sau đó truyền trả lại kí tự lên PC và bật ON Q0.0. VB dùng ngắt ONCOM để nhận dữ liệu và hiển thị lên edit text.
Khi em kết nối với cổng COM với PLC thì trên VB luôn xảy ra ngắt nhận dữ liệu, nó nhận dữ liệu đâu đâu không ah.
Phần cứng của em gồm một con CPU 222, cáp USB/RS232 và bộ chuyển đổi RS232/RS485 . Không biết phần cứng của em như vậy đúng không, tại sao nó luôn nhận dữ liệu khi mà chưa truyền, em có truyền nhưng nó im lặng ah. em nghi đó do nhiễu hoặc sai phần cứng nhưng chưa biết cách khắc phục mong được sự chỉ giáo của các bác. Cảm ơn sự giúp đỡ của các bác nhiều.
Như này nhé, bác nối cáp đó nếu tự dung nó cứ nhận dữ liệu đâu đâu thì coi lại cap và chương trình VB. Còn để truyền nhận ở cái này, trên PLC, bác sử dụng ngắt 8 cho ngắt truyền thông, trong đó so sánh SMB2 (dữ liệu truyền xuống sẽ lưu trong này) nếu đúng dữ liệu thì làm việc gì đó. đc ngay mà

vandung
06-07-2011, 11:41 PM
Cảm ơn bác nhiều, em thử mà vẫn không được, em nghĩ chắc do cục chuyển đổi RS232/RS485 quá, cáp USB/COM em nối tắt RX và TX thử thì OK mà. Em chưa biết phải làm sao nữa, để em tham khảo thêm coi.

anhlv.ddt
06-07-2011, 11:43 PM
Cảm ơn bác nhiều, em thử mà vẫn không được, em nghĩ chắc do cục chuyển đổi RS232/RS485 quá, cáp USB/COM em nối tắt RX và TX thử thì OK mà. Em chưa biết phải làm sao nữa, để em tham khảo thêm coi.

Đưa code lên coi nào

vandung
06-08-2011, 02:02 PM
Chương trình PLC
main program

network 1
LD SM0.1
CALL SBR_0
R M0.0, 1
R M0.1, 1

network 2
LD M0.0
= Q0.0
R M0.1, 1
network 3
LD M0.1
= Q0.1
R M0.0, 1
network 4 // truyền kí tự A
LD I0.0
EU
XMT VB100, 0

//chương trình SBR_0 , vong quet dau config che do freeport va move ki tu A vao VB101 truyen
network1
LD SM0.0
MOVB 16#09, SMB30
network2
LD SM0.0
ATCH Rcv_comp_interrupt, 8
ENI
network3 // ki tu truyen la A
LD SM0.0
MOVB 1, VB100
MOVB 16#41, VB101

//chuong trinh ngat su kien 8
network 1 /neu ki tu truyen la A
LDB= SMB2, 16#41
S M0.0, 1
network 2 //neu ki tu nhan la B
LDB= SMB2, 16#42
S M0.1, 1

// Đây là code Vb,
//Cổng com
Private Sub MSComm1_OnComm()
Dim buffer As Variant
If MSComm1.CommEvent = comEvReceive Then
Text2.Text = Text2.Text + MSComm1.Input
End If
End Sub

//nút send
Private Sub Command1_Click()
MSComm1.Output = Hex$(41)
'hoặc
'buffer = Trim(Text1.Text)
'MSComm1.Output = buffer
End Sub

'cấu hình cổng com

Private Sub Form_Load()
MSComm1.CommPort = 2
MSComm1.Settings = "9600,N,8,1"
MSComm1.PortOpen = True
cmdsend.Caption = "&Send"
Text1.Text = ""
Text2.Text = ""
cmdexit.Caption = "&Exit"
With MSComm1
.Settings = "9600,N,8,1"
.CommPort = 2 'chon cong com 2
.RThreshold = 1

.SThreshold = 0
.InputMode = comInputModeText
.InputLen = 0
.Handshaking = comNone
.InBufferSize = 1024
.OutBufferSize = 1024
If .PortOpen = False Then
.PortOpen = True
End If
End With
End Sub

Bác xem giúp em. cảm ơn bác nhiều.

pop.ptit
06-12-2011, 10:50 AM
Có ai pro tham gia hỗ trợ phần này không? Mình cũng đang có nhiều vấn đề chổ này đây! ai có thể cho cái giao diện VB mẫu hay code mẫu để anh em tham khảo tí

vandung
06-13-2011, 02:21 PM
Phia trên là code cho VB và PLC đó . Bác Anh cho em hỏi, em định dùng cáp PC/PPI của siemens thay cho cáp (USB/RS232 và RS232/RS485 ). Cáp PC/PPI đó có giao tiếp được VB và PLC không bác? Cảm ơn đã quan tâm đến topic này. Mong sự giúp đỡ của tất cả các bác.

ngthanhluan06d2
06-20-2011, 05:08 PM
Mình cũng đang quan tâm về vấn đề này! Mình đang làm viết giao diện VB kết nối với PLC để điều khiển. Mình nghĩ là dùng cáp PC/PPI kết nối ok. Vấn đề là viết code cho VB để thực hiện vc mình muốn điều khiển từ VB mà PLC đáp ứng. Đơn giản như mình ấn 1 nút ấn trên VB thì sẽ truyền dữ liệu gì xuống PLC và làm sao PLC hiểu là lấy cái đó để làm gì? PLC mình dùng là S7 200. Mình hỏi các bạn 1 vấn đề nữa là VB có cơ sở dữ liệu k vì mình muốn lập cơ sở dữ liệu rùi in hóa đơn PLC làm vc hằng ngày thì phải làm như thế nào? Mong các bạn nào đã làm rùi chia sẽ ít kinh nghiệm....Sẻ chia giá trị, sánh bước thành công mà...Best regards!

anhlv.ddt
06-21-2011, 11:21 AM
việc ấn một nút ấn trên VB thực chất bạn mã hóa nút ấn đó thôi, ví dụ: ấn nút ấn bạn gửi mã chữ A xuống PLC. nhận được chữ A, PLC bạn sẽ viết chương trình thực hiện một công việc gì đó.
Việc VB kết nối được với cơ sở dữ liệu để cho bạn in hóa đơn, cái này tôi đã làm nhưng chưa thành công thì chuyển sang wincc dùng cho lẹ. VB khá phức tạp nên không nghiên cứu sâu nữa.

anhlv.ddt
06-21-2011, 11:23 AM
Chương trình PLC
main program

network 1
LD SM0.1
CALL SBR_0
R M0.0, 1
R M0.1, 1

network 2
LD M0.0
= Q0.0
R M0.1, 1
network 3
LD M0.1
= Q0.1
R M0.0, 1
network 4 // truyền kí tự A
LD I0.0
EU
XMT VB100, 0

//chương trình SBR_0 , vong quet dau config che do freeport va move ki tu A vao VB101 truyen
network1
LD SM0.0
MOVB 16#09, SMB30
network2
LD SM0.0
ATCH Rcv_comp_interrupt, 8
ENI
network3 // ki tu truyen la A
LD SM0.0
MOVB 1, VB100
MOVB 16#41, VB101

//chuong trinh ngat su kien 8
network 1 /neu ki tu truyen la A
LDB= SMB2, 16#41
S M0.0, 1
network 2 //neu ki tu nhan la B
LDB= SMB2, 16#42
S M0.1, 1

// Đây là code Vb,
//Cổng com
Private Sub MSComm1_OnComm()
Dim buffer As Variant
If MSComm1.CommEvent = comEvReceive Then
Text2.Text = Text2.Text + MSComm1.Input
End If
End Sub

//nút send
Private Sub Command1_Click()
MSComm1.Output = Hex$(41)
'hoặc
'buffer = Trim(Text1.Text)
'MSComm1.Output = buffer
End Sub

'cấu hình cổng com

Private Sub Form_Load()
MSComm1.CommPort = 2
MSComm1.Settings = "9600,N,8,1"
MSComm1.PortOpen = True
cmdsend.Caption = "&Send"
Text1.Text = ""
Text2.Text = ""
cmdexit.Caption = "&Exit"
With MSComm1
.Settings = "9600,N,8,1"
.CommPort = 2 'chon cong com 2
.RThreshold = 1

.SThreshold = 0
.InputMode = comInputModeText
.InputLen = 0
.Handshaking = comNone
.InBufferSize = 1024
.OutBufferSize = 1024
If .PortOpen = False Then
.PortOpen = True
End If
End With
End Sub

Bác xem giúp em. cảm ơn bác nhiều.

đoạn code này bạn gửi kẻm cho tôi cái file vb nữa, để coi? dạo này mình bận quá nên không thể xem được chương trình ? bạn gửi kèm theo file VB để test nhé

ngthanhluan06d2
06-21-2011, 08:05 PM
việc ấn một nút ấn trên VB thực chất bạn mã hóa nút ấn đó thôi, ví dụ: ấn nút ấn bạn gửi mã chữ A xuống PLC. nhận được chữ A, PLC bạn sẽ viết chương trình thực hiện một công việc gì đó.
Việc VB kết nối được với cơ sở dữ liệu để cho bạn in hóa đơn, cái này tôi đã làm nhưng chưa thành công thì chuyển sang wincc dùng cho lẹ. VB khá phức tạp nên không nghiên cứu sâu nữa.
Thanks bạn! mình hiểu về việc truyền nhận này rồi. Mình đang nghiên cứu cả Vb và Wincc 2008. Mọi người ai quan tâm thì làm quen nha! Có gì cùng học hỏi.
Bạn cho mình hỏi là nếu chữ A từ máy tính truyền xuống thì PLC sẽ hiểu là 41H và mình dùng lệnh so sánh trong PLC để thực hiện vc gì đó hay là sao?

ngthanhluan06d2
06-21-2011, 08:06 PM
Bạn vandung nên gửi file lên để mọi người cùng tham khảo và thảo luận.

anhlv.ddt
06-21-2011, 08:58 PM
Thanks bạn! mình hiểu về việc truyền nhận này rồi. Mình đang nghiên cứu cả Vb và Wincc 2008. Mọi người ai quan tâm thì làm quen nha! Có gì cùng học hỏi.
Bạn cho mình hỏi là nếu chữ A từ máy tính truyền xuống thì PLC sẽ hiểu là 41H và mình dùng lệnh so sánh trong PLC để thực hiện vc gì đó hay là sao?

Đúng vậy, khi có dữ liệu truyền xuống từ máy tính, thì PLC thực hiện ngắt 8. trong ngắt 8 đó, bạn lấy dữ liệu 41 đó trong SMB2 đó đem so sanh, nếu đúng chứ A bật đèn q0.0 chẳng hạn, chữ B thì tắt đèn q0.0
Còn hướng dùng wincc là dễ nhất với ứng dụng của bạn đang cần, truyền nhận dữ liệu cũng như giao diện đơn giản hơn VB rất nhiều :)

vandung
06-22-2011, 03:57 PM
đây là các phần em test thử chế độ truyền freeport. Bác xem thử giúp mọi người trong diễn đàn.
thanks nhiều.

vandung
06-22-2011, 04:00 PM
Đây là đoạn code test.
http://www.mediafire.com/?v81h0y51vmbtr7f

ngthanhluan06d2
06-22-2011, 04:06 PM
Đúng vậy, khi có dữ liệu truyền xuống từ máy tính, thì PLC thực hiện ngắt 8. trong ngắt 8 đó, bạn lấy dữ liệu 41 đó trong SMB2 đó đem so sanh, nếu đúng chứ A bật đèn q0.0 chẳng hạn, chữ B thì tắt đèn q0.0
Còn hướng dùng wincc là dễ nhất với ứng dụng của bạn đang cần, truyền nhận dữ liệu cũng như giao diện đơn giản hơn VB rất nhiều :)

Bác cho em hỏi là nếu việc truyền 1 kí tự A hoặc B thì cần 1byte= 8 bit thì SMB2 chứa ok. Và mình có thể truy xuất trong SMB2 để lấy dữ liệu và so sánh. Nhưng nếu em thiết lập giao diện trên Visual Basic và cần truyền 1 số thực chẳng hạn như lượng Xi măng cần cân là 520 Kg thì truyền xuống như thế nào? Lúc này nếu dữ liệu lớn hơn 1byte mà SMB2 chứa thì thường hay dùng lệnh MOVB để chuyển vùng nhớ SMB2 đến vùng nhớ khác và sau đó tăng lên 1 để chứa giá trị tiếp theo gửi về. Bác có thể giải thích cho em ví dụ truyền số 520 Kg từ máy tính xuống PLC như thế nào và PLC xử lý như với câu lệnh như thế nào để hiểu dc số 520 Kg đó? Thanks bác!

anhlv.ddt
06-22-2011, 04:23 PM
Đây là đoạn code test.
http://www.mediafire.com/?v81h0y51vmbtr7f
code VB tôi mới xem phân giao tiếp với PLC của bạn ở code thứ nhất, bạn dùng chứ A và B để set và reset 1 đầu ra PLC để kiểm tra đúng không> ở đây, do vừa set vưa reset lên chương trình chạy không được như ý bạn mong muốn, bạn có thể test trược tiếp băng cách nếu gửi A thì set q0.0 gửi B reset luôn, là đc. còn cái chương trình còn lại để tối xem nốt nha giờ fai làm việc roài, hic

anhlv.ddt
06-22-2011, 04:24 PM
Bác cho em hỏi là nếu việc truyền 1 kí tự A hoặc B thì cần 1byte= 8 bit thì SMB2 chứa ok. Và mình có thể truy xuất trong SMB2 để lấy dữ liệu và so sánh. Nhưng nếu em thiết lập giao diện trên Visual Basic và cần truyền 1 số thực chẳng hạn như lượng Xi măng cần cân là 520 Kg thì truyền xuống như thế nào? Lúc này nếu dữ liệu lớn hơn 1byte mà SMB2 chứa thì thường hay dùng lệnh MOVB để chuyển vùng nhớ SMB2 đến vùng nhớ khác và sau đó tăng lên 1 để chứa giá trị tiếp theo gửi về. Bác có thể giải thích cho em ví dụ truyền số 520 Kg từ máy tính xuống PLC như thế nào và PLC xử lý như với câu lệnh như thế nào để hiểu dc số 520 Kg đó? Thanks bác!
số thực thì cậu truyền lên ít nhất là 2 byte 1 lần truyền, do định nghĩa khung truyền rồi, trên oncom lập trình nhận nối tiếp là được. :)

vandung
06-23-2011, 01:42 PM
http://www.mediafire.com/?v81h0y51vmbtr7f
đây là những đoạn code e viết để thử, bác xem giúp em và mọi người trong diễn đàn

ngthanhluan06d2
06-24-2011, 12:56 AM
số thực thì cậu truyền lên ít nhất là 2 byte 1 lần truyền, do định nghĩa khung truyền rồi, trên oncom lập trình nhận nối tiếp là được. :)

em vẫn k hiểu lắm! Anh có thể giải thích với ví dụ em truyền số 520 Kg từ máy tính xuống và truyền 150 Kg từ PLC lên dc k bác? Vì em chỉ biết là SMB2 trong PLC chỉ chứa dc 1 byte thì mình phải xứ lý sao?

anhlv.ddt
06-24-2011, 12:21 PM
em vẫn k hiểu lắm! Anh có thể giải thích với ví dụ em truyền số 520 Kg từ máy tính xuống và truyền 150 Kg từ PLC lên dc k bác? Vì em chỉ biết là SMB2 trong PLC chỉ chứa dc 1 byte thì mình phải xứ lý sao?

Để truyên đi mã hóa nó về ASII rồi gửi lần lượt đi thôi mà ? còn nhận trong SMB2 chỉ nhận đc 1 byte thôi, cái này muốn nhận nhiều byte thì dùng lệnh RCV đó

vinhthuan158
06-25-2011, 01:28 AM
cho minh góp chut ý kiến nhé.
minh cũng đang làm về vấn đề này.
đầu tiên bạn phải xem con PLC của bạn có chế độ freeport không nhé.
nếu không hỗ chợ chế độ này thì bạn nên bỏ ý tưởng đó đi.
thứ 2, bạn phải xem con pLC giao tiếp với PC chưa, có nghĩa là cáp có thông chưa.
cuối cùng bạn mới xây dựng ý tưởng, nhớ phần thiết lập thời gian, rất quan trọng đấy.
mình thì giao tiếp thông qua PC access thôi.đỡ khổ.
chào bạn!

anhlv.ddt
06-25-2011, 09:19 AM
cho minh góp chut ý kiến nhé.
minh cũng đang làm về vấn đề này.
đầu tiên bạn phải xem con PLC của bạn có chế độ freeport không nhé.
nếu không hỗ chợ chế độ này thì bạn nên bỏ ý tưởng đó đi.
thứ 2, bạn phải xem con pLC giao tiếp với PC chưa, có nghĩa là cáp có thông chưa.
cuối cùng bạn mới xây dựng ý tưởng, nhớ phần thiết lập thời gian, rất quan trọng đấy.
mình thì giao tiếp thông qua PC access thôi.đỡ khổ.
chào bạn!
Hic, PLC S7 200 cái port 0 ta có thể cấu hình được rồi, dĩ nhiên có cap người ta mới làm, và nếu dùng PC access thì ta sài lun wincc cho lành. :)

Tommy
06-29-2011, 06:30 PM
Thấy các pác thảo luận sôi nổi quá, tui có cái này thấy hay hay, gửi các pác tham khảo: Using Visual Basic As An OPC Client
http://www.mediafire.com/?bf135si4u2m7cgz

Tommy
07-16-2011, 11:55 AM
Các bác làm được chưa?

Chia sẽ với, thanks

anhlv.ddt
07-16-2011, 10:38 PM
Các bác làm được chưa?

Chia sẽ với, thanks

để gửi lên PLC và đk từ máy tính xuống thì ko có gì mà, gặp mỗi cái lỗi là dữ liệu bị nhấp nháy, ko hỉu tại sao lun. hic hic

ykien_cuatoi
12-28-2011, 05:59 PM
mình dùng vb6 và plc s7200 cpu 224. mình dùng pc access và opc vb để giao tiếp.mình chỉ biết khi cài opc vb mình vào components
add cái opc control.lấy cái này ra thấy tên fastopccontrol1. mình chưa biết giao tiếp nó sao hết. mọi người chỉ giùm mình với. thank

anhlv.ddt
12-28-2011, 08:37 PM
bác vào thư mục đã cài pc acces ấy. có ví dụ dung vb cho opc

ykien_cuatoi
12-28-2011, 09:48 PM
ý mình là dùng cái opc vb, cụ thể là cái fastopccontrol. trong ví dụ cài opcvb có nhưng mà k bày cách dùng, mình mới kết nối plc và vb, mong mọi người giúp.

ykien_cuatoi
12-28-2011, 09:54 PM
236
mình làm việc với cái fastopccontrol này. và cái đặt tên này mình tạo như thế nào??
237

kissyou
01-15-2012, 11:13 AM
Em có thắc mắc cái vụ giao tiếp này, bác nào biết chỉ giáo em với:

Mình dùng giao tiếp cổng com 9 chân. Nếu PC thì ko nói j
Còn hầu như bây giờ ai cũng dùng Laptop-do tính chất linh động đến chỗ sản xuất,công trường,...
Vậy xin hỏi khi giao tiếp với S7-200 đó, em dùng cab USB/PPI giao tiếp mà truyền nhận dữ liệu thì có đc ko? Em hơi mơ hồ cái chỗ này.Em thấy có nơi bảo là ko, có nơi bảo kém, có nơi bảo ko đc nên chả biết tin đâu.

Cụ thể là các giao tiếp.

WINCC-PC Access-S7200
VB6-PC Access-S7200
VB6-S7200

dohung
01-15-2012, 12:07 PM
Em có thắc mắc cái vụ giao tiếp này, bác nào biết chỉ giáo em với:

Mình dùng giao tiếp cổng com 9 chân. Nếu PC thì ko nói j
Còn hầu như bây giờ ai cũng dùng Laptop-do tính chất linh động đến chỗ sản xuất,công trường,...
Vậy xin hỏi khi giao tiếp với S7-200 đó, em dùng cab USB/PPI giao tiếp mà truyền nhận dữ liệu thì có đc ko? Em hơi mơ hồ cái chỗ này.Em thấy có nơi bảo là ko, có nơi bảo kém, có nơi bảo ko đc nên chả biết tin đâu.

Cụ thể là các giao tiếp.

WINCC-PC Access-S7200
VB6-PC Access-S7200
VB6-S7200

Chào anh.
Giao tiếp giữa wincc và S7-200 thì phiên bản wincc mới đã có hỗ trợ rồi,anh không cần thông qua pc access.
Còn giao tiếp giữa VB và S7-200 thì sử dụng freeport đã có nhiều bài trên diễn đàn.
Chỉ có giao tiếp giữa VB và S7-1200 hay wincc với S7-1200 mới sử dụng PC Aceess.
Chúc anh thành công.

kissyou
01-15-2012, 02:54 PM
Bạn hiểu nhầm ý mình rồi, cách giao tiếp ở đây mình cho là ví dụ thôi. ý mình là mình đọc nhiều tài liệu truyền dữ liệu bằng cổng COM mà cáp mình bằng USB, cụ thể USB/PPI , thế thì truyền dữ liệu bằng USB có kém hơn ko có trường hợp đc ko? Trong trường hợp mình dùng WinCC hoặc VB, có mã code khai báo COM, như vậy thì mình j có COM ?