找回密码
 加入我们

QQ登录

只需一步,快速开始

搜索
查看: 16482|回复: 30

[其它源码] 『跪求』【急急】vb中,如何分离文本数据并绘图?

 火... [复制链接]

1

主题

12

回帖

0

精华

铜牌会员

积分
34
发表于 2012-6-9 14:41:47 | 显示全部楼层 |阅读模式
本帖最后由 agoojje 于 2012-6-9 14:43 编辑

数据如下,绘制P--R曲线??? 风力机数据采集与处理.rar (652.26 KB, 下载次数: 9951)




未命名.jpg

96

主题

158

回帖

4

精华

核心会员

积分
6513
发表于 2012-6-9 14:48:34 | 显示全部楼层
本帖最后由 diddom 于 2012-6-9 15:13 编辑

別急~

Project 還真不小~{:soso_e113:}

1

主题

12

回帖

0

精华

铜牌会员

积分
34
 楼主| 发表于 2012-6-9 14:50:09 | 显示全部楼层
diddom 发表于 2012-6-9 14:48
別急~

整快半个月了,快崩溃了

275

主题

3017

回帖

1

精华

管理员

嗷嗷叫的老马

积分
17064

论坛牛人贡献奖关注奖最佳版主进步奖人气王疯狂作品奖精英奖赞助论坛勋章乐于助人勋章

QQ
发表于 2012-6-9 22:18:56 | 显示全部楼层
有什么问题?想达到啥效果?我下载了代码,不知道你是想做什么呢?
我就是嗷嗷叫的老马了......

1

主题

12

回帖

0

精华

铜牌会员

积分
34
 楼主| 发表于 2012-6-10 07:28:40 | 显示全部楼层
本帖最后由 agoojje 于 2012-6-10 07:31 编辑
马大哈 发表于 2012-6-9 22:18
有什么问题?想达到啥效果?我下载了代码,不知道你是想做什么呢?




只做“静态”的。代码里有个“原始数据”文件夹,其中“2m8.txt,3m8.txt,4m8.txt,5m8.txt,6m8.txt一直到13m8.txt”是一个系列,其中“2,3,4,5,6到13”表示风速(用V表示),m8表示8个叶片,上述一个系列的每个text文本绘制一个P-R曲线并找出P-R曲线的最大P(Pmax)和对应的最大R(Rmax),P表示功率,R(代码里用n表示)表示转速。每个txt计算一个Cp和λ值,得到一个(Cp,λ)点(一个系列共12个这样的点用来绘制Cp-λ曲线),Cp=PMax/(0.5*ρ*A*V*V)其中ρ为空气密度(常数ρ=1.226),A为叶轮面积(常数A=0.283).V表示风速(计算2m8.txt时,V=2);λ=(3.1415926*0.3*Rmax)/(30*V)其中V为风速。只要绘出Cp-λ曲线即可,其他曲线不用显示。

1

主题

12

回帖

0

精华

铜牌会员

积分
34
 楼主| 发表于 2012-6-10 07:38:49 | 显示全部楼层
p-R曲线可能需要进行曲线拟合。下边是EXCEL出图效果:
捕获41.PNG

1

主题

12

回帖

0

精华

铜牌会员

积分
34
 楼主| 发表于 2012-6-11 07:55:00 | 显示全部楼层
求大神回复{:soso_e154:}{:soso_e154:}{:soso_e154:}{:soso_e154:}{:soso_e154:}

96

主题

158

回帖

4

精华

核心会员

积分
6513
发表于 2012-6-13 08:46:11 | 显示全部楼层
本帖最后由 diddom 于 2012-6-13 13:53 编辑

可以先了解一下吗?

好似要用双精度浮点数 Double Type?

N:-00.07;R:0260.3;P:0.0020;?

N = ? 怎有负号?

R = 转速吗?

P = 功率吗?

96

主题

158

回帖

4

精华

核心会员

积分
6513
发表于 2012-6-13 09:48:04 | 显示全部楼层

Private Type Data
    N As String
    R As String
    P As String
