Added more components
This commit is contained in:
34
PLC/POUs/Components/Utilities/FC_HashFNV1a_32Bit.TcPOU
Normal file
34
PLC/POUs/Components/Utilities/FC_HashFNV1a_32Bit.TcPOU
Normal file
@@ -0,0 +1,34 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<TcPlcObject Version="1.1.0.1">
|
||||
<POU Name="FC_HashFNV1a_32Bit" Id="{59a77c23-437d-4f1e-ae71-d5303ce54b27}" SpecialFunc="None">
|
||||
<Declaration><![CDATA[FUNCTION FC_HashFNV1a_32Bit : UDINT
|
||||
VAR_INPUT
|
||||
psKey : POINTER TO STRING;
|
||||
END_VAR
|
||||
VAR
|
||||
// FNV-1a Hash value, seeded with starting value
|
||||
_udiHash : UDINT := 16#811C9DC5;
|
||||
|
||||
_uiCounter : UINT;
|
||||
END_VAR
|
||||
|
||||
VAR CONSTANT
|
||||
// FNV-1a prime number for a 32bit hash
|
||||
udiPrime : UDINT := 16#01000193;
|
||||
END_VAR]]></Declaration>
|
||||
<Implementation>
|
||||
<ST><![CDATA[// Version 1.2
|
||||
IF psKey = 0 THEN
|
||||
FC_HashFNV1a_32Bit := 0;
|
||||
RETURN;
|
||||
END_IF
|
||||
WHILE psKey^[_uiCounter] <> 0 DO
|
||||
_udiHash := (_udiHash XOR BYTE_TO_UDINT(psKey^[_uiCounter])) * udiPrime;
|
||||
_uiCounter := _uiCounter + 1;
|
||||
END_WHILE
|
||||
|
||||
// Return calculated Hash
|
||||
FC_HashFNV1a_32Bit := _udiHash;]]></ST>
|
||||
</Implementation>
|
||||
</POU>
|
||||
</TcPlcObject>
|
||||
Reference in New Issue
Block a user