flyhreat 发表于 2007-1-21 20:54:15

求教:基于虚拟仪器测量织机张力系统

急!!!拜托各位好心人了!!!

lgh269 发表于 2007-1-21 23:50:08

织机张力,首先这个数据你怎么采集呢,
你最好能说清楚点.因为大家并不一定做的是一样的事情
清楚了才好帮你

flyhreat 发表于 2007-1-22 21:25:39

求教:基于虚拟仪器测量织机张力系统

通过传感器测量织机经线上的张力得到模拟信号,经单片机把模拟信号转换为数字信号,并将数据进行分析处理,通过USB接口把数据传到PC机上,通过LABVIEW软件分析处理,把信号显示在屏幕上,供生产操作者直观地观察张力及其变化

这是我们项目的大体流程,我们现在正在做labview这一块,希望通过调用dll库函数把采集到的数据在xy graphy上显示出来

最后要显示包括开始采集的主轴角度,采样间隔角度,最大/最小张力以及平均值等数据

我们的困难是labview与usb的数据连接,调用dll库函数这些

ps:我们不知道怎么传附件如果可以我们想截图给你们看下这样更直观一些

我们的邮箱是:flyhreat@163.com    谢谢各位啦:)

飞雨天 发表于 2007-1-22 21:40:51

1:labview和usb的连接,因为时间关系,我就不给你找帖子了,cpubbs老大曾经写过一个教材,你去搜索下应该能发现的;
2:调用dll,labview有提供这个功能,你呢,首先要做的就是熟悉这个dll的功能,它都提供哪些函数,这些个函数的proto type是怎么样的,然后自己去找下labview中关于这个功能的help,节点名称应该是 call library node,主要看下数据类型之间的相互转化
3:如果还有问题,欢迎讨论~~~:)

flyhreat 发表于 2007-1-22 22:18:18

以下是 dll库函数自带的vb程序

里面有关于这个dll库函数提供的一些功能函数的程序代码

我们觉得不太理解能不能帮我们看一下详细说明下这些功能函数

大恩大德,没齿难忘!!!!!!!!!

flyhreat 发表于 2007-1-22 22:18:35

Option Explicit

' Declare statements for all the functions in the SiF32xUSb DLL
' NOTE: These statements assume that the DLL file is located in
'       the same directory as this project.
'       If you change the location of the DLL, be sure to change the location
'       in the declare statements also.
Public Declare Function SI_GetNumDevices Lib "SiUSBXp.dll" (ByRef lpwdNumDevices As Long) As Integer
Public Declare Function SI_GetProductString Lib "SiUSBXp.dll" (ByVal dwDeviceNum As Long, ByRef lpvDeviceString As Byte, ByVal dwFlags As Long) As Integer
Public Declare Function SI_Open Lib "SiUSBXp.dll" (ByVal dwDevice As Long, ByRef cyHandle As Long) As Integer
Public Declare Function SI_Close Lib "SiUSBXp.dll" (ByRef cyHandle As Long) As Integer
Public Declare Function SI_Read Lib "SiUSBXp.dll" (ByVal cyHandle As Long, ByRef lpBuffer As Byte, ByVal dwBytesToRead As Long, ByRef lpdwBytesReturned As Long) As Integer
Public Declare Function SI_Write Lib "SiUSBXp.dll" (ByVal cyHandle As Long, ByRef lpBuffer As Byte, ByVal dwBytesToWrite As Long, ByRef lpdwBytesWritten As Long) As Integer
Public Declare Function SI_SetTimeouts Lib "SiUSBXp.dll" (ByVal dwReadTimeout As Long, ByVal dwWriteTimeout As Long) As Integer
Public Declare Function SI_GetTimeouts Lib "SiUSBXp.dll" (ByRef lpdwReadTimeout As Long, ByRef lpdwWriteTimeout As Long) As Integer
Public Declare Function SI_CheckRXQueue Lib "SiUSBXp.dll" (ByVal cyHandle As Long, ByRef lpdwNumBytesInQueue As Long, ByRef lpdwQueueStatus As Long) As Integer

