RS232串口进行通信怎样获取数据

时间:2021-04-11 07:53:40
我车间有个称重测长的设备和程序,是通过RS232串口进行通信的,设备硬件都是连接好的,我想在现有基础上模拟做一个能采集测量长度和重量的程序,是不是使用MSCom控件MSComm1.Input获取数据,会不会对原程序影响
Private Sub Timer1_Timer()
  Dim buf$
  Timer1.Enabled = False
  buf = Trim(MSComm1.Input)      '将缓冲区内的数据读入buf变量中
  If Len(buf) = 0 Then           '判断缓冲区内是否存在数据
    TextReceive.Text = ""
  Else
    TextReceive.Text = buf
  End If
End Sub
以上代码可以吗
我不需要对串口进行设置了吧
还有获取的数据是电压值吗,还要进行什么转换吗?我刚接触串口方面的知识,不太明白获取数据后怎样转换成长度或重量的原理,请高手或研究过这方面的大侠谈谈,谢谢

13 个解决方案

#2


最好不使用 Timer 定时。MSComm 有自己的 OnComm 事件,可以在接收到数据时触发。

#3


如果是连接COM1串口,我能不能在源程序运行时COM1向pc返回数据时,编一个程序用MSComm1.Input进行获取

#4


如果原程序打开的时候,你的程序再去打开com口时肯定会失败。

#5


楼主问题解决了没有也不来吱个声。

#6


引用 4 楼 wangyuzg 的回复:
如果原程序打开的时候,你的程序再去打开com口时肯定会失败。

你说对了,想想还有什么办法吗?还有个问题,此设备是通过232串口连接的智能仪表设备,能显示重量,怎样才能知道通信协议,发送指令得到数据呢?我不知道通信协议

#7


引用 6 楼 wushuiyoushen 的回复:
Quote: 引用 4 楼 wangyuzg 的回复:

如果原程序打开的时候,你的程序再去打开com口时肯定会失败。

你说对了,想想还有什么办法吗?还有个问题,此设备是通过232串口连接的智能仪表设备,能显示重量,怎样才能知道通信协议,发送指令得到数据呢?我不知道通信协议



那你要弄清楚该仪表是采用232通讯还是485通讯,如果是232的,你可以直接通过电脑自带的超级终端来看一下它发送数据的格式,你可以参考并自己在程序里取数,如果是485的话,肯定要该表的详细资料,因为485通讯的话是你要给它发送指令,然后仪表才返回相应的数据。

至于你说的该表的通讯协议,在菜单里可以查得到吧。

#8


引用 7 楼 wangyuzg 的回复:
Quote: 引用 6 楼 wushuiyoushen 的回复:

Quote: 引用 4 楼 wangyuzg 的回复:

如果原程序打开的时候,你的程序再去打开com口时肯定会失败。

你说对了,想想还有什么办法吗?还有个问题,此设备是通过232串口连接的智能仪表设备,能显示重量,怎样才能知道通信协议,发送指令得到数据呢?我不知道通信协议



那你要弄清楚该仪表是采用232通讯还是485通讯,如果是232的,你可以直接通过电脑自带的超级终端来看一下它发送数据的格式,你可以参考并自己在程序里取数,如果是485的话,肯定要该表的详细资料,因为485通讯的话是你要给它发送指令,然后仪表才返回相应的数据。

至于你说的该表的通讯协议,在菜单里可以查得到吧。

是232串口通信的,请说明白点,有点不懂,怎样用“电脑自带的超级终端来看一下它发送数据的格式,你可以参考并自己在程序里取数,”

#9


引用 7 楼 wangyuzg 的回复:
Quote: 引用 6 楼 wushuiyoushen 的回复:

Quote: 引用 4 楼 wangyuzg 的回复:

如果原程序打开的时候,你的程序再去打开com口时肯定会失败。

你说对了,想想还有什么办法吗?还有个问题,此设备是通过232串口连接的智能仪表设备,能显示重量,怎样才能知道通信协议,发送指令得到数据呢?我不知道通信协议



