Fetstil Fetstil Kursiv Understrykning linje färgläggning tabellverk Punktlista Nummerlista Vänster Centrerat högerställt Utfyllt Länk Bild htmlmode
  • Forum & Blog
    • Forum - översikt
      • .Net
        • asp.net generellt
        • c#
        • vb.net
        • f#
        • silverlight
        • microsoft surface
        • visual studio .net
      • databaser
        • sql-server
        • databaser
        • access
        • mysql
      • mjukvara klient
        • datorer och komponenter
        • nätverk, lan/wan
        • operativsystem
        • programvaror
        • säkerhet, inställningar
        • windows server
        • allmänt
        • crystal reports
        • exchange/outlook
        • microsoft office
      • mjukvara server
        • active directory
        • biztalk
        • exchange
        • linux
        • sharepoint
        • webbservers
        • sql server
      • appar (win/mobil)
      • programspråk
        • c++
        • delphi
        • java
        • quick basic
        • visual basic
      • scripting
        • asp 3.0
        • flash actionscript
        • html css
        • javascript
        • php
        • regular expresssion
        • xml
      • spel och grafik
        • DirectX
        • Spel och grafik
      • ledning
        • Arkitektur
        • Systemutveckling
        • krav och test
        • projektledning
        • ledningsfrågor
      • vb-sektioner
        • activeX
        • windows api
        • elektronik
        • internet
        • komponenter
        • nätverk
        • operativsystem
      • övriga forum
        • arbete karriär
        • erbjuda uppdrag och tjänster
        • juridiska frågor
        • köp och sälj
        • matematik och fysik
        • intern information
        • skrivklåda
        • webb-operatörer
    • Posta inlägg i forumet
    • Chatta med andra
  • Konto
    • Medlemssida
    • Byta lösenord
    • Bli bonsumedlem
    • iMail
  • Material
    • Tips & tricks
    • Artiklar
    • Programarkiv
  • JOBB
  • Student
    • Studentlicenser
  • KONTAKT
    • Om pellesoft
    • Grundare
    • Kontakta oss
    • Annonsering
    • Partners
    • Felanmälan
  • Logga in

Hem / Forum översikt / inlägg

Posta nytt inlägg


Problem med att hämta värde deklarerat som TIME!

Postades av 2008-11-13 12:43:34 - Joel Alexandersson, i forum vb.net, Tråden har 56 Kommentarer och lästs av 1579 personer

Hej! Jag har problem med att hämta ett värde som i min PLC är deklarerad som TIME

vi säger att variablen heter "TestTid"

så här deklareras den i min PLC:

TestTid: TIME;

"TestTid" skrivs såhär i PLC:n:

TestTid = T#0ms

Hur dekalrerar jag en variabel (i det här fallet " VarInstOklangd ") i vb.Net som kan hämta den tiden?

så här ser det ut när jag hämtar en variabel i vb.net från PLC:

VarInstOklangd = TcClientSync.ReadVar(".HMI_lrJustBitBak")
lblInstOklangd.Text = CDec(VarInstOklangd)


Svara

Sv: Problem med att hämta värde deklarerat som TIME!

Postades av 2008-11-13 13:14:20 - Cecilia Wirén

För att kunna svara på detta behöver vi veta vilken PLC dialekt du använder/märket på PLC eller ännu bättre specen för data typen TIME om du har nån manual


Svara

Sv:Problem med att hämta värde deklarerat som TIME!

Postades av 2008-11-13 13:24:52 - Cecilia Wirén

Hittade nån manual som verkade stämma med värdet T#0ms. Där står att det är en positiv 32bit och motsvarande datatyp i .Net är då UInt32 - UInteger


Svara

Sv:Problem med att hämta värde deklarerat som TIME!

Postades av 2008-11-13 13:26:01 - Joel Alexandersson

Jag kör med Beckhoffs TwinCAT.

Det jag kan få fram är:

TIME
Time is given in milliseconds and handled internally like DWORD.

Type Lower bound Upper bound Memory use
TIME T#0ms T#71582m47s295ms 32 Bit


TIME constants can be declared in TwinCAT PLC Control. These are generally used to operate the timer in the standard library. A TIME constant is always made up of an initial "t" or "T" (or "time" or "TIME" spelled out) and a number sign "#".This is followed by the actual time declaration which can include days (identified by "d"), hours (identified by "h"), minutes (identified by "m"), seconds (identified by "s") and milliseconds (identified by "ms"). Please note that the time entries must be given in this order according to length (d before h before m before s before m before ms) but you are not required to include all time increments.





Svara

Sv: Problem med att hämta värde deklarerat som TIME!

Postades av 2008-11-13 13:35:02 - Cecilia Wirén

Inte riktigt samma... den jag hittade var TIME angivet helt i ms


Svara

Sv:Problem med att hämta värde deklarerat som TIME!

Postades av 2008-11-13 13:39:42 - Cecilia Wirén

Du behöver plocka ut den som en String och sedan maska fram värdet för dag, timme, minut och ms och sen skapa en DateTime typ för att använda i .Net miljön.


Svara

Sv:Problem med att hämta värde deklarerat som TIME!

Postades av 2008-11-13 13:40:30 - Joel Alexandersson

något fungerar iaf. för jag får in en nolla i min textbox. men den ändrar sig inte när värdet ändras i PLC:n jag kan inte heller ändra den från mitt program i vb.net Har du någon aning om vad det kan bero på?


Svara

Sv: Problem med att hämta värde deklarerat som TIME!

Postades av 2008-11-13 13:42:03 - Joel Alexandersson

Textboxen ska bara visa ms inget mer.


Svara

Sv:Problem med att hämta värde deklarerat som TIME!

Postades av 2008-11-13 13:51:18 - Cecilia Wirén

Om du plockar ut den som en string istället kommer du antagligen se T#0ms och sen när den ändras (tex) T#253ms vet ju inte riktigt hur PLC programmet fungerar men risken är att du kommer få värden som T#5s156ms, men får du inte det så är det enklare.

Dim VarInstOklangd as String
VarInstOklangd = TcClientSync.ReadVar(".HMI_lrJustBitBak") 
lblInstOklangd.Text = VarInstOklangd


För att ändra värdet från .Net antar jag att du skriver
TcClientSync.WriteVar(".HMI_lrJustBitBak","100")

eller liknande, skriv istället
<code>
TcClientSync.WriteVar(".HMI_lrJustBitBak","T#100ms")
</code>
så som det står i specen att TIME typen skall skrivas

För att sedan läsa behöver du plocka ut det som står mellan # och ms. Finns flera sätt men tex:
Dim VarInstOklangd as String
VarInstOklangd = TcClientSync.ReadVar(".HMI_lrJustBitBak") 
lblInstOklangd.Text = VarInstOklangd.Substring(2, VarInstOklangd.Length - 4)

Men om den också visar d,m eller s i TIME så blir det lite mer komplext, detta kan du kontrollera med den första kodsnutten eller om du VET att PLC aldrig sätter sådana värden.


Svara

Sv: Problem med att hämta värde deklarerat som TIME!

Postades av 2008-11-13 14:01:25 - Joel Alexandersson