End Type


Dim FileName As String


Private Sub Command1_Click()

On Error Resume Next
   
Dim i           As Long
Dim StrData     As String
Dim strLine
Dim strSplit
Dim AryData(1 To 500) As Data


    With CommonDialog1
        .DialogTitle = "Open"
        .Filter = "Text Files (*.txt)|*.txt|All Files (*.*)|*.*"
        .ShowOpen
    End With

    FileName = CommonDialog1.FileName
   
    If FileName = "" Then Exit Sub
   
   
   
    Open FileName For Input As #1
    Input #1, StrData
    Close #1
   
    strLine = Split(StrData, "N:")
   
    For i = 1 To UBound(strLine)
        
        strSplit = Split(strLine(i), ";")
        
        AryData(i).N = strSplit(0)
        AryData(i).R = strSplit(1)
        AryData(i).P = strSplit(2)
   
    Next

    '至此 3m8.txt 资料已经分离完毕
   
End Sub

1

主题

12

回帖

0

精华

铜牌会员

积分
34
 楼主| 发表于 2012-6-13 10:37:27 | 显示全部楼层
diddom 发表于 2012-6-13 08:46
可以先了解一下吗?

好似要用双精度浮点数 Bouble Type?

N代表转矩T(有负号)。
R转速。
p功率。

1

主题

12

回帖

0

精华

铜牌会员

积分
34
 楼主| 发表于 2012-6-13 10:40:41 | 显示全部楼层
diddom 发表于 2012-6-13 09:48
Private Type Data
    N As String
    R As String

大神能帮我整合到我上传的源码里吗?

96

主题

158

回帖

4

精华

核心会员

积分
6513
发表于 2012-6-13 13:38:31 | 显示全部楼层
本帖最后由 diddom 于 2012-6-13 15:21 编辑
agoojje 发表于 2012-6-13 10:40
大神能帮我整合到我上传的源码里吗?


好的~

但有些细节我希望能了解

你在6楼贴的那张 Excel 输出的图 (p-R曲线图), x轴代表什麽, y轴代表什麽

方便给出那张图 Excel 的VBA吗?

最大P(Pmax)和对应的最大R(Rmax)有数学公式可以计算吗?

还是只要比对出该 Text File 中最大的 P 值(功率)就可以了?

然後再找出该笔资料所对应的最大R(Rmax)

至於 Cp 和 lambda 你已经有贴出数学公式, 转变成 VB 这很简单

对了, 你下下次的上来BBS的时间是几点,早上还是晚上


1

主题

12

回帖

0

精华

铜牌会员

积分
34
 楼主| 发表于 2012-6-13 16:27:23 | 显示全部楼层
本帖最后由 agoojje 于 2012-6-13 16:35 编辑
diddom 发表于 2012-6-13 13:38
好的~

但有些细节我希望能了解


1.6楼贴的那张 Excel 输出的图 (p-R曲线图), x轴代表R(转速), y轴代表P(功率)。
2.最大P(Pmax)和对应的最大R(Rmax)只要比对出该 Text File 中最大的 P 值(功率)就可以了。(但最好能找出“P-R拟合曲线”的顶点),P-R拟合曲线即6楼贴的那张 Excel 输出的图内的那条黑线。
3.我上BBS的时间基本上是早上6点,大概1个小时刷新一次。
4.excel的VBA,我不太了解,但可以把excel处理的实验数据发给你。

2m8处理.rar (28.74 KB, 下载次数: 6331) {:soso_e154:}

1

主题

12

回帖

0

精华

铜牌会员

积分
34
 楼主| 发表于 2012-6-13 16:39:56 | 显示全部楼层
马大哈 发表于 2012-6-9 22:18
有什么问题?想达到啥效果?我下载了代码,不知道你是想做什么呢?

跪求管理员给“diddom”会员颁发“乐于助人勋章”。

96

主题

158

回帖

4

精华

核心会员

