INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.


Antwort schreiben 

CRC-Berechnung in LabVIEW anhand eines C-Code-Beispiels /Suche nach Frequenzumrichter



Wenn dein Problem oder deine Frage geklärt worden ist, markiere den Beitrag als "Lösung",
indem du auf den "Lösung" Button rechts unter dem entsprechenden Beitrag klickst. Vielen Dank!

26.01.2016, 15:50 (Dieser Beitrag wurde zuletzt bearbeitet: 27.01.2016 11:28 von Y-P.)
Beitrag #1

Y-P Offline
☻ᴥᴥᴥ☻ᴥᴥᴥ☻
LVF-Team

Beiträge: 12.612
Registriert seit: Feb 2006

Developer Suite Core -> LabVIEW 2015 Prof.
2006
EN

71083
Deutschland
CRC-Berechnung in LabVIEW anhand eines C-Code-Beispiels /Suche nach Frequenzumrichter
Hallo zusammen,

kann mir jemand sagen wie der folgende C-Code in LabVIEW aussieht, damit ich entsprechend auf die CRC-Prüfsumme (im Bsp. 7E 0A und 3F C8) komme?
Dafür kenne ich mich in C nicht mehr gut genug aus.... Bahn Wenn nicht, dann muss ich mich wieder einlesen. Confused

Zitat:Die Kommunikation zwischen dem Steuergerät und dem mit RS485 ausgestatteten Frequenzumrichter muss im RTU-Modus ablaufen. Dabei erwartet der ST9000 Umrichter in Werkseinstellung eine Übertragung mit 19200 Baud, 8/N/2. Über einfache Datenübertragung der Bytes im Rohformat ohne weitere Codierung wird gesendet und empfangen. Zusätzliche Steuerzeichen sind nicht notwendig.

Hier zwei Beispiel-Datensätze gesendet an den Frequenzumrichter:
01 07 20 00 00 01 7E 0A (Start-Befehl, dargestellt als Hexadezimalzahlen)
01 07 20 00 00 06 3F C8 (Stopp-Befehl, dargestellt als Hexadezimalzahlen)

Datensätze müssen immer am Stück gesendet werden. Tritt zwischen zwei einzelnen Zeichen eine Pause von mehr als 1½ Zeichen Dauer auf, so ist der Datensatz laut Protokolldefinition ungültig und zu verwerfen.

Kurze Erklärung der Struktur:
01 = Adresse des Frequenzumrichters (wird am Frequenzumrichter über F9.02 eingestellt)
07 = flüchtige Speicherung, Wert wird nicht fest programmiert
20 00 = Steuerparameteradresse
00 01 = Vorwärtsbetrieb
7E 0A = CRC-Checksumme
Weitere Adressen und Funktionen können Sie der Anleitung entnehmen.

Die CRC-Prüfsumme können Sie wie folgt errechnen:

Funktion zur Berechnung der CRC-Prüfsumme (in C):

unsigned int cal_crc16 (unsigned char *data, unsigned int length)
{
unsigned int i,crc_value=0xffff;

while(length–)
{
crc_result ^= *data++;
for(i=0; i<8; i++)
{
if(crc_result & 0x01)
{
crc_result = (crc_value >> 1)^0xa001;
}
else
{
crc_result = crc_result >> 1;
}
}
}
crc_result = ((crc_result & 0xff) << 8) | (crc_result >> 8);

return(crc_result);
}

Beachten Sie bitte, dass die CRC-16-Prüfsumme im Modbus-Format als Little Endian übertragen werden muss, d.h. die niederwertige Hälfte des Datenwortes vor der höherwertigen (in Hexadezimaldarstellung, also die ersten beiden und die letzten beiden Zeichen des Ergebnisses vertauscht werden), damit sie zum Algorithmus des Umrichters (wie oben in der Funktion cal_crc16()) passt.

Quelle: http://www.sourcetronic.com/faq/st9000er...rnsteuern/

Gruß Markus

--------------------------------------------------------------------------
Bitte stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort !!
--------------------------------------------------------------------------
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
26.01.2016, 16:40
Beitrag #2

Freddy Offline
Oldtimer
****


Beiträge: 729
Registriert seit: Aug 2008

2019, 2020, 2021
1996
DE

76275
Deutschland
RE: CRC-Berechnung in LabVIEW anhand eines C-Code-Beispiels
Hallo Markus,
ich habe da mal was gelesen, könnte Dir weiterhelfen.
https://decibel.ni.com/content/docs/DOC-11072

Gruß Freddy
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
26.01.2016, 16:42 (Dieser Beitrag wurde zuletzt bearbeitet: 26.01.2016 16:50 von GerdW.)
Beitrag #3

GerdW Offline
______________
LVF-Team

Beiträge: 17.469
Registriert seit: May 2009

