Добрый день!
Запутался в преобразованиях переменных.
Раньше просто посылал команды вот таким куском, вручную рассчитывая КС.
Теперь в сообщение потребовалось ввести пару переменных, сделал вот так:
Расчет КС происходит верный, 56027 если в поле INPUT число 1.
Но как дальше преобразовать данной сообщение и передать функции (1 кусок кода).
Помогите плиз!
P.S.: Для передачи пользуюсь CommMG.dll.
Запутался в преобразованиях переменных.
Раньше просто посылал команды вот таким куском, вручную рассчитывая КС.
Код:
; Передать 10 байт команды запроса статуса устройства (ожидаем завершения передачи данных).
Local $bBinData = Binary("0x2423010000000000DADC")
Local $tBinData = DllStructCreate("byte[10]")
DllStructSetData($tBinData, 1, $bBinData)
_CommSendByteArray(DllStructGetPtr($tBinData),10,1)
Теперь в сообщение потребовалось ввести пару переменных, сделал вот так:
Код:
Local $TXBYTE[10]
$TXBYTE[0] = 36 ; Старт байт 24h.
$TXBYTE[1] = 36 ; Команда управления , 24h.
$TXBYTE[2] = GUICtrlRead($idPIRISed, $GUI_READ_DEFAULT) ; Число из поля Input.
$TXBYTE[3] = 0 ; Mode регистр, 00h - управление обоими каналами.
$TXBYTE[4] = 0
$TXBYTE[5] = 0
$TXBYTE[6] = 0
$TXBYTE[7] = 0
$TXBYTE[8] = 0
$TXBYTE[9] = 0
; Расчет КС.
Local $CRCRES = $TXBYTE[0] * 256 + $TXBYTE[1] ; Загружаем 1-ое 16-битное слово в переменную результа КС.
For $i = 2 to 8 Step 2
$CRCRES = $CRCRES + ($TXBYTE[$i] * 256 + $TXBYTE[$i+1]) ; Прибавляем к результату КС следующее 16-битное слово.
If $CRCRES >= 65536 Then ; Если было переполнение 16-битного слова, выделяем результат только 16-битного слова, а перенос добавляем (- 65536 + 1).
$CRCRES = $CRCRES - 65535
EndIf
Next
$CRCRES = 65535 - $CRCRES ; Инвертируем 16-битное слово.
MsgBox (0, "CRC", $CRCRES)
Расчет КС происходит верный, 56027 если в поле INPUT число 1.
Но как дальше преобразовать данной сообщение и передать функции (1 кусок кода).
Помогите плиз!
P.S.: Для передачи пользуюсь CommMG.dll.