Zdravím,
jedná se o prosbu, výpomoc s mým programem. Udělal jsem formulářový program na přenos dat mezi počítačem po sériovém portu COM, kde se nastavují vlastnosti portu (rychlost, parita...). dále je příjem a odesílání jednotlivých znaků a příjem a odesílání jednotlivého souboru. Je problém že přenos musí fungovat mezi asemblerem a C#. Mně přenos funguje pouze C# a C#. Pokud použiji již hotový a funkční program z asembleru a můj program, tak můj program nepřijímá data. Někomu program může zabrat 60 minut práce a někdo jako já na tom pracoval přes měsíc a stále to není úplně funkční. Program klidně mohu zaslat někomu kdo by měl zájem pomoct.
Za výpomoc jsem schopen nabídnou finanční částku, ale jsem student prosil bych s mírou.
Zde je ukázka zdrojového kódu. Je to hodně zakomentované. Spíše to co neplatí.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO.Ports;
using System.Threading;
using System.Windows;
using System.IO;
namespace SerialPortVlcek
{
public partial class SerialPortForm : Form
{
bool _continue = true;
SerialPort _serialPort = new SerialPort();
PortChat mujPortChat = new PortChat();
public SerialPortForm()
{
InitializeComponent();
}
private void konecButton_Click(object sender, EventArgs e)
{
Application.Exit();
}
private void restartButton_Click(object sender, EventArgs e)
{
Application.Restart();
}
private void odeslatButton_Click(object sender, EventArgs e)
{
//_serialPort.PortName = this.SetPortName(portNameTextBox.Text);
//_serialPort.BaudRate = this.SetPortBaudRate(Convert.ToInt16(portBaudRateTextBox.Text));
//_serialPort.Parity = this.SetPortParity(portParityTextBox.Text);
//_serialPort.DataBits = this.SetPortDataBits(Convert.ToInt16(portParityTextBox.Text));
//_serialPort.StopBits = this.SetPortStopBits(portStopBitsTextBox.Text);
string message = zpravaTextBox.Text;
_serialPort.WriteLine(String.Format("<{0}>: {1}", jmenoTextBox.Text, message));
}
private void otevritVlaknoButton_Click(object sender, EventArgs e)
{
_serialPort.PortName = this.SetPortName(portNameTextBox.Text);
_serialPort.BaudRate = this.SetPortBaudRate(Convert.ToInt16(portBaudRateTextBox.Text));
_serialPort.Parity = this.SetPortParity(portParityTextBox.Text);
_serialPort.DataBits = this.SetPortDataBits(Convert.ToInt16(portDataBitsTextBox.Text));
_serialPort.StopBits = this.SetPortStopBits(portStopBitsTextBox.Text);
switch (handShakeComboBox.Text)
{
case "None":
_serialPort.Handshake = this.SetPortHandshake(_serialPort.Handshake);
break;
case "RequestToSend":
_serialPort.Handshake = this.SetPortHandshake(_serialPort.Handshake);
break;
case "RequestToSend XOnXOff":
_serialPort.Handshake = this.SetPortHandshake(_serialPort.Handshake);
break;
case "XOnXOff":
_serialPort.Handshake = this.SetPortHandshake(_serialPort.Handshake);
break;
}
try
{
_serialPort.Open();
}
catch (Exception exception)
{
Console.WriteLine(exception.Message);
}
// vytvorit vlakno - "delnika" ktere sleduje prichozi data na portu
// po spusteni vlakna se zacne vykonavat metoda Read
Thread readThread = new Thread(Read);
// spustit cteci vlakno - ted se zacne cist
readThread.Start();
}
public string SetPortName(string defaultPortName)
{
string portName="";
//Console.WriteLine("Available Ports:");
//foreach (string s in SerialPort.GetPortNames())
//{
// Console.WriteLine(" {0}", s);
//}
//Console.Write("Enter COM port value (Default: {0}): ", defaultPortName);
//portName = Console.ReadLine();
if (portName == "" || !(portName.ToLower()).StartsWith("com"))
{
portName = defaultPortName;
}
return portName;
}
public void Read()
{
while (_continue)
{
try
{
string message = _serialPort.ReadLine();
//Console.WriteLine(message);
poleTextBox.AppendText(message);
poleTextBox.AppendText(" ");
}
catch (TimeoutException) { }
}
}
public int SetPortBaudRate(int defaultPortBaudRate)
{
string baudRate="";
// Console.Write("Baud Rate(default:{0}): ", defaultPortBaudRate);
// baudRate = Console.ReadLine();
if (baudRate == "")
{
baudRate = defaultPortBaudRate.ToString();
}
return int.Parse(baudRate);
}
public Parity SetPortParity(string defaultPortParity)
{
string parity="";
// Console.WriteLine("Available Parity options:");
// foreach (string s in Enum.GetNames(typeof(Parity)))
// {
// Console.WriteLine(" {0}", s);
// }
// Console.Write("Enter Parity value (Default: {0}):", defaultPortParity.ToString(), true);
// parity = Console.ReadLine();
if (parity == "")
{
parity = defaultPortParity.ToString();
}
return (Parity)Enum.Parse(typeof(Parity), parity, true);
}
public int SetPortDataBits(int defaultPortDataBits)
{
string dataBits="";
//Console.Write("Enter DataBits value (Default: {0}): ", defaultPortDataBits);
//dataBits = Console.ReadLine();
if (dataBits == "")
{
dataBits = defaultPortDataBits.ToString();
}
return int.Parse(dataBits.ToUpperInvariant());
}
public StopBits SetPortStopBits(string defaultPortStopBits)
{
string stopBits = "";
//Console.WriteLine("Available StopBits options:");
//foreach (string s in Enum.GetNames(typeof(StopBits)))
//{
//Console.WriteLine(" {0}", s);
//}
//Console.Write("Enter StopBits value (None is not supported and \n" +
//"raises an ArgumentOutOfRangeException. \n (Default: {0}):", defaultPortStopBits.ToString());
//stopBits = Console.ReadLine();
if (stopBits == "")
{
stopBits = defaultPortStopBits.ToString();
}
return (StopBits)Enum.Parse(typeof(StopBits), stopBits, true);
}
public Handshake SetPortHandshake(Handshake defaultPortHandshake)
{
string handshake = "";
//Console.WriteLine("Available Handshake options:");
//foreach (string s in Enum.GetNames(typeof(Handshake)))
//{
//Console.WriteLine(" {0}", s);
//}
//Console.Write("End Handshake value (Default: {0}):", defaultPortHandshake.ToString());
//handshake = Console.ReadLine();
if (handshake == "")
{
handshake = defaultPortHandshake.ToString();
}
return (Handshake)Enum.Parse(typeof(Handshake), handshake, true);
}
public string nacteniSouboru(string cesta)
{
// The files used in this example are created in the topic
// How to: Write to a Text File. You can change the path and
// file name to substitute text files of your own.
// Example #1
// Read the file as one string.
string text = System.IO.File.ReadAllText(cesta);
// Display the file contents to the console. Variable text is a string.
//zpravaTextBox.Text = text;
//System.Console.WriteLine("Contents of WriteText.txt = {0}", text);
// Example #2
// Read each line of the file into a string array. Each element
// of the array is one line of the file.
//string[] lines = System.IO.File.ReadAllLines(@"C:\Users\Public\TestFolder\WriteLines2.txt");
// Display the file contents by using a foreach loop.
//System.Console.WriteLine("Contents of WriteLines2.txt = ");
//foreach (string line in lines)
//{
// Use a tab to indent each line of the file.
// Console.WriteLine("\t" + line);
//}
// Keep the console window open in debug mode.
//Console.WriteLine("Press any key to exit.");
//System.Console.ReadKey();
return text;
}
private void nacteniSouboruButton_Click(object sender, EventArgs e)
{
OpenFileDialog otevreniSouboru = new OpenFileDialog();
otevreniSouboru.Filter = "Textové soubory (.txt)|*.txt";
otevreniSouboru.FilterIndex = 1;
otevreniSouboru.Multiselect = false;
otevreniSouboru.ShowDialog();
// if (otevreniSouboru.ShowDialog() == DialogResult.OK)
// {
// string jmenoSouboru = otevreniSouboru.FileName;
// informaceSouboru = new System.IO.FileInfo(jmenoSouboru);
// }
String textZeSouboru = File.ReadAllText(otevreniSouboru.FileName, Encoding.GetEncoding(65001));
//String textZeSouboru = this.nacteniSouboru(otevreniSouboru.FileName);
//byte[] bytes = Encoding.Default.GetBytes(textZeSouboru);
//textZeSouboru = Encoding.UTF7.GetString(bytes);
zpravaTextBox.Text = textZeSouboru;
}
private void ulozitSouborButton_Click(object sender, EventArgs e)
{
string textUlozeni = poleTextBox.Text;
SaveFileDialog ulozeniSouboru = new SaveFileDialog();
ulozeniSouboru.Filter = "Textové soubory (.txt) | *.txt";
ulozeniSouboru.Title = "Ukládání souboru";
ulozeniSouboru.ShowDialog();
if (ulozeniSouboru.FileName != "")
{
System.IO.File.WriteAllText(ulozeniSouboru.FileName, textUlozeni);
}
}
private void odeslatButton_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Return)
{
string message = zpravaTextBox.Text;
_serialPort.WriteLine(String.Format("<{0}>: {1}", jmenoTextBox.Text, message));
}
}
}
}