发表于:2008-05-31 10:55:03
楼主
哪位高人帮忙下,谢谢!程序如下。
主要是为了实现VB6.0与S7-200之间的通信。
(1)窜口及通信参数初始化
Dim rcvlenth '定义模块级变量——接收字符的数组下标
Dim rcv() As Byte '定义接收字符的动态数组
Private Sub From_Load()
With MSComm1
.CommPort=2 '根据用户具体情况选择串口,在此使用串口2
.Settings="9600,n,8,1" '9.6k/s,无校验,8位数据位,1位停止位
.InputMode=comInputModeBinary '以二进制格式读取接收缓冲区
.RThreshold=1 '接收到的字符数大于等于1就会产生接收事件
.Inputlen=0 '读出接收缓冲区中的所有内容
.OutBufferCount=0 '清空发送缓冲区
.InBufferCount=0 '清空接收缓冲区
End With
If Not MSCcomm1.PortOpen Then '打开串口2
MSComm1.PortOpen=True
End If
End Sub
(2)发送程序
Private SUB Command1_Click() '点击界面中的【发送】按钮时执行发送程序
rcvlenth=-1 '置接收字符的数组下标初值
sdata=Array(1,2,3) '待发送数据为1、2、3,可以修改其个数和内容
Dim nByte()As Byte
ReDim nByte(UBound(sdata)+4) As Byte '定义发送报文数组
nByte(0)=0 '送起始字符
nByte(1)=UBound(sdata)+1 '送数据区字节数
fcs=nByte(1) '校验码初始化
For i =2 To UBound(sdata)+2
nByte(i)=sdata(i-2) '待发送数据报文数组的数据区
fcs =fcs Xor nByte(i) '异或运算,求校验码
Next
nByte(i)=fcs '送校验码
nByte(i+1)=&HFF '送结束字节
MSComm1.Output=nByte '发送报文
End Sub
(3)接收程序
Private Sub MSComm1_OnComm() 'OnComm事件
Dim rcvtemp() As Byte '定义存放每次接收的数据的暂存数组
ReDim Preserve rcv(100) As Byte '预设接收字符的数组rcv(最大101字节)
Text1="" '清除文本框
Select Case MSComm1.CommEvent
Case comEvReceive '如果接收到字符
rcvtemp=MSComm1.Input '将接收缓冲区的内容放入暂存数组rcvtemp
For i=LBound(rcvtemp) To UBound(rcvtemp)
rcvlenth=rcvlenth+1
rcv(rcvlenth)=rcvtemp(i) '将接收到的各字节放入接收字节数组rcv
Next i
ReDim Preserve rcv(rcvlenth) As Byte '得到接收字节数组的实际大小
End Select
For i =LBound(rcv) To UBound(rcv)
Text1="Text1 & Str $ (rcv(i))" '在文本框Text1中显示接收到的数据
Next
End Sub