Modbus в FlProg CRC
Modbus в FlProg CRC
удалено
			
			
													
					Последний раз редактировалось sonata 10 фев 2018, 00:36, всего редактировалось 1 раз.
									
			
						pony sonata
			
						- Sancho
 - Полковник
 - Сообщения: 4066
 - Зарегистрирован: 25 дек 2015, 17:32
 - Откуда: Ярославль.
 - Имя: Александр
 - Поблагодарили: 5 раз
 - Контактная информация:
 
Modbus в FlProg CRC
Есть
[spoiler=код]
Код: Выделить всё
int modbusCalcCRC(byte length, byte bufferArray[])
{
  unsigned int temp, temp2, flag;
  temp = 0xFFFF;
  for (unsigned char i = 0; i < length; i++) {
    temp = temp ^ bufferArray[i];
    for (unsigned char j = 1; j <= 8; j++) {
      flag = temp & 0x0001;
      temp >>= 1;
      if (flag)   temp ^= 0xA001;
    }
  }
  temp2 = temp >> 8;
  temp = (temp << 8) | temp2;
  temp &= 0xFFFF;
  return temp;
}
byte _modbusValidateRequest() {
int msgCRC =
    ((_modbusSlaveBuffer[_modbusSlaveBufferSize - 2] << 8)
     | _modbusSlaveBuffer[_modbusSlaveBufferSize - 1]);
  if ( modbusCalcCRC( _modbusSlaveBufferSize - 2, _modbusSlaveBuffer ) != msgCRC ) { return 255;}
  boolean isSupported = false;
  for (uint8_t i = 0; i < sizeof( _modbusSlave_fctsupported ); i++) {
    if (_modbusSlave_fctsupported[i] == _modbusSlaveBuffer[1]) {
      isSupported = 1;
      break;
    }
  }
 if (!isSupported) { return 1;}
int intRegs = 0;
  byte byteRegs;
    switch ( _modbusSlaveBuffer[1] ) {
case 4 :
 if(!(checkModbusRange((word( _modbusSlaveBuffer[2], _modbusSlaveBuffer[3])), (word( _modbusSlaveBuffer[4], _modbusSlaveBuffer[5])),3))){return 2;}    
 break;
}
  return 0; // OK, no exception code thrown
}мой ник в нете и почте omelchuk890, если что. запомните на всякий. многие знают номер тлф.
			
						Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость