Показано с 1 по 10 из 1123

Тема: Modbus Universal MasterOPC Server новый OPC сервер от компании ИнСАТ

Комбинированный просмотр

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1

    По умолчанию

    Есть код на си для подсчета контрольной суммы
    word CountCS(byte *Buff, byte Cnt)
    {
    dword cs1, cs2, m;
    byte k;
    k = 0;
    cs1 = 0;
    cs2 = 0;
    while (Cnt){
    m = *Buff;
    cs1 += m;
    m ^= 0x5A;
    if (k) m = (m » k)|(m « (8-k));
    k = (k+1) & 0x07;
    cs2 += m;
    Buff++;
    Cnt--;
    }
    return (cs2 « 8)|(cs1 & 0xFF);
    }
    В си особо не шарю. Помогите преобразовать этот код в Lua
    function CRCsum(SFrame,Length)
    CS1=1
    CS2=0
    DAT=0
    k = 0
    Frame = server.StringToTable(SFrame);
    for i =1,Length,1 do
    DAT = Frame[i];
    CS1=bit.BitAnd(CS1,DAT);
    DAT=bit.BitXor(DAT,0x5A);
    if k~=0 then
    DAT=bit.BitOr(bit.BitRshift(DAT,k),bit.BitLshift(D AT,8-k));
    else
    k=bit.BitAnd(k+1,0x07);
    CS2=bit.BitAnd(CS2,DAT);
    end
    end;
    CS1 = bit.BitAnd(CS1,0xFF);
    return CS1;
    end
    вот примерно что у меня получилось

  2. #2

    По умолчанию

    Цитата Сообщение от Алекс123 Посмотреть сообщение
    Есть код на си для подсчета контрольной суммы
    Почему += вы представляете как AND?
    И посмотрите раздел справки по Lua в ОРС:
    Руководство по языку Lua 5.1 > Библиотеки функций > Библиотека BIT >Особенности использования битовых операций
    Спасибо.

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •