以下是Mscomm控件的主要属性和方一法:
(1) Commport:设置或返回串行端口号,其取值范围为1---99,缺省为1。
(2) Setting:设置或返回串行端口的波特率、奇偶校验位、数据位数、停止位。如:Mscomm.Setting="9600,N,8,1 "
(3) PortOpen:打开或关闭串行端口,格式为:Mscomm.PortOpen=TRUE/FALSE。
(4) InBufferSize:设置或返回接收缓冲区的大小,缺省为1024字节。
(5) InBufferCount:返回接收缓冲区内的等待读取的字节个数,可通过设置该属性为0来清除接收缓冲区。
(6) RThreshold:该属性为一阀值,它确定当按收缓冲区内字节个数达到或超过该值后就产OnCamm事件。
(7) InputLen:设置或返回接收缓冲区内用Input读入的个数。若取0,则Input读取整个缓冲区的内容。
(8) Input:该属性表示从接收缓冲区移走一串字符。
(9) OutBufferSize:设置或返回发送缓冲区大小,缺省为512字节。
(10) OutBufferCount:返回发送缓冲区内等待发送的字符数可用来清空缓冲区。
(11) Output:向发送缓冲区传送一字符串。
(12) EofEnable:若置TRUE,则当输入出现EOF,就停止输入产生OnComm事件。
如果在通信过程中发生错误或事件,就会引发OnComm事件并改变属性值,由CommEvent属性代码反映错误类型,在通信程序的设计中可根据该属性值来执行不同的操作,以下是部分属性常数值及其含义:
(1)ComEvSend:其值为1,发送缓冲区的内容少于SThreshold指定的值。
(2)ComEvReceive:其值为2,接收缓冲区内字符数达到RThreshold值,该事件在缓冲区中数据被移走前将持续产生。
本设计中端口号为6,8个数据位,无奇偶校验,波特率为9600,1个停止位,串口的初始化程序为[17]:
Private Sub Form_Load()
Comm1.CommPort = 6
Comm1.Settings = "9600,n,8,1"
Comm1.InputLen = 0
Comm1.InBufferSize = 512
Comm1.InBufferCount = 0
Comm1.OutBufferCount = 0
Comm1.RThreshold = 1
End Sub
串口给下位机发送命令时,由于控制命令是以字符串的形式输入文本框的,比如命令机械手的目标点X轴坐标为100mm,由于“100”是以字符串的形式输入文本框的,如果直接发送则需要发送三次,而设计时希望51单片机只需接收一次就可以将“100”接收,所以发送时得先把字符串转换成十优尔进,再把十优尔进制数以数组的形式传给下位机,具体转换和传输过程如下:
Dim buffer(0 To 9) As Byte
buffer(0) = "&H" & Hex(onoff)
buffer(1) = "&H" & Hex(Val(Textdir1.Text))
buffer(2) = "&H" & Hex(Val(Textdir2.Text))
buffer(3) = "&H" & Hex(Val(Textdir3.Text))
buffer(4) = "&H" & Hex(Val(Textdir4.Text))
buffer(5) = "&H" & Hex(Val(Textrate.Text))
buffer(6) = "&H" & Hex(50 * Val(Textcircle1.Text))
buffer(7) = "&H" & Hex(50 * Val(Textcircle2.Text))
buffer(8) = "&H" & Hex(50 * Val(Textcircle3.Text))
buffer(9) = "&H" & Hex(50 * Val(Textcircle4.Text))
Comm1.Output = buffer()
4.1.3 各电机控制信号的算法
机械手操控方式有两种,一种是操作人员直接给出各电机的控制型号,另一种为操作人员只给出物体的坐标,控制型号由上位机通过算法得出。当处于第二种运行模式时,机械手最终目的是到达一个目标点抓取物体,然后返回原点。目标点的位置坐标是由操作人员通过测量给出并输入到上位机界面,VB通过一定的算法编程可以准确算出每个步进电机应该转动的角度,具体计算时,得先建立坐标系,坐标系的具体建立方法如图4.2,设定图示的旋转方向为电机的正转方向[18]。 AT89S51单片机全地形八足机器人机械手的设计(12):http://www.youerw.com/jixie/lunwen_2398.html