LV2021
1995
DE_EN

10×××
Deutschland
RE: CRC-Berechnung in LabVIEW anhand eines C-Code-Beispiels
Hallo Markus,

bei Wikipedia findet sich dieses Code-Beispiel (erster Treffer bei der Suche nach "crc a001"):
Code:
const
  Mask: Word = $A001;

var
  CRC: Word;
  N, I: Integer;
  B: Byte;

begin
  CRC := $FFFF;
  for I := Low(Buffer) to High(Buffer) do
  begin
    B := Buffer[I];
    CRC := CRC xor B;
    for N := 1 to 8 do
      if (CRC and 1) > 0 then
        CRC := (CRC shr 1) xor Mask
      else
        CRC := (CRC shr 1);
  end;
  Showmessage(IntToHex(CRC, 4)); (* Ausgabe *)
end;
Das scheint mit deinem Code identisch zu sein, ist aber wesentlich besser lesbar… Big Grin

Ich hab's mal "wortwörtlich" nach LabVIEW umgesetzt:
   
Es kommen die von dir erwarteten Werte heraus…

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
26.01.2016, 16:52 (Dieser Beitrag wurde zuletzt bearbeitet: 26.01.2016 16:57 von jg.)
Beitrag #4

jg Offline
CLA & CLED
LVF-Team

Beiträge: 15.864
Registriert seit: Jun 2005

20xx / 8.x
1999
EN

Franken...
Deutschland
RE: CRC-Berechnung in LabVIEW anhand eines C-Code-Beispiels
Modbus? RTU? Dafür gibt es bei NI 2 APIs zum Download!!! Wozu sich also mit der CRC rumärgern, gibt es fertig! z.B. hier: http://www.ni.com/example/29756/en/

Gruß, Jens

   

EDIT: Code zur CRC ist nur kopiert - ist nicht von mir...

Wer die erhabene Weisheit der Mathematik tadelt, nährt sich von Verwirrung. (Leonardo da Vinci)

!! BITTE !! stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort!

Einführende Links zu LabVIEW, s. GerdWs Signatur.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
26.01.2016, 23:05
Beitrag #5

Lucki Offline
Tech.Exp.2.Klasse
LVF-Team

Beiträge: 7.699
Registriert seit: Mar 2006

LV 2016-18 prof.
1995
DE

01108
Deutschland
RE: CRC-Berechnung in LabVIEW anhand eines C-Code-Beispiels
Dem Programmierer des von Jens kopierten Beispiels scheint aber bei der inneren Schleife plötzlich entfallen zu sein, dass es auch For-Schleifen gibt. Also wenn, dann schon so:
   
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
27.01.2016, 10:09
Beitrag #6

Y-P Offline
☻ᴥᴥᴥ☻ᴥᴥᴥ☻
LVF-Team

Beiträge: 12.612
Registriert seit: Feb 2006

Developer Suite Core -> LabVIEW 2015 Prof.
2006
EN

71083
Deutschland
RE: CRC-Berechnung in LabVIEW anhand eines C-Code-Beispiels
Vielen Dank Euch allen. Das mit der CRC-Prüfsumme funktioniert nun.
Habe es noch etwas erweitert und die CRC-Prüfsumme an den String angefügt.
       

Mit den Modbus-VIs komme ich aber noch nicht so klar. Wie bekomme ich nun meinen erzeugten Hex-String an den Frequenzumrichter geschickt? Unsure

Gruß Markus

--------------------------------------------------------------------------
Bitte stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort !!
--------------------------------------------------------------------------
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
27.01.2016, 10:34
Beitrag #7

jg Offline
CLA & CLED
LVF-Team

Beiträge: 15.864
Registriert seit: Jun 2005

20xx / 8.x
1999
EN

Franken...
Deutschland
RE: CRC-Berechnung in LabVIEW anhand eines C-Code-Beispiels
(27.01.2016 10:09 )Y-P schrieb:  Vielen Dank Euch allen. Das mit der CRC-Prüfsumme funktioniert nun.
Habe es noch etwas erweitert und die CRC-Prüfsumme an den String angefügt.

Mit den Modbus-VIs komme ich aber noch nicht so klar.
Dein Modbus-String-Bsp ist extrem ungewöhnlich. Das ist eine Anfrage für Modbus Function Code 7, "Read Exception Status". Und damit sollen irgendwelche Einstellungen vorgenommen werden? Das ist mir noch nicht untergekommen. Hast du keine gescheite Doku vom Hersteller? Was du uns ins Forum kopiert hast, ist ja nur das hier aus den FAQ.
(27.01.2016 10:09 )Y-P schrieb:  Wie bekomme ich nun meinen erzeugten Hex-String an den Frequenzumrichter geschickt? Unsure
Write VISA...

Gruß, Jens