hm..programmet stängs bara ner ändå utan någo felmeddelande. jag gjorde en ny kod och såhär ser koden ut nu. du kasnek ser något fel.


    Dim varTime As String

        'Time - HÄMTA
        varTime = TcClientSync.ReadVar(".HMI_TestTid")
        lblTime.Text = varTime.substring(2, varTime.length - 4)


   'Time - SKRIV

    Private Sub lblTime_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles lblTime.TextChanged
        If (lblTime.Text <> "") Then
            varTime = "T#100ms"
            Call TcClientSync.WriteVar(".HMI_TestTid", varTime)
            lblTime.Text = CUInt(varTime)
        End If
    End Sub


Svara

Sv:Problem med att hämta värde deklarerat som TIME!

Postades av 2008-11-13 14:11:32 - Cecilia Wirén

låter underligt att det stänger ner utan felmeddelande ...
Först vad visas i rutan om du bara visar värdet som det är utan att köra subString?

Du kan inte göra
lblTime.Text = CUInt(varTime) 'CUInt("T#100ms")
Men
lblTime.Text = varTime.substring(2, varTime.length - 4)
fungerar

Stänga ner utan felmeddelande - brukar kunna orsakas av att det står End nånstans i koden (utan nåt mer tex End If).


Svara

Sv: Problem med att hämta värde deklarerat som TIME!

Postades av 2008-11-13 14:23:11 - Joel Alexandersson

Du menar så här eller?


    Dim varTime As String

        'Time - HÄMTA
        varTime = TcClientSync.ReadVar(".HMI_TestTid")
        lblTime.Text = varTime.Substring(2, varTime.Length - 4)



    Private Sub lblTime_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles lblTime.TextChanged
        'Time - SKRIV
        If (lblTime.Text <> "") Then
            varTime = "T#100ms"
            Call TcClientSync.WriteVar(".HMI_TestTid", varTime)
            lblTime.Text = varTime.Substring(2, varTime.Length - 4)
        End If
    End Sub



fungerar ändå inte. det avslutar väl inte helt utan felmeddelande. men utan ett jag kan göra något med iaf. Jag får bara upp att mitt projekt har stött på ett problem och måste avslutas.


Svara

Sv:Problem med att hämta värde deklarerat som TIME!

Postades av 2008-11-13 14:29:36 - Cecilia Wirén

Ja

Har du inte möjlighet att sätta break-points o steg för att se vart det går fel?

Testa att ta bort TextChanged funktionen och låt det stå:

varTime = TcClientSync.ReadVar(".HMI_TestTid")
lblTime.Text = varTime

För att se om du verkligen får "T#0ms" från PLC


Svara

Sv: Problem med att hämta värde deklarerat som TIME!

Postades av 2008-11-13 14:35:55 - Joel Alexandersson

Nu stängs det inte ner. Men det visas inget i textboxen nej... så det är något problem med hämtningen. Vilket jag gör precis överallt i mitt program där det inte är några problem. väldigt mysko.


Svara

Sv:Problem med att hämta värde deklarerat som TIME!

Postades av 2008-11-13 14:41:30 - Cecilia Wirén

Test om

   
 Dim varTime As UInterger

        'Time - HÄMTA
        varTime = TcClientSync.ReadVar(".HMI_TestTid")
        lblTime.Text = varTime


    Private Sub lblTime_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles lblTime.TextChanged
        'Time - SKRIV
        If (lblTime.Text <> "") Then
            varTime = "100"
            Call TcClientSync.WriteVar(".HMI_TestTid", varTime)
            lblTime.Text = varTime        
        End If
    End Sub

fungerar bättre

Min känsla är att det kraschar vid WriteVar, så steg två är att se om en borkommentering av den raden förhindrar en krasch.


Svara

Sv: Problem med att hämta värde deklarerat som TIME!

Postades av 2008-11-13 14:47:42 - Joel Alexandersson

Fungerar inte heller faktiskt. visar bara en tom textbox när jag ska skriva i den så stängs programmet bara ner utan något felmeddelande.


Svara

Sv: Problem med att hämta värde deklarerat som TIME!

Postades av 2008-11-13 14:50:48 - Joel Alexandersson

oj! nu glömde jag att deklarera om variablen till Uinteger. så nu visar textboxen "100" hur går jag vidare nu då? och vad var fel?


Svara

Sv:Problem med att hämta värde deklarerat som TIME!

Postades av 2008-11-13 15:14:45 - Cecilia Wirén

TIME representeras som en DWORD/UInt i PLC där av att vi inte kunde ta en sträng, den texten som stod där handlar om hur man skall skriv i PLC för att tilldela den nya värden.

Med att gå vidare antar jag att du vill att värdet skall ändras i PLC:n när du ändrar i textboxen?

Private Sub lblTime_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles lblTime.TextChanged
If (lblTime.Text <> "") Then
Try
varTime = CUInt(lblTime.Text)
Call TcClientSync.WriteVar(".HMI_TestTid", varTime)
Catch 'Ifall man skriver nåt annat än siffror, kommer dock att fånga även om WriteVar går fel
End Try
End If
End Sub


Svara

Sv: Problem med att hämta värde deklarerat som TIME!

Postades av 2008-11-13 15:37:50 - Joel Alexandersson

tyvärr hämtar den fortfarande bara 0. Då även om jag ändrar i PLC:n istället innan jag startar prgrammet. så ajg vet inte riktigt vart han får nollan ifrån. går heller inte att skriva nytt värde till plc:n.


Svara

Sv: Problem med att hämta värde deklarerat som TIME!

Postades av 2008-11-13 17:39:48 - Jan Bulér

Värdet lagras som ms men när man deklarerat en variabel som TIME typ så presenterar systemet värdet formaterat i m s ms etc. Råvärdet är dock fortfarande lagrat i ms.

Enligt manualen:
TIME, Time is given in milliseconds and handled internally like DWORD

Type Lower bound Upper bound Memory use
TIME T#0ms T#71582m47s295ms 32 Bit
DWORD 0 Max=4294967295 32 Bit

Hittade även detta som är viktigt att ta i beaktning för att kommunikationen ska bli rätt.: "All numbers are stored in "little endian" byte (Intel) sequence." till skillnad från t ex Siemens Simatic PLC som använder sig av Big-endian.

Lite "endian"-info http://www.cs.umass.edu/~verts/cs32/endian.html




Svara

Sv:Problem med att hämta värde deklarerat som TIME!

Postades av 2008-11-14 07:47:17 - Joel Alexandersson

ok.. Och hur menar du att jag ska göra då?


Svara

Sv: Problem med att hämta värde deklarerat som TIME!

Postades av 2008-11-14 08:54:18 - Cecilia Wirén

Bra Jan, det hade jag aldrig hittat!
Joel du har svaret längst ner på länken du fick, där finns två olika varianter på att omvandla värdet så det blir rätt (välj den du förstår bäst).

Ungefär såhär behöver du göra

Läsa:
Läst in från PLC in i en UInt
Använd funktionen för omvandling och stoppa in resultatet i en ny UInt
Använd värdet (lägg det i label)

Skriva:
Lägg värdet du vill sätt i en UInt
Använd funktionen för omvandling och stoppa in resultatet i en ny UInt
Skriv ner värdet i PLC:n


Svara

Sv:Problem med att hämta värde deklarerat som TIME!

Postades av 2008-11-17 07:27:37 - Joel Alexandersson

ok ok. Men hur skriver jag det i .NET? jag får bara massa fel


Svara

Sv: Problem med att hämta värde deklarerat som TIME!

