USB-4751 - problem z licznikami

Pytania i odpowiedzi dotyczące sprzętu Advantech

Moderatorzy: Jacek Adamski, Marek Sikora

USB-4751 - problem z licznikami

Postprzez Marek320 » Pt, 17 sty 2014, 14:20

Witam.

Piszę program VB.net z wykorzystaniem A-DAQ PRO do w/w modułu.
Moduł posiada dwa liczniki, a mój problem wygląda tak:

Ponieważ po dodaniu kontrolki licznika w jej ustawieniach można obsłużyć tylko jedno wejście licznika musiałem dodać 2-gą taką kontrolkę ustawiając ja na 2-gie wejście.

Podaje sygnał 200Hz z jednego generatora na oba wejścia na raz.

I teraz kod czytania licznika w timerze co 10 s, żeby na pewno starczyło mu czasu na procedurkę:
Kod: Zaznacz cały
            AxAdvCounter2.Started = True
            AxAdvCounter1.Started = True
            While wyjscie
                AxAdvCounter1.ReadMeasurementValue(varData1, False)
                AxAdvCounter2.ReadMeasurementValue(varData2, False)  ' Co ciekawe gdy pominę to w tej pętli to varData2 jest "0"
                If (ilosc_impulsow_testu < varData1) Then
                    AxAdvCounter2.Started = False
                    AxAdvCounter1.Started = False
                    wyjscie = False
                End If
            End While
                AxAdvCounter1.ReadMeasurementValue(varData1, False)
                AxAdvCounter2.ReadMeasurementValue(varData2, False)


I tu nieprzyjemne zdziwienie - występuje poważna różnica impulsów, w dodatku pływająca, ale zawsze varData2 jest mniejszy od varData1 i dla ilosc_impulsow_testu = 100 mam varData1 w granicach 102 do 105 (to OK nie przeszkadza), ale varData2 w granicach 79 do 86.
Co dziwniejsze gdy zwiększe ilosc_impulsow_testu np do 500 różnica między licznikami rośnie i pływa między 30 a 50 impulsów.
Celowo poprzestawiałem komendy start i stop poszczególnych liczników, lecz nie zmieniło to znacząco sytuacji.
Impulsy na pewno dochodzą prawidło do wejść liczników - sprawdzone na oscyloskopie.

Wcześniej miałem kartę PCI z 4 licznikami i tam jedna komenda mogła na raz wystartować i zatrzymać 4-ry liczniki, więc działało to prawidłowo.

Proszę o podpowiedź, może coś robię nie tak. Co można z tym zrobić?
Marek320
 
Posty: 4
Dołączył(a): Pt, 17 sty 2014, 13:37

Re: USB-4751 - problem z licznikami

Postprzez Jarosław Molenda » Pn, 20 sty 2014, 14:45

Witam

W tym module niestety do odczytu pojedynczego kanału trzeba używać każdorazowo kontrolki EwentCountCtrl. Ze względu na to, na dwóch odczytywanych kanałach podłączonych do tego samego generatora, zawsze pojawią się niewielkie opóźnienia związane z czasem startu kontrolek.

Zmodyfikowałem dostarczany przez producenta przykład Counter_EventCounter i opisywanego przez Pana efektu nie uzyskałem. Podaje sygnał TTL z częstotliwością 200Hz. Poniżej screeny z moimi pomiarami ze wspomnianej aplikacji. Co prawda nie mam generatora umożliwiającego zadawanie danej liczby impulsów ale i tak wyraźnie widać, że pomiędzy pomiarem na pierwszym i drugim kanałem maksymalna różnica wynosi 3 impulsy, niezależnie od ilości odczytywanych impulsów. Stąd wniosek, że różnica ta pojawia się przy starcie. W pierwszym pomiarze startuje licznikami w kolejności 1 i 2. W przypadku zamiany tej kolejności wyraźnie widać korelacje z czasem startu – to drugi w kolejności licznik zawsze ma niewielki opóźnienie.

Reasumując. Proszę spróbować z dostarczanym przykładem od producenta. Jeżeli dalej będą problemy to będzie musiał Pan podesłać do nas kartę, o ile była kupowana u nas.

