RS232
Caros amigos tenho uma aplicação onde uso a porta serial para acionar um relé. O problema é que toda vez que ligo o computador, a porta serial emite sinais e fica ligando e desligando meu relé. Preciso fazer algo para impedir acionamento do relé na ocasião em que o computador é ligado. Alguém tem uma soluçao ?
Minha aplicação é simples :
serialport1.open
serialport1.rtsenable=true
Aguardo e agradeço se puderem;
Minha aplicação é simples :
serialport1.open
serialport1.rtsenable=true
Aguardo e agradeço se puderem;
Acredito que não tenha como, afinal não tem como controlar a porta serial durante o boot, eu diria que pode simplesmente ser o sistema operacional tentando encontrar um mouse nesta porta que está fazendo com que o seu rele acione.
Como você não usa comunicação serial e sim apenas liga e desliga o sinal em 1 pino do cabo acho que não tem o que fazer, ou você aprende a conviver com isso durante o boot ou você vai ter que dar um jeito de realmente fazer uma comunicação serial
Como você não usa comunicação serial e sim apenas liga e desliga o sinal em 1 pino do cabo acho que não tem o que fazer, ou você aprende a conviver com isso durante o boot ou você vai ter que dar um jeito de realmente fazer uma comunicação serial
Sua resposta aguçou meu conhecimento. Para mim eu já estava usando uma comunicação serial. Como transformo meu código em uma comunicação serial jovem ?
Aguardo;
Aguardo;
Não tem como transformar o código, isso depende da outra ponta, o aparelho que está ligado na porta serial precisa dar este recurso, e pelo que eu entendi no seu caso você tem um rele que usa apenas o sinal do rts para saber se deve ligar ou não, como o rts é apenas um sinal, basicamente ligado ou desligado eu diria que não se pode considerar isso comunicação serial, já que na comunicação serial você envia e recebe bytes.
O que você precisaria era que ele em vez de usar o sinal do rts ele recebesse comandos, na forma de bytes, e ai sim acionasse ou não o rele de acordo com o comando recebido, mas ai provavelmente precisaria ser um microcontrolador ou algo do tipo para fazer a comunicação com o PC, o que já vai além do meu conhecimento.
O que você precisaria era que ele em vez de usar o sinal do rts ele recebesse comandos, na forma de bytes, e ai sim acionasse ou não o rele de acordo com o comando recebido, mas ai provavelmente precisaria ser um microcontrolador ou algo do tipo para fazer a comunicação com o PC, o que já vai além do meu conhecimento.
Obrigado garoto
Faça um teste.
Desative a porta de comunicação no windows. De um boot no pc e verifique se mesmo assim o sinal é emitido.
Caso não seja emitido sinal algum, você poderá a partir do seu sistema ATIVAR e DESATIVAR a porta de comunicação.
Desative a porta de comunicação no windows. De um boot no pc e verifique se mesmo assim o sinal é emitido.
Caso não seja emitido sinal algum, você poderá a partir do seu sistema ATIVAR e DESATIVAR a porta de comunicação.
Obrigado amigo pelo interesse. Vou testar sim e dou um retorno aqui para todos tirarem proveito.
Agradeço;
Agradeço;
Foxman fiz o texte e deu certo. Mas passei boa parte da noite procurando um código vb.net que faça isso e não encontrei. Você tem algum ? Ou alguém tem ?
Citação::
Foxman fiz o texte e deu certo. Mas passei boa parte da noite procurando um código vb.net que faça isso e não encontrei. Você tem algum ? Ou alguém tem ?
Acho que a partir do link abaixo tu conseguirá alguma coisa.
http://stackoverflow.com/questions/252185/how-do-i-disable-a-system-device
Link do Exemplo : http://www.codeproject.com/KB/cs/HardwareHelper.aspx
Amigo, boa noite.
Você tem conhecimentos de eletrônica?
O que você precisa fazer para resolver seu problema é ter na outra ponta um hardware embarcado que trabalhe com comunicação RS232 trabalhando no modo escravo, ou seja só faz o que o seu software mandar ele fazer.
abraços.
Você tem conhecimentos de eletrônica?
O que você precisa fazer para resolver seu problema é ter na outra ponta um hardware embarcado que trabalhe com comunicação RS232 trabalhando no modo escravo, ou seja só faz o que o seu software mandar ele fazer.
abraços.
DANIKULL agradeço jovem , mas para mim não vai dar não. Vou tentar a opção do FOXMAN.
Caro FOXMAN à partir de suas instruções eu achei um código já em VB.net, mas não tenho idéia de como preparar ele para ativar a porta no momento em que meu programa rodar. Você saberÃa complementar para mim, ou me dar mais dicas ?
Segue o código abaixo ( código completo )
Agradeço;
Public Class Form1
Private Sub Form1_Load(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles MyBase.Load
DataGridView1.DataSource = Device.GetAllDevices
[ô]DataGridView1.DataSource = Device.GetNonWorkingDevices
End Sub
End Class
Public Class Device
Private mName As String
Private mManufacturer As String
Private mDescription As String
Private mService As String
Private mDeviceID As String
Private mPNPDeviceID As String
Private mClassGUID As String
Public Property Name() As String
Get
Return mName
End Get
Set(ByVal value As String)
mName = value
End Set
End Property
Public Property Manufacturer() As String
Get
Return mManufacturer
End Get
Set(ByVal value As String)
mManufacturer = value
End Set
End Property
Public Property Description() As String
Get
Return mDescription
End Get
Set(ByVal value As String)
mDescription = value
End Set
End Property
Public Property Service() As String
Get
Return mService
End Get
Set(ByVal value As String)
mService = value
End Set
End Property
Public Property DeviceID() As String
Get
Return mDeviceID
End Get
Set(ByVal value As String)
mDeviceID = value
End Set
End Property
Public Property PNPDeviceID() As String
Get
Return mPNPDeviceID
End Get
Set(ByVal value As String)
mPNPDeviceID = value
End Set
End Property
Public Property ClassGUID() As String
Get
Return mClassGUID
End Get
Set(ByVal value As String)
mClassGUID = value
End Set
End Property
Public Shared Function GetAllDevices() As List(Of Device)
Dim pc As String = [Ô].[Ô] [ô]local
Dim wmi As Object = GetObject([Ô]winmgmts:\\[Ô] & pc & [Ô]oot\cimv2[Ô])
Dim allDevices As New List(Of Device)
Dim devices As Object = wmi.ExecQuery([Ô]Select * from Win32_PnPEntity[Ô])
[ô]Dim devices As Object = wmi.ExecQuery([Ô]Select * from [Ô] & [Ô]Win32_SerialPort where Name = [ô]COM1[ô][Ô])
Dim device As Device
For Each d As Object In devices
device = New Device
With device
.mClassGUID = IIf(IsDBNull(d.ClassGuid), 0, d.ClassGuid)
.mDescription = IIf(IsDBNull(d.Description), 0, d.Description)
.DeviceID = IIf(IsDBNull(d.DeviceID), 0, d.DeviceID)
.Manufacturer = IIf(IsDBNull(d.Manufacturer), 0, d.Manufacturer)
.Name = IIf(IsDBNull(d.Name), 0, d.Name)
.PNPDeviceID = IIf(IsDBNull(d.PNPDeviceID), 0, d.PNPDeviceID)
.Service = IIf(IsDBNull(d.Service), 0, d.Service)
End With
allDevices.Add(device)
Next
Return allDevices
End Function
Public Shared Function GetNonWorkingDevices() As List(Of Device)
Dim pc As String = [Ô].[Ô] [ô]local
Dim wmi As Object = GetObject([Ô]winmgmts:\\[Ô] & pc & [Ô]oot\cimv2[Ô])
Dim notWorking As New List(Of Device)
[ô]Dim devices As Object = wmi.ExecQuery([Ô]Select * from [Ô] & [Ô]Win32_USBControllerDevice[Ô])
Dim devices As Object = wmi.ExecQuery([Ô]Select * from [Ô] & [Ô]Win32_PnPEntity WHERE ConfigManagerErrorCode <> 0[Ô])
[ô]Dim devices As Object = wmi.ExecQuery([Ô]Select * from [Ô] & [Ô]Win32_SerialPort[Ô])
Dim device As Device
For Each d As Object In devices
device = New Device
With device
.mClassGUID = IIf(IsDBNull(d.ClassGuid), 0, d.ClassGuid)
.mDescription = IIf(IsDBNull(d.Description), 0, d.Description)
.DeviceID = IIf(IsDBNull(d.DeviceID), 0, d.DeviceID)
.Manufacturer = IIf(IsDBNull(d.Manufacturer), 0, d.Manufacturer)
.Name = IIf(IsDBNull(d.Name), 0, d.Name)
.PNPDeviceID = IIf(IsDBNull(d.PNPDeviceID), 0, d.PNPDeviceID)
.Service = IIf(IsDBNull(d.Service), 0, d.Service)
End With
notWorking.Add(device)
Next
Return notWorking
End Function
End Class
Obrigado;
Caro FOXMAN à partir de suas instruções eu achei um código já em VB.net, mas não tenho idéia de como preparar ele para ativar a porta no momento em que meu programa rodar. Você saberÃa complementar para mim, ou me dar mais dicas ?
Segue o código abaixo ( código completo )
Agradeço;
Public Class Form1
Private Sub Form1_Load(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles MyBase.Load
DataGridView1.DataSource = Device.GetAllDevices
[ô]DataGridView1.DataSource = Device.GetNonWorkingDevices
End Sub
End Class
Public Class Device
Private mName As String
Private mManufacturer As String
Private mDescription As String
Private mService As String
Private mDeviceID As String
Private mPNPDeviceID As String
Private mClassGUID As String
Public Property Name() As String
Get
Return mName
End Get
Set(ByVal value As String)
mName = value
End Set
End Property
Public Property Manufacturer() As String
Get
Return mManufacturer
End Get
Set(ByVal value As String)
mManufacturer = value
End Set
End Property
Public Property Description() As String
Get
Return mDescription
End Get
Set(ByVal value As String)
mDescription = value
End Set
End Property
Public Property Service() As String
Get
Return mService
End Get
Set(ByVal value As String)
mService = value
End Set
End Property
Public Property DeviceID() As String
Get
Return mDeviceID
End Get
Set(ByVal value As String)
mDeviceID = value
End Set
End Property
Public Property PNPDeviceID() As String
Get
Return mPNPDeviceID
End Get
Set(ByVal value As String)
mPNPDeviceID = value
End Set
End Property
Public Property ClassGUID() As String
Get
Return mClassGUID
End Get
Set(ByVal value As String)
mClassGUID = value
End Set
End Property
Public Shared Function GetAllDevices() As List(Of Device)
Dim pc As String = [Ô].[Ô] [ô]local
Dim wmi As Object = GetObject([Ô]winmgmts:\\[Ô] & pc & [Ô]oot\cimv2[Ô])
Dim allDevices As New List(Of Device)
Dim devices As Object = wmi.ExecQuery([Ô]Select * from Win32_PnPEntity[Ô])
[ô]Dim devices As Object = wmi.ExecQuery([Ô]Select * from [Ô] & [Ô]Win32_SerialPort where Name = [ô]COM1[ô][Ô])
Dim device As Device
For Each d As Object In devices
device = New Device
With device
.mClassGUID = IIf(IsDBNull(d.ClassGuid), 0, d.ClassGuid)
.mDescription = IIf(IsDBNull(d.Description), 0, d.Description)
.DeviceID = IIf(IsDBNull(d.DeviceID), 0, d.DeviceID)
.Manufacturer = IIf(IsDBNull(d.Manufacturer), 0, d.Manufacturer)
.Name = IIf(IsDBNull(d.Name), 0, d.Name)
.PNPDeviceID = IIf(IsDBNull(d.PNPDeviceID), 0, d.PNPDeviceID)
.Service = IIf(IsDBNull(d.Service), 0, d.Service)
End With
allDevices.Add(device)
Next
Return allDevices
End Function
Public Shared Function GetNonWorkingDevices() As List(Of Device)
Dim pc As String = [Ô].[Ô] [ô]local
Dim wmi As Object = GetObject([Ô]winmgmts:\\[Ô] & pc & [Ô]oot\cimv2[Ô])
Dim notWorking As New List(Of Device)
[ô]Dim devices As Object = wmi.ExecQuery([Ô]Select * from [Ô] & [Ô]Win32_USBControllerDevice[Ô])
Dim devices As Object = wmi.ExecQuery([Ô]Select * from [Ô] & [Ô]Win32_PnPEntity WHERE ConfigManagerErrorCode <> 0[Ô])
[ô]Dim devices As Object = wmi.ExecQuery([Ô]Select * from [Ô] & [Ô]Win32_SerialPort[Ô])
Dim device As Device
For Each d As Object In devices
device = New Device
With device
.mClassGUID = IIf(IsDBNull(d.ClassGuid), 0, d.ClassGuid)
.mDescription = IIf(IsDBNull(d.Description), 0, d.Description)
.DeviceID = IIf(IsDBNull(d.DeviceID), 0, d.DeviceID)
.Manufacturer = IIf(IsDBNull(d.Manufacturer), 0, d.Manufacturer)
.Name = IIf(IsDBNull(d.Name), 0, d.Name)
.PNPDeviceID = IIf(IsDBNull(d.PNPDeviceID), 0, d.PNPDeviceID)
.Service = IIf(IsDBNull(d.Service), 0, d.Service)
End With
notWorking.Add(device)
Next
Return notWorking
End Function
End Class
Obrigado;
Tópico encerrado , respostas não são mais permitidas