那你要弄清楚该仪表是采用232通讯还是485通讯,如果是232的,你可以直接通过电脑自带的超级终端来看一下它发送数据的格式,你可以参考并自己在程序里取数,如果是485的话,肯定要该表的详细资料,因为485通讯的话是你要给它发送指令,然后仪表才返回相应的数据。

至于你说的该表的通讯协议,在菜单里可以查得到吧。



请教了,万分谢谢

#10


引用 9 楼 wushuiyoushen 的回复:
Quote: 引用 7 楼 wangyuzg 的回复:

Quote: 引用 6 楼 wushuiyoushen 的回复:

Quote: 引用 4 楼 wangyuzg 的回复:

如果原程序打开的时候,你的程序再去打开com口时肯定会失败。

你说对了,想想还有什么办法吗?还有个问题,此设备是通过232串口连接的智能仪表设备,能显示重量,怎样才能知道通信协议,发送指令得到数据呢?我不知道通信协议



那你要弄清楚该仪表是采用232通讯还是485通讯,如果是232的,你可以直接通过电脑自带的超级终端来看一下它发送数据的格式,你可以参考并自己在程序里取数,如果是485的话,肯定要该表的详细资料,因为485通讯的话是你要给它发送指令,然后仪表才返回相应的数据。

至于你说的该表的通讯协议,在菜单里可以查得到吧。



请教了,万分谢谢

在电脑上找到超级终端的,以前没用过,请教一下怎样看他发送过来的数据

#11


引用 10 楼 wushuiyoushen 的回复:
在电脑上找到超级终端的,以前没用过,请教一下怎样看他发送过来的数据


————————————————————————————————————————————

在  开始-程序-附件-通讯-超级终端(有些系统安装时未安装,请你手动安装),打开后根据提示一步一步设置(这个不用教吧,既然你是搞通讯的,这些设置应该不会是问题),把com口、波特率(因为你不知道该表的波特率,所以可以从1200开始一个一个的试)数据位(一般是8位)设置好,打开串口,看仪表给你发送过来的是什么样的数据,只要这些设置好了,它肯定要发送数据过来的。
最后你根据它发送到缓冲区数据的格式,比如&12345,而12345是你想要的,你就可以把&作为取数前的判断条件,只要查找发送过来的数据中有&,则从它之后开始取数,数几位……
太啰嗦了……

#12


看你5点钟就起床了,真是个勤快人……
那技术问题应该不是问题。

#13


谢谢楼上的热心回答,不过我还是不懂,我觉得超级终端类似串口助手',一样的当愿程序打开是串口是打开的,一样无法使用',而且如果是要发送某命令才回传数据我怎么解决,对不起,我刚学串口通信很菜,望请教

#1


#2


最好不使用 Timer 定时。MSComm 有自己的 OnComm 事件,可以在接收到数据时触发。

#3


如果是连接COM1串口,我能不能在源程序运行时COM1向pc返回数据时,编一个程序用MSComm1.Input进行获取

#4


如果原程序打开的时候,你的程序再去打开com口时肯定会失败。

#5


楼主问题解决了没有也不来吱个声。

#6


引用 4 楼 wangyuzg 的回复:
如果原程序打开的时候,你的程序再去打开com口时肯定会失败。

你说对了,想想还有什么办法吗?还有个问题,此设备是通过232串口连接的智能仪表设备,能显示重量,怎样才能知道通信协议,发送指令得到数据呢?我不知道通信协议

#7


引用 6 楼 wushuiyoushen 的回复:
Quote: 引用 4 楼 wangyuzg 的回复:

如果原程序打开的时候,你的程序再去打开com口时肯定会失败。

你说对了,想想还有什么办法吗?还有个问题,此设备是通过232串口连接的智能仪表设备,能显示重量,怎样才能知道通信协议,发送指令得到数据呢?我不知道通信协议



那你要弄清楚该仪表是采用232通讯还是485通讯,如果是232的,你可以直接通过电脑自带的超级终端来看一下它发送数据的格式,你可以参考并自己在程序里取数,如果是485的话,肯定要该表的详细资料,因为485通讯的话是你要给它发送指令,然后仪表才返回相应的数据。

至于你说的该表的通讯协议,在菜单里可以查得到吧。

#8