Postades av 2008-11-17 08:42:35 - Cecilia Wirén

Du får ju så klart skriva om den lite så den passar vb.net

    Private Function Reverse(ByVal n As UInteger) As UInteger
        Dim B0, B1, B2, B3 As Byte
        B0 = n Mod 256
        n = n \ 256
        B1 = n Mod 256
        n = n \ 256
        B2 = n Mod 256
        n = n \ 256
        B3 = n Mod 256
        Reverse = (((B0 * 256 + B1) * 256 + B2) * 256 + B3)
    End Function


Svara

Sv:Problem med att hämta värde deklarerat som TIME!

Postades av 2008-11-17 10:09:23 - Joel Alexandersson

ja jag är ju rätt så trög när det gäller det här så du får nog förklara lite mer. jag lägger in det du skrev i koden men vad skriver jag här då?

        varTime = TcClientSync.ReadVar(".HMI_TestTid")
        lblTime.Text = varTime



    Private Sub lblTime_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles lblTime.TextChanged
        If (lblTime.Text <> "") Then
            varTime = CUInt(lblTime.Text)
            Call TcClientSync.WriteVar(".HMI_TestTid", varTime)
            lblTime.Text = CUInt(varTime)
        End If

    End Sub


Svara

Sv: Problem med att hämta värde deklarerat som TIME!

Postades av 2008-11-17 10:12:24 - Cecilia Wirén

        Dim varTime2 as Uinteger

        varTime = TcClientSync.ReadVar(".HMI_TestTid")
        varTime2 = Reverse(varTime)
        lblTime.Text = varTime2



    Private Sub lblTime_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles lblTime.TextChanged
        If (lblTime.Text <> "") Then
            varTime = CUInt(lblTime.Text)
            varTime2 = Reverse(varTime)
            Call TcClientSync.WriteVar(".HMI_TestTid", varTime2)
            lblTime.Text = varTime
        End If

    End Sub


Svara

Sv:Problem med att hämta värde deklarerat som TIME!

Postades av 2008-11-17 10:18:57 - Joel Alexandersson

ok tack så mycket.

Det är något problem bara. Jag får inte upp några felmeddelande och det kraschar bara igen. Finns det något ajg kan skriva för att få upp vad som är fel?


Svara

Sv: Problem med att hämta värde deklarerat som TIME!

Postades av 2008-11-17 11:17:13 - Cecilia Wirén

try-catch

http://msdn.microsoft.com/en-us/library/fk6t46tz(VS.71).aspx


Svara

Sv:Problem med att hämta värde deklarerat som TIME!

Postades av 2008-11-17 11:36:25 - Joel Alexandersson

ok. nu har jag lyckats komma så långt att jag kan ändra värdet i plc:n och det ändras också i textboxen. men itne till det värdeet ajg vill ha. När ajg skriver "1" i plc:n så får jag "16777216" i textboxen. vad beror det på? samtidigt när jag vill skriva in ett nytt värde från min textbox till plc:n så ändras värdet till en nolla.


Svara

Sv: Problem med att hämta värde deklarerat som TIME!

Postades av 2008-11-17 11:39:52 - Cecilia Wirén

visa din kod hur den ser ut nu


Svara

Sv:Problem med att hämta värde deklarerat som TIME!

Postades av 2008-11-17 11:42:42 - Joel Alexandersson


    Dim varTime As UInteger
    Dim varTime2 As UInteger


        'Time -HÄMTA
        varTime = TcClientSync.ReadVar(".HMI_TestTid")
        varTime2 = Reverse(varTime)
        lblTime.Text = varTime2

    Private Function Reverse(ByVal n As UInteger) As UInteger
        Dim B0, B1, B2, B3 As Byte
        B0 = n Mod 256
        n = n \ 256
        B1 = n Mod 256
        n = n \ 256
        B2 = n Mod 256
        n = n \ 256
        B3 = n Mod 256
        Reverse = (((B0 * 256 + B1) * 256 + B2) * 256 + B3)
    End Function

    Private Sub lblTime_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles lblTime.TextChanged
        If (lblTime.Text <> "") Then
            varTime = CUInt(lblTime.Text)
            varTime2 = Reverse(varTime)
            Call TcClientSync.WriteVar(".HMI_TestTid", varTime2)
            lblTime.Text = CUInt(varTime)
        End If

    End Sub



Svara

Sv: Problem med att hämta värde deklarerat som TIME!

Postades av 2008-11-17 11:43:41 - Cecilia Wirén

    lblTime.Text = varTime

skall det stå, utan 2:an (på båda ställena)


Svara

Sv:Problem med att hämta värde deklarerat som TIME!

Postades av 2008-11-17 11:51:16 - Joel Alexandersson

Nu visar textboxen bara en nolla även om det står ett annat värde i plc:n och det går fortfarande inte att ändra värdet genom textboxen. Jag har en timer där som hämtar värdet om och om igen och så fort ajg skriver in något nytt visar den bara en nolla. hm märkligt fel det här.


Svara

Sv: Problem med att hämta värde deklarerat som TIME!

Postades av 2008-11-17 12:29:37 - Jan Bulér

Kan det ev ha något att göra med att TcClientSync.ReadVar returnerar en variant

Enligt manualen ftp://ftp.beckhoff.com/Document/Software/TwinCAT/1033/TcScriptDll.pdf

så är ReadVar definerad så här:
object.ReadVar(
sVarName As String
) As Variant

