Я перенес наш проект из Delphi 7 в Delphi 2010. После добавления некоторых типов приведений теперь мой проект работает хорошо, и все функции работают правильно, кроме основной функциональности программы, которая привязана к COM-портам и компоненту MSCOMM ActiveX.
Он может читать и писать с COM-порта, но кажется, что с этим что-то не так, потому что устройство, подключенное к этому порту, возвращает код ошибки, хотя и работает правильно с тем же кодом в Delphi7. В коде, который вы видите ниже после отправки нескольких байтов на устройство, байт отправляется как контрольная сумма. С другой стороны, устройство получает байты и вычисляет контрольную сумму по той же формуле, если полученная контрольная сумма была равна вычисленной контрольной сумме, устройство возвращает «O» как OK, иначе оно возвращает «E» как Error. OutCom
определяется как Olevariant.
OutCom := chr(ord(Fbyte));
Mscomm1.Output := OutCom;
OutCom := chr(ord(Sbyte));
Mscomm1.Output := OutCom;
OutCom := chr(ord(DigitOne));
Mscomm1.Output := OutCom;
OutCom := chr(ord(DigitTwo));
Mscomm1.Output := OutCom;
OutCom := chr(ord(DigitThree));
Mscomm1.Output := OutCom;
SumOfBits := (System_No - 1) + Fbyte + Sbyte + DigitOne + DigitTwo + DigitThree;
CheckSum := ( (SumOfBits mod 256) xor 255 ) + 1;
OutCom := chr(ord(CheckSum));
Mscomm1.Output := OutCom;
OutCom := 'E';
Mscomm1.Output := OutCom;
OutCom := 'N';
Mscomm1.Output := OutCom;
Тот же код в Delphi 2010 возвращает другой результат. Я предполагаю, что функция chr () возвращает другой результат, как Delphi7. Если это так, то как я могу получить символ Ascii для байта или есть способ передать байт в Mscomm без преобразования в символ?