Wer die erhabene Weisheit der Mathematik tadelt, nährt sich von Verwirrung. (Leonardo da Vinci)

!! BITTE !! stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort!

Einführende Links zu LabVIEW, s. GerdWs Signatur.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
27.01.2016, 10:59
Beitrag #8

Lucki Offline
Tech.Exp.2.Klasse
LVF-Team

Beiträge: 7.699
Registriert seit: Mar 2006

LV 2016-18 prof.
1995
DE

01108
Deutschland
RE: CRC-Berechnung in LabVIEW anhand eines C-Code-Beispiels
(27.01.2016 10:09 )Y-P schrieb:  Habe es noch etwas erweitert und die CRC-Prüfsumme an den String angefügt.
Die CRC-Prüfung wird ja sowohl zum Erzeugen der Prüsumme als auch zum Prüfen eines Strings mit Checksumme verwendet. Das Prüfen erfolgt einfach so, dass bei Erstellung der Checksumme von einen String mit bereits angehängert Checksumme der Wert Null herauskommen muss.

Aus diesem Grunde würde ich das CRC-Sub-Vi lieber so machen, dass es sich für beide Aufgaben gleichermaßen verwenden läßt. Also nicht schon im SubVI die Prüfsumme an den String anhängen. Ist nur so ein Vorschlag.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
27.01.2016, 11:10
Beitrag #9

Y-P Offline
☻ᴥᴥᴥ☻ᴥᴥᴥ☻
LVF-Team

Beiträge: 12.612
Registriert seit: Feb 2006

Developer Suite Core -> LabVIEW 2015 Prof.
2006
EN

71083
Deutschland
RE: CRC-Berechnung in LabVIEW anhand eines C-Code-Beispiels
Dann brauche ich die Modbus-VIs gar nicht? Unsure

Ich habe leider auch keine Anleitung, weil ich den Umrichter noch nicht habe. Den Umrichter wollte ich zuerst nehmen, weil es bei Sourcetronic LabVIEW-Treiber gibt. Allerdings habe ich nun erfahren, dass dies nur für das alte Modell gilt und nicht für das neue.
Da sind sie wohl noch am Programmieren.

Hättet Ihr mir evtl. einen Frequenzumrichter, der besser dafür geeignet ist und für den es schon fertige VIs gibt? NI hat mir Sourcetronic empfohlen (was aber beim neuen Typ auch nicht mehr zutrifft). Mehr wussten die auch nicht. Wie es sich angehört hat, haben die damit aber auch nicht so wirklich viel Erfahrung gehabt.
Vielleicht hat ja schon mal jemand von Euch einen Frequenzumrichter angesteuert und hat mir einen guten Tip. Big Grin
Ich kann ja aber schon mal nachfragen, ob es das Handbuch von Sourcetronic in elektronischer Form gibt.

Gruß Markus

(27.01.2016 10:34 )jg schrieb:  Write VISA...

--------------------------------------------------------------------------
Bitte stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort !!
--------------------------------------------------------------------------
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
27.01.2016, 11:16
Beitrag #10

GerdW Offline
______________
LVF-Team

Beiträge: 17.469
Registriert seit: May 2009

LV2021
1995
DE_EN

10×××
Deutschland
RE: CRC-Berechnung in LabVIEW anhand eines C-Code-Beispiels
Hallo Markus,

wir verwenden hier diverse Umrichter, aber entweder per Analog/Digital-Signal (Siemens G110) oder per CANopen (SEW, ControlTechniques).
Zu ModBus kann ich nichts empfehlen…

Muss es ModBus sein, weil du über dieses Protokoll und diese (preiswerte) Schnittstelle Werte zurücklesen willst?

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
30
Antwort schreiben 


Möglicherweise verwandte Themen...
Themen Verfasser Antworten Views Letzter Beitrag
  Kollmorgen S700 Frequenzumrichter ansteuern Edi70 1 2.224 09.07.2021 08:39
Letzter Beitrag: GerdW
Music FGEN Erzeugung eines Signalverlaufs anhand einer Mathematischen Funktion DavidStefan 11 7.442 29.05.2021 07:03
Letzter Beitrag: GerdW
Question DQMH - Wie kann ich ein Modul anhand von Hardware wechseln TpunktN 2 3.132 25.02.2021 12:54
Letzter Beitrag: TpunktN
  Suche Ideen für den Aufbau eines neuen Programms TpunktN 4 3.774 17.12.2020 11:23
Letzter Beitrag: MScz
  Ermittlung der Parameter eines PT1 Glieds in LabVIEW peter.sigg 1 2.758 10.07.2020 09:10
Letzter Beitrag: kpa
  SVN Revision anhand des commit-Datums ermitteln spacz 2 3.080 28.02.2019 08:09
Letzter Beitrag: th13

Gehe zu: