VB与AB的PLC之间通讯.docx
- 文档编号:2044180
- 上传时间:2022-10-26
- 格式:DOCX
- 页数:6
- 大小:16.36KB
VB与AB的PLC之间通讯.docx
《VB与AB的PLC之间通讯.docx》由会员分享,可在线阅读,更多相关《VB与AB的PLC之间通讯.docx(6页珍藏版)》请在冰豆网上搜索。
VB与AB的PLC之间通讯
VB与AB的PLC之间通讯31
VB与AB的PLC之间通讯;VB与ABPLC之间通讯;AB系列PLC一般都有专用驱动程序用于实现PLC;OptionExplicit;Dimtns%,comunicating;PrivateSubCommand1_Click;ReDimtb%(10);Dimst;IfReadTable(0,tb%())Then;Forst=0To9'显示结果;Tex
VB与AB的PLC之间通讯
VB与ABPLC之间通讯
AB系列PLC一般都有专用驱动程序用于实现PLC和计算机之间通讯,如RSLINX就是专门用于做这项工作,但使用RSLINX也具有一定局限性,这里提供一个使用VB编程实现PLC和计算机之间通讯程序,使用协议是DF1,可以支持Micrologix、SLC500等系列PLC。
使用代码如下:
OptionExplicit
Dimtns%,comunicating
PrivateSubCommand1_Click()
ReDimtb%(10)
Dimst
IfReadTable(0,tb%())Then
Forst=0To9'显示结果
Text1.SelText=Str(tb%(st))+Chr(32)
Nextst
Text1.SelText=Chr(13)+Chr(10)
EndIf
EndSub
PrivateSubCommand2_Click()
ReDimtm%(5)
tm%(0)=Rnd*32768
tm%
(1)=Rnd*32768
tm%
(2)=Rnd*32768
tm%(3)=Rnd*32768
tm%(4)=Rnd*32768
IfNotWriteTable(4,tm%())ThenText1.SelText="写入错误!
!
"EndSub
PrivateSubExit_Click()
UnloadMe
End
EndSub
PrivateSubForm_Load()
Comm1.PortOpen=True
EndSub
PrivateSubForm_Unload(CancelAsInteger)
Comm1.PortOpen=False
EndSub
PrivateSubCalcCRC(mes$)
Dimbyt%,res&
'对消息进行crc校验,然后将结果添加到消息结尾。
byt%=3
Do
res&=res&XorAsc(Mid(mes$,byt%,1))
rotateres&
IfAsc(Mid(mes$,byt%,1))=16Then
mes$=Left$(mes$,byt%)+Chr(16)+Right$(mes$,Len(mes$)-byt%)
byt%=byt%+1
EndIf
byt%=byt%+1
LoopWhile(byt%<=Len(mes$)-2)
res&=res&Xor3
rotateres&
mes$=mes$+Chr(res&Mod256)+Chr(Int(res&/256))EndSub
FunctionReadTable(start,n%())
Dimst,com$
'从PLCCIF数据表中读取数据,Micrologix=N7SLC500=N9
IfcomunicatingThenExitFunction
comunicating=True
Form1.Comm1.InputLen=0'清缓冲区
com$=Form1.Comm1.Input
'构建消息
com$=Chr(16)+Chr
(2)+Chr(0)+Chr(0)
com$=com$+Chr
(1)+Chr(0)+Chr(tns%)+Chr(0)
com$=com$+Chr(start)+Chr(0)+Chr(UBound(n%)*2)com$=com$+Chr(16)+Chr(3)
'进行crc计算并附加到结尾。
CalcCRCcom$
tns%=tns%+1
Iftns%=256Thentns%=0
'发送命令
Form1.Comm1.Output=com$
'等待确认
st=Timer
Do
DoEvents
LoopWhilest+3>TimerAndForm1.Comm1.InBufferCount<2'从缓冲中移除确认
Form1.Comm1.InputLen=2
com$=Form1.Comm1.Input
Ifcom$<>Chr(16)+Chr(6)Then
comunicating=False
ExitFunction
EndIf
st=Timer'等待应答
Do
DoEvents
LoopWhilest+3>TimerAndForm1.Comm1.InBufferCount<12+(UBound(n%)
*2)
'超时则退出
IfForm1.Comm1.InBufferCount<12+(UBound(n%)*2)Thencomunicating=False
ExitFunction
EndIf
'发送确认
Form1.Comm1.Output=Chr(16)+Chr(6)
'到应答
Form1.Comm1.InputLen=0
com$=Form1.Comm1.Input
st=3
Do
IfMid(com$,st,1)=Chr(16)Then
com$=Left(com$,st)+Right(com$,Len(com$)-1-st)EndIf
st=st+1
LoopWhilest '保存结果 Forst=0ToUBound(n%)-1 n%(st)=256*Asc(Mid(com$,2*st+10,1))+Asc(Mid(com$,2*st+9, 1)) Nextst ReadTable=True comunicating=False EndFunction PrivateSubrotate(res&) Dimbitout%,shift% Forshift%=1To8 bitout%=res&Mod2 res&=Int(res&/2) Ifbitout%Then res&=res&Xor&H1000A001 res&=res&-&H10000000 EndIf Nextshift% EndSub FunctionWriteTable(start,n%()) Dimst,com$ '写到PLCCIF数据表,Micrologix=N7SLC500=N9 IfcomunicatingThenExitFunction comunicating=True Form1.Comm1.InputLen=0 com$=Form1.Comm1.Input com$=Chr(16)+Chr (2)+Chr(0)+Chr(0) com$=com$+Chr(8)+Chr(0)+Chr(tns%)+Chr(0) com$=com$+Chr(start)+Chr(0) Forst=0ToUBound(n%) com$=com$+Chr(n%(st)Mod256)+Chr(Int(n%(st)/256))Nextst com$=com$+Chr(16)+Chr(3) tns%=tns%+1 Iftns%=256Thentns%=0 CalcCRCcom$ Form1.Comm1.Output=com$ st=Timer Do DoEvents LoopWhilest+3>TimerAndForm1.Comm1.InBufferCount<2Form1.Comm1.InputLen=2 com$=Form1.Comm1.Input Ifcom$<>Chr(16)+Chr(6)Then comunicating=False ExitFunction EndIf st=Timer Do DoEvents LoopWhilest+3>TimerAndForm1.Comm1.InBufferCount<12Form1.Comm1.Output=Chr(16)+Chr(6) IfForm1.Comm1.InBufferCount<12Then comunicating=False ExitFunction EndIf Form1.Comm1.Output=Chr(16)+Chr(6)WriteTable=True comunicating=False EndFunction
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- VB AB PLC 之间 通讯