积分
6513
发表于 2012-6-13 16:53:55 | 显示全部楼层
本帖最后由 diddom 于 2012-6-13 17:23 编辑
agoojje 发表于 2012-6-13 16:39
跪求管理员给“diddom”会员颁发“乐于助人勋章”。



管理员给我一年的核心会员了

已经是给我最好的礼物了

agoojje 感谢你对我的抬爱^^

再问一下

在 3m8.txt 里面

有两笔最大功率

N:-00.09;R:0242.3;P:0.0025;?
N:-00.09;R:0242.3;P:0.0025;?

这样最大R是 0242 吗?

还是

N:-00.08;R:0261.8;P:0.0022;?
N:-00.08;R:0261.8;P:0.0022;?  里面的 0261 ?

抱歉喔, 因为我笨笨的, 才会一直问{:soso_e113:}

我看我必须先了解你刚刚发的 2m8处理.rar


1

主题

12

回帖

0

精华

铜牌会员

积分
34
 楼主| 发表于 2012-6-13 17:40:32 | 显示全部楼层
diddom 发表于 2012-6-13 16:53
管理员给我一年的核心会员了

已经是给我最好的礼物了


由于风力机功率和转速波动,在近似计算中就求一下“两者的”平均值就行啦。
PS:大神太谦虚啦。

96

主题

158

回帖

4

精华

核心会员

积分
6513
发表于 2012-6-13 19:32:14 | 显示全部楼层

我必须先休息一下, 希望你也早点歇息

我喜欢半夜写程式 (没有吵杂声)

我醒来还是会以你这主题为先

我这阵子在弄 NDIS, 属於 firewall 的部分

NDIS不重要, 你的比较重要

我好怕耽误你的 Project



9

主题

210

回帖

0

精华

初来乍到

积分
904
发表于 2012-6-13 20:01:28 | 显示全部楼层
变初级会员了!~~~
你这个用matlab绘制最还了!~~

20

主题

66

回帖

0

精华

管理员

积分
1653
发表于 2012-6-13 20:40:15 | 显示全部楼层
oopww 发表于 2012-6-13 20:01
变初级会员了!~~~
你这个用matlab绘制最还了!~~

看核心会员要求:http://www.m5home.com/bbs/thread-4777-1-1.html
申请条件:
1.发两篇原创的文章
2.发两个(半)原创的代码
3.发一篇原创文章和一个(半)原创的代码

当初把你加入核心会员应该是管理员误操作。
我是管理员,虽然不常吭声,但无时无刻关注着论坛里每个人的一举一动!

1

主题

12

回帖

0

精华

铜牌会员

积分
34
 楼主| 发表于 2012-6-13 22:51:05 | 显示全部楼层
diddom 发表于 2012-6-13 19:32
我必须先休息一下, 希望你也早点歇息

我喜欢半夜写程式 (没有吵杂声)

多谢大神

96

主题

158

回帖

4

精华

核心会员

积分
6513
发表于 2012-6-14 08:25:44 | 显示全部楼层
本帖最后由 diddom 于 2012-6-14 09:22 编辑

我们也用 VB 来玩一下 PR曲线要吗?

我想实验一下曲线拟合

我刚刚收集了一些关於曲线拟合的函数


'****************************************************************************************************'
'   編程世界:www.ibiancheng.cn

'   X()------Double 實型一維數組,長度為 n 。存放給定 n 個數據點的 X 坐標。 **

'   Y()------Double 實型一維數組,長度為 n 。存放給定 n 個數據點的 Y 坐標。

'   n-------Integer 變量。給定數據點的個數。 **

'   a()------Double 實型一維數組,長度為 m 。返回 m-1 次擬合多項式的 m 個系數。

'   m-------Integer 變量。擬合多項式的項數,即擬合多項式的最高次數為 m-1。

'   要求 m<=n 且m<=20。若 m>n 或 m>20 ,則本函數自動按 m=min{n,20} 處理。

'   rdblAverageX--Double 變量,返回給定n個數據點的 X 坐標的平均值

