Все технические форумы на одном сайте Удобный поиск информации с популярных форумов в одном месте
Вопрос: Отправка текстового сообщения в ком порт, на удаленном пк

всем привет, требуется отправлять сообщение на принтер чеков, который подключен при помощи ком порта, к станции, работающей на dos.
с отправкой на локальный принтер проблем нет
Код C#
1
2
3
4
SerialPort serial = new SerialPort("COM1", 19200);
serial.Open();
serial.WriteLine("Hello");
serial.Close();
Ответ: Ну вот, вроде теперь понятно.
Но тогда, к сожалению, на данный момент мыслей,
кроме как озвученных в первой половине первого моего ответа, - нет.

По сути, сделать проброс данных, полученных по сети на com порт и обратно
на станции под управлением DOS, с параллельно запущенной программой - вопрос не совсем из категории C#.
Может попробовать задать вопрос в другом разделе? На форумах по TillyPad итд?

Но, если что придумаю, - отпишусь.

Добавлено через 16 часов 30 минут
Раз сервер и станции соединены сетью - перехвати сетевой траффик с помощью WireShark например, и попробуй его эмулировать на сервере в своей проге, отправляя станциям.
Вопрос: Компонент TComPort Ошибка при при переподключении устройства.

Имеется ComPort Library ver. 4.11 и компонент TComPort.
К компу подключено Arduino которое эмулирует COMport (COM5).
Все работает до одного момента:
Если отключить девайс передача данных пропадает (логично).
При подключении девайса передача данных не возобновляется, ибо драйвер зарегистрировал устройство
под новым ID. (логично).
Если закрыть порт ошибки нет.
Если снова открыть порт COM5 возникает ошибка "PurgeComm function failed (Error: 5)"

Кто поборол эту проблему и научил компонент "забывать" ID предварительного порта?
Ответ: Проблему решено.
Изменения в unit CPort;

procedure TCustomComPort.AbortAllAsync;
begin
 try
    if not PurgeComm(FHandle, PURGE_TXABORT or PURGE_RXABORT) then
      raise EComPort.Create(CError_PurgeFailed, GetLastError);
  except
  end;
//  if not PurgeComm(FHandle, PURGE_TXABORT or PURGE_RXABORT) then
//    CallException(CError_PurgeFailed, GetLastError);
end;
Вопрос: Не закрывается ком порт

Помогите разобраться - почему ошибка вылазит.
Есть главная форма с двумя кнопками "Open" и "Close".
Есть класс MySerialPort:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
using System;
using System.Collections.Generic;
using System.Text;
using System.IO.Ports;
 
namespace DGSM1
{
    class MySerialPort
    {
        public static SerialPort Port { get; private set; }
 
        public static void Open(string portName, int PortSpeed)
        {
            SerialPort Port = new SerialPort(portName, PortSpeed, Parity.None, 8, StopBits.One);
            Port.Handshake = Handshake.None;
            Port.Open();
            // Port.Close();   почему в этом месте работает
        }
        public static void ClosePort()
        {
            Port.Close();  // почему в этом месте не работает, хотя перед этим был открыт ком порт
        }
 
    }
}
Форма:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
 
namespace DGSM1
{
    public partial class MainForm : Form
    {
        public MainForm()
        {
            InitializeComponent();
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            string portname1 = "Com1"; 
           string portSpeedstr = "9600"; 
           int portSpeed = Convert.ToInt32(portSpeedstr);  // преобразовать из строки в инт32
           try
           {
               MySerialPort.Open(portname1, portSpeed);
           }
           catch
           { }
 
        }
 
        private void button2_Click(object sender, EventArgs e)
        {
            MySerialPort.ClosePort();  
        }
    }
}
Ошибка:
Ответ: разобрался спасибо Someone007
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
using System;
using System.Collections.Generic;
using System.Text;
using System.IO.Ports;
 
namespace DGSM1
{
    class MySerialPort
    {
        public static SerialPort Port1 { get; private set; }
 
        public static void Open(string portName, int PortSpeed)
        {
           Port1 = new SerialPort(portName, PortSpeed, Parity.None, 8, StopBits.One);
            Port1.Handshake = Handshake.None;
            Port1.Open();
 
 
        }
        public static void ClosePort()
        {
 
            Port1.Close();  // почему в этом месте не работает, хотя перед этим был открыт ком порт
        }
 
    }
}
Вопрос: Передача выбраной позиции в datagrid из одной формы в другую

