第五部分 控制软件编写实例
0 n/ N5 c9 Q1 N
* o$ ?# R$ \* k% L0 c1 ] 在这一部分我将给大家介绍STUDER录音机控制软件的编写实例。编写控制软件使用哪种计算机编程语言都可以,关键是你熟悉哪个语言、熟悉哪个语言的RS232串行端口编程方法。; ?9 m& `! ?7 ^5 W
1、开发环境
. N$ c# `0 U% Q9 Q- X" H1 q 编译软件:Microsoft Visual Studio 2010
& I' J6 n9 o' S' b8 B* ~ 基础框架:Microsoft .NetFramework 4.0' S4 P) E0 i0 \7 Y" z
程序框架:Microsoft WPF
: l( R3 c% S4 `; d( ~, f; }: y; s 编程语言:C#7 A' b9 q" X- B. P# I) N
2、实例功能
; _, O2 Y6 c4 K5 k ——播放功能
& p- ~! s6 Q. D1 Y: L! r, \ ——停止功能3 d7 h2 R; [& ?5 t$ j/ r
——快速前进功能! X8 x( e0 n# R: T: ]5 x7 g" N6 L
——快速倒退功能1 m" _$ J, W! _0 S
——录音功能
4 S4 l5 o1 W- x9 L K1 { ——复位功能
% [0 b' N9 ~. J' } J* }$ @4 v5 N ——定位功能
. p% L* O3 Z3 Q8 G6 x 3、实例代码0 Z+ F+ {2 M& h. ]+ ~" ]
——在Visual Studio 2010中新建一个工程文件。
3 t- g+ O2 d. {% b/ E6 P5 u5 a ——在工程文件中的窗体代码文件中添加IO端口的引用。3 _3 T+ u" J& Z* j; D6 j
using System.IO.Ports;+ J9 g6 b8 g. _; ?8 {
——在窗体代码文件的程序类中定义一个SerialPort类型的静态变量。2 V$ G% R( o6 z' d) l+ s6 s
static SerialPort _serialPort;$ t! Q8 i( o8 g1 j" b1 p4 V7 e
——双击窗体增加窗体装入事件处理方法
% ^* E, i. l. p: M3 [, U. i# N private void Window_Loaded(object sender, RoutedEventArgs e)
4 W# q2 |& M1 B' i {
_/ A5 O" `+ l) B" r }
- r! ?" R$ ?: x. }) j' g: C/ P 在窗体装入事件处理方法中写入端口初始化的代码。' @! P6 B: e; ]& W; r
private void Window_Loaded(object sender, RoutedEventArgs e)
' U Q& S# G z# Z {& B: B4 H1 `2 r! ~
//创建一个新的串口对象实例
& t' X* H t0 x4 ?4 Z- Q _serialPort = new SerialPort();
( U4 y/ @0 `9 I% S N# q //枚举计算机中的串口5 k+ ` ?8 r% r& D- w
string[] ports = SerialPort.GetPortNames();
5 T, ]. ]& e) L$ j //如果系统没有串口装置则退出
& S# G% L0 T) m2 e- u' x: ^' l7 M if (ports == null)
* H* h9 y% m: b9 c' U {
1 r) j. j, `+ n0 W6 Y0 ? this.close();
1 ?1 S" I& d7 A9 c) i- }/ [6 o2 B }
0 u0 ^5 n R5 P+ c z, ?6 {% P8 P try/ }1 \8 t5 M% _2 F5 T# ?
{
. ^1 a1 L/ Y) z$ O" x! H# w+ v //使用系统的第一个串行端口
. i2 C6 O$ ]$ _% e. {& }6 y8 b _serialPort.PortName = ports[0];
" d! C, `* d6 V$ W, G" a //设置为9600的速率
& ^ X6 l1 C- W _serialPort.BaudRate = 9600;2 Y0 ~4 |# T0 v- p
//设置为无校验6 ^" A1 P7 @( M& [/ F
_serialPort.Parity = Parity.None;3 i" I6 @ A5 G6 q0 t/ p+ p4 L7 Y
6 g+ J3 S3 J e, C
//设置为8位数据
1 Q- E* n* Z5 d% s o' C' H _serialPort.DataBits = 8;3 u9 ] v' {3 F5 d
//设置停止位为1
, K% o/ Y9 j7 c6 X _serialPort.StopBits = StopBits.One;
) z" d' C7 @) c1 ^/ }, Z0 F //设置为无握手
% ?. w' P$ |3 x9 {* @1 f! X( S _serialPort.Handshake = Handshake.None;' M, G, P: s# C& C4 A5 G
//设置读/写超时值
) P5 f1 Y5 ]+ e2 K( F; G _serialPort.ReadTimeout = 500;
$ h$ E; h$ R; J _serialPort.WriteTimeout = 500;. x! z' D$ ^& o8 n) y/ k2 f* F: d
//打开串行端口
2 C" X1 f! H2 a2 i9 s _serialPort.Open();, P" @7 Z8 ^6 P9 d( T+ v
}4 O. @: V8 s/ l# {
catch (Exception ex)" ~/ l6 Y, \6 ^ |& N
{
( I* j0 x% v+ E Message.show(ex.Message);
, q! J& C# m; v! d) k2 W* A }; }! @9 n/ J7 W! G4 N
}# |6 t4 k: S; Z$ \
——从工具箱中向窗口添加相关按钮,命名按钮及提示内容。1 ?6 Z$ Q' {0 `8 b
按键命名 提示内容
$ R6 }) p" `% h1 {; z5 Y button_PLY 播放4 k# U7 W" I' r( m2 F8 g2 W
button_STP 停止
9 p% t* N+ _1 s. Q$ o) o" X8 ]( X button_FWD 快进
9 z% S3 n9 m$ W& D9 }; E; \ button_RWD 快倒
& w. W5 E3 j5 o. Z" S button_RCE 播放
7 M: E' B7 p$ D1 y button_RTM 清零
& X8 Y/ k' `/ |/ B: y8 s8 \ button_ZLO 定位到零
! T4 n5 i8 t" o& [7 N ——双击按钮图标增加按钮处理方法(以录音为例)
9 |1 y# T# W; U2 L* b! x private void button_PLY_Click(object sender, RoutedEventArgs e)
, i$ Y' Z, ^0 j. @0 [+ p& a {
2 x9 \9 k2 v4 i3 ~ try
0 |7 a2 _5 O) ] {
9 d6 A0 S# J7 @' ]+ F' b //发送从输入信号直接输出方式控制字符串% i' } _# m( n* ]. L. ]. [9 Y. a; }
_serialPort.WriteLine("INP F ");
; y$ k- H! P. u: b! H3 Q `" S. ~6 `+ X8 p% z
//休止100ms
9 Z0 b: C* x# j4 v: ^5 S Thread.Sleep(100);2 m8 e% c/ A: P8 ?: }3 P' P; G/ i
//发送所有通道Ready的控制字符串
9 v4 R3 \+ J0 z' q5 ? _serialPort.WriteLine("REA F "); + p# a8 c7 r" y0 s! H6 P0 L' s% U
Thread.Sleep(100);
% K5 I& j! N% K4 {( e+ i //发送开始录音的控制字符串。" q% Y$ s9 X# [7 K
_serialPort.WriteLine("REC ");: n/ n$ j- B* o# l+ v3 d, t6 z1 u
}
; D* ^& M0 N( _! ~3 Z" Q- J! w* j3 {, a; l catch (Exception ex)& w7 R2 ]4 k! Y7 Q+ T' g
{+ z& K: u) g5 Z8 a+ |% ?# Y
Message.show(ex.Message);7 s( }, t+ N$ l4 V
}1 }3 p3 q) ^2 U' ?* Z/ y
}
) c# f2 y: e# Z( T7 `$ e$ J 注:发送REC指令后录音机就开始起动录音,不需像手动录音时需同时按送录音和播放键才能录音。
; _# {. C' g7 |4 F; w 按以上方法增加相应按键的处理方法,并发送对应的指令即可。9 f' N" H# r+ p- N: _( a0 p( z6 D- N
播放控制字符串:PLY+空格+回车
8 ?1 e% C/ r8 C _. Y5 V Q3 k2 P! x 停止控制字符串:STP+空格+回车2 C: y6 r6 y; r! j8 G
快进控制字符串:FWD+空格+回车
% J: r- y: E3 }2 a. r 快倒控制字符串:RWD+空格+回车' j: M# e' P0 f, F( J$ e
复位控制字符串:RTM+空格+回车) H: ]6 X( x+ n; ]. y# N
定位到零字符串:LZA+空格+回车
" A2 Y8 S( a t
$ z, r. b8 F8 {' n; r 写好这此代码后,接好连线,编译运行就可以控制你的录音机了,就这么简单,你不觉得吗?!{:4_240:}
' S/ }3 a7 [8 W. X4 o$ o" x& |" @5 v
/ F6 L5 R6 ~1 n3 @; A5 J0 {3 x 有了这个基础,你就可以根据STUDER控制指令集实现更多的控制功能了。! p+ w: m# Z% B/ R, Z4 S0 D5 ^ v3 D9 ~
|