'   dt()------Double 實型一維數組,長度為 3。其中:
'   dt(0) 返回擬合多項式與數據點誤差的平方和;
'   dt(1) 返回擬合多項式與數據點誤差的絕對值之和;
'   dt(2) 返回擬合多項式與數據點誤差絕對值的最大值。

'*****************************************************************************************************'
  1. Public Sub Iapcir(X() As Double, _
  2.                   Y() As Double, _
  3.                   ByVal n As Integer, _
  4.                   ByRef a() As Double, _
  5.                   ByVal m As Integer, _
  6.                   ByRef rdblAverageX As Double, _
  7.                   ByRef dt() As Double)

  8. Dim I As Integer
  9. Dim J As Integer
  10. Dim K As Integer

  11. Dim Z As Double
  12. Dim P As Double
  13. Dim C As Double
  14. Dim G As Double
  15. Dim Q As Double

  16. Dim D1 As Double
  17. Dim D2 As Double

  18. Dim S(19) As Double
  19. Dim T(19) As Double
  20. Dim B(19) As Double

  21. For I = 0 To m - 1
  22.     a(I) = 0
  23. Next I

  24.   
  25. If m > n Then m = n
  26. If m > 20 Then m = 20
  27.   
  28. Z = 0#
  29.   
  30. For I = 0 To n - 1
  31.     rdblAverageX = rdblAverageX + X(I)
  32.     Z = Z + X(I) / (1# * n)
  33. Next I

  34. rdblAverageX = rdblAverageX / n
  35.   
  36. B(0) = 1#
  37. D1 = 1# * n
  38. P = 0#
  39. C = 0#
  40.   
  41. For I = 0 To n - 1
  42.     P = P + (X(I) - Z)
  43.     C = C + Y(I)
  44. Next I
  45.   
  46. C = C / D1
  47. P = P / D1
  48. a(0) = C * B(0)
  49.   
  50. If m > 1 Then
  51. T(1) = 1#
  52. T(0) = (-1) * P
  53. D2 = 0#
  54. C = 0#
  55. G = 0#
  56. For I = 0 To n - 1
  57. Q = X(I) - Z - P
  58. D2 = D2 + Q * Q
  59. C = C + Y(I) * Q
  60. G = G + (X(I) - Z) * Q * Q
  61. Next I
  62.   
  63. C = C / D2
  64. P = G / D2
  65. Q = D2 / D1
  66. D1 = D2
  67. a(1) = C * T(1)
  68. a(0) = C * T(0) + a(0)
  69. End If
  70.   
  71. For J = 2 To m - 1
  72. S(J) = T(J - 1)
  73. S(J - 1) = (-1) * P * T(J - 1) + T(J - 2)
  74.   
  75. If J >= 3 Then
  76. For K = J - 2 To 1 Step -1
  77. S(K) = (-1) * P * T(K) + T(K - 1) - Q * B(K)
  78. Next K
  79. End If
  80.   
  81. S(0) = (-1) * P * T(0) - Q * B(0)
  82.   
  83. D2 = 0#
  84. C = 0#
  85. G = 0#
  86.   
  87. For I = 0 To n - 1
  88. Q = S(J)
  89.   
  90. For K = J - 1 To 0 Step -1
  91. Q = Q * (X(I) - Z) + S(K)
  92. Next K
  93.   
  94. D2 = D2 + Q * Q
  95. C = C + Y(I) * Q
  96. G = G + (X(I) - Z) * Q * Q
  97. Next I
  98.   
  99. C = C / D2
  100. P = G / D2
  101. Q = D2 / D1
  102. D1 = D2
  103. a(J) = C * S(J)
  104. T(J) = S(J)
  105.   
  106. For K = J - 1 To 0 Step -1
  107. a(K) = C * S(K) + a(K)
  108. B(K) = T(K)
  109. T(K) = S(K)
  110. Next K
  111. Next J
  112.   
  113. dt(0) = 0#
  114. dt(1) = 0#
  115. dt(2) = 0#
  116.   
  117. For I = 0 To n - 1
  118. Q = a(m - 1)
  119.   
  120. For K = m - 2 To 0 Step -1
  121. Q = a(K) + Q * (X(I) - Z)
  122. Next K
  123.   
  124. P = Q - Y(I)
  125.   
  126. If Abs(P) > dt(2) Then
  127. dt(2) = Abs(P)
  128. End If
  129. dt(0) = dt(0) + P * P
  130. dt(1) = dt(1) + Abs(P)
  131. Next I

  132. End Sub
复制代码
这是网路上公版的曲线拟合函数

它好像可以算到 N项M次方,不知道

没实验不知道准不准, 能不能用








96

主题

158

回帖

4

精华

核心会员

积分
6513
发表于 2012-6-14 08:41:13 | 显示全部楼层

下面是一个一元二次方程式的曲线拟合源代码
  1. Public Sub qxnh2() '最小二乘曲線擬合y=a+bx+cx^2

  2. Dim B, C, m, n, a(1 To 10, 1 To 10) As Double

  3. Dim I, J, K, d(10) As Double

  4. 'm = 14 '9 'm為數據個數

  5.     For I = 1 To 10 Step 1
  6.         d(I) = 0
  7.     Next I
  8.    

  9.     For I = 1 To m Step 1
  10.    
  11.         d(1) = d(1) + X(I)
  12.         a(1, 2) = d(1)
  13.         
  14.         d(2) = d(2) + X(I) ^ 2
  15.         a(1, 3) = d(2)
  16.         
  17.         d(3) = d(3) + Y(I)
  18.         a(1, 4) = d(3)
  19.         
  20.         d(4) = d(4) + X(I) ^ 3
  21.         a(2, 3) = d(4)
  22.         
  23.         d(5) = d(5) + X(I) * Y(I)
  24.         a(2, 4) = d(5)
  25.         
  26.         d(6) = d(6) + X(I) ^ 4
  27.         a(3, 3) = d(6)
  28.         
  29.         d(7) = d(7) + X(I) ^ 2 * Y(I)
  30.         a(3, 4) = d(7)
  31.         
  32.     Next I
  33.    
  34.    
  35.    
  36.     a(1, 1) = m
  37.     a(2, 1) = a(1, 2)
  38.     a(2, 2) = a(1, 3)
  39.     a(3, 1) = a(1, 3)
  40.     a(3, 2) = a(2, 3)
  41.    
  42.     n = 3 'n為行數
  43.     m = 4 'm為列數
  44.    
  45.     For K = 1 To n - 1 Step 1
  46.         For I = K + 1 To n Step 1
  47.             For J = K + 1 To m Step 1
  48.                 a(I, J) = a(I, J) - a(I, K) * a(K, J) / a(K, K)
  49.             Next J
  50.         Next I
  51.     Next K
  52.    
  53.    
  54.     Z(n) = a(n, m) / a(n, n)
  55.    
  56.    
  57.     For K = n - 1 To 1 Step -1
  58.         Z(K) = 0
  59.         For J = n To K + 1 Step -1
  60.             Z(K) = Z(K) + a(K, J) * Z(J)
  61.         Next J
  62.         Z(K) = (a(K, m) - Z(K)) / a(K, K)
  63.     Next K
  64.    
  65.    
  66.     xs(1) = Z(1)
  67.     xs(2) = Z(2)
  68.     xs(3) = Z(3)
  69.     xs(4) = 0
  70.    
  71. End Sub
复制代码

96

主题

158

回帖

4

精华

核心会员

积分
6513
发表于 2012-6-14 08:44:10 | 显示全部楼层
本帖最后由 diddom 于 2012-6-14 09:01 编辑
oopww 发表于 2012-6-13 20:01
变初级会员了!~~~
你这个用matlab绘制最还了!~~


我也是觉得用Matlab比较方便

不过 LZ 想用 VB控件实现,

所以玩看看, 玩得起来就开心一下{:soso_e113:}

有没有兴趣要顺便加入这 project{:soso_e113:}

1

主题

12

回帖

0

精华

铜牌会员

积分
34
 楼主| 发表于 2012-6-14 08:51:21 | 显示全部楼层
diddom 发表于 2012-6-14 08:41
下面是一个一元二次方程式的曲线拟合源代码

多谢大神

1

主题

12

回帖

0

精华

铜牌会员

积分
34
 楼主| 发表于 2012-6-14 09:03:32 | 显示全部楼层
本帖最后由 agoojje 于 2012-6-14 09:05 编辑
diddom 发表于 2012-6-14 08:44
我也是觉得用Matlab比较方便

不过 LZ 想用 VB控件实现,


大神先给我一个没拟合的P-R曲线的整合源程序吧。
今天有急用。

96

主题

158

回帖

4

精华

核心会员

积分
6513
发表于 2012-6-14 09:06:28 | 显示全部楼层
本帖最后由 diddom 于 2012-6-14 09:13 编辑
agoojje 发表于 2012-6-14 08:51
多谢大神


别一直谢我, Project 都还没完成呢 ><"

刚刚无意间发现的曲线拟合绘制控件

Splinevb.rar (164.69 KB, 下载次数: 7493)

有上传到 TotalVirus 验毒了,安全没毒


如果你想使曲线拟合能够很方便快捷,请使用Xeden的CtlPointsCurve.dll组件

http://blog.csdn.net/Xeden

摘要:使用自制CtlPointsCurve.dll组件实现样条曲线拟合.   对于现在数据采集重绘处理,很多情况下都用到了曲线重绘,而曲线生成的方法也有多种最简单的一种就是两点一线法,简单来说就是对每个采集点做直线连接,使到其趋向一曲线,这种方法的好处是保证数据的真实性,但同时也引申出很多问题.首先,采集点必须要足够多,否则的话就成了线段组,而并非曲线了,这样对于一些无法多点采集的技术领域,或者采集成本很高的技术领域来说,便无法满足其分析需求了.因此,产生了样条曲线的计算方法.   ......



96

主题

158

回帖

4

精华

核心会员

积分
6513
发表于 2012-6-14 09:16:41 | 显示全部楼层
agoojje 发表于 2012-6-14 09:03
大神先给我一个没拟合的P-R曲线的整合源程序吧。
今天有急用。

我试看看, 但要今天可能有困难

因为我连第三方绘图控件都还没熟悉

9

主题

210

回帖

0

精华

初来乍到

积分
904
发表于 2012-6-14 13:08:27 | 显示全部楼层
admin 发表于 2012-6-13 20:40
看核心会员要求:http://www.m5home.com/bbs/thread-4777-1-1.html

当初把你加入核心会员应该是管理员误 ...

。。。。
当初把你加入核心会员应该是管理员误操作。。。
没事了!~~~
你们慢慢玩啊!~~我只是围观者!~~但是你们当初失误也太大了吧!

96

主题

158

回帖

4

精华

核心会员

积分
6513
发表于 2012-6-14 16:51:35 | 显示全部楼层
本帖最后由 diddom 于 2012-6-14 17:01 编辑

绘图的部分我已经写好了

但没有曲线拟合,你先看一下

用 3m8.txt 当试验

在静态的部分,先选择档案,然後再"读取数据并计算"

再到 Pn曲线的绘点按钮按一下

风力机数据采集与处理2.rar (699.6 KB, 下载次数: 7720)

我顺便找了几个 PlotLineControl.ocx 这个 AC(Activex Control) 的 usage sample

放在 Form4~Form6,你可以玩玩看

96

主题

158

回帖

4

精华

核心会员

积分
6513
发表于 2012-6-16 12:10:43 | 显示全部楼层
try it

风力机数据采集与处理2.rar (712.94 KB, 下载次数: 7604)

96

主题

158

回帖

4

精华

核心会员

积分
6513
发表于 2012-6-17 02:59:00 | 显示全部楼层
希望你別被我是不是核心會員所影響

至少我們在這快樂一起討論程式是怎樣及如何寫{:soso_e113:}



您需要登录后才可以回帖 登录 | 加入我们

本版积分规则

快速回复 返回顶部 返回列表