Въпрос от Com порт към бит за паритет
Намерих една тема в архива на форума, където се обсъждаше темата за 9 бита, паритетния бит за ком порта. Въпросът беше бурно обсъден, но никой не се изказа за това как да се присвои бит за паритет от 0 или 1 по желание. Бих искал отново да повдигна тази тема. 9 бита кой паритет ми трябва, за да контролирам желязото. Тя иска при инициализация в бит 9 1 и при работа 0
вижте помощта за Win32 API
модел за търсене = "DCB" (DCB структура, използвана в SetCommState())
специфично е за вашия въпрос - поле на структура BYTE Parity;
Parity има 5 параметъра BYTE Parity; // 0-4=не,нечетно,четно,маркировка,интервал първите 3 са ясни, последният не е много ясен.
Не ми е ясно, ако включа проверката на паритета при инициализиране на порта, трябва ли ръчно да задавам стойността на бита за паритет или какво? Тогава ще трябва да се извършат както старт, така и стоп. Всъщност аз правя това
функция PortInit : boolean; //инициализация var ct: TCommTimeouts; dcb: TDCB; begin f := Windows.CreateFile(PChar("COM1"), GENERIC_READ или GENERIC_WRITE, FILE_SHARE_READ или FILE_SHARE_WRITE, nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0); if (f 0 do begin if not WriteFile(f, p^, 1, i, nil) then exit; inc(result, i); inc(integer(p)); dec(size); Application.ProcessMessages; end; end;
относно SPACE - не знам, проверете в MSDN и други, imho, това е съвсем ясно от помощта:
Указва схемата за паритет, която да се използва. Този член може да бъде една от следните стойности:
Стойност Значение // всяко съобщение е изрично допълнено със знака PARITY = Да EVENPARITY Even
// изпращанията изобщо не са подплатени със знак PARITY NOPARITY Няма паритет
// всяко съобщение е изрично допълнено със знака PARITY = No ODDPARITY Odd
изчисляване на битова стойноств случай на Mark, както и неговата изрична настройка на Even и Odd състояние се извършва от хардуерния UART контролер при предаване на всяко отделно съобщение, като се започне от момента на повторно инициализиране чрез извикване на SetCommState (), което може да се извърши от вас многократно, в точното време преди изпращане, изисквайки една или друга логика на преобразуване на паритетен бит към приемника
Е, благодаря, ще го разбера с паритет, друг въпрос защо в моя пример в процедурата за извеждане към порта в реда ако не WriteFile (f, p ^, 1, i, nil), тогава изход; възникна грешка [Грешка] Unit1.pas(86): Типовете действителни и формални променливи параметри трябва да са идентични
изглежда, че той иска указател вместо i
Благодаря, разбрах всичко с пакета и с деветия бит, но сега въпросът е: трябва ли да окачите щепсел на порта, когато дебъгвате програмата? Какво с какво да "заглуша"? :)
Няма - неизползван бит Нечетно - нечетно Четно - четно Маркиране - винаги 1 Интервал - винаги 0
Покрива всички нужди.