Siemens Excel Veri Kaydetme

demura09

Üye
Katılım
8 Eki 2011
Mesajlar
4
Puanları
1
Yaş
33
Merhabalar. Kurmuş olduğum bir sistemde sahadan gelen 7 adet sicaklik değerini okuyorum. Bu sıcaklik değerlerini start sinyali geldiğinde excele kayıt etmek istiyorum. Bunun için Siemens PC Station oluşturdum ve WinCC Advanced kullandım ve bir script hazırladım. Aslında belli bir noktaya kadarda çalışıyor ama her saniye kayıt kısmını yapamadım. Yazmış olduğum scriptte o günün tarih ve saatinde bir adet klasör oluşturuyorum ve bu klasör içinde de Sıcaklik_Kayit adında bir excel oluşturuyorum. Bu excel içine de kayıt işlemi gerçekleştirebiliyorum. Ama bu kayıt işlemi için ana ekrana bir tane buton koymam ve kayıt için sürekli ona basmam gerekiyor. Yani script PLC'den gelen bir tetik ile çalışmıyor. Yazmış olduğum kod aşağıdadır. Bilen arkadaşlar destek olabilirlerse sevinirim.
Kod:
Sub Write_Data()

Dim objFSO, objFSOText, objFolder, objFile, objShell

Dim File, FileName, FileExist, Apendix, Row

Dim strDirectory, strFile, strDate

Dim d, m, y, h, mi



'Start sinyali yoksa kayıt oluşturma

If Not SmartTags("Start") Then

    Exit Sub   

End If





    d=Day(Now)

    m=Month(Now)

    y=Year(Now)

    h=Hour(Now)

    mi=Minute(Now)

    strDate = y & "." & m & "." & d & "-" & h & "." & mi



    strDirectory = "C:\Sicaklik Kayit\" & " " & strDate



    ' Create the File System Object

    Set objFSO = CreateObject("Scripting.FileSystemObject")



    ' Check if folder exists

    If objFSO.FolderExists(strDirectory) Then

        Set objFolder = objFSO.GetFolder(strDirectory)

    Else

        Set objFolder = objFSO.CreateFolder(strDirectory)

    End If



