Protokół USS Siemens komunikacja xmegi z falownikiem

Miejsce na posty nie związane z powyższymi
ODPOWIEDZ
Awatar użytkownika
Jacek
Posty: 384
Rejestracja: 25 kwie 2016, 19:14

Protokół USS Siemens komunikacja xmegi z falownikiem

Post autor: Jacek » 29 mar 2020, 21:30

Witam - czy da się opanować w bascom protokół komunikacji uss do falowników micromaster firmy siemens aby "gadała" z nim xmega128 i jakie ewentualnie należy użyć rozwiązania hardware.
pozdrawiam Jacek.
Awatar użytkownika
Pikczu
Posty: 390
Rejestracja: 17 sie 2015, 13:46
Lokalizacja: Dublin, Ireland
Kontakt:

Re: Protokół USS Siemens komunikacja xmegi z falownikiem

Post autor: Pikczu » 30 mar 2020, 16:43

Jacek hardware to raczej rs485 może też być profibus czyli dodatkowe rezystory pull up i pull down bardzo podobny do rs485 ale ciut wyższe napięcia na liniach.
Najwięcej pracy będzie z protokołem transmisji.
Są przykłady modbusa w bascomie ale dalekie od perfekcji.
Awatar użytkownika
niveasoft
Posty: 1216
Rejestracja: 17 sie 2015, 12:13
Kontakt:

Re: Protokół USS Siemens komunikacja xmegi z falownikiem

Post autor: niveasoft » 31 mar 2020, 7:02

Jako hardware do Xmegi wystarczy chyba ośmiopinowa kosteczka Max3485. To Max485, ale na 3V3 dlatego z przodu ma 3485 :D
Co do protokołu to swoje trzeba chyba nad nim odsiedzieć.

Są jakieś biblioteki (znaczy się cały projekt w VisualBasic uzywający biblioteki/klasy) do tego, ale nie w Bascom :D https://github.com/Soghandi/USS

