第五部分 控制软件编写实例
* M: ~( a2 L& P0 Q9 S# A, y& P' F* T0 V, V9 ~
在这一部分我将给大家介绍STUDER录音机控制软件的编写实例。编写控制软件使用哪种计算机编程语言都可以,关键是你熟悉哪个语言、熟悉哪个语言的RS232串行端口编程方法。
. [! D3 ~& B2 d! C" i 1、开发环境
* \+ e/ e+ u# o9 B 编译软件:Microsoft Visual Studio 2010
- u+ w% m* n) X$ `2 ? 基础框架:Microsoft .NetFramework 4.0
) ]5 u& |& x d 程序框架:Microsoft WPF# |, c, y. a: N# t+ M# b) I
编程语言:C#: `9 [( M, A7 I& A' ]; U( w
2、实例功能
7 E8 Z5 G# Y: ^, b# R3 U) g2 y" J ——播放功能( \4 B5 @1 b' m9 H5 _+ H) u
——停止功能
9 V' p# _7 G% y3 O+ Q ——快速前进功能
, S$ Y0 c3 i4 H0 t ——快速倒退功能
8 u! |& L5 O V5 f ——录音功能
4 E) S- _! l) C. U e# P" i9 K- G ——复位功能
5 U9 F+ ]# V9 X6 p8 F# K) Y$ N0 E9 j ——定位功能5 ]6 B: d6 s- ?2 m) Y V
3、实例代码
6 o4 v' y6 _6 p ——在Visual Studio 2010中新建一个工程文件。* i5 V5 m0 ?/ x' R% f
——在工程文件中的窗体代码文件中添加IO端口的引用。& j4 }- o1 D: K# d8 p3 t8 l$ l% a
using System.IO.Ports;
- w. }) K+ o6 q Q& ~ ——在窗体代码文件的程序类中定义一个SerialPort类型的静态变量。6 \5 I {; g2 @8 l" ]# |
static SerialPort _serialPort;2 V2 G4 x* |) |" k
——双击窗体增加窗体装入事件处理方法
& K5 P2 {1 W7 @0 y- \ private void Window_Loaded(object sender, RoutedEventArgs e)
; o4 y. g+ K# z+ O9 C* {* y8 [6 | {% ?$ Q6 }- @7 O7 |+ O5 [. c k
}, M; U) p/ z2 \% \( U( d8 s" h
在窗体装入事件处理方法中写入端口初始化的代码。
2 ^5 {- P4 ^8 D private void Window_Loaded(object sender, RoutedEventArgs e)
& F ?6 T9 t, r. ~ {
# a {. d# a: v8 C3 ` //创建一个新的串口对象实例/ f0 y, D* l- y0 F
_serialPort = new SerialPort();8 x5 y7 Z! U+ l# D" L/ u6 ], G
//枚举计算机中的串口2 W" y% A) l: |0 T/ a% s( b
string[] ports = SerialPort.GetPortNames();! m$ w+ I. ]2 y! P( Y4 u
//如果系统没有串口装置则退出. f. X. ^3 _2 B, u# T- V
if (ports == null)8 B2 X1 t/ f6 w; h! m2 F* H
{/ M0 l; e1 e/ H" z4 M. t
this.close();
4 N2 D+ A6 k3 V# f }
' i& H( J. } t( a) K try( T: I4 y; W0 p5 F5 p
{
7 ^( z1 r) A1 u9 X" _ //使用系统的第一个串行端口
+ q, u9 O' c3 F! ? _serialPort.PortName = ports[0];' s5 ]5 p$ f+ S7 r
//设置为9600的速率4 i' H) [8 J; U, N
_serialPort.BaudRate = 9600;
9 y5 w P; b: ]* x) A" c" j' v& y //设置为无校验
4 [+ z3 T- ~! o+ j/ a4 X _serialPort.Parity = Parity.None;9 Q/ q1 [% Z, v3 i
, Z* p: H. s) I; o/ q6 y //设置为8位数据5 |) \5 l. n& x- @! {
_serialPort.DataBits = 8;8 Y7 C! J/ f$ x. S( a8 P; R& P
//设置停止位为17 E1 T0 s7 X! N) }8 Q
_serialPort.StopBits = StopBits.One;( K; x. i4 S4 C- T1 t3 |) o- K
//设置为无握手* J6 v8 h. G7 L( F
_serialPort.Handshake = Handshake.None;
' y; V' l: C/ B& [. E //设置读/写超时值
& o, \: `) p* K) W7 p2 U1 p _serialPort.ReadTimeout = 500;* F c7 u @! n1 J. d4 E
_serialPort.WriteTimeout = 500;
! x4 A$ s6 k0 z- Q) \, Y //打开串行端口
5 x0 V! B: ?) N" X4 @8 { M0 c9 X _serialPort.Open();
8 J" J7 ?& B) T8 q' e- O }6 c) x. }1 [, e- | l
catch (Exception ex)8 v1 w% n1 j7 \1 @2 @
{1 K8 r+ w0 F& T' k9 M
Message.show(ex.Message);; K2 X8 d/ q( @2 o
}8 X/ q- i# V1 t- I- ?
}
3 v3 O- O" {' @+ s K ——从工具箱中向窗口添加相关按钮,命名按钮及提示内容。
$ K& ?" Q/ W$ V# Q 按键命名 提示内容
$ o2 r$ e/ ?: g- W button_PLY 播放& w$ R. n* }2 [% }( F' ~" X
button_STP 停止
& z, S7 b* A, V+ X+ n/ Z1 S$ e4 z button_FWD 快进
" ~ v1 W2 K( t+ @; |- G* V" O button_RWD 快倒
% F1 ^/ R B( \1 `- [ G m0 p e button_RCE 播放
# L+ K2 Y! q, |" X+ m2 I button_RTM 清零& Z$ p' i* Q5 y. }
button_ZLO 定位到零; ] J n$ s. B0 q7 P6 Z
——双击按钮图标增加按钮处理方法(以录音为例)
- g' t( ^6 F, r0 d3 |- g private void button_PLY_Click(object sender, RoutedEventArgs e)
6 l8 h5 A& P9 \1 c O" l+ V0 t { i0 y; }# q' ~- e5 }; t5 t
try
/ L0 Z0 o7 S- t' C+ I r$ C0 H {" O2 T7 W7 E4 u/ ~5 j, q" ~
//发送从输入信号直接输出方式控制字符串) o. n5 |- S% [
_serialPort.WriteLine("INP F ");
: @0 N+ P& ?5 F6 ~: Y7 { 3 B) t, _ l! I( B- ?6 ^
//休止100ms
0 P/ i* r8 l- [, j- q. e Thread.Sleep(100);
( `+ \- l F+ G K( U+ D //发送所有通道Ready的控制字符串0 T! o2 p1 U0 r" z' B4 m1 f
_serialPort.WriteLine("REA F ");
1 c: j" F# f. F) ~ t6 w Thread.Sleep(100);, {+ R9 U) F7 b/ i: a
//发送开始录音的控制字符串。
: I6 L1 I8 R+ Z. p9 F _serialPort.WriteLine("REC ");4 p0 Z* K+ ^6 b7 d; R5 F) | m9 J
}
+ Y3 j. h7 L" M1 \ catch (Exception ex)+ v3 L8 Q7 ]9 Z+ M- g& `$ p
{8 _/ p% v, g" D+ r) i1 ^4 G
Message.show(ex.Message);
* t4 m; N1 ~ ]* ^3 l+ h }
4 \1 |! J, E! j, _ }
' m4 P7 p3 {& h/ G 注:发送REC指令后录音机就开始起动录音,不需像手动录音时需同时按送录音和播放键才能录音。
* ]6 o+ @7 O3 g- H' Z7 K0 Z* n 按以上方法增加相应按键的处理方法,并发送对应的指令即可。7 k7 z# F. P# [5 l& \* ]2 u/ z, c
播放控制字符串:PLY+空格+回车, A. u* I% d+ b7 L: V/ i6 A
停止控制字符串:STP+空格+回车- M8 W) c5 [# c$ ^8 N+ o
快进控制字符串:FWD+空格+回车. x- B/ A& a$ g: \" u. Z+ j
快倒控制字符串:RWD+空格+回车+ ?- S- A. `0 Z
复位控制字符串:RTM+空格+回车) P- O1 f6 o& q5 H4 m3 r& P; e: z
定位到零字符串:LZA+空格+回车
U* I/ H' l% D* H; H \7 @; e, M
/ ]: l. [5 u/ } 写好这此代码后,接好连线,编译运行就可以控制你的录音机了,就这么简单,你不觉得吗?!{:4_240:}. U v K" V1 E1 l# |
0 B) \; O" E A4 E
有了这个基础,你就可以根据STUDER控制指令集实现更多的控制功能了。
: K8 A" P) G, h3 S, S |