' Check if file exists

    FileName = "Sicaklik_Kayit.csv"



    Set File = CreateObject("Scripting.FileSystemObject")

    FileExist = File.FileExists(objFolder & "\" & FileName)



    If FileExist = False Then

        File.CreateTextFile(objFolder &"\" & FileName)

        Set Apendix = File.OpenTextFile(objFolder & "\" & FileName,8)

  

        Apendix.WriteLine("Cihaz_Act_Sicaklik ; Cihaz_Set_Sicaklik; Kalıp_Giriş_Sicaklik ; Kalıp_Çıkış_Sicaklik ; Kalıp1 ; Kalıp2 ; Kalıp3 ; Kalıp4")

        Apendix.Close



        Set File = Nothing

    End If





Set File = CreateObject("Scripting.FileSystemObject")

Set Row = File.OpenTextFile(objFolder &"\"& FileName,8)



Row.WriteLine(SmartTags("DB_ACT_SICAKLIK") & ";" & SmartTags("SET_OKUNAN") &  ";" &  SmartTags("ARDUINO_DB_SICAKLIK1") & ";" & SmartTags("ARDUINO_DB_SICAKLIK2") &  ";" & SmartTags("ARDUINO_DB_SICAKLIK3") & ";" & SmartTags("ARDUINO_DB_SICAKLIK4") &  ";" & SmartTags("ARDUINO_DB_SICAKLIK5") & ";" & SmartTags("ARDUINO_DB_SICAKLIK6"))

Row.Close   



Set objFolder = Nothing

Set objFile = Nothing

SmartTags("KAYIT_OK")=True



End Sub
 
Moderatör tarafında düzenlendi:
Yazımızda endüstrinin can damarı sayılabilecek PLC’yi inceleyeceğiz.
KNX Standardı, küçük bir rezidansın içerisindeki aydınlatma, perde panjur, klima kontrolünden, Dünya’nın en büyük havalimanlarındaki aydınlatma otomasyonu gibi çözümler için tercih edilen bir Dünya standardıdır.
Merhabalar. Kurmuş olduğum bir sistemde sahadan gelen 7 adet sicaklik değerini okuyorum. Bu sıcaklik değerlerini start sinyali geldiğinde excele kayıt etmek istiyorum. Bunun için Siemens PC Station oluşturdum ve WinCC Advanced kullandım ve bir script hazırladım. Aslında belli bir noktaya kadarda çalışıyor ama her saniye kayıt kısmını yapamadım. Yazmış olduğum scriptte o günün tarih ve saatinde bir adet klasör oluşturuyorum ve bu klasör içinde de Sıcaklik_Kayit adında bir excel oluşturuyorum. Bu excel içine de kayıt işlemi gerçekleştirebiliyorum. Ama bu kayıt işlemi için ana ekrana bir tane buton koymam ve kayıt için sürekli ona basmam gerekiyor. Yani script PLC'den gelen bir tetik ile çalışmıyor. Yazmış olduğum kod aşağıdadır. Bilen arkadaşlar destek olabilirlerse sevinirim.
Kod:
Sub Write_Data()

Dim objFSO, objFSOText, objFolder, objFile, objShell

Dim File, FileName, FileExist, Apendix, Row

Dim strDirectory, strFile, strDate

Dim d, m, y, h, mi



'Start sinyali yoksa kayıt oluşturma

If Not SmartTags("Start") Then

    Exit Sub  

End If





    d=Day(Now)

    m=Month(Now)

    y=Year(Now)

    h=Hour(Now)

    mi=Minute(Now)

    strDate = y & "." & m & "." & d & "-" & h & "." & mi



    strDirectory = "C:\Sicaklik Kayit\" & " " & strDate



    ' Create the File System Object

    Set objFSO = CreateObject("Scripting.FileSystemObject")



    ' Check if folder exists

    If objFSO.FolderExists(strDirectory) Then

        Set objFolder = objFSO.GetFolder(strDirectory)

    Else

        Set objFolder = objFSO.CreateFolder(strDirectory)

    End If



' Check if file exists

    FileName = "Sicaklik_Kayit.csv"



    Set File = CreateObject("Scripting.FileSystemObject")

    FileExist = File.FileExists(objFolder & "\" & FileName)



    If FileExist = False Then

        File.CreateTextFile(objFolder &"\" & FileName)

        Set Apendix = File.OpenTextFile(objFolder & "\" & FileName,8)

 

        Apendix.WriteLine("Cihaz_Act_Sicaklik ; Cihaz_Set_Sicaklik; Kalıp_Giriş_Sicaklik ; Kalıp_Çıkış_Sicaklik ; Kalıp1 ; Kalıp2 ; Kalıp3 ; Kalıp4")

        Apendix.Close



        Set File = Nothing

    End If





Set File = CreateObject("Scripting.FileSystemObject")

Set Row = File.OpenTextFile(objFolder &"\"& FileName,8)



Row.WriteLine(SmartTags("DB_ACT_SICAKLIK") & ";" & SmartTags("SET_OKUNAN") &  ";" &  SmartTags("ARDUINO_DB_SICAKLIK1") & ";" & SmartTags("ARDUINO_DB_SICAKLIK2") &  ";" & SmartTags("ARDUINO_DB_SICAKLIK3") & ";" & SmartTags("ARDUINO_DB_SICAKLIK4") &  ";" & SmartTags("ARDUINO_DB_SICAKLIK5") & ";" & SmartTags("ARDUINO_DB_SICAKLIK6"))

Row.Close  



Set objFolder = Nothing

Set objFile = Nothing

SmartTags("KAYIT_OK")=True



End Sub


Loop kullan
 
Nasıl yapabilirim gösterebilir misin?



script i nasıl nerede çalıştırıyorsun. PLC den gelen bir bit ile mi?

bir de start sinyali olduğu sürece mi her saniye kayıt yapsın istiyorsun yoksa her saniye start sinyalini vererek mi?
 
Plc de sanal bit belirleyip Hmi panele koyacağınız bir buton ile sanal bit'i setleyip sürekli kayıt yapmasını sağlayabilirsiniz. Bir tane de reset için koyarsanız daha iyi olur tabi.
 
Merhabalar. Kurmuş olduğum bir sistemde sahadan gelen 7 adet sicaklik değerini okuyorum. Bu sıcaklik değerlerini start sinyali geldiğinde excele kayıt etmek istiyorum. Bunun için Siemens PC Station oluşturdum ve WinCC Advanced kullandım ve bir script hazırladım. Aslında belli bir noktaya kadarda çalışıyor ama her saniye kayıt kısmını yapamadım. Yazmış olduğum scriptte o günün tarih ve saatinde bir adet klasör oluşturuyorum ve bu klasör içinde de Sıcaklik_Kayit adında bir excel oluşturuyorum. Bu excel içine de kayıt işlemi gerçekleştirebiliyorum. Ama bu kayıt işlemi için ana ekrana bir tane buton koymam ve kayıt için sürekli ona basmam gerekiyor. Yani script PLC'den gelen bir tetik ile çalışmıyor. Yazmış olduğum kod aşağıdadır. Bilen arkadaşlar destek olabilirlerse sevinirim.
Kod:
Sub Write_Data()

Dim objFSO, objFSOText, objFolder, objFile, objShell

Dim File, FileName, FileExist, Apendix, Row

Dim strDirectory, strFile, strDate

Dim d, m, y, h, mi



'Start sinyali yoksa kayıt oluşturma

If Not SmartTags("Start") Then

    Exit Sub 

End If





    d=Day(Now)

    m=Month(Now)

    y=Year(Now)

    h=Hour(Now)

    mi=Minute(Now)

    strDate = y & "." & m & "." & d & "-" & h & "." & mi



    strDirectory = "C:\Sicaklik Kayit\" & " " & strDate



    ' Create the File System Object

    Set objFSO = CreateObject("Scripting.FileSystemObject")



    ' Check if folder exists

    If objFSO.FolderExists(strDirectory) Then

        Set objFolder = objFSO.GetFolder(strDirectory)

    Else

        Set objFolder = objFSO.CreateFolder(strDirectory)

    End If



' Check if file exists

    FileName = "Sicaklik_Kayit.csv"



    Set File = CreateObject("Scripting.FileSystemObject")

    FileExist = File.FileExists(objFolder & "\" & FileName)



    If FileExist = False Then

        File.CreateTextFile(objFolder &"\" & FileName)

        Set Apendix = File.OpenTextFile(objFolder & "\" & FileName,8)



        Apendix.WriteLine("Cihaz_Act_Sicaklik ; Cihaz_Set_Sicaklik; Kalıp_Giriş_Sicaklik ; Kalıp_Çıkış_Sicaklik ; Kalıp1 ; Kalıp2 ; Kalıp3 ; Kalıp4")

        Apendix.Close



        Set File = Nothing

    End If





Set File = CreateObject("Scripting.FileSystemObject")

Set Row = File.OpenTextFile(objFolder &"\"& FileName,8)



Row.WriteLine(SmartTags("DB_ACT_SICAKLIK") & ";" & SmartTags("SET_OKUNAN") &  ";" &  SmartTags("ARDUINO_DB_SICAKLIK1") & ";" & SmartTags("ARDUINO_DB_SICAKLIK2") &  ";" & SmartTags("ARDUINO_DB_SICAKLIK3") & ";" & SmartTags("ARDUINO_DB_SICAKLIK4") &  ";" & SmartTags("ARDUINO_DB_SICAKLIK5") & ";" & SmartTags("ARDUINO_DB_SICAKLIK6"))

Row.Close 



Set objFolder = Nothing

Set objFile = Nothing

SmartTags("KAYIT_OK")=True



End Sub


Start sinyali varken excell dosyasını oluşturacak ve start kesilene kadar vereceğin her pulse (kodda yazan ("clock_1s") tagı) sinyali için bir satıra değer yazacak.

HMI_Tags sayfasında "Start" sinyaline sağ tıklayıp özelliklerden events'te script'i çağır.
1592936162301.png




aynı şekilde bir sayfaya buton koyarak script'i yine çağırman gerekiyor (butonu gizleyebilirsin).

sonrası için kodlar aşağıda (kayıt_ok sinyalini istediğin yerde kullanabilirsin);
Kod:
Sub Write_Data()



Dim objFSO, objFSOText, objFolder, objFile, objShell



Dim File, FileName, FileExist, Apendix, Row



Dim strDirectory, strFile, strDate



Dim d, m, y, h, mi, clock_1s, MBit, Pf







'Start sinyali varsa kayıt oluştur



If  SmartTags("Start") Then







    d=Day(Now)



    m=Month(Now)



    y=Year(Now)



    h=Hour(Now)



    mi=Minute(Now)



    strDate = y & "." & m & "." & d & "-" & h & "." & mi







    strDirectory = "C:\Sicaklik Kayit\" & " " & strDate







    ' Create the File System Object



    Set objFSO = CreateObject("Scripting.FileSystemObject")



Do



    ' Check if folder exists



    If objFSO.FolderExists(strDirectory) Then



        Set objFolder = objFSO.GetFolder(strDirectory)



    Else



        Set objFolder = objFSO.CreateFolder(strDirectory)



    End If







' Check if file exists



    FileName = "Sicaklik_Kayit.csv"







    Set File = CreateObject("Scripting.FileSystemObject")



    FileExist = File.FileExists(objFolder & "\" & FileName)







    If FileExist = False Then



        File.CreateTextFile(objFolder &"\" & FileName)



        Set Apendix = File.OpenTextFile(objFolder & "\" & FileName,8)



 



        Apendix.WriteLine("Cihaz_Act_Sicaklik ; Cihaz_Set_Sicaklik; Kalıp_Giriş_Sicaklik ; Kalıp_Çıkış_Sicaklik ; Kalıp1 ; Kalıp2 ; Kalıp3 ; Kalıp4")



        Apendix.Close







        Set File = Nothing



    End If



'clock_1s pulse sinyali ile her saniye verileri excelle kayıt eder

Pf= SmartTags("clock_1s") And Not MBit

MBit=SmartTags("clock_1s")





If Pf Then



Set File = CreateObject("Scripting.FileSystemObject")



Set Row = File.OpenTextFile(objFolder &"\"& FileName,8)







Row.WriteLine(SmartTags("DB_ACT_SICAKLIK") & ";" & SmartTags("SET_OKUNAN") &  ";" &  SmartTags("ARDUINO_DB_SICAKLIK1") & ";" & SmartTags("ARDUINO_DB_SICAKLIK2") &  ";" & SmartTags("ARDUINO_DB_SICAKLIK3") & ";" & SmartTags("ARDUINO_DB_SICAKLIK4") &  ";" & SmartTags("ARDUINO_DB_SICAKLIK5") & ";" & SmartTags("ARDUINO_DB_SICAKLIK6"))





Row.Close 







Set objFolder = Nothing



Set objFile = Nothing



Else

End If





Loop While SmartTags("start")



Else

End If



'SmartTags("KAYIT_OK")=True



End Sub
 

Ekli dosyalar

  • 1592936361491.png
    1592936361491.png
    15.3 KB · Görüntüleme: 37
Moderatör tarafında düzenlendi:
Start sinyali varken excell dosyasını oluşturacak ve start kesilene kadar vereceğin her pulse (kodda yazan ("clock_1s") tagı) sinyali için bir satıra değer yazacak.

HMI_Tags sayfasında "Start" sinyaline sağ tıklayıp özelliklerden events'te script'i çağır.
Ekli dosyayı görüntüle 65904



aynı şekilde bir sayfaya buton koyarak script'i yine çağırman gerekiyor (butonu gizleyebilirsin).

sonrası için kodlar aşağıda (kayıt_ok sinyalini istediğin yerde kullanabilirsin);





Sub Write_Data()

Dim objFSO, objFSOText, objFolder, objFile, objShell

Dim File, FileName, FileExist, Apendix, Row

Dim strDirectory, strFile, strDate

Dim d, m, y, h, mi, clock_1s, MBit, Pf



'Start sinyali varsa kayıt oluştur

If SmartTags("Start") Then



d=Day(Now)

m=Month(Now)

y=Year(Now)

h=Hour(Now)

mi=Minute(Now)

strDate = y & "." & m & "." & d & "-" & h & "." & mi



strDirectory = "C:\Sicaklik Kayit\" & " " & strDate



' Create the File System Object

Set objFSO = CreateObject("Scripting.FileSystemObject")

Do

' Check if folder exists

If objFSO.FolderExists(strDirectory) Then

Set objFolder = objFSO.GetFolder(strDirectory)

Else

Set objFolder = objFSO.CreateFolder(strDirectory)

End If



' Check if file exists

FileName = "Sicaklik_Kayit.csv"



Set File = CreateObject("Scripting.FileSystemObject")

FileExist = File.FileExists(objFolder & "\" & FileName)



If FileExist = False Then

File.CreateTextFile(objFolder &"\" & FileName)

Set Apendix = File.OpenTextFile(objFolder & "\" & FileName,8)



Apendix.WriteLine("Cihaz_Act_Sicaklik ; Cihaz_Set_Sicaklik; Kalıp_Giriş_Sicaklik ; Kalıp_Çıkış_Sicaklik ; Kalıp1 ; Kalıp2 ; Kalıp3 ; Kalıp4")

Apendix.Close



Set File = Nothing

End If

'clock_1s pulse sinyali ile her saniye verileri excelle kayıt eder
Pf= SmartTags("clock_1s") And Not MBit
MBit=SmartTags("clock_1s")


If Pf Then

Set File = CreateObject("Scripting.FileSystemObject")

Set Row = File.OpenTextFile(objFolder &"\"& FileName,8)



Row.WriteLine(SmartTags("DB_ACT_SICAKLIK") & ";" & SmartTags("SET_OKUNAN") & ";" & SmartTags("ARDUINO_DB_SICAKLIK1") & ";" & SmartTags("ARDUINO_DB_SICAKLIK2") & ";" & SmartTags("ARDUINO_DB_SICAKLIK3") & ";" & SmartTags("ARDUINO_DB_SICAKLIK4") & ";" & SmartTags("ARDUINO_DB_SICAKLIK5") & ";" & SmartTags("ARDUINO_DB_SICAKLIK6"))


Row.Close



Set objFolder = Nothing

Set objFile = Nothing

Else
End If


Loop While SmartTags("start")

Else
End If

'SmartTags("KAYIT_OK")=True

End Sub


Merhaba. Dediğiniz şekilde yaptım ama saece ilk satırını kayıt etti. Sonrasında bir kayıt yapmadı. 1 saniye pulse olarak PLC'nin kendi clock_1Hz sinyalini kullanmıştım. Ondan olabilir belki diyerek kendim 1 saniye pulse verecek şekilde bir yazılım yaptım. Bu sefer hiç kayıt yapmadı. Nerede hata yapıyorum sizce yardımcı olabilir misiniz?
 
Merhaba. Dediğiniz şekilde yaptım ama saece ilk satırını kayıt etti. Sonrasında bir kayıt yapmadı. 1 saniye pulse olarak PLC'nin kendi clock_1Hz sinyalini kullanmıştım. Ondan olabilir belki diyerek kendim 1 saniye pulse verecek şekilde bir yazılım yaptım. Bu sefer hiç kayıt yapmadı. Nerede hata yapıyorum sizce yardımcı olabilir misiniz?

örnek proje ekte TIAPortal V14 ile yazdım. ekran alıntısında ki gibi D sürücüsüne aynı isimde (Storage Card SD) klasör oluştur veya script ten adresi ve klasör ismini istediğin gibi değiştirebilirsin. ama script te belirttiğin adreste aynı isimde klasör olsun.
 

Ekli dosyalar

  • HMI üzerinden excelle veri kaydetme.rar
    1.1 MB · Görüntüleme: 83
  • Ekran Alıntısı.PNG
    Ekran Alıntısı.PNG
    13.8 KB · Görüntüleme: 91
  • kayıt dosyasından örnek.PNG
    kayıt dosyasından örnek.PNG
    28.5 KB · Görüntüleme: 87
örnek proje ekte TIAPortal V14 ile yazdım. ekran alıntısında ki gibi D sürücüsüne aynı isimde (Storage Card SD) klasör oluştur veya script ten adresi ve klasör ismini istediğin gibi değiştirebilirsin. ama script te belirttiğin adreste aynı isimde klasör olsun.

Merhabalar. Hatamı sonradan farkettim. Benim PLC ile HMI haberleşme hızı 1s olarak ayarlıydı. sizin yazılımınızda 100ms olarak ayarlanmış. şimdi o kısmı düzeltince kayıt almaya başladı. Yardımlarınız için çok teşekkür ederim. İyi çalışmalar.
 

Forum istatistikleri

Konular
127,950
Mesajlar
913,841
Kullanıcılar
449,596
Son üye
anilhikmet

Yeni konular

Geri
Üst