4/8/2010 11:26 AM | |
Posts: 22 Rating: (0) |
Hi, someone realized a CRC16 algorithm in SCL language? Can help me? Thank you Best regards Giorgio Facco |
4/8/2010 2:29 PM | |
Posts: 22 Rating: (0) |
thank you. Is it Pascal language? Best regards Giorgio Facco |
4/9/2010 7:09 AM | |
Posts: 2348 Rating: (264) |
Almost:^) Delphi |
5/5/2010 11:00 AM | |
Posts: 22 Rating: (0) |
Thank you ! I 'll test. Best regards Giorgio Facco |
5/18/2010 9:30 AM | |
Posts: 22 Rating: (0) |
Hi, both solutions works!! tank you for the help Giorgio Facco |
This contribution was helpful to1 thankful Users |
9/22/2017 9:32 AM | |
Joined: 4/11/2012 Last visit: 9/20/2024 Posts: 181 Rating: (34) |
I have now converted to SCL and tested the function provided in the first page, (the short but CPU heavy function, the one not using tables) and it does not work. One glaring bug is that there is a comparison "if ((crc or $0001)<>0) then..." This will always be <> 0, as the $0001 constant brings the <>0 to the comparison. Even when I tested different variations on that comparison, I did not manage to get the code to work. I compared the results to Lambert online calculator and an existing code I have that works. https://www.lammertbies.nl/comm/info/crc-calculation.html Attached is a test project with the two CRC calculations side by side. In short: I do have a CRC function that works, but I want to understand how come the Delphi code could have ever worked? Is it intended to work for some other CRC and not for the selected polynomial? I'm using CRC-16-IBM (modbus) polynomial. (https://en.wikipedia.org/wiki/Cyclic_redundancy_check) Edit: I found this topic useful when I created the working CRC calculation on my own: https://support.industry.siemens.com/tf/ww/en/posts/ccitt-crc-calculation-in-s7-1200/51128?page=0&pageSize=10 It includes two manuals that describe methods for calculating the modbus CRC, and it also performs the loop only 8 times, not 9 times. Edit2: The source of the manual I mention above: http://www.modbus.org/specs.php AttachmentCRC16.zip (1134 Downloads) |
Last edited by: Elonen at: 9/22/2017 9:57:29 AMEdited to include link to topic including manuals with CRC calculation diagram Last edited by: Elonen at: 9/27/2017 7:22:13 AMEdit2: Added the link to modbus web page for the manual. Last edited by: Elonen at: 11/14/2017 11:55:11 AMAdded note that I had no trouble in creating working CRC calculation using the links I provided |
|
This contribution was helpful to2 thankful Users |
8/2/2019 7:15 PM | |
Joined: 3/14/2010 Last visit: 7/25/2024 Posts: 19 Rating: (3) |
Tanks Smiffy for the post you made on the first page of this topic! According to this information Modbus CRC has a Polynomial of 16#8005 an a initial value of 16#FFFF. In the code Smiffy provided the initial value was missing. On this page you can also create a lookup table to use for finding the CRC also for other standards. Thanks to Smiffy I created the function block below to successful create a CRC for modbus. Now I am able to send and receive modbus data through a serial server. Here is the source, hope it helps someone in the future.
Best regards, Martijn |
Last edited by: MartijnD at: 08/02/2019 19:18:03DIKS automation - https://diks.am |
|
This contribution was helpful to2 thankful Users |
8/6/2019 5:32 AM | |
Joined: 7/5/2013 Last visit: 9/24/2024 Posts: 3113 Rating: (512) |
When using TIA V14 SP1 or higher you may use LGF_CRC16 which can be found in the section Data Handling in the Library of general functions (LGF) for SIMATIC STEP 7 (TIA Portal) and SIMATIC S7-1200 / S7-1500. |
Last edited by: Prof. Frink at: 08/06/2019 05:33:36Pi is exactly three! |
|
This contribution was helpful to1 thankful Users |
8/13/2019 9:04 AM | |
Joined: 3/14/2010 Last visit: 7/25/2024 Posts: 19 Rating: (3) |
Please check my attachment, in my case the LGF library gives wrong results. Maybe I do something wrong or maybe it is a bug in in the library The attachment contains a test project and 3 screenshots of the different results. Please do not pay attention to the timeout in the QModbusMaster screenshot, there was no device connected to the comport. QModbusMaster is debug package for me wich is working very well. So I choose this one to prove the correct and working CRC. AttachmentCRC_20190813_0848.zip (657 Downloads) |
DIKS automation - https://diks.am |
|
8/14/2019 10:25 AM | |
Joined: 7/5/2013 Last visit: 9/24/2024 Posts: 3113 Rating: (512) |
Hello Martijn,
I only found the project. No screenshots. But, I guess, they would help to understand. New: Ok, now I see, it seems the LGF_CRC16 cannot be used to calculate the Modbus-checksum. You expect 0x5AD7 (which is the result when calculating with the online tool on "sunshine2k.de" and others), but you get 0x7853. Online CRC Calculator provides a table which shows RefIn and RefOut - for CRC/Modbus both are true and the LGF_CRC16 returns another value whereas e.g. for CRC-16/CCITT-FALSE both are false and the LGF_CRC16 returns the same value. Regards, Frink |
Last edited by: Prof. Frink at: 08/14/2019 11:29:29New Pi is exactly three! |
|
This contribution was helpful to1 thankful Users |
Follow us on