|
发表于 2013-1-6 15:37
来自: 江苏省苏州市 联通
把 @wolfbeard 的 VB 程序 解剖一下, 不会VB的人只要稍微有点编程基础就能看懂为目的。虽然本帖就一直是我自己再回复。。。希望能给想要折腾的同学们 有点帮助
以下的VB代码的作用只有一下几个
1、建立TCP服务器,获得stellarium发出的数据
2、处理获得的数据,按标准的 RA DEC 来显示
3、处理获得的数据,使得能进一步处理成为可以驱动单片机的数据
VB代码如下:
Public DEC As Double, RAinD As Double
'声明公共变量 DEC 是赤纬轴数值 RAinD是代表赤经轴值单位是°, 这两个变量都是 Double型数据,带小数点后面的小数的
Private Sub Form_Load()
'窗体加载时,就立马执行下面的命令
tcpserver.LocalPort = 10001
'tcpserver是在VB里面建立的winsock控件的名字,另取的原名叫winsock1(此空间是用来处理TCP协议的数据的,具体用法请百度吧)
'上面语句的意思是设置tcpserver的监听端口号为10001
tcpserver.Listen
'开启控件开始监听,等于是软件一打开,就开始监听了
End Sub
Private Sub tcpserver_ConnectionRequest(ByVal requestID As Long)
'定义winsock控件时间函数,有连接请求时触发
If tcpserver.State <> sckClosed Then
'当tcpserver的状态不等于关闭时
tcpserver.Close '这里要先关闭,要不会报错
tcpserver.Accept requestID '在ConnectionRequest
'中用Accept方法来接收客户端的连接请求
End If
End Sub
Private Sub tcpserver_DataArrival(ByVal bytesTotal As Long)
' 控件事件函数,一旦接受到数据则执行下面的代码 ,bytesTotal 是用来存储S发送过来的数组的长度
'获取并处理DEC的值
Dim i As Long
Dim ti As Long
Dim DECd As Long ’ DEC°
Dim DECm As Long ’DEC分
Dim DECs As Long ’DEC秒 都是角度单位
Dim ByteArray() As Byte ' 定义一个比特型数组
ReDim ByteArray(bytesTotal - 1) ' ReDim是过程级别中使用,用于为动态数组变量重新分配存储空间
' 如果bytesTotal是20,则ByteArray分配19个储存空间
tcpserver.PeekData ByteArray, vbByte, bytesTotal
'控件属性,用来获得从Stellarium发送过来的数据,以字节数组 存储到 ByteArry里面,数据长度存储到bytesTotal中
'下面开始处理获得数据
For i = 1 To 4
ti = 8 - 2 * i
DEC = DEC + ByteArray(bytesTotal - i) * 16 ^ ti
'将St发送过来数组处理成十进制,DEC的数据是最后四个数据,当i等于1时,ti=6,DEC=DEC+ByteArray(20- 1)*16
'=0+ 第20位数据*16
Next
DEC = DEC / 1073741824 * 90 'Stellarium的 TCP协议规定0x40000000 = 90degrees
If DEC > 90 Then DEC = DEC - 360 '如果大于90度,就需要360-dec
' 此处得到的 DEC 值是 单位为 ° 的一个十进制值 ,比如 23.345°
' 需要处理成步进电机转多少个步距角
'获取并处理RA的值,类似上面的
Dim j As Long
Dim RAinH As Double
Dim RA As Double
Dim tj As Long
Dim RAh As Long
Dim RAm As Long
Dim RAs As Long
For j = 5 To 8
tj = 8 - 2 * (j - 4)
RAinH = RAinH + ByteArray(bytesTotal - j) * 16 ^ tj
Next
RAinH = RAinH / 1073741824 * 6 '根据协议换算
RAinD = RAinH * 15 '一小时等于15°
Timer1.Enabled = True: Timer1.Interval = 50 '延迟了50ms? 我是这么理解的啊不知道准确不准确
'将DEC\RA的值处理成我们常看到的格式 : xx° xx’ xx”, xxH xxM xxS
DECd = Fix(DEC) '取整,算多少°
DECm = Fix((DEC - DECd) * 60) ' 小数点后面计算成多少 ' (分)
DECs = Int(((DEC - DECd) * 60 - DECm) * 60 + 0.5) ' 计算多少秒,这里加了0.5,这是为什么呢 ??
Text7.Text = DECd ' DEC 度
Text8.Text = Abs(DECm) ' 整数的绝对值
Text9.Text = Abs(DECs) '整数的绝对值
'同理处理 RA的值来 显示
RA = RAinH
RAh = Fix(RA)
RAm = Fix((RA - RAh) * 60)
RAs = Int(((RA - RAh) * 60 - RAm) * 60 + 0.5)
Text1.Text = RAh
Text2.Text = RAm
Text3.Text = RAs
End Sub
|
|