引用 7 楼 wangyuzg 的回复:
Quote: 引用 6 楼 wushuiyoushen 的回复:

Quote: 引用 4 楼 wangyuzg 的回复:

如果原程序打开的时候,你的程序再去打开com口时肯定会失败。

你说对了,想想还有什么办法吗?还有个问题,此设备是通过232串口连接的智能仪表设备,能显示重量,怎样才能知道通信协议,发送指令得到数据呢?我不知道通信协议



那你要弄清楚该仪表是采用232通讯还是485通讯,如果是232的,你可以直接通过电脑自带的超级终端来看一下它发送数据的格式,你可以参考并自己在程序里取数,如果是485的话,肯定要该表的详细资料,因为485通讯的话是你要给它发送指令,然后仪表才返回相应的数据。

至于你说的该表的通讯协议,在菜单里可以查得到吧。

是232串口通信的,请说明白点,有点不懂,怎样用“电脑自带的超级终端来看一下它发送数据的格式,你可以参考并自己在程序里取数,”

#9


引用 7 楼 wangyuzg 的回复:
Quote: 引用 6 楼 wushuiyoushen 的回复:

Quote: 引用 4 楼 wangyuzg 的回复:

如果原程序打开的时候,你的程序再去打开com口时肯定会失败。

你说对了,想想还有什么办法吗?还有个问题,此设备是通过232串口连接的智能仪表设备,能显示重量,怎样才能知道通信协议,发送指令得到数据呢?我不知道通信协议



那你要弄清楚该仪表是采用232通讯还是485通讯,如果是232的,你可以直接通过电脑自带的超级终端来看一下它发送数据的格式,你可以参考并自己在程序里取数,如果是485的话,肯定要该表的详细资料,因为485通讯的话是你要给它发送指令,然后仪表才返回相应的数据。

至于你说的该表的通讯协议,在菜单里可以查得到吧。



请教了,万分谢谢

#10


引用 9 楼 wushuiyoushen 的回复:
Quote: 引用 7 楼 wangyuzg 的回复:

Quote: 引用 6 楼 wushuiyoushen 的回复:

Quote: 引用 4 楼 wangyuzg 的回复:

如果原程序打开的时候,你的程序再去打开com口时肯定会失败。

你说对了,想想还有什么办法吗?还有个问题,此设备是通过232串口连接的智能仪表设备,能显示重量,怎样才能知道通信协议,发送指令得到数据呢?我不知道通信协议



那你要弄清楚该仪表是采用232通讯还是485通讯,如果是232的,你可以直接通过电脑自带的超级终端来看一下它发送数据的格式,你可以参考并自己在程序里取数,如果是485的话,肯定要该表的详细资料,因为485通讯的话是你要给它发送指令,然后仪表才返回相应的数据。

至于你说的该表的通讯协议,在菜单里可以查得到吧。



请教了,万分谢谢

在电脑上找到超级终端的,以前没用过,请教一下怎样看他发送过来的数据

#11


引用 10 楼 wushuiyoushen 的回复:
在电脑上找到超级终端的,以前没用过,请教一下怎样看他发送过来的数据


————————————————————————————————————————————

在  开始-程序-附件-通讯-超级终端(有些系统安装时未安装,请你手动安装),打开后根据提示一步一步设置(这个不用教吧,既然你是搞通讯的,这些设置应该不会是问题),把com口、波特率(因为你不知道该表的波特率,所以可以从1200开始一个一个的试)数据位(一般是8位)设置好,打开串口,看仪表给你发送过来的是什么样的数据,只要这些设置好了,它肯定要发送数据过来的。
最后你根据它发送到缓冲区数据的格式,比如&12345,而12345是你想要的,你就可以把&作为取数前的判断条件,只要查找发送过来的数据中有&,则从它之后开始取数,数几位……
太啰嗦了……

#12


看你5点钟就起床了,真是个勤快人……
那技术问题应该不是问题。

#13


谢谢楼上的热心回答,不过我还是不懂,我觉得超级终端类似串口助手',一样的当愿程序打开是串口是打开的,一样无法使用',而且如果是要发送某命令才回传数据我怎么解决,对不起,我刚学串口通信很菜,望请教