Добрый день.
Интересует возможность передачи текущей выбранной позиции в datagrid (+ используется BindingSource, фактически все данные расположены по таблицам в БД MSSQL) расположенного на одной форме в другой datagrid другой формы.

В чем суть, на основной форме есть datagrid допустим со списком ФИО. Мы выбираем, например, вторую фамилию. Тогда на дополнительно открывающейся форме, в другом datagrid должны открыться все вещи, которыми владеет данное ФИО. Следовательно если мы выбираем третью фамилию в списке, то в дополнительной форме со своим datagrid будут уже данные по этой ФИО.
Внутри одной формы это удается реализовать связями (dataSet.Relations.Add), но при создании дополнительной формы, вторая форма не знает, какая позиция выбрана в datagrid на первой форме.
Спасибо.
Ответ:
Сообщение от gmaksim
В первой форме мы вставляем после InitializeComponent(); данный пункт:
И зачем он там???
Сообщение от gmaksim
SELECT " + id + "FROM Tables2
Такой запрос точно не будет работать
Сообщение от gmaksim
Как глобально передать/сохранить значение переменой id, ибо вторая форма о ней ничего не известно?
Как это сделать я Вам уже целый день говорю!


Сообщение от Даценд
Если лень/некогда/нехочу, можно глянуть Как передать данные из одной формы в другую
С этого все и началось!!! Среди этих вариантов не нашлось подходящих!!!
Вопрос: По заданным двум словам определить, можно ли из букв одного слова составить другое

по заданным двум словам определяет можно ли из букв одного слова составить другое
Ответ: В условии задачи сказано. Можно ли из букв одного
слова составить другое. Но ничего не сказано о том,
что слова должны быть равной длины. Иными словами
задание можно интерпретировать так. Возможно ли
из букв одного слова составить другое Любой Длины
лишь бы букв хватило.
Есть такая игра из одного длинного слова составить
кучу меньших по длине. (про. проверена)
первое слово главное. ИЗ него строится второе...

QBasic/QuickBASIC
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
CLS
DIM s1 AS STRING
DIM s2 AS STRING
DIM s AS STRING
 
INPUT "SLOVO_1 = "; s1
INPUT "SLOVO_2 = "; s2
 
FOR i = 1 TO LEN(s1)
   s = MID$(s2, i, 1)
   k = INSTR(s1, s)
   IF k THEN
      MID$(s1, k, 1) = " "
   ELSE
      PRINT "NO": END
   END IF
NEXT i
PRINT "YES"
END
Вопрос: Как, имея две матрицы, одну записать в другую?

Доброго времени. Скажите пожалуйста, как имея 2 двухмерных массивов, один записать в другой?

Пояснение.
Первый массив A[68;120].
Второй массив B[68;60].

Запись произвести всех элементов массива B начиная с 0, в массив А, чтобы элементы массива начинались с 60 столбца, т.е. чтобы получился массив, элементы которого мы заполнили, начинались с первой строки и с 60 столбца.

Имеем в итоге массив А

0 1 2 ... 0 60 0 ... 0 120
0 0 0 ... B[0;0] ... B[0;60]
1 0 0 ... B[1;0] ... B[1;60]
...
68 0 0 ... B[68;0] ... B[68;60]

Белые нули разделители
Ответ: Для вашего случая: InsertMatrix(B, A, 0, 60);
Код C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
/*
 * Задача: вставить одну матрицу в другую
 * в определённой позиции.
 */
 
using System;
 
class Program
{
    public static void InsertMatrix<T>(T[,] source, T[,] dest, int row, int col) {
        // TODO: Проверка границ
        for (int r = 0; r < source.GetLength(0); r++) {
            for (int c = 0; c < source.GetLength(1); c++) {
                dest[r + row, c + col] = source[r, c];
            }
        }
    }
    
    static void Main() {
        int[,] m1 = {
            { 1, 2, 3, 4, 5 },
            { 5, 4, 3, 2, 1 },
            { 2, 3, 5, 7, 9 }
        };
        int[,] m2 = {
            { -10, -20 },
            { -20, -30 }
        };
        
        InsertMatrix(m2, m1, 1, 2);
        for (int r = 0; r < m1.GetLength(0); r++) {
            for (int c = 0; c < m1.GetLength(1); c++) {
                Console.Write("{0}\t", m1[r, c]);
            }
            Console.WriteLine();
        }
    }
}
Вопрос: Не могу перегнать данные из одной таблицы в другую.

