关于C#串口通信连续发送命令的问题

ningyb 2011-04-02 06:31:50
这样子的,我想实现一个这样的功能

一个生产线有一个电子看板,2个生产线的电子看板,连接一台电脑,

然后 ,我在这台电脑上 ,实现 发送 2个命令 接受 2台电子看板的信息

协议 线 都好了

现在,我实现的代码大概如下,




private void RealTimeInfor_Load(object sender, EventArgs e)
{
LoadDgvData();//加载DataGridView数据
comm.DataReceived += comm_DataReceived;//添加事件注册
comm.RtsEnable = true;
OpenPort();//打开端口
}



timer控件 是 20秒 执行一次 SendCmd方法
private void timer1_Tick(object sender, EventArgs e)
{
SendCmd();//发送命令
}



/// <summary>
/// 发送命令
/// </summary>
public void SendCmd()
{
List<string> userpowerList = UserInforManager.ProcessUserPower(TransferValue.uinfor.UserPower);//UserPower是用户 可以操作电子看板的Id号,和PortBaudrateCmd.xml里的key值对应
string _key = string.Empty;
string cmd = string.Empty;
Dictionary<string, string> dic = ProcessXml.GetSureValue(System.IO.Directory.GetCurrentDirectory() + "/PortBaudrateCmd.xml");
foreach (KeyValuePair<string, string> kvp in dic)
{
for (int j = 0; j < userpowerList.Count; j++)
{
if (userpowerList[j] == kvp.Key)
{
try
{
comm.WriteLine(kvp.Value);
Thread.Sleep(300);
}
catch (Exception ex)
{
comm = new SerialPort();//捕获到异常信息,创建一个新的comm对象,之前的不能用了。
Console.WriteLine(ex.Message);//现实异常信息给客户。
}
}
}
}
}




PortBaudrateCmd.xml

<?xml version="1.0" encoding="utf-8" ?>
<ConnectionInfor>
<cinfors portname="COM5" baudrate="9600">
<cinfor key="1" cmd="@01x39#"></cinfor>
<cinfor key="2" cmd="@02x3A#"></cinfor>
<cinfor key="3" cmd="@03x3B#"></cinfor>
<cinfor key="4" cmd="@04x3C#"></cinfor>
<cinfor key="5" cmd="@05x3D#"></cinfor>
<cinfor key="6" cmd="@06x3E#"></cinfor>
<cinfor key="7" cmd="@07x3F#"></cinfor>
<cinfor key="8" cmd="@08x30#"></cinfor>
<cinfor key="9" cmd="@09x31#"></cinfor>
<cinfor key="10" cmd="@10x39#"></cinfor>
<cinfor key="11" cmd="@11x38#"></cinfor>
<cinfor key="12" cmd="@12x3B#"></cinfor>
<cinfor key="13" cmd="@13x3A#"></cinfor>
<cinfor key="14" cmd="@14x3D#"></cinfor>
<cinfor key="15" cmd="@15x3C#"></cinfor>
<cinfor key="16" cmd="@16x3F#"></cinfor>
<cinfor key="17" cmd="@17x3E#"></cinfor>
</cinfors>
</ConnectionInfor>



private bool Listening = false;//是否没有执行完invoke相关操作
private bool Closing = false;//是否正在关闭串口,执行Application.DoEvents,并阻止再次invoke

void comm_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
Thread.Sleep(500);
if (Closing) return;
try
{
int n = comm.BytesToRead;
byte[] buf = new byte[n];
comm.Read(buf, 0, n);
builder.Remove(0, builder.Length);
this.Invoke((EventHandler)(delegate
{
builder.Append(Encoding.ASCII.GetString(buf));
txtHome.Text = "";
txtHome.AppendText(builder.ToString());
//
Console.WriteLine(txtHome.Text);
if (txtHome.Text.Length > 0 && txtHome.Text.Length % 81 == 0)
{
string[] first = ProcessSerialportData.InitProcess(txtHome.Text); //第一次处理数据
if (first == null)
{
return;
}
RealTimeInfo rti = ProcessSerialportData.AgainProcess(first);//第二次处理数据
if (rti != null)//没有就增加,有就更新
{
int num = RealTimeInfoManager.AddRealTimeInfor(rti);
LoadDgvData();//重写绑定数据
Console.WriteLine(num);
}
}
}));
}
catch (Exception e2)
{
Console.WriteLine(e2.Message);
}
finally
{
Listening = false;
}

}



现在呢,只能发送一个命令,接受一个回发信息,我想请教下大家, 怎样才能发送UserPower 更多的命令,接受更多的电子看板信息呢?
...全文
621 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
ningyb 2011-04-02
  • 打赏
  • 举报
回复
powerchuangwai 2011-04-02
  • 打赏
  • 举报
回复
用过串口,不过没有用到你这种需求的。

帮顶。
ningyb 2011-04-02
  • 打赏
  • 举报
回复
老天!放假让我休息会把,,,
ningyb 2011-04-02
  • 打赏
  • 举报
回复
ps:

发送 UserPower 里的命令 ,回发 对应的 信息

就行
ningyb 2011-04-02
  • 打赏
  • 举报
回复
明天就放假啦,大家帮帮忙咯
内容概要:本文系统梳理了多个科研领域的前沿研究与技术实现,重点涵盖FDTD方法中的完美匹配层(PML)研究,以及Matlab/Simulink在电磁、电力、控制、通信、信号处理、图像处理、路径规划、能源系统优化等领域的仿真与算法实现。文中列举了大量基于Matlab和Python的科研案例,如风电功率预测、负荷预测、无人机三维路径规划、电池系统故障诊断、雷达模拟、通信编码、微电网优化调度等,并强调结合智能优化算法(如粒子群、遗传算法、深度学习等)提升系统性能。同时,提供了丰富的代码资源与仿真模型,涵盖永磁同步电机控制、逆变器设计、多智能体任务分配、虚拟电厂调度等复杂系统,助力科研人员快速开展复现实验与创新研究。; 适合人群:具备一定编程基础,熟悉Matlab/Python工具,从事电气工程、自动化、通信、人工智能、新能源、控制科学等相关领域研究的研发人员及研究生。; 使用场景及目标:① 学习并实现FDTD仿真中的PML边界条件以有效抑制数值反射;② 掌握Matlab/Simulink在多物理场建模、控制系统设计与优化算法中的综合应用;③ 借助提供的代码资源完成科研复现、课程设计、竞赛项目或工程原型开发; 阅读建议:此资源以科研实战为导向,不仅提供理论方法,更强调代码实现与仿真验证。建议读者结合自身研究方向,按目录顺序查阅相关模块,下载配套代码进行调试与二次开发,以达到学以致用、融会贯通的目的。

111,132

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