精华内容
下载资源
问答
  • 下位机和上位机
    千次阅读
    2018-12-30 21:33:15

    使用 sim 卡的  下位机 所处的环境是在 移动/联通   的局域网中 

    上位机 处于 电信 即 互联网中     

    想要将 包  放到我们的电脑上即上位机  ,必须通过  移动/联通 的网关 发送到 电信的网关 再放到 公司所在的路由器 ,再由路由器 发送到我们电脑 

    这里还有考虑到 发送数据的 协议类型 ,常见的 有 tcp/udp  等   ,

     

     

    以上是无线通信的方式, 还有通过串口的方式,

     

     

    在实际写 协议的时候一定要问清楚 很多问题 

    如下: 

    1、下位机上发协议 是什么类型是 tcp 还是 udp

    2、读数时间间隔  例如 (本公司的设备)15分钟 , 因为 下位机一般是使用电池的所以为了节省电量 ,所以上报时间间隔一般都大于读数时间间隔 , 例如本公司 会 两个小时 将 这段时间内的全部读数数据发送到上位机,以达到节省电量的作用

    3、下位机的上报类型   主动上报  /  上位机发送请求让下位机上报

     

    上位机对下位机的常见操作 :

    1、修改数据中心 即 (改上发地址)

    2、校正下位机时间  例如 我司电子水表在工作环境中时间不准的情况 需要校正时间

    3、修改上传间隔 

    示例 包数据 :

     

     

     

     

    更多相关内容
  • 企业信息化是企业现代化的重要标志,是企业发展的动力源泉,更是提高企业经济效益与竞争力的捷径主要保证。企业信息化是长期艰巨而又紧迫的任务。胜利油田基层单位分布广,功能差别较大,同时单位的信息化基础相对...
  • 主要介绍了C# WPF上位机实现和下位机TCP通讯的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
  • 上位机下位机简介

    千次阅读 2021-09-04 10:45:01
    下位机:指的是与机器相连接的计算机或者单片机,一般用于接收反馈上位机的指令,并根据指令控制机器执行动作以及从机器传感器读取数据。 典型设备:PLC、stm32、51、FPGA、ARM等各类可编程芯片。 上位机软件:...

          上位机指的是可以直接发送操作指令的计算机或者单片机,一般提供用户操作交互界面并向用户展示反馈数据。

    典型设备:电脑、平板、手机、面板、触摸屏

          下位机:指的是与机器相连接的计算机或者单片机,一般用于接收和反馈上位机的指令,并根据指令控制机器执行动作以及从机器传感器读取数据。

    典型设备:PLC、stm32、51、FPGA、ARM等各类可编程芯片。

    上位机软件:用于完成上位机操作交互的软件

    1. 上位机给下位机发送控制命令,下位机接收到此命令并执行相应的动作;
    2. 上位机给下位机发送状态获取命令,下位机接收到此命令后调用传感器测量,然后够转化为数字信息反馈给上位机。
    3. 下位机主动发送状态信息或者报警信息给上位机

    为了实现以上过程,上位机和下位机都需要独立进行编程,都需要专门的开发人员在各自的平台上编写代码。

    通信协议:上位机和下位机之间的通信协议有很多,只要完成通信的协议都可以在上位机和下位机之间,比如USB,蓝牙,UDP/TCP

    通信API:在通信协议的基础上,具体发送什么数据即发送什么指令,还需要规定各个功能对应的指令,每个功能对应的指令叫做API。

    只要通信协议可以建立,上位机软件可以是任意开发语言和任意平台,下位机也可以是热议类型的单片机。

    开发上位机软件与其他软件的最大区别在于“上位机软件要连接设备并与之通信”

    展开全文
  • 功能包括: 1.读线圈、批量读线圈、读int保持寄存器、读float保持寄存器、读INT输入寄存器、读float输入寄存器. 2.写单个线圈、写单个保持寄存器、写多个线圈保存寄存器、写多个int保持寄存器、写多个float保持...
  • 自定义的通讯协议。。 void OpticalDetectMotorCollectData(SSystemMotorParamterConfig &sSystemMotorParameterConfig, quint8 quDestUnit); //光学检测系统打开蓝光 void OpticalDetectMotorOpenBlueLight(quint...
  • 基于AT89S52的单片机,温度,日期时间上传系统,其中温度基于DS18B20芯片,时钟基于DS1302芯片。
  • 本项目通过综合使用三轴加速度传感器、数码管、蜂鸣器、导航键、按键、振动传感器等元件,基于上位机下位机之间的通信数据交互,利用下位机完成对上位机游戏——贪吃蛇的多种方式控制。
  • 本人制作的AVR单片机的USB开发板资料,包括上位机软件、下位机原理图及程序代码,具有很高的实用价值!
  • 里面含有上位机源码和下位机源码,上位机是用vc6.0中的MFC编写的,通过界面按钮控制单片机的LED灯
  • 上位机和下位机

    2020-09-25 12:27:16
    什么是上位机和下位机上位机 上位机 上位机可以理解为可以直接发出操控命令的计算机,常见的有PC/host computer/master computer/upper computer,它可以在屏幕上显示各种信号的变化(温度等)  ##

    什么是上位机和下位机

    上位机

    上位机可以理解为可以直接发出操控命令的计算机,常见的有PC/host computer/master computer/upper computer,它可以在屏幕上显示各种信号的变化(温度等)。通常工控机,工作站,触摸屏作为上位机,

    下位机

    下位机是直接控制设备获取设备状况的计算机,常见的有PLC/single chip microcomputer(单片机)/slave computer/lower computer之类的。通常通信控制PLC,单片机等作为下位机,从而控制相关设备元件和驱动装置。

    详细工作过程

    首先上位机发出的命令传给下位机,下位机再根据这个收到的命令解释成相应的时序信号直接控制相应设备。下位机不时读取设备状态数据(一般为模拟量),再转换成数字信号反馈给上位机。
      相同点是上下位机都需要编程,都有专门的开发系统和环境。
      不同之处在于,控制者和提供服务者是上位机,被控制者和被服务者是下位机,也可以理解为主从机的关系,不过上位机和下位机是可以相互转换的。

    工作原理介绍:

    两机的通讯,一般取决于下位机,因为下位机一般会具有更可靠的独有通讯协议;
      使用一些新的API(Application Programming Interface,应用程序编程接口)是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件的以访问一组例程的能力;
      多语言支持功能模块,一般同时支持数种高级语言为上位机编程。
      通常上位机和下位机通讯可以采用不同的通讯协议,常见的有RS232的串口通讯或者RS485串行通讯。
      当用计算机和PLC通讯的时候,不但可以采用传统的D形式的串行通讯,还可以采用更适合工业控制的双线的PROFIBUS-DP通讯。采用封装好的程序开发工具就可以实现PLC和上位机的通讯,当然可以自己编写驱动类的接口协议控制上位机和下位机的通讯。

    展开全文
  • 电子-usb下位机1上位机发下位机收.zip,单片机/嵌入式STM32-F0/F1/F2
  • 非常好的v-usb示例程序,包括上位机和下位机程序。 上位机程序是用C#.net调用LibUsbDotNet库写出来的,而下位机则是用GCC调用vusb库写的。 这两个库是v-usb的官方驱动库文件,大家学习一下如果写上位机和下位机的...
  • 本课程主要介绍C++类库MFC上位机与STM32单片机的RS232、RS422、RS485、USB、LWIP以太网、CAN等接口进行稳定通信。课程主要从MFCSTM32基础开始,以编写上位机以及下位机为主,非常注重实践。
  • 基于C#的串口通信上位机和下位机源程序文件.pdf基于C#的串口通信上位机和下位机源程序文件.pdf基于C#的串口通信上位机和下位机源程序文件.pdf基于C#的串口通信上位机和下位机源程序文件.pdf基于C#的串口通信上位机和...
  • 压缩包包含: 1、电子密码锁上位机软件(32位2016版labView) 2、电子密码锁下位机程序 3、AD原理图库文件 4、电子密码锁使用截图 请查看注意事项后再绘制PCB
  • CCP源码 VECTOR公司给与的资料 下位机源码 上位机源码 供初学者学习 注释比较完善
  • 上位机+下位机.zip

    2019-12-03 15:44:49
    用C#语言写了上位机软件,通过串口通信的形式来控制STM32单片机板载的LED灯,设置了串口、波特率、校验、停止、校验有无等,通过写入的方式控制IO口,来控制单片机
  • 模拟下位机上位机串口通信.zip源码Labview个人项目资料程序资源下载模拟下位机上位机串口通信.zip源码Labview个人项目资料程序资源下载模拟下位机上位机串口通信.zip源码Labview个人项目资料程序资源下载模拟...
  • modbus上位机和下位机综合配置,modbus上位机和下位机综合配置
  • 我要实现它的原理,所以就是设计一个上位机软件,来控制步进电机图片的显示。 我的上位机能够要控制电机走的间隔还有每次走的距离。有开始,也要有停止的选项。 还要能归位(反转回到原来的位置) 还有一部分...
  • 串口通信是在工程应用中很常见。...下位机一般是将模拟信号经过AD采集将模拟量转换为数字量,下位机再经过数字信号处理以后将数字信号通过串口发送到上位机,相反上位机可以给下位机发送一些指令或者信...

    串口通信是在工程应用中很常见。在上位机与下位机通讯过程中常通过有线的串口进行通信,在低速传输模式下串口通信得到广泛使用。在说个之前先来简单解释一下上位机与下位机的概念。

    上位机与下位机

    通常上位机指的是PC,下位机指的是单片机或者带微处理器的系统。下位机一般是将模拟信号经过AD采集将模拟量转换为数字量,下位机再经过数字信号处理以后将数字信号通过串口发送到上位机,相反上位机可以给下位机发送一些指令或者信息。常见的通信串口包括RS232、RS485、RS422等。这些串口只是在电平特性有所不同,在上位机与下位机进行数据通信时可以不考虑电平特性,而且现在在硬件上有各种转接接口,使用起来也很方便。

    当然在通常做简单的串口UART实验时我们可以使用各种各样的串口助手小软件,但是这些串口小工具有时候并不能很好满足需求,那就尝试着自己写一套属于自己的串口助手?接下来说说如何使用java实现上位机与下位机之间的RS485串口通信。

    step 1: 下载支持java串口通信的jar包,这里给出下载地址:

    对以上的版本解释一下,因为本人在这里踩了一个坑,32位或者64位是与ecplise/myecplise一致,要是版本弄错了会报错。

    step 2:下载了那个jar包解压后会出现一下内容:

    96255068_1

    这个文件夹里面需要注意两点:jar包RXTXcomm需要导入到java工程里面去。另外就是需要将rxtxParallel.dll与rxtxSerial.dll复制在安转JDK的bin文件下和jre的bin文件夹下面,这样才能保证能够正常使用这个jar包。以下是将两个dll文件复制的位置:

    C:\Program Files (x86)\Java\jdk1.8.0_25\binC:\Program Files (x86)\Java\jdk1.8.0_25\jre\bin\

    step 3:RXTXComm Api如何使用

    接下来就是使用该导入jar包进行编码实现串口通信的功能了。在编码之前先来理一理串口通信的主要环节,本人总结主要分为以下几点:

    1)计算机首先需要进行硬件check,查找是否有可用的COM端口,并对该对端口进行简要判断,包括这些端口是否是串口,是否正在使用。以下是部分主要代码:

    /*类方法 不可改变 不接受继承

    * 扫描获取可用的串口

    * 将可用串口添加至list并保存至list

    */

    public static final ArrayList uartPortUseAblefind()

    {

    //获取当前所有可用串口

    //由CommPortIdentifier类提供方法

    Enumeration portList=CommPortIdentifier.getPortIdentifiers();

    ArrayList portNameList=new ArrayList();

    //添加并返回ArrayList

    while(portList.hasMoreElements())

    {

    String portName=portList.nextElement().getName();

    portNameList.add(portName);

    }

    return portNameList;

    }

    以下是测试类的测试实例:

    ArrayList arraylist=UARTParameterSetup.uartPortUseAblefind();

    int useAbleLen=arraylist.size();

    if(useAbleLen==0)

    {

    System.out.println("没有找到可用的串口端口,请check设备!");

    }

    else

    {

    System.out.println("已查询到该计算机上有以下端口可以使用:");

    for(int index=0;index

    {

    System.out.println("该COM端口名称:"+arraylist.get(index));

    //测试串口配置的相关方法

    }

    }

    2)通过计算机对串口的自检后,可以对串口参数进行简单的配置。常见的配置可以从常见的串口助手中得到启发。以下是一个串口助手的人机交换界面:

    96255068_2

    以下是对串口设置主要代码:

    /*

    * 串口常见设置

    * 1)打开串口

    * 2)设置波特率 根据单板机的需求可以设置为57600 ...

    * 3)判断端口设备是否为串口设备

    * 4)端口是否占用

    * 5)对以上条件进行check以后返回一个串口设置对象new UARTParameterSetup()

    * 6)return:返回一个SerialPort一个实例对象,若判定该com口是串口则进行参数配置

    * 若不是则返回SerialPort对象为null

    */

    public static final SerialPort portParameterOpen(String portName,int baudrate)

    {

    SerialPort serialPort=null;

    try

    { //通过端口名识别串口

    CommPortIdentifier portIdentifier = CommPortIdentifier.getPortIdentifier(portName);

    //打开端口并设置端口名字 serialPort和超时时间 2000ms

    CommPort commPort=portIdentifier.open(portName,1000);

    //进一步判断comm端口是否是串口 instanceof

    if(commPort instanceof SerialPort)

    {

    System.out.println("该COM端口是串口!");

    //进一步强制类型转换

    serialPort=(SerialPort)commPort;

    //设置baudrate 此处需要注意:波特率只能允许是int型 对于57600足够

    //8位数据位

    //1位停止位

    //无奇偶校验

    serialPort.setSerialPortParams(baudrate, SerialPort.DATABITS_8,SerialPort.STOPBITS_1, SerialPort.PARITY_NONE);

    //串口配制完成 log

    System.out.println("串口参数设置已完成,波特率为"+baudrate+",数据位8bits,停止位1位,无奇偶校验");

    }

    //不是串口

    else

    {

    System.out.println("该com端口不是串口,请检查设备!");

    //将com端口设置为null 默认是null不需要操作

    }

    }

    catch (NoSuchPortException e)

    {

    e.printStackTrace();

    }

    catch (PortInUseException e)

    {

    e.printStackTrace();

    }

    catch (UnsupportedCommOperationException e)

    {

    e.printStackTrace();

    }

    return serialPort;

    }

    以上代码就是返回一个对象,同时也返回了对象属性,因为对象在java里面是属于传值引用。对以上需要说明的是:在实验时需要连接串口才能让计算机检测到才能让程序工作,这里使用的是RS485转接线:

    96255068_3

    3)通过以上两个步骤后基本对串口的设置也完成了,对于串口类型的确认例如:RS232/RS485/RS422等,可以作为进一步确认的条件。RS485可以在gnu.io中找到。

    96255068_4

    接下来就是上位机与下位机之间的双向通信的功能实现了。该部分主要是利用java的输入输出流来实现。以下是主要代码:

    /*

    * 串口数据发送以及数据传输作为一个类

    * 该类做主要实现对数据包的传输至下单板机

    */

    class DataTransimit

    {

    /*

    * 上位机往单板机通过串口发送数据

    * 串口对象 seriesPort

    * 数据帧:dataPackage

    * 发送的标志:数据未发送成功抛出一个异常

    */

    public static void uartSendDatatoSerialPort(SerialPort serialPort,byte[] dataPackage)

    {

    OutputStream out=null;

    try

    {

    out=serialPort.getOutputStream();

    out.write(dataPackage);

    out.flush();

    } catch (IOException e)

    {

    e.printStackTrace();

    }finally

    {

    //关闭输出流

    if(out!=null)

    {

    try

    {

    out.close();

    out=null;

    System.out.println("数据已发送完毕!");

    } catch (IOException e)

    {

    e.printStackTrace();

    }

    }

    }

    }

    /*

    * 上位机接收数据

    * 串口对象seriesPort

    * 接收数据buffer

    * 返回一个byte数组

    */

    public static byte[] uartReceiveDatafromSingleChipMachine(SerialPort serialPort)

    {

    byte[] receiveDataPackage=null;

    InputStream in=null;

    try

    {

    in=serialPort.getInputStream();

    //获取data buffer数据长度

    int bufferLength=in.available();

    while(bufferLength!=0)

    {

    receiveDataPackage=new byte[bufferLength];

    in.read(receiveDataPackage);

    bufferLength=in.available();

    }

    }

    catch (IOException e)

    {

    e.printStackTrace();

    }

    return receiveDataPackage;

    }

    通过以上关于Uart两个基本类实现对底层Uart的功能封装,其中一个类主要负责Uart串口自检和基本设置,另外一个类主要has数据传输的两个方法。接下来以一个实例说一说通过RS485串口通信将系统当前时间发送至单板机系统。

    step 4:实现实时系统时间的数据包传输至下位机

    这一步可以分为以下两个步骤:首先实现获取系统时间,将时间进行封装成帧;另外就是通过RS485串口将时间数据包发送至单板机系统进行解析。

    1) 系统时间的获取

    根据java面对对象设计思想,这里将有关系统时间的方法归为一类。

    以下是获取当前系统时间代码:

    public static String getCurrentDateTime()

    {

    //单例模式

    Calendar calendar=Calendar.getInstance();

    int year = calendar.get(Calendar.YEAR);//获取年份

    int month=calendar.get(Calendar.MONTH);//获取月份

    int day=calendar.get(Calendar.DATE);//获取日期

    int minute=calendar.get(Calendar.MINUTE);//分

    int hour=calendar.get(Calendar.HOUR);//小时

    int second=calendar.get(Calendar.SECOND);//秒

    String curerentDateTime = year + " " + (month + 1 )+ " " + day + " "+ (hour+12) + " " + minute + " " + second + " ";

    timeCheckSum=year+(month+1)+day+(hour+12)+minute+second;

    return curerentDateTime;

    }

    java 提供了calender类,该类提供了一些与时间有关方法。至于Calendar.getInstance()使用单例模式获取一个Calendar实例对象,单例模式就是一个类在任何时候只允许有一个实例化对象。获取系统时间除了使用Calendar还可以使用Date类,通过创建对象也可以实现系统当前时间的获取。timeCheckSum作为时间数据的校验和发送至单板机作为自定义协议的一部分。

    由于发送的数据包通常是以字节(byte)为单位进行发送和传输的,因此需要将int型的时间转换为byte使用byte[]进行存储,作为一个数据包发送。

    /*

    * 将以上时间字符串进行隔开用byte[]保存

    */

    public static byte[] dateTimeBytesGet(String currenDateTime)

    {

    //对当前时间参数进行格式判断

    //对格式进行判断

    int rawDataSize=6;

    byte[] dateTimeBytes=new byte[rawDataSize+1];

    String[] currentDateTimeSplit=currenDateTime.split(" ");

    if(currentDateTimeSplit.length==rawDataSize)

    {

    //时间数据格式正确

    //eg 2016 12 23 22 18 26

    //使用byte[]进行存储时需要 -128~+127

    //对于年份使用两个byte存储

    for(int dataIndex=0;dataIndex

    {

    int dateTemp=Integer.parseInt(currentDateTimeSplit[dataIndex]);

    if(dataIndex==0)

    {

    byte H8bits=(byte)((dateTemp)>>8);

    byte L8bits=(byte)((dateTemp)&0xff);

    dateTimeBytes[dataIndex]= H8bits;

    dateTimeBytes[dataIndex+1]= L8bits;

    }

    dateTimeBytes[dataIndex+1]=(byte)dateTemp;

    }

    }else

    {

    System.out.println("当前时间获取出现异常数据");

    System.exit(-1);

    dateTimeBytes=null;

    }

    return dateTimeBytes;

    }

    以上数据可以使用7个byte对时间数据进行存储,因为年份需要使用两个字节来存储,格式为高字节在前,低字节在后,之后依次存放。

    将时间数据存放在byte[]数组以后接下来就是添加自己的协议部分了。该部分具有较大的随意性,因为该协议可以根据不同的风格有不同的形式。为了简单起见,只需要在时间数据byte[]之前添加head、CMD、时间数据长度length这三个字节进行补充,时间数据byte[]后面依次添加校验和的高低字节以及tail指令即可。以上基本实现了一个简单的时间数据package。以下是本模块的代码:

    /*

    * 将数组封装成帧

    * 每一个数据帧由以下几个部分组成

    * 1)数据包头部 head 0X2F

    * 2)数据包命令 CMD 0X5A

    * 3)数据个数 length of data 7

    * 4)校验和 H8/L8 byte of check sum(高字节在前 低字节在后)

    * 5)数据结尾标志 tail OX30

    * 6)可采用线程进行获取当前时间

    */

    public static byte[] makeCurrentDateTimefromStringtoFramePackage(byte[] dateTimeBytes)

    {

    //在时间byte[]前后添加一些package校验信息

    int dataLength=13;

    byte[] terimalTimePackage=new byte[dataLength];

    //装填信息

    //时间数据包之前的信息

    terimalTimePackage[0]=0x2F;

    terimalTimePackage[1]=0X5A;

    terimalTimePackage[2]=7;

    //计算校验和

    //转化为无符号进行校验

    for(int dataIndex=0;dataIndex

    {

    terimalTimePackage[dataIndex+3]=dateTimeBytes[dataIndex];

    }

    //将校验和分为高低字节

    byte sumH8bits=(byte)((timeCheckSum)>>8);

    byte sumL8bits=(byte)((timeCheckSum)&0xff);

    terimalTimePackage[10]=sumH8bits;//高字节在前

    terimalTimePackage[11]=sumL8bits;//低字节在后

    //数据包结尾

    terimalTimePackage[12]=0X30;

    return terimalTimePackage;

    }

    下面给出了将时间数据byte数组进行解析的debug代码,一方面是确定上位机本部分模块的程序可靠性,另外也可以直接移植到下位机对数据包的解析之中。在下位机解析过程中需要注意一点:因为在java中8大基本类型都是带符号,年份时间和时间校验和拆分为高低字节时,低字节是二进制无符号的,但是计算机却是按照有符号数(补码方式)进行读取,例如在2016年转换为二进制数为:11111100000,那么高字节为00000111,低字节为11100000。计算机读取为:高字节为7,低字节为-32。其实由两个byte真实还原的过程应为:7<<8+(低字节二进制数字)=7*256+224=2016,因此在debug解析时间数据包时需要将有符号数字转换为无符号数字。

    /*

    * 对时间格式进行解析并还原原来的时间格式

    * 对数据进行还原

    * 仅限于debug使用

    */

    public static String dateTimeBytesfromTostring(byte[] currentDateTime)

    {

    String string="";

    if(currentDateTime.length==7)

    {

    string=((currentDateTime[0]<<8)+bytetoUnsigendInt(currentDateTime[1]))+" "+currentDateTime[2]+" "+

    currentDateTime[3]+" "+currentDateTime[4]+" "+currentDateTime[5]+" "+

    currentDateTime[6];

    }

    return string;

    }

    /*

    * 将byte转化为字符串

    * 将有符号byte转化为无符号数字

    * debug使用

    */

    public static int bytetoUnsigendInt(byte aByte)

    {

    String s=String.valueOf(aByte);

    //System.out.println(s);

    int bytetoUnsigendInt=0;

    for(int i=0;i

    {

    if(s.charAt(i)!='0')

    {

    bytetoUnsigendInt+=1<

    }

    }

    return bytetoUnsigendInt;

    }

    2)将最后的时间数据包通过RS485串口发送至下位机

    结合前面的串口程序就可以使用串口发送程序了。在程序debug的前期可以在程序的关键位置输出日志就是打印log的方法可以提高程序调试的效率。以下是主类的测试代码:

    //取出第一个COM端口进行测试

    SerialPort serialPort=UARTParameterSetup.portParameterOpen(arraylist.get(0), 57600);

    //退出程序 后续不需要监测 因为transimit一直需要保证连接状态

    //System.exit(0);

    DataTransimit.uartSendDatatoSerialPort(serialPort, dataFrame);

    String currentDateTime=SystemDateTimeGet.getCurrentDateTime();

    System.out.println(currentDateTime);

    byte[] bytes=SystemDateTimeGet.dateTimeBytesGet(currentDateTime);

    //System.out.println(Arrays.toString(bytes));

    String str=SystemDateTimeGet.dateTimeBytesfromTostring(bytes);

    System.out.println(str);

    //System.out.println(SystemDateTimeGet.bytetoUnsigendInt((byte) -32));

    byte[] terimalTimeByte=SystemDateTimeGet.makeCurrentDateTimefromStringtoFramePackage(bytes);

    System.out.println(Arrays.toString(terimalTimeByte));

    DataTransimit.uartSendDatatoSerialPort(serialPort, terimalTimeByte);

    以下是测试结果:

    当没有串口设备接入计算机时控制台打印一条信息:

    没有找到可用的串口端口,请check设备!

    当RS485设备接入计算机时,控制台打印消息如下:

    96255068_5

    通过以上几个步骤基本实现了上位机与下位机串口通信的功能,接下来还可以对程序进行改进:

    1)添加界面,可以类比串口助手界面根据自身需要设计独具风格的人机交互界面。

    2) 在程序中添加线程,在以上程序中对于系统时间的获取可以通过线程的方式进行获取,这样上位机就可以一直往下位机发送数据包,而不是仅仅发一次。

    3)对于上位机数据接收,除了以上最基本的接收功能外,还可以使用JDBC与mysql等数据进行存储,并绘画数据曲线实现特性分析。

    展开全文
  • 上位机下位机各是什么意思?很多朋友都不是很清楚,为了让大家能了解,下面小编为大家介绍上位机下位机,一起来看看吧!上位机上位机是指可以直接发出操控命令的计算机,一般是PC/host computer/master computer/...
  • C#的串口通信上位机和下位机源程序,适合新手入门操作
  • 到底什么是上位机,什么是下位机

    万次阅读 多人点赞 2019-09-29 10:30:26
    我对上位机下位机的解释: 上位机 上位机就是可以发操作指令的计算机。一般是PC,工厂里常见的就是触摸屏电脑。 下位机 下位机就是控制、获取机器参数,运动状态等信息的计算机。一般是PLC 上位机下位机在一定...
  • 上位机下位机概念详解

    千次阅读 2020-08-24 22:49:34
    摘要 今天被老板问了什么是上位机,之前接触过,对于概念也不是很清晰,我又查找了一些资料,整理如下。 上位机 上位机是指能够发出操控命令的...下位机是指能够控制设备状态的计算机,一般是PLC或单片机之类的。 ...
  • 上位机下位机之间的连接

    千次阅读 2021-07-25 07:16:48
    1、第一章 上位机与下位机1.1 上位机与下位机的概念上位机和下位机,一般是指集中控制系统中的PC机和现场的工控机。上位机(PC机)主要用来发出操作指令和显示结果数据,下位机(工控机)则主要用来监测和执行上位机的...
  • 上位机下位机通信

    2017-12-08 17:34:42
    上下位机的通信程序,使用socket套接字,c++控制台程序
  • 上位机下位机时钟.rar

    2020-05-14 18:05:46
    位于下位机的单片机把时间通过串口传输到上位机电脑上,具体参考我的博客:https://blog.csdn.net/O_MMMM_O/article/details/81267913

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 16,629
精华内容 6,651
关键字:

下位机和上位机