Здравствуйте! Столкнулся с проблемой нужно данные переписать из одной таблицы в другую.
Код:
private void bt_ShowGrid_Click(object sender, EventArgs e)
        {
            try
            {
                string strcon = "Provider = Microsoft.Jet.OLEDB.4.0; Data Source = D:\\; Extended Properties = dBase IV; User ID=;Password=";
                OleDbConnection conDB = new OleDbConnection();
                conDB.ConnectionString = strcon;
                conDB.Open();
 
                string query = "Select * from OPLATA";
                OleDbDataAdapter adapter = new OleDbDataAdapter(query, conDB);
                DataSet ds = new DataSet();
                adapter.Fill(ds);
                conDB.Close();
                this.dataGridView1.DataSource=ds.Tables[0];
            }
            catch(OleDbException exp)
            {
                MessageBox.Show("Error: "+exp.Message);
            }
        }

Как мне действовать дальше?
Ответ:
son456
данные переписать из одной таблицы в другую
"INSERT MyTable Select * from OPLATA"
или
"INSERT MyTable (Field1, Field2, Field3) Select Field1, Field2, Field3 from OPLATA"
Вопрос: Как передать данные из одной формы в другую

Пишу курсовую на wpf, интересует такой вопрос как передать данные из одной формы в другую.
Ответ: 1. Используя паттерн MVVM можно обратиться к ViewModel той View, из которой хотим данные получить (короче пункт 3, MVVM просто удобно на WPF творить, судя по заявлениям).
2. Хмм... Статический класс, методы, переменные, свойства. Из одной формы в другую передавать данные через статический класс.
3. В итоге вижу решение в разделении представления от модели(в общем). Используя что-то из этого можно решить вашу проблему.
Вопрос: Передать указатель на функцию из одного класса в другой

Доброго времени суток. Долго рылся на форуме и в инете в целом, но так и не нашел ответа на вопрос: как передать указатель на функцию из одного класса в другой. Суть такая:

Есть "Класс1", в нем есть метод "Метод"
Есть "Класс2", объекты которого создаются в классе "Класс1"

Суть заключается в том, что "Класс2" должен иметь возможность вызывать "Метод". Мне кажется, что это проще всего сделать передачей указателя на "Метод" в "Класс2". Но оказалось не все так просто. Можете, пожалуйста, продемонстрировать, как это можно сделать. Ну или может быть есть более простой способ вызывать "Метод", прописанный в "Класс1", из "Класс2".
Ответ: Мда. Все было бы проще, если бы метод класса нужно было вызывать в main, а поскольку это другой класс, то совсем все плохо получается. Я в принципе с самого начала такой исход предполагал, но думал что можно проще. Ладно, и на том спасибо)

Добавлено через 18 часов 1 минуту
Нашел-таки, благодаря Stack Overflow () более простой и не громоздкий метод передачи указателя из одного класса в другой:

C++
1
2
3
4
    aircraft Aircraft;
    boer Boer;
 
    Boer.setSomeFun([&](int v) {Aircraft.source_forSomeFun(v);});
Т.е. делать это, используя лямбду. По ссылке код полностью, хотя он почти полностью аналогичен представленному здесь.
Вопрос: ком порт, как отключить приемник во время передачи

Всем добра. Сделал электронную поделку и хочу установить с ней связь по одному проводу.
Нужно отключить приемник ком порта во время передачи.
Проблема в том что приемник всегда принимает данные во время передачи от компа к микроконтроллеру, я пробовал играться с flow control но данные либо не отправляются, либо usb-com зависает. Мне нужно получить ответ от контроллера без переданных на него данных. Как это можно сделать? Пробовал с AsyncFree, с ComPort Library и в лоб с WinApi. Не помогло..

Как можно подобное реализовать правильно? Пока сделал через жо, работает, но выполняет ненужные операции..
 
Код

procedure Send;
begin
  txEn:=true;
  AfComPort1.WriteString(TxData);
end;

procedure TForm1.AfComPort1DataRecived(Sender: TObject; Count: Integer);
begin
if txEn then
  if Count>=Length(TxData) then
              begin
              AfComPort1.PurgeRX;
              txEn:=false;
              end;
if not txen then Memo1.text:=Memo1.text+AfComPort1.ReadString;
end;


Это сообщение отредактировал(а) casusnur - 15.5.2017, 23:25
Ответ:
если передача по одному проводу , то не может быть что бы ответ пришел раньше запроса!
если у вас другие случаи и такое развитие ситуации возможно тогда анализатор трафика надо внедрять.