Jump to content
The simFlight Network Forums

How can I change the Simulator Time?


Recommended Posts

Pete,

thanks for your answer. I tried it now that way, but it doesn`t work

Dim new_H As String = "22"
        fs_H.Value = System.Text.Encoding.Default.GetBytes(new_H)

I work with Visual Basic 2008.

Thanks for your help,

Tobias

Link to comment
Share on other sites

I solved the problem now. The String must be converted into CHAR....

No idea why you'd be using strings or characters for a numerical value. Surely VB2008 supports numbers, like integers and things? Just because some of the destinations are only one byte (8-bits) long doesn't mean your source data cannot be longer -- it is the LENGTH in the FSUIPC write which determines how many bytes get copied over.

Regards

Pete

Link to comment
Share on other sites

Pete, you are right. I thought I have it. I was wrong. It still doesn´t work.

This is the for example the Zulu-Hour I want to write into the Flusi:

Dim fs_H As Offset(Of Byte()) = New FSUIPC.Offset(Of Byte())(&H23B, 1)

Thats the way I get the time:

Dim new_H As Integer = Date.UtcNow.Hour.ToString

I´ve read, that I can get the data into the FSUIPC like that:

fs_H.Value = ?????
FSUIPCConnection.Process()

The .Value must be a byte, right? But how to code it?

I can´t find any help in the web :(

Thank you,

Tobias

Link to comment
Share on other sites

The .Value must be a byte, right? But how to code it?

Sorry, I've no idea what all that code is. Doesn't look like anything I've seen before. where are the FSUIPC reads and writes? Maybe VB2008 is completely different to previous versions?

Either way, the thing to realise that all "byte" means is a collection of 8 bits, the smallest addressable lump of memory in Intel systems. Bytes are used for ASCII characters, yes, and strung together to make strings (but then there are Unicode characters which are sometimes 16-bits long (words), and there are wide characters too!).

But forget all that here. The time values are NUMBERS. You can, in any language, use NUMBERs. So store them as numbers. The only time you have to squeeze the numbers into a byte (or a word, 16-bits, where specified) is when the FSUIPC write function is called -- and that is done using the LENGTH parameter -- you don't need to change the number or convert it. A length of 1 writes one byte, no matter how long the data, and so on.

I can´t find any help in the web :(

I'm sure there must be plenty of help about on programming in VB. For FSUIPC there's the sample, kindly provided by other users, in the FSUIPC SDK. But maybe that's for a different VB and isn't applicable? It seems it is changing too fast.

I'm afraid I'm lost with all these different VBs. I didn't even know the first one very well, just brief encounters like this.

Regards

Pete

Link to comment
Share on other sites

Using Paul Hentys VB.net DLL I have used the following code to write a small app called FSTimeStay for someone on a forum.

It remembers the time within FS that the button is clicked and once a minute it writes that time back to FS.

I am sure you can find some help within this code for what you are doing

Imports FSUIPC

Public Class Form1

    Public hr, min, sec, hroffset As Short

    Public FSHour As Offset(Of Byte) = New FSUIPC.Offset(Of Byte)("fstime", &H238)
    Public FSMin As Offset(Of Byte) = New FSUIPC.Offset(Of Byte)("fstime", &H239)
    Public FSSec As Offset(Of Byte) = New FSUIPC.Offset(Of Byte)("fstime", &H23A)
    Public FSOffset As Offset(Of Short) = New FSUIPC.Offset(Of Short)("fstime", &H246)

    Private Sub OpenFSUIPC()

        Try
            ' Attempt to open a connection to FSUIPC (running ON any version of Flight Sim)
            FSUIPCConnection.Open()
        Catch ex As Exception
            ' Badness occurred - show the error message
            MessageBox.Show(ex.Message, "", MessageBoxButtons.OK, MessageBoxIcon.Error)
        End Try

    End Sub

    Public Sub WriteTime()

        'write the time back to fs
        FSHour.Value = Me.hr '+ Me.hroffset
        FSMin.Value = Me.min
        FSSec.Value = Me.sec

        FSUIPCConnection.Process("fstime")

    End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

        Static Run As Boolean = False
        Static firstrun As Boolean = False

        If Run = False Then

            If firstrun = False Then
                Me.OpenFSUIPC()
                firstrun = True
            End If

            'read current time
            FSUIPCConnection.Process("fstime")

            Me.hr = Me.FSHour.Value
            Me.min = Me.FSMin.Value
            Me.sec = Me.FSSec.Value
            Me.hroffset = Me.FSOffset.Value / 60

            lblTime.Text = "Locked time : " & Me.hr & ":" & Me.min & ":" & Me.sec & "   GMT Offset:" & Me.hroffset

            'start timer
            Me.Timer1.Enabled = True
            Me.Button1.Text = "Stop"

            Run = True

        Else

            Run = False
            Me.Timer1.Enabled = False
            Me.Button1.Text = "Activate"

            lblTime.Text = "Not running"

        End If

    End Sub


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

       'rewrite the time into FS dependant upon timer interval
        Me.WriteTime()

    End Sub

End Class

Link to comment
Share on other sites

Hey, vielen Dank für deinen Quellcode.

Die Zeit und auch der Tag wird jetzt perfekt übernommen :)

Nur mit dem Jahr passt noch etwas nicht... Da meldet er immer

"OverFlowException wurde nicht behandelt".

-> Die arithmetische Operation hat einen Überlauf verursacht.

Woran kann das nun noch liegen?

Public Class Form1

    Public FSHour As Offset(Of Byte) = New FSUIPC.Offset(Of Byte)("fstime", &H23B)
    Public FSMin As Offset(Of Byte) = New FSUIPC.Offset(Of Byte)("fstime", &H23C)
    Public FSSec As Offset(Of Byte) = New FSUIPC.Offset(Of Byte)("fstime", &H23A)
    Public FSDoY As Offset(Of Byte) = New FSUIPC.Offset(Of Byte)("fstime", &H23E)
    Public FSYear As Offset(Of Byte) = New FSUIPC.Offset(Of Byte)("fstime", &H240)


Private Sub btnStartFsTimer_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnStartFsTimer.Click
        FSHour.Value = Date.UtcNow.Hour
        FSMin.Value = Date.UtcNow.Minute
        FSSec.Value = Date.UtcNow.Second
        FSDoY.Value = Date.UtcNow.DayOfYear
        FSYear.Value = Date.UtcNow.Year

        FSUIPCConnection.Process("fstime")
End Sub

End Class

Der Wert Date.UtcNow.Year liefert 2008, wird aber nicht in die Variable FSYear.Value übernommen :(

Liebe Grüße,

Tobi

Link to comment
Share on other sites

You are defining

Public FSYear As Offset(Of Byte) = New FSUIPC.Offset(Of Byte)("fstime", &H240)

when it should be

Public FSYear As Offset(Of UShort) = New FSUIPC.Offset(Of UShort)("fstime", &H240)

You get the overflow error as you are loading a 16bit number into an 8bit variable

Hope this helps!

Link to comment
Share on other sites

Oh shit, I´m sorry!!!!! ;)

Thank you very much for your code!

The Time and the Day of the year works perfectly now :)

Only the year doesn´t work :(

"OverFlowException was not treated".

-> The arithmetic operation caused an overflow.

What can that be now?

Public Class Form1

    Public FSHour As Offset(Of Byte) = New FSUIPC.Offset(Of Byte)("fstime", &H23B)
    Public FSMin As Offset(Of Byte) = New FSUIPC.Offset(Of Byte)("fstime", &H23C)
    Public FSSec As Offset(Of Byte) = New FSUIPC.Offset(Of Byte)("fstime", &H23A)
    Public FSDoY As Offset(Of Byte) = New FSUIPC.Offset(Of Byte)("fstime", &H23E)
    Public FSYear As Offset(Of Byte) = New FSUIPC.Offset(Of Byte)("fstime", &H240)


Private Sub btnStartFsTimer_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnStartFsTimer.Click
        FSHour.Value = Date.UtcNow.Hour
        FSMin.Value = Date.UtcNow.Minute
        FSSec.Value = Date.UtcNow.Second
        FSDoY.Value = Date.UtcNow.DayOfYear
        FSYear.Value = Date.UtcNow.Year

        FSUIPCConnection.Process("fstime")
End Sub

End Class

The value Date.UtcNow.Year affords 2008, but doesn´t get taken over by FSYear.Value :(

I hope, it´s better now ;)

Regards,

Tobi

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use. Guidelines Privacy Policy We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.