如果是一个单片机具有多个串口,那么中断和地址是不同的,通信程序中更改下地址和中断就好了
如果单片机只有一个串口,那就要更改硬件电路了,串口是1对1的,不支持1对多
422和485可以支持1对多
给每一个下位机编写一个不同的地址码,放入一个寄存器中,每次上传给上位机数据的时候,把地址码包含在数据包中,收到有效数据后,就可以根据地址码确认了,相当于身份ID
如果不想在程序中修改,也可以通过拨码开关,在外部拨到地址位,每次上电后,通过读取拨码开关的值来确定自己的身份ID
上位机向下位机发送数据的时候,如果是向单个发送的,就在数据包增加要发送下位机的地址码,如果是要向全部发送,就把地址码设为一特殊值,当作广播下发
这个要在上下位机通讯协议中明确出来
上位机和下位机分别是:
1、上位机:
上位机是指可以直接发出 *** 控命令的计算机,一般是PC/host computer/master computer/upper computer,屏幕上显示各种信号变化。
2、下位机:
下位机是直接控制设备获取设备状况的计算机,一般是PLC/单片机single chip microcomputer/slave computer/lower computer之类的。
扩展资料:
通常上位机和下位机通讯可以采用不同的通讯协议,可以有RS232的串口通讯或者采用RS485串行通讯。
当用计算机和PLC通讯的时候,不但可以采用传统的D形式的串行通讯,还可以采用更适合工业控制的双线的PROFIBUS-DP通讯。采用封装好的程序开发工具就可以实现PLC和上位机的通讯,可以自己编写驱动类的接口协议控制上位机和下位机的通讯。
参考资料来源:百度百科—上位机
参考资料来源:百度百科—下位机
使用SerialPort 类,基本实例代码如下,如果下位机自动上传数据的使用此类对象的DataReceived事件即可,你也可以在网上找此类的其他应用方法。
public class Read
{
SerialPort sp = new SerialPort();
public Read(string p_portname,string p_baudrate,string p_databits,string p_stopbits)
{
try
{
spPortName = p_portname;//端口号---“COM1”
spBaudRate = intParse(p_baudrate);//波特率--“38400”
spDataBits = intParse(p_databits);//数据位---“8”
spStopBits = (StopBits)intParse(p_stopbits);//停止位----“1”
spReadTimeout = 1000;
spOpen();
}
catch (Exception ex)
{
throw new Exception(exMessage);
}
}
//发送数据
public void WriteToComm(string p_data)
{
spWrite(p_data);
}
//读取数据
public string RecieveFromComm()
{
return spReadExisting();
}
//sp释放
public void CloseComm()
{
spClose();
}
}
因为你的问题太不明确,所以别人也不好回答,不知道你到底需要什么。如果你要让PC机能够与单片机联机调试,先从简单的说。
最简单的方法是单片加上一片MAX202或MAX232芯片,然后连用9针DB头与PC机的串行口连接,就可以编译下载了。当然单片机要选用可以与PC机串口连接的型号,我推荐SST89E516RD单片机,可以与Keil直接联机调试。STD单片机也可以与PC串口连接下载,但是不能Debug。所以还是SST好。凌阳61单片机也能与PC机联机调试,但用的是并行口,改USB比较困难,使用者好像不太多。
然后就是你提到的USB与单片机连接的问题了。
这首先PLC得有这个自诊断功能;然后信息需要存在PLC的存储区,且这个存储区外部可以访问;接着一般用该品牌的PLC自带的OPC Server软件,在PC上运行,连到PLC上,就可以读取了。
以上就是关于多个下位单片机与上位机pc通过串口通信的实现全部的内容,包括:多个下位单片机与上位机pc通过串口通信的实现、什么是上位机和下位机、c#如何通过串口接收下位机(单片机)中的数据即PC如何获取下位机中的数据等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)