Что нового

_CommGetString() Как разбить полученные данные с Uart ???

BlackPhreaker

Новичок
Сообщения
18
Репутация
0
Как разбить принимаемые данные по количеству знаков ??? Как на картинки :IL_AutoIt_1:

Код:
;#include <Array.au3>
#include <GUIConstants.au3> ; окна
#include <WindowsConstants.au3> ; окна
#include <CommMG.au3> ; ком

;~ Окна и кнопки
$Form1 = GUICreate("Terminal", 395, 600)
;$Label1 = GUICtrlCreateLabel ("$status_string",8, 2, 390, 17)
$Input1 = GUICtrlCreateInput("", 8, 152, 297, 21)
$Button1 = GUICtrlCreateButton("Send", 312, 150, 75, 25, 0)
$Button2 = GUICtrlCreateButton("Clear", 312, 560, 75, 25, 0)
$Edit1 = GUICtrlCreateEdit("", 8, 20, 377, 121, $WS_VSCROLL)

$EditKOD = GUICtrlCreateEdit("", 8, 200, 377, 60, $WS_VSCROLL)
$LabelKOD = GUICtrlCreateLabel ("KOD",8, 180, 390, 17)


$EditKOD2 = GUICtrlCreateEdit("", 8, 290, 377, 60, $WS_VSCROLL)
$LabelKOD2 = GUICtrlCreateLabel ("KOD2",8, 270, 390, 17)

$EditKOD3 = GUICtrlCreateEdit("", 8, 390, 377, 60, $WS_VSCROLL)
$LabelKOD3 = GUICtrlCreateLabel ("KOD3",8, 360, 390, 17)

$EditKOD4 = GUICtrlCreateEdit("", 8, 490, 377, 60, $WS_VSCROLL)
$LabelKOD4 = GUICtrlCreateLabel ("KOD4",8, 460, 390, 17)
GUISetState(@SW_SHOW)
;~ Окна и кнопки

UartSet(7,9600) ; Настройка Uart

While 1
     $nMsg = GUIGetMsg()
     Switch $nMsg
     Case $GUI_EVENT_CLOSE
         ;If $portstatus = 1 Then
         ;$status_string = "Закрытие порта: COM"&$port&" ..."
         ;GUICtrlSetData ($Label1, $status_string)
         ;sleep(800);пауза, чтоб успели прочитать лейбл
         ;EndIf
         Exit
     Case $Button1
         $senddata = GUICtrlRead ($Input1); считываем что ввели в Input
         If Not $senddata = "" Then; если не пусто, то отправляем порту
         _CommSendString($senddata&@CR, 1); в конце нужно добавлять @CR
		 ;_CommSendByte($senddata&@CR, 1); Для бинарных значений 0x40, 0x30, 0x35, 0x41, 0x35, 0x0d
         GUICtrlSetData ($Edit1, "Отправлено:"&@CRLF&$senddata&@CRLF,1);пишем в Edit
         Else
         GUICtrlSetData ($Edit1, "Ошибка: нечего отправлять!"&@CRLF,1)
         EndIf

      Case $Button2 ; Очистка  форм
	     GUICtrlSetData($Edit1, "")
		 GUICtrlSetData($EditKOD, "")
		 GUICtrlSetData($EditKOD2, "")
		 GUICtrlSetData($EditKOD3, "")
		 GUICtrlSetData($EditKOD4, "")
	   EndSwitch


;~ Прием кода
;$Ret_string =  _CommGetLine() ;
;$Ret_string =   _CommReadByte() ;
;$Ret_string =   _CommReadChar() ; !!!

$Ret_string = _CommGetString(); постоянно опрашиваем порт в цикле
sleep(100) ; Задержка чтоб принять код целеком !!!
If Not $Ret_string = "" Then ; если возвращённый результат не пустой
;GUICtrlSetData ($Edit1, "Принято:"&@CRLF&$Ret_string&@CRLF,1); то пишем в Edit
GUICtrlSetData ($Edit1, ""&@CRLF&$Ret_string&@CRLF,1); то пишем в Edit
GUICtrlSetData ($EditKOD, ""&@CRLF&$Ret_string&@CRLF,1); то пишем в Edit
GUICtrlSetData ($EditKOD2, ""&@CRLF&$Ret_string&@CRLF,1); то пишем в Edit
GUICtrlSetData ($EditKOD3, ""&@CRLF&$Ret_string&@CRLF,1); то пишем в Edit
GUICtrlSetData ($EditKOD4, ""&@CRLF&$Ret_string&@CRLF,1); то пишем в Edit
$Ret_string = "";обнуляем переменную

EndIf
 WEnd

 Func UartSet($port,$baud)
   If $baud = "" Then $baud = 9600
   Local $sportSetError
   ConsoleWrite(_CommListPorts(0))
   _CommSetPort($port, $sportSetError, 9600, 8, "none",2,1)
   if $sportSetError = '' Then
      Return 1
      ConsoleWrite("using " & _CommGetVersion(1))
   Else
      ConsoleWrite("error")
      return $sportSetError
   EndIf
EndFunc

 Func OnAutoItExit(); функция срабатывает при выходе.
 _CommClosePort()
EndFunc
 

Вложения

  • 777.png
    777.png
    31.1 КБ · Просмотры: 13

InnI

AutoIT Гуру
Сообщения
4,922
Репутация
1,432
Автор
B

BlackPhreaker

Новичок
Сообщения
18
Репутация
0
InnI сказал(а):
BlackPhreaker
разбить принимаемые данные по количеству знаков
По-разному можно: отрезать/оставлять слева/справа, выбирать из середины, использовать регулярки.
Выбирайте на свой вкус. Описание функций раздела "Строки"

Есле не затруднит можно пример например по количеству знаков ... Допустим первые 8 знаков в первое окно потом 6 знаков во второе окно и т.д.


Добавлено:
Сообщение автоматически объединено:

InnI сказал(а):
BlackPhreaker
разбить принимаемые данные по количеству знаков
По-разному можно: отрезать/оставлять слева/справа, выбирать из середины, использовать регулярки.
Выбирайте на свой вкус. Описание функций раздела "Строки"

Спасибо за подсказку понравился вот это StringMid() :IL_AutoIt_1:
 
Верх