第五部分 控制软件编写实例
/ Y. N7 O( J. @: a B% K P
* j; c; A0 \) i$ [! E 在这一部分我将给大家介绍STUDER录音机控制软件的编写实例。编写控制软件使用哪种计算机编程语言都可以,关键是你熟悉哪个语言、熟悉哪个语言的RS232串行端口编程方法。- {3 i6 ?4 r; L- ^
1、开发环境
0 T6 s) V4 Z% M8 P9 O, R 编译软件:Microsoft Visual Studio 2010
4 `* r% {& l! P1 d 基础框架:Microsoft .NetFramework 4.08 u4 ~$ A. s; w" `0 T9 B
程序框架:Microsoft WPF
% D. a1 i: A% @: |6 d 编程语言:C#
2 i+ @# q: g0 v+ \; A: T) J# N 2、实例功能
$ ^ p5 p& w' \! B, g ——播放功能
: ~5 W8 [1 |+ }' i: ?7 @# N ——停止功能
( {) x3 d$ t5 H, \3 W ——快速前进功能
" J7 z# }, ?) E: j ——快速倒退功能2 P! `0 m! ^) A4 F
——录音功能
* r1 ^/ ?4 L, F+ _7 o; N ——复位功能: z$ l+ O! [$ {! j& m$ s/ u; b5 b* t4 G
——定位功能
, v5 F) O# s0 v! J+ A" b 3、实例代码6 W a ]" i9 G$ V8 [/ b8 H1 c S
——在Visual Studio 2010中新建一个工程文件。
( n/ H1 [3 D! ~& l+ h0 n c ——在工程文件中的窗体代码文件中添加IO端口的引用。8 H- K. X$ D! B- z( G1 T& i* o
using System.IO.Ports;5 ^! }$ b6 ^; W) i( o; k& c
——在窗体代码文件的程序类中定义一个SerialPort类型的静态变量。9 d: I9 k) z, E
static SerialPort _serialPort;1 q4 @ A( B7 b6 G$ C; W
——双击窗体增加窗体装入事件处理方法
# e: G' e/ n7 C$ ]* ?) z- s private void Window_Loaded(object sender, RoutedEventArgs e)
/ Q; z7 N4 n: k* d6 K, B/ O& z {
9 w7 [( ~( [8 ]. e }6 s' o9 n" N }
, t$ c! V" U0 L; K g 在窗体装入事件处理方法中写入端口初始化的代码。
7 _! t+ o2 N! h$ d1 b* n% l private void Window_Loaded(object sender, RoutedEventArgs e)
: W k( b8 L2 Z& r! d {) c9 v# S! Q% O. [, @5 v
//创建一个新的串口对象实例+ d0 _* B) e0 M) t$ D
_serialPort = new SerialPort();6 m; @7 a- k a. z8 p0 N
//枚举计算机中的串口
4 o% V7 {3 g2 W" a, }8 j string[] ports = SerialPort.GetPortNames();% E; y- x$ O+ N* W6 i: v2 @
//如果系统没有串口装置则退出9 k3 l5 N. ^/ f- w
if (ports == null)
% b- l( A+ E2 N0 ?; e% d& v {
; o3 R" a( B" b% P- k8 y this.close();
+ w% C: r/ A+ ` i$ m3 w }
4 z- P6 J9 H2 h try# y/ R8 G: y- l2 p
{
/ e# E5 V2 f) u+ _ //使用系统的第一个串行端口 | V4 l5 Y+ W1 _5 k1 V
_serialPort.PortName = ports[0];- e% Q! _5 r, ]" |
//设置为9600的速率
. q P. V5 D; D9 f5 F0 U _serialPort.BaudRate = 9600;: {3 Q ~: [; h
//设置为无校验* b5 h! c" l. V1 ]
_serialPort.Parity = Parity.None;
+ {5 x4 ~8 R1 A$ i% j y0 v2 o$ j; c- M# R
//设置为8位数据8 L! }2 t8 U2 I4 g. O$ r9 T0 A
_serialPort.DataBits = 8;3 a" }% f, K5 V# \5 ~
//设置停止位为1
! E% H! i7 B0 d# x9 a/ S5 ] _serialPort.StopBits = StopBits.One;
8 o5 z) h( g: S! f2 u: M //设置为无握手
! d4 q+ V! g8 n3 C. z2 D F' q _serialPort.Handshake = Handshake.None;
8 u3 O- N' [" W9 x4 j //设置读/写超时值
: X3 W" j9 h( b7 b/ I _serialPort.ReadTimeout = 500;
) U; [8 g% r: o$ Q' F1 s0 b _serialPort.WriteTimeout = 500;0 r$ |. f4 ?2 v6 C! Q5 r2 V
//打开串行端口
$ E- U4 h( C% S1 ~/ i/ c _serialPort.Open();, K9 X1 G+ z$ [! m$ ^5 {
}
3 A, s4 b! M# f& x catch (Exception ex)
0 n2 b- [& q* W2 `! t {
1 J) v+ |. j' r$ ]( Q Message.show(ex.Message);
y# f; B" |" A d' o+ `9 C7 u- n }. @7 s. ^1 v, Q# c% g
}
8 k0 a( l7 F" S B ——从工具箱中向窗口添加相关按钮,命名按钮及提示内容。- U4 l( p! n3 X0 O1 ]3 Y
按键命名 提示内容
% f: B7 n0 X' X c button_PLY 播放
+ a# J: U6 I5 A' e, L, O+ h button_STP 停止
{+ M- K! h: o: ^" y! N8 J7 O9 C button_FWD 快进
! S9 u# m- i6 } button_RWD 快倒: S# y8 k+ H; ~5 Q! j
button_RCE 播放
' a* L. e* E% T6 \$ a5 U* w* o button_RTM 清零
3 Z& ]. r, S, p4 a button_ZLO 定位到零$ z( ]& k7 b7 n& l
——双击按钮图标增加按钮处理方法(以录音为例)/ u3 R' [- C% D: ?. i7 J7 g
private void button_PLY_Click(object sender, RoutedEventArgs e); [0 ^6 I0 S. X; y& X; |. j$ I
{
" U/ _; f& X5 d$ D# w, z) ^ try
3 u3 e0 R. ] f6 m& y% M d {
! {: H# y2 S" B! K! V5 _; ] //发送从输入信号直接输出方式控制字符串6 O5 k, H$ C r" P
_serialPort.WriteLine("INP F ");& b+ y0 l% x( z* b3 G3 f7 l
2 e' }* S5 G2 B! g8 ~6 e
//休止100ms
2 c& W/ |4 u6 j4 K6 o; A% N Thread.Sleep(100);( J! T) q8 i: M) M
//发送所有通道Ready的控制字符串: f# V9 @* H6 a. D/ q$ n
_serialPort.WriteLine("REA F "); ( D7 {" b) \/ I; B d" M
Thread.Sleep(100);
; n" w/ x# G! Z; J l9 ^+ x //发送开始录音的控制字符串。) h/ w/ J8 b0 ?( |! Z+ y" X
_serialPort.WriteLine("REC ");
, g" W, \( n/ t" h }
$ C. A& u- F! g v A( v/ C G. V catch (Exception ex)
6 ^+ A- d5 L4 U {
|" `9 A9 Q% F* c" G; f Message.show(ex.Message);
( c: u- H5 ]* | }: `1 p _# w r' o( x
}
0 ]. N/ p6 x) W- D0 e1 e& d 注:发送REC指令后录音机就开始起动录音,不需像手动录音时需同时按送录音和播放键才能录音。
" u" h: m3 W' M! I 按以上方法增加相应按键的处理方法,并发送对应的指令即可。
4 |" n6 m4 Y/ W! C! f# n; P9 [; f 播放控制字符串:PLY+空格+回车/ r! Q( K7 r* J4 _2 J
停止控制字符串:STP+空格+回车; @. x2 [' O7 _) n
快进控制字符串:FWD+空格+回车/ h- i5 Z! i' o1 o( I! m
快倒控制字符串:RWD+空格+回车3 i$ W$ o/ b! n1 M
复位控制字符串:RTM+空格+回车
: l3 Q1 w- o6 F- U 定位到零字符串:LZA+空格+回车
& }8 V; f0 \/ z1 d6 M
! t- j. B' f: |% t1 W5 Q 写好这此代码后,接好连线,编译运行就可以控制你的录音机了,就这么简单,你不觉得吗?!{:4_240:}
, C6 u" O# v$ T. e8 D ! i' @8 O, D! _1 z7 Y' k S6 \
有了这个基础,你就可以根据STUDER控制指令集实现更多的控制功能了。- N$ D+ r5 ~, g) o6 L
|