4751_counter1_counter2.jpg
(56.75 KiB) Pobrane 1747 razy

4751_counter2_counter1.jpg
(53.25 KiB) Pobrane 1733 razy
Jarosław Molenda
Elmark Automatyka Sp. z o.o.
Jarosław Molenda
 
Posty: 36
Dołączył(a): Pn, 29 wrz 2008, 13:07

Re: USB-4751 - problem z licznikami

Postprzez Marek320 » Śr, 22 sty 2014, 15:11

Jak by tak działało to by było super.
W linku film na którym widać na oscyloskopie sygnał z generatora po optoizolacji, już bezpośrednio na wejściach G1_In i G2_In i okienko programu który czyta liczniki w timerze i tu widać, że z każdym odczytem rośnie różnica pomiędzy licznikami.
http://youtu.be/YlJTpKmOZnU
Trochę się obcioł przy kopiowaniu na yotube, ale nie miałem czasu na poprawianie. 1 i 3 textbox to wartości liczników a textbox 2 to różnica między nimi.
I kod programiku w VB.net:

Kod: Zaznacz cały
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click

If Button3.Text = "Start" Then

Button3.Text = "Stop"

If AxAdvCounter2.Started = False Then

AxAdvCounter1.Started = True

AxAdvCounter2.Started = True

End If

Timer1.Enabled = True

Else

Button3.Text = "Start"

AxAdvCounter1.Started = False

AxAdvCounter2.Started = False

Timer1.Enabled = False

End If

End Sub

Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick

Dim varData1 As Object = 0

Dim varData2 As Object = 0

Dim l_A As System.UInt32 = 0

Dim l_B As System.UInt32 = 0

Dim a As Integer = 0

AxAdvCounter1.ReadMeasurementValue(varData1, False)

AxAdvCounter2.ReadMeasurementValue(varData2, False)

l_A = varData1

l_B = varData2

TextBox1.Text = l_a

TextBox2.Text = l_B

a = varData1 - varData2

TextBox3.Text = a

End Sub

Marek320
 
Posty: 4
Dołączył(a): Pt, 17 sty 2014, 13:37

Re: USB-4751 - problem z licznikami

Postprzez Jarosław Molenda » Śr, 22 sty 2014, 16:04

Cóż, widzę że używa Pan starych kontrolek A-DAQ PRO. Pański program wygląda na prawidłowy i być może faktycznie jest tu jakiś błąd w bibliotekach, ale na to już nic nie poradzę. Producent wprowadził nowe biblioteki Net ze dwa lata temu i ze starymi już nic nie zrobi. Proszę zainstalować nowe utility oraz biblioteki DAQNavi z naszej strony http://support.elmark.com.pl/advantech/ ... erver2008/ . Tak jak Panu udowadniałem w poprzednim poście u mnie zliczanie działa poprawnie. Poniżej zamieszczam mój kod z przykładu o którym wspominałem.

Imports System.Collections.Generic
Imports System.ComponentModel
Imports System.Data
Imports System.Drawing
Imports System.Text
Imports System.Windows.Forms
Imports System.Collections
Imports System.Drawing.Drawing2D
Imports Automation.BDaq

Partial Public Class EventCounterForm
Inherits Form
Private m_ECisRunning As Boolean = True
Private m_isEventCountingReset As Boolean = True
Const m_maxOfCounterValueList As Integer = 7
' The max value of lines of CounterValueList.
Public Sub New()
InitializeComponent()
End Sub

Private Sub EventCounterForm_Load(ByVal sender As Object, ByVal e As EventArgs) Handles MyBase.Load
'The default device of project is demo device, users can choose other devices according to their needs.
If Not m_EventCountCtrl1.Initialized Then
MessageBox.Show("Please select a device in control property!")
Me.Close()
Return
End If

If Not m_EventCountCtrl.Initialized Then
MessageBox.Show("Please select a device in control property!")
Me.Close()
Return
End If

Dim t As Integer = m_EventCountCtrl1.Features.ChannelCountMax
'set title of the form.

Dim t1 As Integer = m_EventCountCtrl.Features.ChannelCountMax
'set title of the form.

