26.01.2016, 15:50   
(Dieser Beitrag wurde zuletzt bearbeitet: 27.01.2016 11:28  von Y-P.)
				 
				
  Beitrag #1 
			 | 
		 
		
		
			
                                 
					
                                                 
				
                    
                     
                            
 
 
                       
                            Y-P 
 
 
                            
                                ☻ᴥᴥᴥ☻ᴥᴥᴥ☻ 
                                
                                
 
  
                            
                            
	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....    Wenn nicht, dann muss ich mich wieder einlesen.   
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 !! 
--------------------------------------------------------------------------  
 
				
				
				 
			 | 
                              
                 
				
 
 
				 
 | 
		 
		
			| 
				
			 | 
		 
	
 
	
		
			| 
				 
					26.01.2016, 16:40  
				 
				
  Beitrag #2 
			 | 
		 
		
		
			
                                 
					
                                                 
				
                    
                     
                            
 
 
                       
                            Freddy 
 
 
                            
                                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
				  
				
				
				
				
				 
			 | 
                              
                 
				
 | 
		 
		
			| 
				
			 | 
		 
	
 
	
		
			
				
					26.01.2016, 16:42   
(Dieser Beitrag wurde zuletzt bearbeitet: 26.01.2016 16:50  von GerdW.)
				 
				
  Beitrag #3 
			 | 
		 
		
		
			
                                 
					
                                                 
				
                    
                     
                            
 
 
                       
                            GerdW 
 
 
                            
                                ______________ 
                                
                                
 
  
                            
                            
	Beiträge: 17.529 
	Registriert seit: May 2009
	
 
 
LV2019 (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…   
Ich hab's mal "wortwörtlich" nach LabVIEW umgesetzt:
     
Es kommen die von dir erwarteten Werte heraus…
				  
				
				
 
				
				
				 
			 | 
                              
                 
				
 | 
		 
		
			| 
				
			 | 
		 
	
 
	
		
			
				
					26.01.2016, 16:52   
(Dieser Beitrag wurde zuletzt bearbeitet: 26.01.2016 16:57  von jg.)
				 
				
  Beitrag #4 
			 | 
		 
		
		
			
                                 
					
                                                 
				
                    
                     
                            
 
 
                       
                            jg 
 
 
                            
                                CLA & CLED 
                                
                                
 
  
                            
                            
	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.  
 
				
				
				 
			 | 
                              
                 
				
 | 
		 
		
			| 
				
			 | 
		 
	
 
	
		
			| 
				 
					26.01.2016, 23:05  
				 
				
  Beitrag #5 
			 | 
		 
		
		
			| 
                                 
				
 | 
		 
		
			| 
				
			 | 
		 
	
 
	
		
			| 
				 
					27.01.2016, 10:09  
				 
				
  Beitrag #6 
			 | 
		 
		
		
			
                                 
					
                                                 
				
                    
                     
                            
 
 
                       
                            Y-P 
 
 
                            
                                ☻ᴥᴥᴥ☻ᴥᴥᴥ☻ 
                                
                                
 
  
                            
                            
	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?   
Gruß Markus
				  
				
				
 
-------------------------------------------------------------------------- 
Bitte stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort !! 
--------------------------------------------------------------------------  
 
				
				
				 
			 | 
                              
                 
				
 | 
		 
		
			| 
				
			 | 
		 
	
 
	
		
			| 
				 
					27.01.2016, 10:34  
				 
				
  Beitrag #7 
			 | 
		 
		
		
			
                                 
					
                                                 
				
                    
                     
                            
 
 
                       
                            jg 
 
 
                            
                                CLA & CLED 
                                
                                
 
  
                            
                            
	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?   
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.  
 
				
				
				 
			 | 
                              
                 
				
 
 
				 
 | 
		 
		
			| 
				
			 | 
		 
	
 
	
		
			| 
				 
					27.01.2016, 10:59  
				 
				
  Beitrag #8 
			 | 
		 
		
		
			
                                 
					
                                                 
				
                    
                     
                            
 
 
                       
                            Lucki 
 
 
                            
                                Tech.Exp.2.Klasse 
                                
                                
 
  
                            
                            
	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.
				  
				
				
				
				
				 
			 | 
                              
                 
				
 | 
		 
		
			| 
				
			 | 
		 
	
 
	
		
			| 
				 
					27.01.2016, 11:10  
				 
				
  Beitrag #9 
			 | 
		 
		
		
			
                                 
					
                                                 
				
                    
                     
                            
 
 
                       
                            Y-P 
 
 
                            
                                ☻ᴥᴥᴥ☻ᴥᴥᴥ☻ 
                                
                                
 
  
                            
                            
	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?   
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.   
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 !! 
--------------------------------------------------------------------------  
 
				
				
				 
			 | 
                              
                 
				
 
 
				 
 | 
		 
		
			| 
				
			 | 
		 
	
 
	
		
			| 
				 
					27.01.2016, 11:16  
				 
				
			 | 
		 
		
		
			
                                 
					
                                                 
				
                    
                     
                            
 
 
                       
                            GerdW 
 
 
                            
                                ______________ 
                                
                                
 
  
                            
                            
	Beiträge: 17.529 
	Registriert seit: May 2009
	
 
 
LV2019 (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?
				 
				
				
 
				
				
				 
			 | 
                              
                 
				
 | 
		 
		
			| 
				
			 | 
		 
	
 
 |  |