Добавить в корзинуПозвонить
Найти в Дзене

C#. Протокол работы с весами Тензо-М.

Всем привет.
Не так дано встала задача написать программу на C шарп, одна из задач программы - получать вес с терминала тв-003/05H по протоколу Тензо-м, в нем надо рассчитывать контрольную сумму, в документации приведен пример как это сделать на C++:
Ассемблерная вставка на с++
Не долго думая написал класс на С шарпе, для формирования CRC, может кому пригодиться:

Всем привет.

Не так дано встала задача написать программу на C шарп, одна из задач программы - получать вес с терминала тв-003/05H по протоколу Тензо-м, в нем надо рассчитывать контрольную сумму, в документации приведен пример как это сделать на C++:

Ассемблерная вставка на с++
Ассемблерная вставка на с++

Не долго думая написал класс на С шарпе, для формирования CRC, может кому пригодиться:

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

public class CRC8Calc

{

public byte Checksum(params byte[] val)

{

int crl = 0;

int crlDec = 0;

String crlS = "00000000";

String cf = "0";

String cfNew = "0";

String byteS = "";

foreach (byte b in val)

{

byteS = Convert.ToString(b, 2).PadLeft(8, '0');

for (int j = 0; j < 8; ++j)

{

cf = byteS.Substring(0, 1);

byteS = byteS.Substring(1, byteS.Length - 1) + cf;

cfNew = crlS.Substring(0, 1);

crlS = crlS.Substring(1, byteS.Length - 1) + cf;

cf = cfNew;

if (cf.Trim() != "0")

{

crlDec = Convert.ToInt32(crlS, 2);

crlDec = crlDec ^ (int)0x69;

crlS = Convert.ToString(crlDec, 2).PadLeft(8, '0');

}

else

{

crlDec = Convert.ToInt32(crlS, 10);

}

}

}

crl = crlDec;

return (byte)crl;

}

}

Вот и все. Если есть вопросы пишите в коментариях.