Сейчас проблема что в ответе ничего нет, всё по 0. Порт правильный на контрольном 485 преобразователе индикатор мигает.
Проверил полярность, перебирал адреса и регистры, ответа в буфере нет. Единственное что смущает в описании протокола 6 байт а в примере 8. И ещё в описании посылки адрес состоит из 2 байт. Не пойму, ведь его можно задать одним байтом.
Программа без расчёта CRC.
Устройство просто не отвечает. Преобразователем на шине через Serial Port Monitor отправил число, Codesys увидел.
По CRC начинаю что-то подозревать. Получается производитель зашил программную обработку контрольной суммы в МК. Алгоритм вычисления по своему коду. Достаточно лишь раз её вычислить и вставлять в код запроса.
#define __swap_nibbles(x) ((x>>4)|(x<<4))
unsigned short crc16Calc(unsigned char *buffer, int n)
{
unsigned int i;
unsigned char crc1,crc2,tmp;
crc1 = crc2 = 0xff;
for(i = 0;i < n;i++)
{
crc2^=buffer[i];
Так вот эта CRC вычисляется от всего пакета? всегда будет разной? Или постоянные числа на последних двух байтах можно вставить и при ответе CRC будет постоянной?
Смотрю в код, кто-то же писал со знанием дела. Сам не пойму как его интерпретировать. Вставляю в онлайн компилятор C, ошибки есть. https://www.onlinegdb.com/online_csharp_compiler