Коммуникационная программа последовательного порта передачи данных на приемник DMX 512
Приемник DMX 512, мне нужно отправить данные в 512 линиях через последовательный порт связи .Проблема возникает, когда мне нужно отправить данные со скоростью 250000 БОД . Затем я использовал управления ЩПТ блок с состоянии быть использован и набор комм государства . и тогда я пишу файл, но должен ли я использовать comPort. Write (Serial comPort = new Serial Port) для отправки данных или WriteFile .Это моя следующая программа
У меня есть VB.Сетевая программа связи последовательного порта программа отправки данных на приемник DMX 512, который мне нужно преобразовать в c# . Но я в замешательстве, так как они использовали MSCOMM1.OUTPUT для отправки данных .
Ваша помощь очень ценится
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) Public data_array Private Sub cmd_Start_Click() setup_com_port send_comm_data End Sub Private Sub cmd_Stop_Click() If MSComm1.PortOpen = True Then ''MSComm1.PortOpen = False End End If End Sub Private Sub Form_Load() data_array = Array(&H7, &H20, &H7) Slider_Red = &H7 Slider_Green = &H20 Slider_Blue = &H7 End Sub Private Sub setup_com_port() MSComm1.CommPort = 2 MSComm1.Settings = "9600,N,8,2" 'MSComm1.InputLen = 0 ' MSComm1.InBufferSize = 1024 ' MSComm1.OutBufferSize = 1024 MSComm1.PortOpen = True SetBaudRate MSComm1, 250000 End Sub ' Set baud rate using Win32 API. ' The PortOpen property should be set to True before calling. ' May raise the following errors: ' comPortNotOpen the PortOpen property has not been set to True ' comDCBError failed to read current state of the port ' comSetCommStateFailed failed to set new baud rate Sub SetBaudRate(Com As MSComm, baud As Long) Dim ComDcb As dcb Dim ret As Long ' Check port is open If Not Com.PortOpen Then Err.Raise comPortNotOpen, Com.Name, _ "Operation valid only when the port is open" Exit Sub End If ' Get existing Comm state ret = GetCommState(Com.CommID, ComDcb) If ret = 0 Then Err.Raise comDCBError, Com.Name, _ "Could not read current state of the port" Exit Sub End If ' Modify state with new baud rate ComDcb.BaudRate = baud ' Set the new Comm state ret = SetCommState(Com.CommID, ComDcb) If ret = 0 Then Err.Raise comSetCommStateFailed, Com.Name, _ "Could not set port to specified baud rate" Exit Sub End If End Sub Private Sub send_comm_data() 'com_break (10) Do com_break (5) 'DoEvents Sleep (5) MSComm1.Output = Chr$(0) 'DoEvents 'Sleep (1) send_char_0 Sleep (10) DoEvents Loop End Sub Private Sub com_break(break_in_ms) ' Set the Break condition. MSComm1.Break = True ' Set duration to 1/10 second - 100ms 'Duration! = Timer + (break_in_ms / 100) '0.1 = 100ms ' Wait for the duration to pass. 'Do Until Timer > Duration! '' Dummy = DoEvents() 'Loop ' Clear the Break condition. Sleep (1) MSComm1.Break = False End Sub Private Sub send_char_0() Dim strData As String strData = "" For i = 0 To UBound(data_array) '' MSComm1.Output = Chr$(data_array(i)) strData = strData & Chr$(data_array(i)) Next For i = 1 To 509 ''MSComm1.Output = Chr$(50) strData = strData & Chr$(50) Next MSComm1.Output = strData 7 DoEvents End Sub
Заранее спасибо
[no name]
А ваш вопрос-что? Почему "они" использовали "MSCOMM1. OUTPUT для отправки данных"? Вероятно, потому, что тот, кто портировал это из VB6, был ленив и не использовал класс последовательного порта, доступный в .NET, как следовало бы.
0x01AA
Мне нужно / нужно согласиться. V5.
[no name]
Как и предполагал Уэс Адей, это был неприятный пример преобразования кода. Вы можете написать это с нуля в C# в нескольких строках. Лучшее из возможных учебных упражнений.