Нет, вы не можете изменить это из программного обеспечения, так как эта часть сообщения всегда построена на уровне контроллера связи CAN и ниже (физический уровень).
По сути, поле ACK не установлено в SW.Он «завершается» другими узлами во время отправки сообщения, и поток битов поступил в битовый интервал ACK.CRC построен на уровне Communication Controlroler, исходя из полезной нагрузки, которую приложение хочет отправить.
Таким образом, чтобы ввести такие ошибки в сообщение CAN, вам необходимо специальное устройство HIL (Hardware in the Loop), которое принудительно перезапишет поля по вашему выбору.Одним из таких устройств является CANSTress от Vector, но есть много других.
Относительно ошибки NACK , вы можете смоделировать это без HIL , если у вас есть среда моделирования. Или просто не включайте другие узлы в кластере,обеспечение отсутствия другого узла для подтверждения сообщения.Осторожно, отключение кабелей CANH и CANL приведет к другому типу ошибки .