'Masks for the serial number and description
Public Const SI_RETURN_SERIAL_NUMBER = &H0
Public Const SI_RETURN_DESCRIPTION = &H1

'Masks for return values from the device
Public Const SI_SUCCESS = &H0
Public Const SI_DEVICE_NOT_FOUND = &HFF
Public Const SI_INVALID_HANDLE = &H1
Public Const SI_READ_ERROR = &H2
Public Const SI_RX_QUEUE_NOT_READY = &H3
Public Const SI_WRITE_ERROR = &H4
Public Const SI_RESET_ERROR = &H5
Public Const SI_INVALID_BUFFER = &H6
Public Const SI_INVALID_REQUEST_LENGTH = &H7
Public Const SI_DEVICE_IO_FAILED = &H8

Public Const SI_QUEUE_NO_OVERRUN = &H0
Public Const SI_QUEUE_OVERRUN = &H1
Public Const SI_QUEUE_READY = &H2

Public Const SI_MAX_DEVICE_STRLEN = 256
Public Const SI_MAX_READ_SIZE = 64
Public Const SI_MAX_WRITE_SIZE = 64

Public Const INVALID_HANDLE_VALUE = &H1

Public Const MAX_PACKET_SIZE = &H40
Public Const MAX_WRITE_PKTS = &H8

Public Const FT_READ_MSG = &H0
Public Const FT_WRITE_MSG = &H1
Public Const FT_READ_ACK = &H2
Public Const FT_MSG_SIZE = &H3

'Variables used within the project
Global hUSBDevice'global handle that is set when connected with the usb device
Global Status      'status, value to set when communicating with the board to determine success
Global TempString'tempstring, contains the value of the file when performing a read

Public Const IOBufSize = 12
Global IOBuf(IOBufSize) As Byte 'io buffer; bits are defined as follows:
'IOBuf(0) = LED1
'IOBuf(1) = LED2
'IOBuf(2) = Port
'IOBuf(3) = Analog1
'IOBuf(4) = Analog2
'IOBuf(5,6,7) = Unused
'IOBuf(8,9,10,11) = Number Of Interrupts

Public Function ConvertToVBString(Str)

    Dim NewString As String
    Dim i As Integer
   
    'for the received string array, loop until we get
    'a 0 char, or until the max length has been obtained
    'then add the ascii char value to a vb string
    i = 0
    Do While (i < SI_MAX_DEVICE_STRLEN) And (Str(i) <> 0)
      NewString = NewString + Chr$(Str(i))
      i = i + 1
    Loop
   
    ConvertToVBString = NewString
   
End Function


Public Function DeviceWrite(Buffer() As Byte, dwSize As Long, lpdwBytesWritten As Long, dwTimeout As Long) As Boolean
    Dim TmpReadTO As Long
    Dim TmpWriteTO As Long
    Dim Stat As Integer
    Dim WriteStatus As Integer
   
    'save timeout values to replace after the write
    Stat = SI_GetTimeouts(TmpReadTO, TmpWriteTO)
    Stat = SI_SetTimeouts(0, dwTimeout)
   
    WriteStatus = SI_Write(hUSBDevice, Buffer(0), dwSize, lpdwBytesWritten)
   
    'replace timeouts
    Stat = SI_SetTimeouts(TmpReadTO, TmpWriteTO)
   
    If WriteStatus = SI_SUCCESS Then
      DeviceWrite = True
    Else
      DeviceWrite = False
    End If

End Function



Public Function DeviceRead(Buffer() As Byte, dwSize As Long, lpdwBytesRead As Long, dwTimeout As Long) As Boolean

    Dim TmpReadTO As Long
    Dim TmpWriteTO As Long
    Dim Stat As Integer
    Dim ReadStatus As Integer
    Dim QueueStatus As Long
    Dim BytesInQueue As Long
    Dim QueueStatNAndQueueReady As Long
    Stat = SI_SUCCESS
    QueueStatus = SI_QUEUE_NO_OVERRUN
    BytesInQueue = 0
   
    'save the timeout values to replace after the read
    Stat = SI_GetTimeouts(TmpReadTO, TmpWriteTO)
   
    If dwTimeout = 0 Then
      'wait forever until queue ready
      'QueueStatNAndQueueReady = Not (QueueStatus And SI_QUEUE_READY)
      Do While (Stat = SI_SUCCESS) And (QueueStatus <> SI_QUEUE_READY)
            Stat = SI_CheckRXQueue(hUSBDevice, BytesInQueue, QueueStatus)
            'QueueStatNAndQueueReady = Not (QueueStatus And SI_QUEUE_READY)
      Loop
    Else
      'set a timeout for the read
      Stat = SI_SetTimeouts(dwTimeout, 0)
    End If

    'read in the ack
    If Stat = SI_SUCCESS Then
      ReadStatus = SI_Read(hUSBDevice, Buffer(0), dwSize, lpdwBytesRead)
    End If
   
    'restore timeouts
    Stat = SI_SetTimeouts(TmpReadTO, TmpWriteTO)

    If ReadStatus = SI_SUCCESS Then
      DeviceRead = True
    Else
      DeviceRead = False
    End If
   
End Function

Public Sub MemSet(Buffer() As Byte, Value As Byte, Amount As Long)
   
    'this function sets all elements of on array to 0
    Dim i
   
    For i = 0 To (Amount - 1)
      Buffer(i) = Value
    Next
   
End Sub

lgh269 发表于 2007-1-23 18:04:47

Public Declare Function SI_GetTimeouts Lib "SiUSBXp.dll" (ByRef lpdwReadTimeout As Long, ByRef lpdwWriteTimeout As Long) As Integer
首先你不用讲的那么....这里是大家交流的地方
我就拿一个给你讲一吧
在LV里,你通过CALL节点设用这个DLL,
这里ByRef lpdwReadTimeout As Long指 lpdwReadTimeout 为I32型,整个函数返回值为I32型
当然一些特殊的有可能是U32,这个你可以试。
Public Const SI_QUEUE_READY = &H2
这个在VB调用Const SI_QUEUE_READY 的地方在LV中将16进制的2换进去,
Public Const SI_MAX_DEVICE_STRLEN = 256
这个则为十进直接换进去
对于LV中DLL使用
你可以看下面的连接
http://www.cpubbs.com/bbs/viewthread.php?tid=1806&highlight=dl

flyhreat 发表于 2007-1-23 23:15:39

非常感谢那些资料我们已经详细看过

但是我们这个项目不用数据采集卡,是用USB在调用dll库函数的时候我们不知如何下手

望高手指点迷津!:)

ligu229 发表于 2007-10-24 16:36:13

我也是遇到一样的问题
我dll里面的函数会调用了
就是SI_write(1,2,3,4)的第2个参数不会设置,
有谁做过请指点我一下
谢谢了!

rongcheng0501@1 发表于 2007-10-25 08:44:32

在LV里面调用dll相当麻烦了
哎!
我做过一个这样的
首先你要对dll文件本身有一定的了解
对于函数的输入输出数据要有一定的认识
然后参考头文件进行配置参数
我懂的也不多
做出来纯熟偶然
呵呵
不过大部分数据都是I32之类的
反复尝试,
相信你会成功的
呵呵

rongcheng0501@1 发表于 2007-10-25 08:49:42

其实关于USB的问题
是那么的USB协议不符合USBTMC协议
而USBTMC是2003年列入VISA的
现在的VISA要么是NI编写的
要么是一个美国仪器公司编写的
我们国人没有自己开发的VISA
都要设计成符合他们的
郁闷
不过我相信我们以后会有的
呵呵
因为有俺......


们公司
:lol
页: [1]
查看完整版本: 求教:基于虚拟仪器测量织机张力系统