串口485通信,使用多机通信位,有这么用的吗??

draculamx 2016-09-27 11:43:29
接到一个上位机项目,其他都很简单,就是485通信碰到问题了
硬件工程师告诉我,他要使用485通信中的多机通信位,我不太懂硬件,于是他就提出了如下通信的方案:
1.有多个下位机,上位机(PC)通过轮询方式和下位机通信
2.通信由上位机发起,通信过程如下:
(1)上位机将串口校验方式切换为'm'(mark校验),发送通道号(一个字节,范围从1到20)。
(2)上位机将串口校验方式且换为's'(space校验),接收来自下位机的14个字节。
(3)上位机发送31个字节到下位机(串口还是's‘(space校验)不变。
这样,就完成了一个下位机的通信,剩下的就是改变通道号,重复1-3的步骤,去轮询剩下的下位机。

首先我想问一下:485有这么通信的么??我到目前为止,接触到的485轮询,都是使用一种校验方式,中途不改变校验方式的。像这种通信中频繁切换校验方式,通信会稳定吗??这方案有可行性吗??

程序我已经完成,从目前的运行情况来看,不是很理想,主要是PC端和下位机,在收发字节的时候,有错误的字节出现,有时候还会漏掉1个字节。是我的PC端程序有问题,还是这个方案本身就有弊端??

我个人认为,这种通信方案很不靠谱。。。。
...全文
849 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2016-10-09
  • 打赏
  • 举报
回复
如果轮询的频率够高,漏字节或错字节的频率够低,可以在软件上使用比如: 忽略本次错误数据 取多次数据的平均值 使用类似去掉一个最高分,去掉一个最低分,……的算法 使用带纠错功能的校验码 …… 达到设计目标。 另外提醒:漏字节或错字节可能是因为: 线缆过长 插头松动 虚焊 环境电磁干扰过强 电源电压不够稳定 …… 原因造成。
jiqiang01234 2016-10-09
  • 打赏
  • 举报
回复
引用 4 楼 draculamx 的回复:
但现在硬件工程师说,下位机处理能力有限,非要采用我楼顶说的这种方式来通信,但是通信过程中,漏字节和错字节的情况很多,他非要我在软件上做修改来达到目的,但我现在软件不论怎么改都不能实现,这应该是硬件问题,那我该怎么办
下位机什么芯片?通讯频率有多高? 不一定是硬件问题,我不建议每次通讯都要更改串口参数。越复杂的操作,出错的概率就越高!
draculamx 2016-10-09
  • 打赏
  • 举报
回复
但现在硬件工程师说,下位机处理能力有限,非要采用我楼顶说的这种方式来通信,但是通信过程中,漏字节和错字节的情况很多,他非要我在软件上做修改来达到目的,但我现在软件不论怎么改都不能实现,这应该是硬件问题,那我该怎么办
赵4老师 2016-10-09
  • 打赏
  • 举报
回复
Windows下延迟请用Sleep:
#include <windows.h>
#include <stdio.h>
int main() {
 printf("1\n");
 Sleep(1000);//延迟1000毫秒,精度≈15毫秒
 printf("2\n");
 return 0;
}
赵4老师 2016-10-09
  • 打赏
  • 举报
回复
不要迷信书、考题、老师、回帖; 要迷信CPU、编译器、调试器、运行结果。 并请结合“盲人摸太阳”和“驾船出海时一定只带一个指南针。”加以理解。 任何理论、权威、传说、真理、标准、解释、想象、知识……都比不上摆在眼前的事实!
draculamx 2016-10-09
  • 打赏
  • 举报
回复
我也在网上找了一些文章,里面提到,485在收发的时候,需要等待和延迟,不知道是否是这方面的原因
draculamx 2016-10-09
  • 打赏
  • 举报
回复
引用 6 楼 zhao4zhong1 的回复:
如果轮询的频率够高,漏字节或错字节的频率够低,可以在软件上使用比如: 忽略本次错误数据 取多次数据的平均值 使用类似去掉一个最高分,去掉一个最低分,……的算法 使用带纠错功能的校验码 …… 达到设计目标。 另外提醒:漏字节或错字节可能是因为: 线缆过长 插头松动 虚焊 环境电磁干扰过强 电源电压不够稳定 …… 原因造成。
我认为,字节错,漏,就是因为在通信的过程中,频繁的切换了校验方式导致的,因为现在设备全部在实验室,所以外部干扰或者硬件不过关的情况应该是不存在的
draculamx 2016-09-27
  • 打赏
  • 举报
回复
引用 1 楼 jiqiang01234 的回复:
485如果多机通讯,一般使用总线模型,而不是改变通讯校验码的方式。485一般只有两根线,用半双工通讯。也就是同一时刻,只能收或者只能发。 楼主的需求可以这样实现(不需要切换校验码),上位机当做485的主机,轮询总线下的从机,每个从机固定一个id号。当主机轮询从机的时候,请求数据中带上从机的id号,这样只有与自己匹配的从机才会响应主机的请求。
使用您说的这种方案,是不是上位机 (pc)发送任何数据,每个下位机都可以收到?然后根据收到数据中的ID号来决定是否应答??
jiqiang01234 2016-09-27
  • 打赏
  • 举报
回复
485如果多机通讯,一般使用总线模型,而不是改变通讯校验码的方式。485一般只有两根线,用半双工通讯。也就是同一时刻,只能收或者只能发。 楼主的需求可以这样实现(不需要切换校验码),上位机当做485的主机,轮询总线下的从机,每个从机固定一个id号。当主机轮询从机的时候,请求数据中带上从机的id号,这样只有与自己匹配的从机才会响应主机的请求。
jiqiang01234 2016-09-27
  • 打赏
  • 举报
回复
引用 2 楼 draculamx 的回复:
[quote=引用 1 楼 jiqiang01234 的回复:] 485如果多机通讯,一般使用总线模型,而不是改变通讯校验码的方式。485一般只有两根线,用半双工通讯。也就是同一时刻,只能收或者只能发。 楼主的需求可以这样实现(不需要切换校验码),上位机当做485的主机,轮询总线下的从机,每个从机固定一个id号。当主机轮询从机的时候,请求数据中带上从机的id号,这样只有与自己匹配的从机才会响应主机的请求。
使用您说的这种方案,是不是上位机 (pc)发送任何数据,每个下位机都可以收到?然后根据收到数据中的ID号来决定是否应答??[/quote] 对。类似广播。
001、VB串口通讯视频教程源码41个 002、Visual Basic串口通信工程开发实例导航随书源码7个 003、Visual Basic串口通信与测控应用技术实战详解 源代码(15个全) 004、GE PLC串口通讯,VB编制,读取内存单元 005、PC机与51单片机之间的串口通讯,VB编的,分PC和单片机两部分 006、VB6的串口通信程序,还有crc校验 007、VB Modbus RTU源码,其中协议部分已生成DLL,可直接调用 008、VB.net开发的串口调试程序 009、VB.net实现串口编程,希望大家有用 010、VB版串口调试程序,包含VB源码及安装文件,适合调试串口 011、VB编程RS232串口控制DA数模转换 012、VB编程实现的串口调试工具源码 013、VB编写的RS232串口通信测试程序,以txt格式接受,可定义发送字符 014、VB编写的SouthStar串口测试与51串口烧写器V1.0版 015、VB编写的串口调试助手1.0的源码 016、VB编写的串口短信发送程序,需要数据线支持 017、VB编写的串口通信程序,实现多机通信 018、VB编写的串口通信程序,主要用于上机与下机间的通信 019、VB编写的串口通信程序界面参考网上的程序较简单 020、VB编写的串口通讯界面,主要面向51单片机的串口通信 021、VB编写的单片机和PC串口通信的调试程序 022、VB编写的仿真实电子琴操作界面,包含与FPGA串口通信的功能 023、VB串口API通讯,附带BAS文件全部源码,实现与饭卡读卡器通讯 024、VB串口编程,关于上机的应用,特别适合初级学习VB的学员 025、VB串口编程调试精灵源码 026、VB串口编程实现完整的多费率电表读数软件 027、VB串口程序,,是一个串口使用例程,对初学者有用,特别是工控类的 028、VB串口传输文本,实现2台PC间的通信,类似简单的聊天工具 029、VB串口的一个电子称的项目 030、VB串口调试程序,用于通过串口控制松下空调测试 031、VB串口调试程序及源码 032、VB串口调试软件源代码,可以参考修改为其它通讯程序 033、VB串口调试软件源文件 034、VB串口控制步进电机程序完整源码 035、VB串口通信 6路10AD转换数据采集源程序 036、VB串口通信,API串口通信模块源码 037、VB串口通信,适用简单,适合初学者 038、VB串口通信操作界面,进行数据采集,画实时曲线 039、VB串口通信程序,可以读取串口并显示保存数据,且能显示数据曲线 040、VB串口通信的源码,学习的好资料 041、VB串口通信调试器的源码程序 042、VB串口通信设计视频演示源码 043、VB串口通信示例 044、VB串口通信数据源码 045、VB串口通信串口接收程序 046、VB串口通讯测试源代码,有文本和图形两种端口数据观察方式 047、VB串口通讯程序,用来跟单片机通讯 048、VB串口通讯代码(部分) 049、VB串口通讯的参考源程序 050、VB串口通讯实例 高精度电压表(24bit) VB源程序 051、vb串口通讯示例 052、VB串口与伺服电机DSP2407通讯完整代码源程序 053、VB串口源码,动力电池检测数据采集,内含电导巡检模块通讯报文,可,读写,保存,备份数据 054、VB串口字节通信程序,包括:1字节发送子程序,n字节接收子程序 055、VB串行口通信测试示例 056、VB串行通信试验程序 057、VB的MODEM通信源代码,智能化水电远端数据读取系统 058、VB的串口源程序,包括串口的配置界面,接收功能和发送功能 059、VB访问串口,并读取电子秤上显示的数据 060、VB和西门子S7-300 PLC串口通讯程序能实现读写功能 061、VB检测串口工作状态 062、VB简单的串口短信收发功能,使用短信猫测试通过 063、VB开发串口通信,关于生物医学工程专业的血氧饱和度的设计 064、VB开发串口通信软件,利用按钮控件控制高清晰数字展示台 065、VB开发的RS232串口图像处理器驱动(摄像头驱动) 066、VB开发的串口通信源码 067、VB开发的串口与三菱FX PLC通讯源码 068、VB控制串口232通讯,对飞利浦M1卡内数据进行处理,支持密码修改等 069、VB利用Mscomm控件编写的通讯终端,可做串口通讯编程参考示例 070、VB平台单片机与PC机串口通信的PC端程序。小巧易用,功能丰富 071、VB嵌入式串口通讯波形分析显示软件 072、VB实现串口调试LED信息显示屏设备主要代码 073、VB实现串口调试工具的完整源码 074、vb实现串口通信 文件传送系统,用vb以及mscomm控件实现 075、VB实现串口通信,发送命令从而接收相应数据 076、VB使用mscom控件实现PC机与单片机串口通信 077、VB通过COM串口读取条形码设备 078、VB通过串口控制单片机读写24C02源代码 079、VB通讯程序,连接串口可在电脑显示来电号码 080、VB下的串口发短信程序,可选择端口,设置短信中心号码 081、VB写的串口通信,发送和接收实例 082、VB写的串口通信分析程序源码 083、VB写的串口通讯,通过串口对单片机进行控制 084、VB写的串口通讯软件,简单易学,适合初学者 085、VB写的通过串口与考勤机连接通讯的程序 086、vb用控件的写的串口程序,是vb的经典之作 087、VB与USB转串口的通讯完整程序,有详细说明,不需要安装驱动 088、vb与串口通信的关于回路测试的小程序很实用 089、vb语言开发的串口通信,可实现拨号传送文件等 090、VB中串口事件处理函数的示例 091、VB中的串口通讯,串口通讯作为一种古老而又灵活的通讯方式,被广泛地应用 092、VB自动枚举系统串口加摄象头图象采集,坐标系变换 093、Visual Basic2005与自动化系统监控(串并行控制)光盘
里面讲了MSComm控件 、 WinAPI 串口通信、CSerial类,例子很详实,每一步操作都有解释。作者是龚建伟,有一个个人主页www.gjwtech.com,讲串口通信的内容比较多,还行,大家可以先看看这个主页。 本书目录 第1章轻松体验串口通信编程与调试 1.1初识串口 1.1.1从外观上了解串口 1.1.2 串口通信的发展前景 1.2 自己制作简单的串口线 1.2.1 三线制串口接线的规定 1.2.2 焊接制作自己的串口连接线 1.3 调试串口通信程序时的几种使用串口的技巧 1.3.1 查看计算机串口资源 1.3.2 常规调试-2个物理串口之间的通信 1.3.3 特殊调试-单个物理串口之间的通信 1.3.4 虚拟串口-为计算机添加取之不尽的串口资源 1.4 使用串口调试助手来体验串口通信 1.5体验Windows环境下Visual C++串口通信编程 1.6体验DOS环境下Turbo C串口通信编程 第2章 VC多线程串口编程工具CSerialPort类 2.1 类功能及成员函数介绍 2.2 应用CSerialPort类编制基于对话框的应用程序 2.3 应用CSerialPort类编制基于单文档的应用程序 2.4对CSerialPort类的改进 2.5 在Visual C++.NET中应用CSerialPort类 第3章 控件MSComm串口编程 3.1 MSComm控件详细介绍 3.1.1 VC中应用MSComm控件编程步骤 3.1.2 MSComm控件串行通信处理方式 3.1.3 MSComm 控件的属性说明 3.1.4 MSComm控件错误信息 3.2使用MSComm控件的几个疑难问题 3.2.1使用VARIANT 和SAFEARRAY 数据类型从串口读写数据 3.2.2 MSComm控件能离开对话框独立存在吗? 3.2.3 如何发送接收ASCII值为0和大于128的字符? 3.2.4 在同一程序中用MSComm控件控制多个串口的具体操作方法 3.2.5解决使用控件编程时程序占用的内存会不断增大的问题 3.2.6在没有安装Visual Studio的计算机上如何使用MSComm控件 3.2.7 在MSComm控件串口编程时遇到的其它问题说明 3.3在基于单文档(SDI)程序中应用MSComm控件 3.4应用MSComm控件控制多个串口实例 第4章 Windows API串口编程 4.1 Windows API串口编程概述 4.2 API串口编程中用到的结构及相关概念说明 4.2.1 DCB(Device Control Block)结构 4.2.2超时设置COMMTIMEOUTS结构 4.2.3 OVERLAPPED异步I/O重叠结构 4.2.4 通信错误与通信设备状态 4.2.5 串行通信事件 4.3 Windows API串行通信函数 4.4 Win32 API串口通信编程的一般流程和特殊实例 4.4.1 Win32 API串口通信编程的一般流程 4.4.2 用查询方式读串口 4.4.3同步I/O读写数据 4.4.4 关于流控制的设置问题 4.5 CSerialPort类中的API函数编程应用剖析 4.6 Win32 API串口编程TTY(虚拟终端)实例 4.7 Windows API串口精简例程 第5章 串口调试助手V2.2详细编程 5.1 建立SCOMM程序工程实现界面功能 5.2 串口的初始化及关闭 5.3串口数据的发送与接收及十六进制数据的处理 5.3.1 十六进数据发送处理 5.3.2 手动发送处理 5.3.3自动发送处理 5.3.4 接收处理及十六进制显示 5.4 其它辅助功能的实现 5.4.1 接收数据的文件保存 5.4.2 实现小文件发送 5.4.3 图钉按钮功能使程序能浮在最上层 5.4.4 对话框动画图标的实现 5.4.5 超链接功能的实现 5.4.6 如何打开帮助网页文件 第6章 DOS环境下的Turbo C串口编程及通用实例GSerial类 6.1 PC机异步通信适配器8250及其编程操作 6.1.1 INS8250内部寄存器及其选择方式 6.1.2 波特率设置 6.1.3数据、奇偶校验、停止等数据格式设置 6.1.4 查询I/O方式相关设置 6.1.5 中断I/O通信方式相关设置 6.1.6 Modem寄存器 6.2 COMRXTX程序实例
C#串口介绍以及简单串口通信程序设计实现 源代码和串口程序介绍连接:https://www.cnblogs.com/JiYF/p/6618696.html 本站积分太贵,自己变得。。直接到连接地址下载代码 周末,没事干,写个简单的串口通信工具,也算是本周末曾来过,废话不多,直接到主题 串口介绍   串行接口简称串口,也称串行通信接口或串行通讯接口(通常指COM接口),是采用串行通信方式的扩展接口。(至于再详细,自己百度) 串口应用:   工业领域使用较多,比如:数据采集,设备控制等等,好多都是用串口通信来实现!你要是细心的话,你会发现,目前家用国网智能电能表就具备RS485通信总线(串行总线的一种)与RS232可以相互转化(当然一般,非专业的谁也不会闲的蛋疼,趴电表上瞎看,最多也就看看走了多少度电) RS232 DB9介绍: 1.示意图 2.针脚介绍: 载波检测(DCD) 接受数据(RXD) 发出数据(TXD) 数据终端准备好(DTR) 信号地线(SG) 数据准备好(DSR) 请求发送(RTS) 清除发送(CTS) 振铃指示(RI) 3.实物图: 以下是我购买XX公司的一个usb转串口线:这个头就是一个公头,另一端是一个usb口 笨小孩串口工具运行图: 1.开启程序 2.发送一行字符串HelloBenXH,直接将针脚的发送和接收链接起来就可以测试了(针脚2 接受数据(RXD) 和3 发出数据(TXD))直接链接, C#代码实现:采用SerialPort 1.实例化一个SerialPort [csharp] view plain copy 在CODE上查看代码片派生到我的代码片 private SerialPort ComDevice = new SerialPort(); 2.初始化参数绑定接收数据事件 [csharp] view plain copy 在CODE上查看代码片派生到我的代码片 public void init() { btnSend.Enabled = false; cbbComList.Items.AddRange(SerialPort.GetPortNames()); if (cbbComList.Items.Count > 0) { cbbComList.SelectedIndex = 0; } cbbBaudRate.SelectedIndex = 5; cbbDataBits.SelectedIndex = 0; cbbParity.SelectedIndex = 0; cbbStopBits.SelectedIndex = 0; pictureBox1.BackgroundImage = Properties.Resources.red; ComDevice.DataReceived += new SerialDataReceivedEventHandler(Com_DataReceived);//绑定事件 }

3,881

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 其它技术问题
社区管理员
  • 其它技术问题社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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