第五部分 控制软件编写实例
! j# y% V/ ]3 n1 i3 J
% ~, J( X% F$ T: w5 k& G( N0 t 在这一部分我将给大家介绍STUDER录音机控制软件的编写实例。编写控制软件使用哪种计算机编程语言都可以,关键是你熟悉哪个语言、熟悉哪个语言的RS232串行端口编程方法。7 w8 b; s! _- i% b. c' Y$ G# r$ \ N
1、开发环境
) g& \/ G- T l" R K) N 编译软件:Microsoft Visual Studio 2010
2 Y3 u+ W, d. S* {- U2 w 基础框架:Microsoft .NetFramework 4.0+ W; {* H7 I* C1 V
程序框架:Microsoft WPF" Q& x2 @7 ~# v* y) L
编程语言:C#+ ]5 l: o: S8 Z. A5 {! P1 V2 p
2、实例功能0 \2 C# z: [; n
——播放功能
+ \! v; N# D( a! ^, l; \5 Z ——停止功能
$ X j$ a! t) i k ——快速前进功能9 i T8 c# l- U9 k- @$ A/ M# h( O
——快速倒退功能
. }4 ^6 t! h9 Q4 o ——录音功能7 [, t1 }" ^, i$ c* X& ~; h, O
——复位功能% P# q5 _( d; Z
——定位功能
4 o+ I7 X/ v( J! I" x4 y d 3、实例代码0 W$ @1 I8 p# W. c
——在Visual Studio 2010中新建一个工程文件。6 g, _/ L' K" z- b- z. R" G, K
——在工程文件中的窗体代码文件中添加IO端口的引用。4 D/ u# `$ J1 |
using System.IO.Ports;
! g, w& |: R) v- g+ _2 V ——在窗体代码文件的程序类中定义一个SerialPort类型的静态变量。3 d& u1 I8 T, Q9 b
static SerialPort _serialPort;. |, U) C' l0 Z* z. q3 |/ m
——双击窗体增加窗体装入事件处理方法
: S B% C) o, x v6 ~ private void Window_Loaded(object sender, RoutedEventArgs e)
: _4 u0 x- u4 r) m! _ {' L( f1 d5 E3 y+ Q
}7 c, u, `$ R9 T9 l4 d5 |
在窗体装入事件处理方法中写入端口初始化的代码。
! I" }7 O# D) ~3 ]3 {+ E private void Window_Loaded(object sender, RoutedEventArgs e)
+ H3 T) C# y) y) [4 Z9 D) r {
. W' C* ]8 B7 ?. X //创建一个新的串口对象实例2 g: w. Z. A6 F
_serialPort = new SerialPort();/ h$ l' Q! f y% }: O& I% t
//枚举计算机中的串口7 L7 q* o1 Z, Q% w) S
string[] ports = SerialPort.GetPortNames();: A' o; a5 ?; k( q1 c
//如果系统没有串口装置则退出
) o- z9 @- @. J1 }5 Z' o3 @2 i if (ports == null)( V& f1 D u0 w" C
{( C+ i ?$ Q* C! L
this.close(); t" }/ \7 `! ~: A2 u7 ~1 \
}
* M0 S/ ?4 {: ^3 E! d5 M% R try/ V, g. M5 \- x
{
8 b2 F1 x. w2 F //使用系统的第一个串行端口
/ `; s+ X* p; i2 A; R _serialPort.PortName = ports[0];
0 o+ M/ [- y" x5 b. x9 X6 e //设置为9600的速率
3 P% m) V- X) y1 d2 G _serialPort.BaudRate = 9600;
+ t4 K- P6 T( Z7 V6 A //设置为无校验" J6 v: H7 B9 H& y
_serialPort.Parity = Parity.None;
& [/ G9 R ^& O, z* P! z
; L" z+ s+ @: V* g! x0 x3 b9 m //设置为8位数据- C/ w: M. u9 h$ Z/ }
_serialPort.DataBits = 8;
- \; g+ ]# x: i //设置停止位为1
9 q" |( S( i4 W8 J2 X6 h* w+ G, J# z4 H _serialPort.StopBits = StopBits.One;
5 T g9 y, }# x1 l, A( v- | //设置为无握手
7 A% T# y( Q$ d9 J% F _serialPort.Handshake = Handshake.None;/ g( s- S$ k3 W0 w' L6 s
//设置读/写超时值8 g* K j7 j r o. V* U
_serialPort.ReadTimeout = 500;0 t: X' Z- J6 U6 ]* P) z7 h: ~
_serialPort.WriteTimeout = 500;
' H" S2 i; s/ b //打开串行端口5 c7 C4 u k6 A+ B" J! U
_serialPort.Open();6 M1 [5 X$ Q- P$ o) a2 h
} l- S1 n* g: `# Z: Q- ]
catch (Exception ex)
, `$ A9 {& |" H$ o- e0 D1 f6 \ {
j, ]/ j! [ g) q/ A Message.show(ex.Message);" p+ e: P4 Z2 g6 v1 c
}
5 a; E% n# ?' c2 N/ |7 d8 s" B }
& x. \/ \: |" D" o! g# V ——从工具箱中向窗口添加相关按钮,命名按钮及提示内容。
* ]% N3 R9 D) d! w' h( S 按键命名 提示内容
" n2 `/ H. t+ ?7 I/ D* H' W- ? button_PLY 播放$ w. B O, N+ @5 |, U9 u4 ?! ]
button_STP 停止1 ^" G% w: v% ~; |: X+ `
button_FWD 快进
( p: N3 _0 b& g7 i- P! [, a. Y button_RWD 快倒
]( k. I; k( @5 \/ p! M button_RCE 播放' g0 m0 v3 {7 r0 `
button_RTM 清零
6 N/ I9 d' C F" ~ button_ZLO 定位到零+ O2 c( V! i# H+ X
——双击按钮图标增加按钮处理方法(以录音为例)8 n( k3 j; N& d Y" H4 X
private void button_PLY_Click(object sender, RoutedEventArgs e)
9 d9 t; i# C3 V7 q: ?0 S8 Q2 R8 U {$ W$ p6 u" H( X# w, ]1 }4 t& E
try
9 C. B" ^) j8 o6 l4 | {) s' T L+ h7 g
//发送从输入信号直接输出方式控制字符串3 s$ ]" t2 e3 s; W1 b
_serialPort.WriteLine("INP F ");9 ]5 L' N0 H; z& F1 p; o X
( z0 c7 [4 r. {1 c7 G
//休止100ms
* m3 R& K$ o! \5 [3 U! `7 m# t Thread.Sleep(100);
0 l, j2 D5 r$ L* o. ?9 {' N //发送所有通道Ready的控制字符串
0 t0 z+ O X7 h6 T f0 Z* T9 s _serialPort.WriteLine("REA F ");
# ]) e1 }/ }5 O0 [* T0 W9 P Thread.Sleep(100);
- y+ V' j9 T. U- [, F$ B, v% ] //发送开始录音的控制字符串。
6 f* ?$ @; Y. C8 s/ N _serialPort.WriteLine("REC ");
+ G! a( _ d5 ] }
& K @$ g& M. ^8 Q2 D8 g1 b catch (Exception ex)
0 O& s$ L8 r' ?- u: @$ z' o0 _ {
$ c+ s" O1 {+ h1 Q, e Message.show(ex.Message);& X1 [' e. t+ V& }+ p: E0 A& c5 `2 V
}
' ]% [& c# Z# Z) s; S# A: q* D }
( L0 l8 E+ _9 _ R$ M 注:发送REC指令后录音机就开始起动录音,不需像手动录音时需同时按送录音和播放键才能录音。 \! v' X J" L7 a& r
按以上方法增加相应按键的处理方法,并发送对应的指令即可。
9 b9 a$ G* G* J. V: t 播放控制字符串:PLY+空格+回车
0 f$ f' d7 B9 X0 W; ^/ M 停止控制字符串:STP+空格+回车
, |7 W* z( r* A: U8 Y 快进控制字符串:FWD+空格+回车
% Z& j/ I% z2 o4 c/ v! X8 X: u 快倒控制字符串:RWD+空格+回车
' E5 _, y' Q0 \/ P3 E 复位控制字符串:RTM+空格+回车
& d* w( ^' B# Y Y1 j% @3 i, c 定位到零字符串:LZA+空格+回车
1 U: V6 b" Z$ g _9 z* |' F
- Y* _( e/ p/ p% W: `! } 写好这此代码后,接好连线,编译运行就可以控制你的录音机了,就这么简单,你不觉得吗?!{:4_240:}: C' h/ X) x% Y' |. V
* K" T5 x. a- k- {+ i8 W
有了这个基础,你就可以根据STUDER控制指令集实现更多的控制功能了。5 l3 c- \) x/ L
|