C#串口 上位机如何向下位机发送命令和接收下位机上传的数据

chenrong980 2012-03-14 10:30:03
上位机:pc机
下位机:单片机
pc机与单片机联机通信正常后,上位机怎么向下位机发送命令,单片机收到命令后开始上传预置的数据
请问:pc机如何下发命令和如何读取上传的数据。
我以前对这个一点的不了解的,查了几天也了解了点串口通信
也还是没点头绪。刚到这个公司,他们的下位机已经写好了的,只需要写上位机,可是我不知道怎么写。
希望给位大侠指点一下,最好有代码,谢谢!急用啊!


协议的基本格式是:
起始位标志(1个字节)+通信协议版本号(1个字节)+设备描述(1个字节)
+设备标识码(1个字节)+控制标识码(1个字节)+info字节长度(2个字节)
+控制数据信息(长度不确定)+校验和码(2个字节)+结束码(1个字节) 各个字节都是以十六进制表示。
...全文
3640 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
红豆相思 2014-06-07
  • 打赏
  • 举报
回复
串口做好后,上位机发送,下位机接收用com.write();上位机接收,下位机发送用com.read()。就OK啦
Sounms 2013-04-26
  • 打赏
  • 举报
回复
你好,你的这个问题解决了吗?我现在也遇到了和你同样的问题,希望能给我指点一下,不胜感激!!!
chenrong980 2012-03-14
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 yufei_yuxuan 的回复:]
引用 1 楼 chenrong980 的回复:

没人来么,我现在分数太少了,只能20分啊,在论坛发的第一帖,小女子求各位大侠赐教了,感激不尽,第一次接触串口通信,查各种资料就是没查到可用的,可能是自己的问题。求代码,越详细越好啊!

女孩子做编程的很少哟,串口通信块我是下载了一个串口调试助手的原码,看懂后,在这个基础上改就行了,基本功上要用到的功能在串口调试助手的原码里都能找的到,解析这……
[/Quote]
也不是很少吧,我就认识很多个,以前就是做应用系统,从来没有接触过这一块,串口通信看了几天,还是没点头绪,理解不了上位机写进去了难道就会到下位机去,用Read读取数据,下位机返回的数据就可以到上位机里。
chenrong980 2012-03-14
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 wangshunqi1234 的回复:]
很简单的,你从网上搜串口编程,出来一堆,我给你参考,仅供参考:
用串口类SerialPort

1、打开串口
public bool ComOpen(int OutTime, string ComNum, int BaudRate)
{
try
{
com.PortName = ComNum;
com.BaudRate = 9600;
com.……
[/Quote]
已经打开串口了的,只要com.write("命令")就能把命令发出去,接收的时候com.Read()就可以把下位机上送的数据接收到么,不需要像页面跳转,传个i=1去,取的时候要用到i么。
chenrong980 2012-03-14
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 shashengduguzhe 的回复:]
1. .net中有个串口类,你可以利用。
2. 确定发送的串口号。
3. 设置串口参数(波特率、停止位、奇偶校验)
4. 组合发送的协议格式
5. 以字节型数据发送


接收就简单了。把接收来的字节型数据转化为你所需的就可以。

网上这方面的资料一大把。搜一下,看看他们的流程。
[/Quote]
就是不知道怎么接收数据
yufei_yuxuan 2012-03-14
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 chenrong980 的回复:]

没人来么,我现在分数太少了,只能20分啊,在论坛发的第一帖,小女子求各位大侠赐教了,感激不尽,第一次接触串口通信,查各种资料就是没查到可用的,可能是自己的问题。求代码,越详细越好啊!
[/Quote]
女孩子做编程的很少哟,串口通信块我是下载了一个串口调试助手的原码,看懂后,在这个基础上改就行了,基本功上要用到的功能在串口调试助手的原码里都能找的到,解析这块就要根据你的下位机指令格式自己重写了,但接收的方法还是可以照用的
王顺起 2012-03-14
  • 打赏
  • 举报
回复
很简单的,你从网上搜串口编程,出来一堆,我给你参考,仅供参考:
用串口类SerialPort

1、打开串口
public bool ComOpen(int OutTime, string ComNum, int BaudRate)
{
try
{
com.PortName = ComNum;
com.BaudRate = 9600;
com.DataBits = 8;
//com.Parity = Parity.Even;
com.WriteTimeout = OutTime;
com.ReadTimeout = OutTime;
com.Open();
}
catch
{
return false;

//MessageBox.Show("打开串口失败!", "系统提示");
}
return true;
}
2、先把你的协议转换为byte数据,具体的你自己拼写,下面的是把你的字符串转换为为ascII码,你的十六进制的其实是ascII码形式
ASCIIEncoding MyInfo = new ASCIIEncoding();
byte[] MySend = MyInfo.GetBytes(AlarmCode);

在数组中,起始位一般是0x02还是0x03啊,忘了,你自己看着拼一下

3、串口发送或者接受命令,把你的数组发送出去或者取出来,都一样

public byte[] ComSend(byte[] sendbyte,int SleepTime)
{
//byte[] refbyte = new byte[500];
int reallength;
//try
//{
com.Write(sendbyte, 0, sendbyte.Length);
//return sendbyte;
//}
//catch
//{
// //MessageBox.Show("发送数据失败!");
// return null;
//}
try
{
reallength = com.BytesToRead;
byte[] refbyte = new byte[reallength];
reallength = com.Read(refbyte, 0, com.BytesToRead);
return refbyte;
}
catch
{
return null;
// MessageBox.Show("接收数据失败!");
}

}
shashengduguzhe 2012-03-14
  • 打赏
  • 举报
回复
1. .net中有个串口类,你可以利用。
2. 确定发送的串口号。
3. 设置串口参数(波特率、停止位、奇偶校验)
4. 组合发送的协议格式
5. 以字节型数据发送


接收就简单了。把接收来的字节型数据转化为你所需的就可以。

网上这方面的资料一大把。搜一下,看看他们的流程。
chenrong980 2012-03-14
  • 打赏
  • 举报
回复
没人来么,我现在分数太少了,只能20分啊,在论坛发的第一帖,小女子求各位大侠赐教了,感激不尽,第一次接触串口通信,查各种资料就是没查到可用的,可能是自己的问题。求代码,越详细越好啊!

110,539

社区成员

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

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

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