Och exempel på anrop kan se ut så här:
Dim VarValue
VarValue = TcClientSync.ReadVar(".PLCVarSInt"
WScript.echo "VarValue = ", VarValue

Förmodar att du gjort det men jag frågar ändå, har du öppnat en Connection mot PLCn:

Method - general

ConnectTo

Opens a communication channel between the object and an ADS device (PLC, NC, ...).

object.ConnectTo(
sAmsNetId As String,
nPort As Long)

Description
The first parameter contains the six-figure AdsAmsNetId. The individual values are separated from one another by a dot. If an empty string is passed, the local AdsAmsNetId is used. If a communication channel was already open before the call to ConnectTo(), it is automatically closed. The communication channel is also closed if the object is deleted.

Examples
VBScript:
Dim TcClientSync
Set TcClientSync = CreateObject("TCSCRIPT.TcScriptSync")
Call TcClientSync.ConnectTo("", 801)

JScript:
var TcClientSync;
TcClientSync = new ActiveXObject("TCSCRIPT.TcScriptSync");
TcClientSync.ConnectTo("172.16.17.13.1.1", 811);

I slutet av manualen finns även komplette exempel med läsning och skrivning från PLC.


Svara

Sv:Problem med att hämta värde deklarerat som TIME!

Postades av 2008-11-17 12:49:24 - Joel Alexandersson

japp! så här gör jag:

Dim TcClientSync
Set TcClientSync = CreateObject("TCSCRIPT.TcScriptSync")
Call TcClientSync.ConnectTo("", 801)


Svara

Sv:Problem med att hämta värde deklarerat som TIME!

Postades av 2008-11-17 13:03:34 - Cecilia Wirén

nu snurrade jag till det, den första där du läser skall det stå varTime2. nåt annat är fel....
16777216 motsvaras av 1 i revers funktionen.
Väldigt svårt att lösa på distans verkar det som, nu får du nog klara dig själv, felsöka o debugga.


Svara

Sv: Problem med att hämta värde deklarerat som TIME!

Postades av 2008-11-17 13:08:10 - Joel Alexandersson

Hehe ja det här var itne lätt. Ändrade det nu men det fungerar ändå inte. Står bara en nolla av någon anledning. Det finns ju ingen nolla någonstans eller? i plc:n står det ju "HMI_TestTid=T#2ms"


Svara

Sv:Problem med att hämta värde deklarerat som TIME!

Postades av 2008-11-17 13:40:02 - Cecilia Wirén

försöker en sista gång, testa att byt ut till en annan reverse funktion:


    Dim varTime As UInteger
    Dim varTime2 As UInteger


        'Time -HÄMTA
        varTime = TcClientSync.ReadVar(".HMI_TestTid")
        varTime2 = Reverse(varTime)
        lblTime.Text = varTime2

  Public Function reverse(ByVal i As UInteger) As UInteger
        Return ((i And &HFF) << 24) + ((i And &HFF00) << 8) + ((i And &HFF0000) >> 8) + ((i >> 24) And &HFF)
    End Function

    Private Sub lblTime_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles lblTime.TextChanged
        If (lblTime.Text <> "") Then
            varTime = CUInt(lblTime.Text)
            varTime2 = Reverse(varTime)
            Call TcClientSync.WriteVar(".HMI_TestTid", varTime2)
            lblTime.Text = CUInt(varTime)
        End If

    End Sub



Testa också (om det inte hjälper) att ta bort anropet till reverse för läsa o se om du läser rätt då iallafall...


Svara

Sv: Problem med att hämta värde deklarerat som TIME!

Postades av 2008-11-17 13:52:27 - Joel Alexandersson

Jag tror din kod säkert fungerar. det måste vara något annat. vad jag än gör så hämtar den bara en nolla som jag inte fattar vart den får den ifrån. Det är jättekonstigt.


Svara

Sv:Problem med att hämta värde deklarerat som TIME!

Postades av 2008-11-17 16:12:28 - Jan Bulér

Om du bara gör så här:

<code>
Dim TcClientSync
Dim varTime 'Deklarerad som variabel

Set TcClientSync = CreateObject("TCSCRIPT.TcScriptSync")
Call TcClientSync.ConnectTo("", 801)
varTime = TcClientSync.ReadVar(".HMI_TestTid")
</code>

Får du någonting i varTime då?

Har du provat att ange PLCns IP adress före portnummret i ConnectTo(..?

Visa mer av din kod så kanske vi hittar något.


Svara

Sv: Problem med att hämta värde deklarerat som TIME!

Postades av 2008-11-17 16:52:22 - Jan Bulér

Angående: "När ajg skriver "1" i plc:n så får jag "16777216" i textboxen. vad beror det på?"

Detta tyder på att du har samma endian (little/Intel), i både datorn och PLCn, om du kör en korrekt Reverse på värdet 1 så blir det 16777216 om det reverserade värdet tolaks binärt.

1 som 32-bit hex "00 00 00 01", om du gör om det till en big-endian blir det "01 00 00 00".

Du ska troligtvis inte använda dig av reverse i din applikation.


Svara

Sv: Problem med att hämta värde deklarerat som TIME!

Postades av 2008-11-18 07:44:24 - Joel Alexandersson

Hur kollar jag om VarTime Har något?

här har du min kod:



 TcClientSync = CreateObject("TcScript.TcScriptSync")
 Call TcClientSync.ConnectTo("", 801)


    Dim varTime As UInteger
    Dim varTime2 As UInteger


        'Time -HÄMTA
        varTime = TcClientSync.ReadVar(".HMI_TestTid")
        varTime2 = Reverse(varTime)
        lblTime.Text = varTime2


  Public Function reverse(ByVal i As UInteger) As UInteger
        Return ((i And &HFF) << 24) + ((i And &HFF00) << 8) + ((i And &HFF0000) >> 8) + ((i >> 24) And &HFF)
    End Function

'Time -SKRIV

    Private Sub lblTime_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles lblTime.TextChanged
        If (lblTime.Text <> "") Then
            varTime = CUInt(lblTime.Text)
            varTime2 = Reverse(varTime)
            Call TcClientSync.WriteVar(".HMI_TestTid", varTime2)
            lblTime.Text = CUInt(varTime)
        End If

    End Sub


Svara

Sv:Problem med att hämta värde deklarerat som TIME!

Postades av 2008-11-18 08:18:03 - Jan Bulér

För att kolla värdet kan du t ex stega igenom koden i debuggläge.

Om det är hela koden du visar så verkar det lite mysko före "Public Function reverse(ByVal i As UInteger) As UInteger".

Som det ser ut i koden du visar så ligger ju inte din första del av koden inom någon Sub eller Function.


För att testa kan du ju skapa en knapp i ditt formulär som i sitt klick-event kallar på följande kod.

<code>
Private Sub ReadPlcValueTest()

Dim TcClientSync
Dim varTime

Stop 'Stoppar kodexekveringen, stega vidare med F11, ta bort i skarp kod

Try
TcClientSync = CreateObject("TcScript.TcScriptSync")
Call TcClientSync.ConnectTo("", 801)

'Time -HÄMTA
varTime = TcClientSync.ReadVar(".HMI_TestTid")

'Visa värdet i varTime
MessageBox.Show("varTime = " & varTime.ToString())

Catch ex As Exception
'Visa eventuellt felmeddelande
MessageBox.Show("Error: " & ex.Message)

End Try

End Sub</code>


Svara

Sv: Problem med att hämta värde deklarerat som TIME!

Postades av 2008-11-18 10:48:03 - Joel Alexandersson

ok jag tog bara med det viktigast. Testade vad du sa och mycket riktigt fick jag upp ett fel på en timer som sakerna ligger i som var: "Error: Object reference not set to an instance of an object" men här har du hela koden:


Public Class FInstallningarDackmaskin
    Inherits System.Windows.Forms.Form
    Public TcClientSync As TCSCRIPTLib.TcScriptSync
    Dim VarInstDackbredd As Decimal
    Dim VarInstBradbreddMag1 As Decimal
    Dim VarInstBradbreddMag2 As Decimal
    Dim VarInstOklangd As Decimal
    Dim VarAntalBrador As Long
    Dim VarOkLagfart As Decimal
    Dim VarOkKrypfart As Decimal
    Dim VarRefOkAkt As Decimal
    Dim VarRefOkOnsk As Decimal
    Dim VarVardeNyOk As Decimal
    Dim VarOkStoppUtmat As Decimal
    Dim VarOkKlamma As Decimal
    Dim VarBradLagfart As Decimal
    Dim VarBradKrypfart As Decimal
    Dim VarBradRefVardeAkt As Decimal
    Dim VarBradRefVardeOnsk As Decimal
    Dim VarBradLagfartRetur As Decimal
    Private Sub cmdHandkorning_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdHandkorning.Click
        fhandkorningdackmaskin.Show()
        Me.Hide()
    End Sub
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        FIndex.Show()
        Me.Hide()
    End Sub
    Private Sub FInstallningarDackmaskin_FormClosed(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosedEventArgs) Handles Me.FormClosed
        End
    End Sub
    Private Sub FInstallningarDackmaskin_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        'Tittar på vilken textbox som är klickad
        For Each kontroll As Control In Me.Controls
            If kontroll.GetType Is GetType(TextBox) Then
                AddHandler kontroll.Click, AddressOf lblInstAntBrador_Click
            End If
        Next
        'Sätter(timerintervall)
        Timer1.Interval = 500
        Timer1.Start()
    End Sub

    Private Sub lblInstAntBrador_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles lblInstAntBrador.TextChanged
        'Antal brädor - SKRIV
        If (lblInstAntBrador.Text <> "") Then
            VarAntalBrador = CDec(lblInstAntBrador.Text)
            Call TcClientSync.WriteVar(".HMI_tKDSUppSpik", VarAntalBrador)
            lblInstAntBrador.Text = CStr(VarAntalBrador)
        End If
    End Sub
    Private Sub lblInstDackbredd_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles lblInstDackbredd.TextChanged
        'Däckbredd - SKRIV
        If (lblInstDackbredd.Text <> "") Then
            VarInstDackbredd = CDec(lblInstDackbredd.Text)
            Call TcClientSync.WriteVar(".HMI_TestTid", VarInstDackbredd)
            lblInstDackbredd.Text = CStr(VarInstDackbredd)
        End If
    End Sub
    Private Sub lblInstBradbreddMag1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles lblInstBradbreddMag1.TextChanged
        'Brädbredd magasin 1 - SKRIV
        If (lblInstBradbreddMag1.Text <> "") Then
            VarInstBradbreddMag1 = CDec(lblInstBradbreddMag1.Text)
            Call TcClientSync.WriteVar(".HMI_TestTid", VarInstBradbreddMag1)
            lblInstBradbreddMag1.Text = CStr(VarInstBradbreddMag1)
        End If
    End Sub
    Private Sub lblInstBradbreddMag2_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles lblInstBradbreddMag2.TextChanged
        'Brädbredd magasin 2 - SKRIV
        If (lblInstBradbreddMag2.Text <> "") Then
            VarInstBradbreddMag2 = CDec(lblInstBradbreddMag2.Text)
            Call TcClientSync.WriteVar(".HMI_TestTid", VarInstBradbreddMag2)
            lblInstBradbreddMag2.Text = CStr(VarInstBradbreddMag2)
        End If
    End Sub
    Private Sub lblInstOklangd_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles lblInstOklangd.TextChanged
        'Oklängd - SKRIV
        If (lblInstOklangd.Text <> "") Then
            VarInstOklangd = CDec(lblInstOklangd.Text)
            Call TcClientSync.WriteVar(".HMI_TestTid", VarInstOklangd)
            lblInstOklangd.Text = CStr(VarInstOklangd)
        End If
    End Sub
    Private Sub lblOkLagfart_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles lblOkLagfart.TextChanged
        'Okframdrag Lågfart - SKRIV
        If (lblOkLagfart.Text <> "") Then
            VarOkLagfart = CDec(lblOkLagfart.Text)
            Call TcClientSync.WriteVar(".HMI_TestTid", VarOkLagfart)
            lblOkLagfart.Text = CStr(VarOkLagfart)
        End If
    End Sub
    Private Sub lblOkKrypfart_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles lblOkKrypfart.TextChanged
        'Okframdrag Krypfart - SKRIV
        If (lblOkKrypfart.Text <> "") Then
            VarOkKrypfart = CDec(lblOkKrypfart.Text)
            Call TcClientSync.WriteVar(".HMI_TestTid", VarOkKrypfart)
            lblOkKrypfart.Text = CStr(VarOkKrypfart)
        End If
    End Sub
    Private Sub lblRefOkAkt_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles lblRefOkAkt.TextChanged
        'Okframdrag Ref värde aktuellt - SKRIV
        If (lblRefOkAkt.Text <> "") Then
            VarRefOkAkt = CDec(lblRefOkAkt.Text)
            Call TcClientSync.WriteVar(".HMI_TestTid", VarRefOkAkt)
            lblRefOkAkt.Text = CStr(VarRefOkAkt)
        End If
    End Sub
    Private Sub lblRefOkOnsk_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles lblRefOkOnsk.TextChanged
        'Okframdrag Ref värde önskat - SKRIV
        If (lblRefOkOnsk.Text <> "") Then
            VarRefOkOnsk = CDec(lblRefOkAkt.Text)
            Call TcClientSync.WriteVar(".HMI_TestTid", VarRefOkOnsk)
            lblRefOkOnsk.Text = CStr(VarRefOkOnsk)
        End If
    End Sub
    Private Sub lblVardeNyOk_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles lblVardeNyOk.TextChanged
        'Okframdrag Varde ny ok - SKRIV
        If (lblVardeNyOk.Text <> "") Then
            VarVardeNyOk = CDec(lblVardeNyOk.Text)
            Call TcClientSync.WriteVar(".HMI_TestTid", VarVardeNyOk)
            lblVardeNyOk.Text = CStr(VarVardeNyOk)
        End If
    End Sub
    Private Sub lblOkStoppUtmat_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles lblOkStoppUtmat.TextChanged
        'Okframdrag utmatning - SKRIV
        If (lblOkStoppUtmat.Text <> "") Then
            VarOkStoppUtmat = CDec(lblOkStoppUtmat.Text)
            Call TcClientSync.WriteVar(".HMI_TestTid", VarOkStoppUtmat)
            lblOkStoppUtmat.Text = CStr(VarOkStoppUtmat)
        End If
    End Sub
    Private Sub lblOkKlamma_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles lblOkKlamma.TextChanged
        'Okframdrag Klämma - SKRIV
        If (lblOkKlamma.Text <> "") Then
            VarOkKlamma = CDec(lblOkKlamma.Text)
            Call TcClientSync.WriteVar(".HMI_TestTid", VarOkKlamma)
            lblOkKlamma.Text = CStr(VarOkKlamma)
        End If
    End Sub
    Private Sub lblBradLagfart_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles lblBradLagfart.TextChanged
        'Brädframdrag Lågfart - SKRIV
        If (lblBradLagfart.Text <> "") Then
            VarBradLagfart = CDec(lblBradLagfart.Text)
            Call TcClientSync.WriteVar(".HMI_TestTid", VarBradLagfart)
            lblBradLagfart.Text = CStr(VarBradLagfart)
        End If
    End Sub
    Private Sub lblBradKrypfart_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles lblBradKrypfart.TextChanged
        'Brädframdrag krypfart - SKRIV
        If (lblBradKrypfart.Text <> "") Then
            VarBradKrypfart = CDec(lblBradKrypfart.Text)
            Call TcClientSync.WriteVar(".HMI_TestTid", VarBradKrypfart)
            lblBradKrypfart.Text = CStr(VarBradKrypfart)
        End If
    End Sub
    Private Sub lblBradRefVardeAkt_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles lblBradRefVardeAkt.TextChanged
        'Brädframdrag Referensvärde Aktuellt - SKRIV
        If (lblBradRefVardeAkt.Text <> "") Then
            VarBradRefVardeAkt = CDec(lblBradRefVardeAkt.Text)
            Call TcClientSync.WriteVar(".HMI_lrDckActPos", VarBradRefVardeAkt)
            lblBradRefVardeAkt.Text = CStr(VarBradRefVardeAkt)
        End If
    End Sub
    Private Sub lblBradRefVardeOnsk_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles lblBradRefVardeOnsk.TextChanged
        'Brädframdrag Referensvärde önskat - SKRIV
        If (lblBradRefVardeOnsk.Text <> "") Then
            VarBradRefVardeOnsk = CDec(lblBradRefVardeOnsk.Text)
            Call TcClientSync.WriteVar(".HMI_lrDckRefPos", VarBradRefVardeOnsk)
            lblBradRefVardeOnsk.Text = CStr(VarBradRefVardeOnsk)
        End If
    End Sub
    Private Sub lblBradLagfartRetur_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles lblBradLagfartRetur.TextChanged
        'Brädframdrag retur - SKRIV
        If (lblBradLagfartRetur.Text <> "") Then
            VarBradLagfartRetur = CDec(lblBradLagfartRetur.Text)
            Call TcClientSync.WriteVar(".HMI_lrDckRetur", VarBradLagfartRetur)
            lblBradLagfartRetur.Text = CStr(VarBradLagfartRetur)
        End If
    End Sub
    Private Sub ReadPlcValueTest()

        Dim TcClientSync
        Dim varTime

        Stop 'Stoppar kodexekveringen, stega vidare med F11, ta bort i skarp kod

        Try
            TcClientSync = CreateObject("TcScript.TcScriptSync")
            Call TcClientSync.ConnectTo("", 801)

            'Time -HÄMTA
            varTime = TcClientSync.ReadVar(".HMI_TestTid")

            'Visa värdet i varTime
            MessageBox.Show("varTime = " & varTime.ToString())

        Catch ex As Exception
            'Visa eventuellt felmeddelande
            MessageBox.Show("Error: " & ex.Message)

        End Try

    End Sub

    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
        TcClientSync = CreateObject("TcScript.TcScriptSync")
        Call TcClientSync.ConnectTo("", 801)

        Dim varTime 'Deklarerad som variabel
        varTime = TcClientSync.ReadVar(".HMI_TestTid")
        lblTime.Text = varTime

        'INSTÄLLNINGAR

        'Antal brädor - HÄMTA
        VarAntalBrador = TcClientSync.ReadVar(".HMI_TestTid")
        lblInstAntBrador.Text = CStr(VarAntalBrador)

        'Däckbredd - HÄMTA
        VarInstDackbredd = TcClientSync.ReadVar(".HMI_TestTid")
        lblInstDackbredd.Text = CStr(VarInstDackbredd)

        'Brädbredd magasin 1 - HÄMTA
        VarInstBradbreddMag1 = TcClientSync.ReadVar(".HMI_TestTid")
        lblInstBradbreddMag1.Text = CStr(VarInstBradbreddMag1)

        'Brädbredd magasin 2 - HÄMTA
        VarInstBradbreddMag2 = TcClientSync.ReadVar(".HMI_TestTid")
        lblInstBradbreddMag2.Text = CStr(VarInstBradbreddMag2)

        'Oklängd - HÄMTA
        VarInstOklangd = TcClientSync.ReadVar(".HMI_TestTid")
        lblInstOklangd.Text = CStr(VarInstOklangd)

        'PARAMETRAR
        'OKFRAMDRAG

        'Okframdrag Lågfart - HÄMTA
        VarOkLagfart = TcClientSync.ReadVar(".HMI_lrOkHast")
        lblOkLagfart.Text = CStr(VarOkLagfart)

        'Okframdrag Krypfart - HÄMTA
        VarOkKrypfart = TcClientSync.ReadVar(".HMI_lrOkHast")
        lblOkKrypfart.Text = CStr(VarOkKrypfart)

        'Referens okframdrag aktuellt - HÄMTA
        VarRefOkAkt = TcClientSync.ReadVar(".HMI_lrOkFrdOk")
        lblRefOkAkt.Text = CStr(VarRefOkAkt)

        'Referens okframdrag önskat - HÄMTA
        VarRefOkOnsk = TcClientSync.ReadVar(".HMI_lrOkRefPos")
        lblRefOkOnsk.Text = CStr(VarRefOkOnsk)

        'Varde ny ok - HÄMTA
        VarVardeNyOk = TcClientSync.ReadVar(".HMI_TestTid")
        lblVardeNyOk.Text = CStr(VarVardeNyOk)

        'Okframdrag stopp utmatning - HÄMTA
        VarOkStoppUtmat = TcClientSync.ReadVar(".HMI_lrUtDckStopPos")
        lblOkStoppUtmat.Text = CStr(VarOkStoppUtmat)

        'Okframdrag klämma - HÄMTA
        VarOkKlamma = TcClientSync.ReadVar(".HMI_lrOkFrdOfs")
        lblOkKlamma.Text = CStr(VarOkKlamma)

        'PARAMETRAR
        'BRÄDFRAMDRAG

        'Brädframdrag lågfart - HÄMTA
        VarBradLagfart = TcClientSync.ReadVar(".HMI_lrDckHast")
        lblBradLagfart.Text = CStr(VarBradLagfart)

        'Brädframdrag krypfart - HÄMTA
        VarBradKrypfart = TcClientSync.ReadVar(".HMI_lrDckJogHast")
        lblBradKrypfart.Text = CStr(VarBradKrypfart)

        'Brädframdrag  Referensvärde aktuellt - HÄMTA
        VarBradRefVardeAkt = TcClientSync.ReadVar(".HMI_lrDckActPos")
        lblBradRefVardeAkt.Text = CStr(VarBradRefVardeAkt)

        'Brädframdrag  Referensvärde önskat - HÄMTA
        VarBradRefVardeOnsk = TcClientSync.ReadVar(".HMI_lrDckRefPos")
        lblBradRefVardeOnsk.Text = CStr(VarBradRefVardeOnsk)

        'Brädframdrag  Lågfart retur - HÄMTA
        VarBradLagfartRetur = TcClientSync.ReadVar(".HMI_lrDckRetur")
        lblBradLagfartRetur.Text = CStr(VarBradLagfartRetur)

        Timer1.Start()
    End Sub
    Private Sub lblInstAntBrador_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles lblInstAntBrador.Click
        'Öppnar numeriska tangentbordet när man klickar på textboxen
        Dim r As New Numeriskt_tangentbord
        If r.ShowDialog() = Windows.Forms.DialogResult.OK Then
            CType(sender, TextBox).Text = r.txtVarde.Text
        End If
    End Sub
    Private Sub lblInstDackbredd_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles lblInstDackbredd.Click
        'Öppnar numeriska tangentbordet när man klickar på textboxen
        Dim r As New Numeriskt_tangentbord
        If r.ShowDialog() = Windows.Forms.DialogResult.OK Then
            CType(sender, TextBox).Text = r.txtVarde.Text
        End If
    End Sub
    Private Sub lblInstBradbreddMag1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles lblInstBradbreddMag1.Click
        'Öppnar numeriska tangentbordet när man klickar på textboxen
        Dim r As New Numeriskt_tangentbord
        If r.ShowDialog() = Windows.Forms.DialogResult.OK Then
            CType(sender, TextBox).Text = r.txtVarde.Text
        End If
    End Sub
    Private Sub lblInstBradbreddMag2_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles lblInstBradbreddMag2.Click
        'Öppnar numeriska tangentbordet när man klickar på textboxen
        Dim r As New Numeriskt_tangentbord
        If r.ShowDialog() = Windows.Forms.DialogResult.OK Then
            CType(sender, TextBox).Text = r.txtVarde.Text
        End If
    End Sub
    Private Sub lblInstOklangd_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles lblInstOklangd.Click
        'Öppnar numeriska tangentbordet när man klickar på textboxen
        Dim r As New Numeriskt_tangentbord
        If r.ShowDialog() = Windows.Forms.DialogResult.OK Then
            CType(sender, TextBox).Text = r.txtVarde.Text
        End If
    End Sub
    Private Sub lblOkLagfart_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles lblOkLagfart.Click
        'Öppnar numeriska tangentbordet när man klickar på textboxen
        Dim r As New Numeriskt_tangentbord
        If r.ShowDialog() = Windows.Forms.DialogResult.OK Then
            CType(sender, TextBox).Text = r.txtVarde.Text
        End If
    End Sub
    Private Sub lblOkKrypfart_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles lblOkKrypfart.Click
        'Öppnar numeriska tangentbordet när man klickar på textboxen
        Dim r As New Numeriskt_tangentbord
        If r.ShowDialog() = Windows.Forms.DialogResult.OK Then
            CType(sender, TextBox).Text = r.txtVarde.Text
        End If
    End Sub
    Private Sub lblRefOkAkt_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles lblRefOkAkt.Click
        'Öppnar numeriska tangentbordet när man klickar på textboxen
        Dim r As New Numeriskt_tangentbord
        If r.ShowDialog() = Windows.Forms.DialogResult.OK Then
            CType(sender, TextBox).Text = r.txtVarde.Text
        End If
    End Sub
    Private Sub lblRefOkOnsk_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles lblRefOkOnsk.Click
        'Öppnar numeriska tangentbordet när man klickar på textboxen
        Dim r As New Numeriskt_tangentbord
        If r.ShowDialog() = Windows.Forms.DialogResult.OK Then
            CType(sender, TextBox).Text = r.txtVarde.Text
        End If
    End Sub
    Private Sub lblVardeNyOk_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles lblVardeNyOk.Click
        'Öppnar numeriska tangentbordet när man klickar på textboxen
        Dim r As New Numeriskt_tangentbord
        If r.ShowDialog() = Windows.Forms.DialogResult.OK Then
            CType(sender, TextBox).Text = r.txtVarde.Text
        End If
    End Sub
    Private Sub lblOkStoppUtmat_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles lblOkStoppUtmat.Click
        'Öppnar numeriska tangentbordet när man klickar på textboxen
        Dim r As New Numeriskt_tangentbord
        If r.ShowDialog() = Windows.Forms.DialogResult.OK Then
            CType(sender, TextBox).Text = r.txtVarde.Text
        End If
    End Sub
    Private Sub lblOkKlamma_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles lblOkKlamma.Click
        'Öppnar numeriska tangentbordet när man klickar på textboxen
        Dim r As New Numeriskt_tangentbord
        If r.ShowDialog() = Windows.Forms.DialogResult.OK Then
            CType(sender, TextBox).Text = r.txtVarde.Text
        End If
    End Sub
    Private Sub lblBradLagfart_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles lblBradLagfart.Click
        'Öppnar numeriska tangentbordet när man klickar på textboxen
        Dim r As New Numeriskt_tangentbord
        If r.ShowDialog() = Windows.Forms.DialogResult.OK Then
            CType(sender, TextBox).Text = r.txtVarde.Text
        End If
    End Sub
    Private Sub lblBradKrypfart_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles lblBradKrypfart.Click
        'Öppnar numeriska tangentbordet när man klickar på textboxen
        Dim r As New Numeriskt_tangentbord
        If r.ShowDialog() = Windows.Forms.DialogResult.OK Then
            CType(sender, TextBox).Text = r.txtVarde.Text
        End If
    End Sub
    Private Sub lblBradRefVardeAkt_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles lblBradRefVardeAkt.Click
        'Öppnar numeriska tangentbordet när man klickar på textboxen
        Dim r As New Numeriskt_tangentbord
        If r.ShowDialog() = Windows.Forms.DialogResult.OK Then
            CType(sender, TextBox).Text = r.txtVarde.Text
        End If
    End Sub
    Private Sub lblBradRefVardeOnsk_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles lblBradRefVardeOnsk.Click
        'Öppnar numeriska tangentbordet när man klickar på textboxen
        Dim r As New Numeriskt_tangentbord
        If r.ShowDialog() = Windows.Forms.DialogResult.OK Then
            CType(sender, TextBox).Text = r.txtVarde.Text
        End If
    End Sub
    Private Sub lblBradLagfartRetur_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles lblBradLagfartRetur.Click
        'Öppnar numeriska tangentbordet när man klickar på textboxen
        Dim r As New Numeriskt_tangentbord
        If r.ShowDialog() = Windows.Forms.DialogResult.OK Then
            CType(sender, TextBox).Text = r.txtVarde.Text
        End If
    End Sub
    Private Sub bSpik1Mag_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles bSpik1Mag.Click
        If bSpik1Mag.Text = "Magasin 1" Then
            bSpik1Mag.Text = "Magasin 2"
        Else
            bSpik1Mag.Text = "Magasin 1"
        End If
    End Sub
    Private Sub bSpik2Mag_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles bSpik2Mag.Click
        If bSpik2Mag.Text = "Magasin 1" Then
            bSpik2Mag.Text = "Magasin 2"
        Else
            bSpik2Mag.Text = "Magasin 1"
        End If
    End Sub
    Private Sub bSpik3Mag_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles bSpik3Mag.Click
        If bSpik3Mag.Text = "Magasin 1" Then
            bSpik3Mag.Text = "Magasin 2"
        Else
            bSpik3Mag.Text = "Magasin 1"
        End If
    End Sub
    Private Sub bSpik4Mag_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles bSpik4Mag.Click
        If bSpik4Mag.Text = "Magasin 1" Then
            bSpik4Mag.Text = "Magasin 2"
        Else
            bSpik4Mag.Text = "Magasin 1"
        End If
    End Sub
    Private Sub bSpik5Mag_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles bSpik5Mag.Click
        If bSpik5Mag.Text = "Magasin 1" Then
            bSpik5Mag.Text = "Magasin 2"
        Else
            bSpik5Mag.Text = "Magasin 1"
        End If
    End Sub
    Private Sub bSpik6Mag_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles bSpik6Mag.Click
        If bSpik6Mag.Text = "Magasin 1" Then
            bSpik6Mag.Text = "Magasin 2"
        Else
            bSpik6Mag.Text = "Magasin 1"
        End If
    End Sub
    Private Sub bSpik7Mag_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles bSpik7Mag.Click
        If bSpik7Mag.Text = "Magasin 1" Then
            bSpik7Mag.Text = "Magasin 2"
        Else
            bSpik7Mag.Text = "Magasin 1"
        End If
    End Sub
    Private Sub bSpik8Mag_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles bSpik8Mag.Click
        If bSpik8Mag.Text = "Magasin 1" Then
            bSpik8Mag.Text = "Magasin 2"
        Else
            bSpik8Mag.Text = "Magasin 1"
        End If
    End Sub
    Private Sub bSpik9Mag_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles bSpik9Mag.Click
        If bSpik9Mag.Text = "Magasin 1" Then
            bSpik9Mag.Text = "Magasin 2"
        Else
            bSpik9Mag.Text = "Magasin 1"
        End If
    End Sub
    Private Sub bSpik10Mag_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles bSpik10Mag.Click
        If bSpik10Mag.Text = "Magasin 1" Then
            bSpik10Mag.Text = "Magasin 2"
        Else
            bSpik10Mag.Text = "Magasin 1"
        End If
    End Sub
    Private Sub bSpik11Mag_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles bSpik11Mag.Click
        If bSpik11Mag.Text = "Magasin 1" Then
            bSpik11Mag.Text = "Magasin 2"
        Else
            bSpik11Mag.Text = "Magasin 1"
        End If
    End Sub
    Private Sub bSpik12Mag_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles bSpik12Mag.Click
        If bSpik12Mag.Text = "Magasin 1" Then
            bSpik12Mag.Text = "Magasin 2"
        Else
            bSpik12Mag.Text = "Magasin 1"
        End If
    End Sub

    Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
        Call ReadPlcValueTest()
    End Sub
End Class


Svara

Sv: Problem med att hämta värde deklarerat som TIME!

Postades av 2008-11-18 10:51:28 - Joel Alexandersson

nu serdet lite mysko ut när många har samma hmi variabel. men de är bortkommenterade i mitt program så länge innan jag fått de riktiga.


Svara

Sv:Problem med att hämta värde deklarerat som TIME!

Postades av 2008-11-18 11:00:10 - Jan Bulér

När du stegar igenom "ReadPlcValueTest", på vilken rad blir det fel (när hoppar den till Catch-rutinen)?


Svara

Sv: Problem med att hämta värde deklarerat som TIME!

Postades av 2008-11-18 11:08:39 - Joel Alexandersson

På den här raden:

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


Svara

Sv: Problem med att hämta värde deklarerat som TIME!

Postades av 2008-11-18 11:17:00 - Joel Alexandersson

när jag håller på VarTime så innehåller den "nothing" står det. så det fungerar ju inte riktigt där.


Svara

Sv:Problem med att hämta värde deklarerat som TIME!

Postades av 2008-11-18 11:42:06 - Jan Bulér

Disabla Timer1 så att den inte generarar några Ticks och så att inte "Private Sub Timer1_Tick(..." körs.

Använd sedan din "Button3", som du skapat, för att köra koden i "ReadPlcValueTest()" och kolla där om du får rätt info.

Om, efter att du passerat "varTime = TcClientSync.ReadVar(".HMI_TestTid")", varTime innehåller "nothing" så tyder det nog på att du inte kunnat läsa in variabeln ".HMI_TestTid", kolla att den verkligen heter så i PLCn och att stora/små-bokstver stämmer överens.


Vad innehåller "TcClientSync" efter att du stegat förbi "TcClientSync = CreateObject("TcScript.TcScriptSync")
"?


Svara

Sv: Problem med att hämta värde deklarerat som TIME!

Postades av 2008-11-18 11:55:54 - Joel Alexandersson

jag kopierade namnet igen så det är helt säkert att namnet är rätt.

TcClientSync innehåller "{System.__ComObject}

VarTime visar "nothing"


som dus er så har ajg ju flera textboxar som hämtar värden från plc:n och alla de fungerar utan den här med TIME.. några nya ideér?


Svara

Sv:Problem med att hämta värde deklarerat som TIME!

Postades av 2008-11-18 12:17:00 - Jan Bulér

Ok, jag uppfattade det som att du hade ett generellt problem att läsa från PLCn.

Kan det vara så att TcClientSync har någon begränsning som gör att den inte kan läsa en variabel som är deklarerad som Time+

Kan du prova, om det går i den PLCn, att ladda Time-värdet till en DWord variabel och försöka läsa DWord-värdet i ditt prog.

Ev kan du ju föröka att använda dig av Read by adress, t ex ReadInt32 för att se om du får upp något värde. Time är iof specat som unsigned men omvandlingen kan du ju göra i PC.


ReadInt32
Reads a variable of type long from an ADS device.
object.ReadInt32(
nIndexGroup As Long,
nIndexOffset As Long
) As Long

Parameters
nIndexGroup, Index group of the ADS variable.
nIndexOffset, Index offset of the ADS variable.

Return value
Value of the ADS variable.

Description
The reading procedure is performed synchronously. This means that program execution is halted until the data from the ADS device is available. In IEC 61131-6 this corresponds to the DWORD, DINT or UDINT data type.

Examples
VBScript:
Dim VarInt32
VarInt32 = TcClientSync.ReadInt32(&H4020, 0) 'Byt ut &H4020 mot rätt adress.
WScript.echo "VarInt32 = ", VarInt32


Svara

Sv: Problem med att hämta värde deklarerat som TIME!

Postades av 2008-11-18 12:50:26 - Joel Alexandersson

när jag byter till Dword i plc:n så får VarTime rätt värde. så kopplingen fungerar helt felfritt. Antar att TIME inte fungerar alls då?


Svara

Sv:Problem med att hämta värde deklarerat som TIME!

Postades av 2008-11-18 13:15:01 - Jan Bulér

Ok,

Gick det inte att få ut något värde via Read By Adress heller när variabeln i PLC är deklarerad som Time?


Svara

Sv: Problem med att hämta värde deklarerat som TIME!

Postades av 2008-11-18 13:26:54 - Joel Alexandersson

jagfattar itne ritkigt hur jag ska göra med det här: "Byt ut &H4020 mot rätt adress" vilken adress?? hur hittar jag min PLC variabel?


Svara

Sv:Problem med att hämta värde deklarerat som TIME!

Postades av 2008-11-18 16:23:16 - Jan Bulér

Ang "Byt ut &H4020 mot rätt adr" så lär du nog kolla lite i TwinCat-manualerna hur adressminnena är specificerade.

Alternativt kör du med Dword och anger allla tider i ms.


Svara

Sv: Problem med att hämta värde deklarerat som TIME!

Postades av 2008-11-19 07:25:03 - Joel Alexandersson

Jag har pratat med lite annat folk nu också och tydligen så ska det inte fungera att göra så här. Ingen som vet hur iaf. Däremot går det att göra omvandlingen i PLC:n så det har vi gjort nu. Tack ändå ni som försökte! :)


Svara

Sv:Problem med att hämta värde deklarerat som TIME!

Postades av 2008-11-20 07:49:42 - Jan Bulér

Bra att det löste sig, nu kanske du även kan markera tråden som löst.


Svara

Nyligen

  • 19:55 kick-off med fokus på hälsa?
  • 19:53 kick-off med fokus på hälsa?
  • 16:24 Föreslå en skönhetsklinik online
  • 16:23 Föreslå en skönhetsklinik online
  • 18:42 Hvor finder man håndlavede lamper
  • 18:41 Hvor finder man håndlavede lamper
  • 16:36 Allt du behöver veta om keramiskt
  • 16:14 Vem anlitar man egentligen när tak

Sidor

  • Hem
  • Bli bonusmedlem
  • Läs artiklar
  • Chatta med andra
  • Sök och erbjud jobb
  • Kontakta oss
  • Studentlicenser
  • Skriv en artikel

Statistik

Antal besökare:
Antal medlemmar:
Antal inlägg:
Online:
På chatten:
4 570 726
27 958
271 751
367
0

Kontakta oss

Frågor runt konsultation, rådgivning, uppdrag, rekrytering, annonsering och övriga ärenden. Ring: 0730-88 22 24 | pelle@pellesoft.se

© 1986-2013 PelleSoft AB. Last Build 4.1.7169.18070 (2019-08-18 10:02:21) 4.0.30319.42000
  • Om
  • Kontakta
  • Regler
  • Cookies