#include <windows.h> #include <stdio.h> #include <stdlib.h> #include <conio.h> #define RX_SIZE 4096 /* taille tampon d'entrée */ #define TX_SIZE 4096 /* taille tampon de sortie */ #define MAX_WAIT_READ 5000 /* temps max d'attente pour lecture (en ms) */ #define MAX_WAIT_READ_TOTAL 7000 /* temps max pour la lecture du tampon de reception */ HANDLE g_hCOM = NULL; COMMTIMEOUTS g_cto = {MAX_WAIT_READ,0,MAX_WAIT_READ_TOTAL,0,0}; DCB g_dcb = { sizeof(DCB),CBR_9600,TRUE,FALSE,FALSE,FALSE,DTR_CONTROL_ENABLE,FALSE,FALSE, FALSE,FALSE,FALSE,FALSE,RTS_CONTROL_ENABLE,FALSE,0,0,0x100,0x100,8,NOPARITY, ONESTOPBIT,0x11,0x13,'?',0x1A,0x10 }; int main(int argc, char** argv) { /* Ouvre COM3 */ int nId = 3; char szCOM[16]; sprintf(szCOM, "COM%d", nId); g_hCOM = ::CreateFile(szCOM,GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_SYSTEM,NULL); /* Affectation taille des tampons d'émission et de réception */ SetupComm(g_hCOM, RX_SIZE, TX_SIZE); /* Configure */ SetCommTimeouts(g_hCOM, &g_cto); SetCommState(g_hCOM, &g_dcb); /* on vide les tampons d'émission et de réception, mise à 1 DTR */ PurgeComm(g_hCOM, PURGE_TXCLEAR|PURGE_RXCLEAR|PURGE_TXABORT|PURGE_RXABORT); EscapeCommFunction(g_hCOM, SETDTR); int nBytesWritten, nBytesRead; char buffer[256]; /* (SELON LE PROTOCOLE VOULU) Ecrit la commande X sur le port */ strcpy(buffer, "X\r\n"); WriteCOM(buffer, strlen(buffer), &nBytesWritten); /* Pour la lecture du port */ /*ReadCOM(buffer, sizeof(buffer)-1, &nBytesRead);*/ /*buffer[nBytesRead] = '\0';*/ /* Ferme le port */ ::CloseHandle(g_hCOM); }
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre questionPrivate Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim dlg As OpenFileDialog = New OpenFileDialog() 'Charge un fichier sur le disque If dlg.ShowDialog() = Windows.Forms.DialogResult.OK Then Dim sDatasTexte = System.IO.File.OpenText(dlg.FileName).ReadToEnd() 'Récup le contenu format texte ' Place le contenu dans un buffer d'octets (ASCII: 1 char = 1 octet) (UNICODE: 1 Char = 2 octets) Dim bBufferBytes() As Byte = System.Text.Encoding.ASCII.GetBytes(sDatasTexte) TextBox1.Text = sDatasTexte ' Affiche le bloc de texte ' Et affiche le bloc sour forme d'octets (Convertit les retour chariots pour l'affichage) For i = 0 To UBound(bBufferBytes) TextBox2.Text = TextBox2.Text & String.Format("{0:X2} ", bBufferBytes(i)) ' Ou Hex(bBufferBytes(i)) If System.Text.Encoding.ASCII.GetString(bBufferBytes, i, 1)(0) = vbLf Then TextBox2.Text = TextBox2.Text & vbCrLf Next ' ============================================= ' Ecrit le buffer complet sur le SerialPort ' ============================================= 'SerialPort1.Write(bBufferBytes, 0, bBufferBytes.Length) End If End Sub
Imports System.IO Imports System Imports System.Threading Imports System.IO.Ports Imports System.ComponentModel Public Class Form1 'DATA RECEIVED Dim inputData As String Public Event DataReceived As IO.Ports.SerialDataReceivedEventHandler Dim myPort As Array 'les ports Com détecter sur le pc seront stokés ici Delegate Sub SetTextCallback(ByVal [text] As String) 'Added to prevent threading errors during receiveing of data Private Sub frmMain_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 'When our form loads, auto detect all serial ports in the system and populate the cmbPort Combo box. myPort = IO.Ports.SerialPort.GetPortNames() 'Obtenir tout les ports series For i = 0 To UBound(myPort) PortBox.Items.Add(myPort(i)) Next PortBox.Text = PortBox.Items.Item(0) 'Set cmbPort text to the first COM port detected DeconnecteButton.Enabled = False Me.KeyPreview = True End Sub 'BUTTON CHARGER Private Sub Button1_Click(sender As Object, e As EventArgs) Handles ChargeButton.Click Dim dlg As OpenFileDialog = New OpenFileDialog() 'Charge un fichier sur le disque If dlg.ShowDialog() = Windows.Forms.DialogResult.OK Then End If Dim sDatasTexte = System.IO.File.OpenText(dlg.FileName).ReadToEnd() 'Récup le contenu format texte ' Place le contenu dans un buffer d'octets (ASCII: 1 char = 1 octet) (UNICODE: 1 Char = 2 octets) Dim bBufferBytes() As Byte = System.Text.Encoding.ASCII.GetBytes(sDatasTexte) 'TextBox.Text = sDatasTexte ' Affiche le bloc de texte ' Et affiche le bloc sour forme d'octets (Convertit les retour chariots pour l'affichage) For i = 0 To UBound(bBufferBytes) TextBox.Text = TextBox.Text & String.Format("{0:X2} ", bBufferBytes(i)) ' Ou Hex(bBufferBytes(i)) If System.Text.Encoding.ASCII.GetString(bBufferBytes, i, 1)(0) = vbLf Then TextBox.Text = TextBox.Text & vbCrLf Next ' Ecrit le buffer complet sur le SerialPort SerialPort1.Write(bBufferBytes, 0, bBufferBytes.Length) Timer1.Start() End Sub 'BUTTON CONNECTER Private Sub Button2_Click(sender As Object, e As EventArgs) Handles ConnecteButton.Click SerialPort1.PortName = PortBox.Text 'Réglez le port série ou port COM sélectionné au démarrage 'Autres propriété du port com SerialPort1.BaudRate = 9600 SerialPort1.Parity = IO.Ports.Parity.None SerialPort1.StopBits = IO.Ports.StopBits.One SerialPort1.DataBits = 8 SerialPort1.Open() 'Open our serial port 'ecrire les informations dans la memoire tampon de sortie du port serie If SerialPort1.IsOpen = True Then ToolStripStatusLabel1.Text = "Port ouvert" End If ConnecteButton.Enabled = False 'Désactiver bouton Connect DeconnecteButton.Enabled = True 'activer le bouton Déconnecter RadioButton.BackColor = Color.Gray ChargeButton.Enabled = True End Sub 'BUTTON ENVOYER Private Sub Button3_Click(sender As Object, e As EventArgs) Handles EnvoyButton.Click ' SerialPort1.Write(ChargeButton.Text & vbCr) 'The text contained in the txtText will be sent to the serial port as ascii 'plus the carriage return (Enter Key) the carriage return can be ommitted if the other end does not need it ToolStripStatusLabel1.Text = "Appuyez sur 'F6' de la commande numérique puis patientez..." If Me.KeyPreview = True Then SerialPort1.Write(ChargeButton.Text & vbCr) 'SerialPort1.Write(Chr(10)) End If End Sub 'BUTTON DECONNECTER Private Sub Button4_Click(sender As Object, e As EventArgs) Handles DeconnecteButton.Click SerialPort1.Close() 'Close our Serial Port ConnecteButton.Enabled = True DeconnecteButton.Enabled = False RadioButton.BackColor = Color.Red ChargeButton.Enabled = False End Sub 'BUTTON RECEVOIR Private Sub Button6_Click(sender As Object, e As EventArgs) Handles RecevButton.Click ToolStripStatusLabel1.Text = "Appuyez sur 'F6' de la commande numérique puis patientez..." If Me.KeyPreview = True Then ' le teste de button F6 SerialPort1.Write(ChargeButton.Text & vbCr) 'SerialPort1.Write(Chr(10)) End If SerialPort1.Write(Chr(13)) Timer1.Start() End Sub 'BUTTON SAUVEGARDER Private Sub Button7_Click(sender As Object, e As EventArgs) Handles SauvegardeButton.Click End Sub 'TIMER DE LA BAR Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick ProgressBar1.Increment(1) If ProgressBar1.Value = 100 Then 'Label2.Text = "Télechargement Réussi" ToolStripStatusLabel1.Text = "Télechargement Réussi" End If Label1.Text = ProgressBar1.Value & ("%") End Sub 'TESTE DU BUTTON F6 Private Sub Form1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown If e.KeyCode = Keys.F6 Then MsgBox("oeuvres") End If End Sub Private Sub SerialPort1_DataReceived(ByVal sender As System.Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived inputData = SerialPort1.ReadExisting Me.Invoke(New EventHandler(AddressOf Affiche)) End Sub 'afficher les donnees recues dans l'interface utilisateur Private Sub Affiche() TextBox1.Text &= inputData End Sub End Class
Public Class Form1 Public Dim bBufferBytes() As Byte ... End Class
Private Sub Button1_Click(sender ... ... ' Place le contenu dans un buffer d'octets ... bBufferBytes = System.Text.Encoding.ASCII.GetBytes(sDatasTexte) ''NE PAS FAIRE LE WRITE ICI ! ''SerialPort1.Write(bBufferBytes, 0, bBufferBytes.Length) ... end sub
Private Sub Button3_Click(sender .... ... SerialPort1.Write(bBufferBytes, 0, bBufferBytes.Length) ... End Sub
If Me.KeyPreview = True Then ' write end if