To nie powinno być trudne ;)
  1. Imports System.IO.Ports
  2. 'Author: Mostafa Soghandi
  3. 'Email: Mostafa.soghandi@gmail.com
  4. Public Class USSCLASS
  5.     Public Event RData(ByVal sender As Object, ByVal e As EventArgs)
  6.  
  7.     Dim MSComm1 As New SerialPort("COM1", 19200, Parity.Even, 8, StopBits.One)
  8.  
  9.     Public Sub PortOpen()
  10.         MSComm1.ReadBufferSize = 512
  11.         MSComm1.WriteBufferSize = 512
  12.         MSComm1.ReceivedBytesThreshold = 15
  13.         MSComm1.DtrEnable = True
  14.         MSComm1.RtsEnable = True
  15.         AddHandler MSComm1.DataReceived, AddressOf RecieveData
  16.         MSComm1.Open()
  17.     End Sub
  18.     Public RcvStr As String = ""
  19.     Public Function RecieveData() As Boolean
  20.         Dim i%, buf
  21.         Dim hexdisp As String = Nothing
  22.         Dim inByte(127) As Byte
  23.         buf = ""
  24.         MSComm1.Read(inByte, 0, 127)
  25.  
  26.         Dim jm As Integer = inByte(1).ToString()
  27.         For i = 0 To jm - 1
  28.             buf = buf + IIf(inByte(i) > 15, Hex(inByte(i)), "0" + Hex(inByte(i))) + Chr(32)
  29.         Next i
  30.         hexdisp = hexdisp + buf
  31.         RcvStr = jm.ToString + ":" + hexdisp.ToString
  32.         RaiseEvent RData(Me, New System.EventArgs)
  33.     End Function
  34.  
  35.     Public Sub PortClose()
  36.         MSComm1.Close()
  37.     End Sub
  38.  
  39.     Public Function RunMMS(ByVal Freq As Integer, ByVal Address As Integer) As Boolean
  40.         Dim i(15) As Byte
  41.         Dim j As Integer
  42.         Dim Pin As Single
  43.         Dim PinH As String = ""
  44.         Dim PinL As String = ""
  45.         Pin = Freq * 16384 / 50
  46.  
  47.         If Len(Hex(Pin)) = 4 Then
  48.             PinH = Mid(Hex(Pin), 1, 2)
  49.             PinL = Mid(Hex(Pin), 3, 2)
  50.         End If
  51.  
  52.         If Len(Hex(Pin)) < 4 Then
  53.             PinH = Mid(Hex(Pin), 1, 1)
  54.             PinL = Mid(Hex(Pin), 2, 2)
  55.         End If
  56.  
  57.         i(0) = &H2
  58.         i(1) = &HE
  59.         i(2) = "&H" & Hex(Address).ToString
  60.         MsgBox(i(2))
  61.         i(3) = &H0
  62.         i(4) = &H0
  63.         i(5) = &H0
  64.         i(6) = &H0
  65.         i(7) = &H0
  66.         i(8) = &H0
  67.         i(9) = &H0
  68.         i(10) = &H0
  69.  
  70.         i(11) = &H4
  71.         i(12) = &H7F
  72.         i(13) = "&H" & PinH.ToString
  73.         i(14) = "&H" & PinL.ToString
  74.  
  75.         For j = 0 To 14
  76.             i(15) = i(15) Xor i(j)
  77.         Next j
  78.         MSComm1.Write(i, 0, i.Length)
  79.     End Function
  80.  
  81.     Public Function StopRunning(ByVal Address As Integer) As Boolean
  82.         Dim i(15) As Byte
  83.         Dim j As Integer
  84.         i(0) = &H2
  85.         i(1) = &HE
  86.         i(2) = "&H" & Hex(Address).ToString
  87.  
  88.         i(3) = &H0
  89.         i(4) = &H0
  90.         i(5) = &H0
  91.         i(6) = &H0
  92.         i(7) = &H0
  93.         i(8) = &H0
  94.         i(9) = &H0
  95.         i(10) = &H0
  96.  
  97.         i(11) = &H4
  98.         i(12) = &H7E
  99.         i(13) = &H0
  100.         i(14) = &H0
  101.  
  102.         For j = 0 To 14
  103.             i(15) = i(15) Xor i(j)
  104.         Next j
  105.         MSComm1.Write(i, 0, i.Length)
  106.     End Function
  107.  
  108.     Public Function ReverseRun(ByVal Freq As Integer, ByVal Address As Integer) As Boolean
  109.         Dim i(15) As Byte
  110.         Dim j As Integer
  111.         Dim Pin As Single
  112.         Dim PinH As String = ""
  113.         Dim PinL As String = ""
  114.         Pin = Val(Freq) * 16384 / 50
  115.  
  116.         If Len(Hex(Pin)) = 4 Then
  117.             PinH = Mid(Hex(Pin), 1, 2)
  118.             PinL = Mid(Hex(Pin), 3, 2)
  119.         End If
  120.  
  121.         If Len(Hex(Pin)) < 4 Then
  122.             PinH = Mid(Hex(Pin), 1, 1)
  123.             PinL = Mid(Hex(Pin), 2, 2)
  124.         End If
  125.  
  126.         i(0) = &H2
  127.         i(1) = &HE
  128.         i(2) = "&H" & Hex(Address).ToString
  129.         i(3) = &H0
  130.         i(4) = &H0
  131.         i(5) = &H0
  132.         i(6) = &H0
  133.         i(7) = &H0
  134.         i(8) = &H0
  135.         i(9) = &H0
  136.         i(10) = &H0
  137.  
  138.         i(11) = &HC
  139.         i(12) = &H7F
  140.         i(13) = "&H" + PinH.ToString
  141.         i(14) = "&H" + PinL.ToString
  142.  
  143.         For j = 0 To 14
  144.             i(15) = i(15) Xor i(j)
  145.         Next j
  146.         MSComm1.Write(i, 0, i.Length)
  147.     End Function
  148.  
  149.     Public Function RunMMSOnJOGMode(ByVal Address As Integer) As Boolean
  150.         Dim i(15) As Byte
  151.         Dim j As Integer
  152.  
  153.         i(0) = &H2
  154.         i(1) = &HE
  155.         i(2) = "&H" & Hex(Address).ToString
  156.  
  157.         i(3) = &H0
  158.         i(4) = &H0
  159.         i(5) = &H0
  160.         i(6) = &H0
  161.         i(7) = &H0
  162.         i(8) = &H0
  163.         i(9) = &H0
  164.         i(10) = &H0
  165.  
  166.         i(11) = &H5
  167.         i(12) = &H7E
  168.         i(13) = &H0
  169.         i(14) = &H0
  170.  
  171.  
  172.         For j = 0 To 14
  173.             i(15) = i(15) Xor i(j)
  174.         Next j
  175.         MSComm1.Write(i, 0, i.Length)
  176.  
  177.     End Function
  178.  
  179.     Public Function ReverseJOG(ByVal address As Integer) As Boolean
  180.         Dim i(15) As Byte
  181.         Dim j As Integer
  182.         i(0) = &H2
  183.         i(1) = &HE
  184.         i(2) = "&H" & Hex(address).ToString
  185.  
  186.         i(3) = &H0
  187.         i(4) = &H0
  188.         i(5) = &H0
  189.         i(6) = &H0
  190.         i(7) = &H0
  191.         i(8) = &H0
  192.         i(9) = &H0
  193.         i(10) = &H0
  194.  
  195.         i(11) = &H6
  196.         i(12) = &H7E
  197.         i(13) = &H0
  198.         i(14) = &H0
  199.  
  200.         For j = 0 To 14
  201.             i(15) = i(15) Xor i(j)
  202.         Next j
  203.         MSComm1.Write(i, 0, i.Length)
  204.     End Function
  205.     Public Function StopJOG(ByVal address As Integer) As Boolean
  206.         Dim i(15) As Byte
  207.         Dim j As Integer
  208.         i(0) = &H2
  209.         i(1) = &HE
  210.         i(2) = "&H" & Hex(address).ToString
  211.  
  212.         i(3) = &H0
  213.         i(4) = &H0
  214.         i(5) = &H0
  215.         i(6) = &H0
  216.         i(7) = &H0
  217.         i(8) = &H0
  218.         i(9) = &H0
  219.         i(10) = &H0
  220.  
  221.         i(11) = &H4
  222.         i(12) = &H7E
  223.         i(13) = &H0
  224.         i(14) = &H0
  225.  
  226.         For j = 0 To 14
  227.             i(15) = i(15) Xor i(j)
  228.         Next j
  229.         MSComm1.Write(i, 0, i.Length)
  230.     End Function
  231.  
  232.     Public Function ReqParam(ByVal address As Integer) As Boolean
  233.         Dim i(15) As Byte
  234.         Dim j As Integer
  235.         i(0) = &H2
  236.         i(1) = &HE
  237.         i(2) = "&H" & Hex(address).ToString
  238.  
  239.         i(3) = &H10
  240.         i(4) = &H3
  241.         i(5) = &H0
  242.         i(6) = &H0
  243.         i(7) = &H0
  244.         i(8) = &H3
  245.         i(9) = &H0
  246.         i(10) = &H0
  247.  
  248.         i(11) = &H0
  249.         i(12) = &H0
  250.         i(13) = &H0
  251.         i(14) = &H0
  252.  
  253.         For j = 0 To 14
  254.             i(15) = i(15) Xor i(j)
  255.         Next j
  256.  
  257.         MSComm1.Write(i, 0, i.Length)
  258.     End Function
  259.  
  260. End Class
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.
Awatar użytkownika
Jacek
Posty: 384
Rejestracja: 25 kwie 2016, 19:14

Re: Protokół USS Siemens komunikacja xmegi z falownikiem

Post autor: Jacek » 31 mar 2020, 20:40

Witam - dziękuje za odpowiedzi - przygotuje na pcb miejsce na MAX3485 i dodatkowy standardowy uart.
Czy wystarczy typowa aplikacja z datasheet?.
pozdrawiam Jacek.
ODPOWIEDZ