Dim description As String = m_EventCountCtrl1.SelectedDevice.Description
Me.Text = "Event Counter - Run(" & description & ")"

Dim description1 As String = m_EventCountCtrl.SelectedDevice.Description
Me.Text = "Event Counter - Run(" & description1 & ")"

Timer1.Enabled = False
Stop_button.Enabled = False
End Sub

Private Sub timer1_Tick(ByVal sender As Object, ByVal e As EventArgs) Handles Timer1.Tick
Try
If m_ECisRunning Then
' Show event counting value
CurCounterValue.Text = m_EventCountCtrl1.Value.ToString()
CurCounterValue1.Text = m_EventCountCtrl.Value.ToString()
End If
Catch ex As Exception
ShowErrorMessage(ex)
End Try
End Sub

Private Sub Start_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Start_button.Click
If m_isEventCountingReset = True Then
CounterValueList.Items.Clear()
Try
m_EventCountCtrl1.Enabled = True
m_EventCountCtrl.Enabled = True
m_ECisRunning = True
If False = Timer1.Enabled Then
Timer1.Start()
End If
Stop_button.Enabled = True
Start_button.Text = "Latch"
m_isEventCountingReset = False
Catch ex As Exception
ShowErrorMessage(ex)
End Try
Else
CounterValueList.Items.Add(CurCounterValue1.Text)
CounterValueList.Items.Add(CurCounterValue.Text)
If CounterValueList.Items.Count > m_maxOfCounterValueList Then
CounterValueList.Items.RemoveAt(0)
End If
End If
End Sub

Private Sub Stop_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Stop_button.Click
' Stop event counting
Try
m_EventCountCtrl1.Enabled = False
m_EventCountCtrl.Enabled = False
m_ECisRunning = False
Catch ex As Exception
ShowErrorMessage(ex)
End Try

m_isEventCountingReset = True
Start_button.Enabled = True
Start_button.Text = "Start"
Stop_button.Enabled = False
'stop the timer
If False = m_ECisRunning Then
Timer1.Enabled = False
End If
End Sub
Private Shared Sub ShowErrorMessage(ByVal e As Exception)
Dim errorInfo As String
errorInfo = "There's some error happened, the error information: "
MessageBox.Show(errorInfo & e.Message)
End Sub
End Class
Jarosław Molenda
Elmark Automatyka Sp. z o.o.
Jarosław Molenda
 
Posty: 36
Dołączył(a): Pn, 29 wrz 2008, 13:07

Re: USB-4751 - problem z licznikami

Postprzez Marek320 » Cz, 23 sty 2014, 08:36

Na jakiej wersji kompilujesz ten program.
Ja musiałem cofnąć się do VB 2005 bo wyższe miały problem z tymi kontrolkami.
Marek320
 
Posty: 4
Dołączył(a): Pt, 17 sty 2014, 13:37

Re: USB-4751 - problem z licznikami

Postprzez Jarosław Molenda » Cz, 23 sty 2014, 08:41

Ja kompilowałem na Visual Basic 2010 Express.
Jarosław Molenda
Elmark Automatyka Sp. z o.o.
Jarosław Molenda
 
Posty: 36
Dołączył(a): Pn, 29 wrz 2008, 13:07

Re: USB-4751 - problem z licznikami

Postprzez Marek320 » Cz, 23 sty 2014, 12:03

Bardzo dziękuję Panie Jarku za pomoc.
Problem jak zwykle był prozaiczny i dopiero informacja o podpięciu bezpośrednio generatora z sygnałem TTL dała mi do myślenia.
Chodzi o to, że jak zwierałem przez tranzystor optoizolacji masę modułu i wejście C1_In i C2_In. Coś liczyło ale napięcie na C1_In i C2_In było w granicach 1,3V i coś tu musiało pływać, po podpięciu rezystorka pull up 10K do + 5 V wszystko chodzi jak trzeba.

Pozdrawiam i jeszcze raz dziękuję za pomoc.
Marek320
 
Posty: 4
Dołączył(a): Pt, 17 sty 2014, 13:37


Powrót do Advantech



Kto przegląda forum

Użytkownicy przeglądający to forum: Brak zalogowanych użytkowników i 2 gości

cron