协议:
波特率19200,8个数据位,外加校验位,发送地址采用prMark校验方式,发送命令采用prSpace校验方式1、发送板号(1个字节,地址方式);
2、等待返回板号(1个字节),如果等候超时则发送复位命令;如果返回的板号不正确,也发送复位命令;
3、发送通道号(1个字节,命令方式,高四位和低四位都为通道号码,用于校验)
4、等候开锁结果(1个字节)上面是单片机公司给我提供的协议.
下面是我写的代码作用是发送一个板号。等待返回板号。
问题一:DATA = BUFFER 出现编译错误. 提示“不能给数组赋值”
问题二:把DATA = BUFFER改成 DATA(0)=BUFFER可以通过编译。但是我用DEBUG.PRING DATA 时 DATA
的值是空的。这是不是说明我向串口发送数据没有成功。这怎么解决呀??
问题三:我的代码的其他部分我想还会有很多问题。请各位指正。下面是我的代码:
Private Sub Command1_Click()
Call SendData
End SubPrivate Sub SendData()
'发送一个字节
Dim BUFFER As Variant '定义一个Variant变量
Dim DATA(0) As Byte '定义一个数组变量
DATA(0) = 3BUFFER = DATA '数组变量赋值给Variant变量
MSComm1.Output = BUFFER '将Variant变量发送 发送三个字节
End SubPrivate Sub Form_Load()
MSComm1.InputMode = comInputModeBinary
MSComm1.CommPort = 1 '设置串口号
MSComm1.Settings = "19200,n,8,1" '设置波特率 MSComm1.InputLen = 0
MSComm1.RTSEnable = True
MSComm1.RThreshold = 1 '设置接收一个字节MSComm1.PortOpen = True '开串口MSComm1.InBufferCount = 0 '清输入缓冲区
MSComm1.OutBufferCount = 0 '清输出缓冲区
End SubPrivate Sub MSComm1_OnComm()
'接收一个字节
Dim BUFFER As Variant '定义一个Variant变量
Dim DATA(0) As Byte '定义一个数组变量
Select Case MSComm1.CommEvent
Case MSComm - EV - RECEIVE '接收事件发生
BUFFER = MSComm1.Input '用Variant变量接收
DATA = BUFFER ' Variant变量赋值给数组变量
Text1.Text = Str(DATA(0)) '显示此数组
End Select
End Sub
波特率19200,8个数据位,外加校验位,发送地址采用prMark校验方式,发送命令采用prSpace校验方式1、发送板号(1个字节,地址方式);
2、等待返回板号(1个字节),如果等候超时则发送复位命令;如果返回的板号不正确,也发送复位命令;
3、发送通道号(1个字节,命令方式,高四位和低四位都为通道号码,用于校验)
4、等候开锁结果(1个字节)上面是单片机公司给我提供的协议.
下面是我写的代码作用是发送一个板号。等待返回板号。
问题一:DATA = BUFFER 出现编译错误. 提示“不能给数组赋值”
问题二:把DATA = BUFFER改成 DATA(0)=BUFFER可以通过编译。但是我用DEBUG.PRING DATA 时 DATA
的值是空的。这是不是说明我向串口发送数据没有成功。这怎么解决呀??
问题三:我的代码的其他部分我想还会有很多问题。请各位指正。下面是我的代码:
Private Sub Command1_Click()
Call SendData
End SubPrivate Sub SendData()
'发送一个字节
Dim BUFFER As Variant '定义一个Variant变量
Dim DATA(0) As Byte '定义一个数组变量
DATA(0) = 3BUFFER = DATA '数组变量赋值给Variant变量
MSComm1.Output = BUFFER '将Variant变量发送 发送三个字节
End SubPrivate Sub Form_Load()
MSComm1.InputMode = comInputModeBinary
MSComm1.CommPort = 1 '设置串口号
MSComm1.Settings = "19200,n,8,1" '设置波特率 MSComm1.InputLen = 0
MSComm1.RTSEnable = True
MSComm1.RThreshold = 1 '设置接收一个字节MSComm1.PortOpen = True '开串口MSComm1.InBufferCount = 0 '清输入缓冲区
MSComm1.OutBufferCount = 0 '清输出缓冲区
End SubPrivate Sub MSComm1_OnComm()
'接收一个字节
Dim BUFFER As Variant '定义一个Variant变量
Dim DATA(0) As Byte '定义一个数组变量
Select Case MSComm1.CommEvent
Case MSComm - EV - RECEIVE '接收事件发生
BUFFER = MSComm1.Input '用Variant变量接收
DATA = BUFFER ' Variant变量赋值给数组变量
Text1.Text = Str(DATA(0)) '显示此数组
End Select
End Sub
单片机的要求是什么? 发送3 的ascii码 还是什么?? 3本事就是2进制的00000011还有“地址方式” 是代表什么 因为 如果是单片机的识位的话 要在停止位那边设置的
能些详细点协议码??
Dim DATA() As Byte '定义一个数组变量redim DATA(0)
DATA(0) = 3
MSComm1.Output = DATA 就能发送16进制数的
>波特率19200,8个数据位,外加校验位,发送地址采用prMark校验方式,发送命令采用prSpace校验方式实际上,这是一个主机对多个从设备的 RS-485 通讯协议。
发地址(呼叫从设备):
MSComm1.Settings = "19200,M,8,1"
发命令:
MSComm1.Settings = "19200,S,8,1">问题一:DATA = BUFFER 出现编译错误. 提示“不能给数组赋值”
发送过程不需要通过 Variant 类型的变量转换,直接
MSComm1.Output = Data
但我不知道是什么校验方式
2 单片机就是要一个二进制的数字(还有校验)3我试了,但是仍然没有反应!!
2 DATA=BUFFER 出现错误不是发生在发送的时候,而是发生在接收的时候
(我的代码里面有两个DATA=BUFFER)
'接收一个字节
Dim BUFFER As Variant '定义一个Variant变量
Dim DATA() As Byte '定义一个数组变量,这里不要限制维数
Dim i As Integer
Select Case MSComm1.CommEvent
Case comEvReceive '接收事件发生,这里常数错误******
BUFFER = MSComm1.Input '用Variant变量接收
DATA = BUFFER ' Variant变量赋值给数组变量
Text1 = ""
For i = 0 To Ubound(DATA)
Text1.Text = Text1 & CStr(DATA(i)) '显示此数组
Next i
End Select
End Sub