打印

串行 I/O 快速入门

[复制链接]
849|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
gaoyang9992006|  楼主 | 2018-1-22 22:12 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

串行 I/O 快速入门

示例:快速入门
串行端口会话
配置和返回属性

示例:快速入门
此示例说明一些基本的串行端口命令。
注意
本示例在 Windows® 平台上显示。

如果您有设备连接到串行端口 COM1 并且已将波特率配置为 4800,请执行以下示例。


s = serial('COM1');
set(s,'BaudRate',4800);
fopen(s);
fprintf(s,'*IDN?')
out = fscanf(s);
fclose(s)
delete(s)
clear s



*IDN? 命令用于查询设备的标识信息,该信息将被返回到 out。如果您的设备不支持此命令,或者它被连接到其他串行端口,请相应地修改前述示例。
注意
*IDN? 是许多现代设备广泛使用的可编程仪器标准命令 (SCPI) 语言所支持的命令之一。请参阅您的设备文档,了解它是否支持 SCPI 语言。

相关帖子

沙发
gaoyang9992006|  楼主 | 2018-1-22 22:14 | 只看该作者
串行端口会话
本示例描述从头到尾执行任何串行端口任务所用的步骤。
串行端口会话包含在与连接到串行端口的设备通信时可能需要执行的所有步骤。这些步骤包括:
  • 找到您的串行端口 - 使用 seriallist 函数显示系统上的串行端口列表。
  • 创建串行端口对象 - 使用 serial 创建函数为特定的串行端口创建串行端口对象。
    如有必要,请在对象创建期间配置属性。特别是,您可能要配置与串行端口通信相关的属性,例如波特率、数据位数等等。
  • 连接到设备 - 使用 fopen 函数将串行端口对象连接到设备。
    连接对象后,通过配置属性值修改必要的设备设置,读取数据以及写入数据。
  • 配置属性 - 要建立所需的串行端口对象行为,请使用 set 函数或圆点表示法为属性赋值。
    实际上,您可以随时(包括在对象创建期间或刚刚创建后)配置多种属性。反过来,根据您的设备设置和串行端口应用程序的要求,您可以接受默认属性值并跳过此步骤。
  • 写入和读取数据 - 使用 fprintffwrite 函数将数据写入设备,以及使用 fgetlfgetsfreadfscanfreadasync 函数从设备读取数据。
    串行端口对象的行为取决于之前配置的属性值或默认属性值。
  • 断开连接并清理 - 当您不再需要串行端口对象时,使用 fclose 函数从设备断开该对象,使用 delete 函数从内存中删除该对象,以及使用 clear 命令从 MATLAB® 工作区删除该对象。


串行端口会话在许多串行端口文档示例中得到了增强。要查看使用上述步骤的基本示例,请参阅示例:快速入门
配置和返回属性
本示例描述如何显示串行端口属性名称和属性值,以及如何为属性赋值。
可通过配置属性值,建立所需的串行端口对象行为。您可以使用 set 函数、get 函数或圆点表示法显示或配置属性值。
显示属性名称和属性值
创建串行端口对象后,使用 set 函数在命令行中显示所有可配置的属性。此外,如果某个属性具有有限的字符串值集合,set 还会显示以下值。
s = serial('COM1');
set(s)
    ByteOrder: [ {littleEndian} | bigEndian ]
    BytesAvailableFcn
    BytesAvailableFcnCount
    BytesAvailableFcnMode: [ {terminator} | byte ]
    ErrorFcn
    InputBufferSize
    Name
    OutputBufferSize
    OutputEmptyFcn
    RecordDetail: [ {compact} | verbose ]
    RecordMode: [ {overwrite} | append | index ]
    RecordName
    Tag
    Timeout
    TimerFcn
    TimerPeriod
    UserData

    SERIAL specific properties:
    BaudRate
    BreakInterruptFcn
    DataBits
    DataTerminalReady: [ {on} | off ]
    FlowControl: [ {none} | hardware | software ]
    Parity: [ {none} | odd | even | mark | space ]
    PinStatusFcn
    Port
    ReadAsyncMode: [ {continuous} | manual ]
    RequestToSend: [ {on} | off ]
    StopBits
    Terminator
使用 get 函数在命令行中显示一个或多个属性及其当前值。要显示所有属性及其当前值:

get(s)
    ByteOrder = littleEndian
    BytesAvailable = 0
    BytesAvailableFcn =
    BytesAvailableFcnCount = 48
    BytesAvailableFcnMode = terminator
    BytesToOutput = 0
    ErrorFcn =
    InputBufferSize = 512
    Name = Serial-COM1
    OutputBufferSize = 512
    OutputEmptyFcn =
    RecordDetail = compact
    RecordMode = overwrite
    RecordName = record.txt
    RecordStatus = off
    Status = closed
    Tag =
    Timeout = 10
    TimerFcn =
    TimerPeriod = 1
    TransferStatus = idle
    Type = serial
    UserData = []
    ValuesReceived = 0
    ValuesSent = 0

    SERIAL specific properties:
    BaudRate = 9600
    BreakInterruptFcn =
    DataBits = 8
    DataTerminalReady = on
    FlowControl = none
    Parity = none
    PinStatus = [1x1 struct]
    PinStatusFcn =
    Port = COM1
    ReadAsyncMode = continuous
    RequestToSend = on
    StopBits = 1
    Terminator = LF
要显示一个属性的当前值,请向 get 提供该属性的名称。
get(s,'OutputBufferSize')ans =   512
要显示多个属性的当前值,请以元胞数组元素的方式包含这些属性名称。
get(s,{'Parity','TransferStatus'})ans =     'none'    'idle'
使用圆点表示法显示单个属性值。
s.Parityans =none
配置属性值
可以使用 set 函数配置属性值:
set(s,'BaudRate',4800);
也可以使用圆点表示法:
s.BaudRate = 4800;
要配置多个属性的值,请向 set 提供多个属性名称/属性值对组。
set(s,'DataBits',7,'Name','Test1-serial')
请注意,使用圆点表示法一次只能配置一个属性值。
实际上,在存在串行端口对象的情况下,您可以随时配置多个属性 - 包括在对象创建期间。但在对象已连接到设备或将信息记录到磁盘时,有些属性是不可配置的。有关属性何时为可配置属性的信息,请参阅Property Reference
指定属性名称
串行端口属性名称使用混合大小写表示。尽管这让属性名称更易于阅读,但在指定属性名称时可使用任意大小写。例如,要配置 BaudRate 属性:
s.BaudRate = 4800;
s.baudrate = 4800;
默认属性值
只要没有显式定义某个属性的值,便会使用默认值。所有可配置的属性都有默认值。
注意
您的操作系统将为所有串行端口设置(例如波特率)提供默认值。但这些设置会被您的 MATLAB 代码覆盖,并且不对您的串行端口应用程序产生任何影响。

如果某个属性具有有限的字符串值集合,则默认值用 {} 括起来。例如,Parity 属性的默认值为 none。
set(s,'Parity')[ {none} | odd | even | mark | space ]
您可以在属性参考页查找任意属性的默认值。


使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:如果你觉得我的分享或者答复还可以,请给我点赞,谢谢。

1971

主题

15987

帖子

210

粉丝