Комментарии 1
Наблюдательный читатель может спросить: «А как считать crc для посылаемых данных в shell-скрипте?» Думаю, что никак (я находил расчёт только для строк и то на bash, а мы имеем усечённую версию интерпретатора).Всё правильно, CRC на bash считаются при помощи строк. Для скрипта командной оболочки openwrt такой расчёт может быть выполнен следующим образом:
string="010500060001"
cnt=${#string}
let 'cnt -= 2'
crc=0xFFFF
for i in `seq 0 2 $cnt`; do
crc=$(( crc ^ $((0x${string:$i:2})) ))
for j in `seq 0 7`; do
c=$(( crc >> 1 ))
if [ $(( crc & 1 )) = 1 ]; then
let 'c ^= 0xA001'
fi
crc=$c
done
done
printf "0x%04X" "$crc"
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Modbus-RTU на скриптах