Начнем с того что нет ли ошибки тут:
Settings.byStopBits:=1;
"byStopBits:BYTE; 0 = один стоп бит, 1=полтора, 2=два"
попробуй SZ2:=SysComRead(com_num,ADR(CM2_READ_BUF),20,0); поставить
И самое главное разнести чтение и передачу по циклам с помощью оператора CASE