第五部分 控制软件编写实例/ {0 a) a7 o7 {* L1 J
+ L4 T6 ~" x9 G! T( P5 j
在这一部分我将给大家介绍STUDER录音机控制软件的编写实例。编写控制软件使用哪种计算机编程语言都可以,关键是你熟悉哪个语言、熟悉哪个语言的RS232串行端口编程方法。7 M4 I* j- K' `
1、开发环境7 h8 C- K0 d( i% C" j
编译软件:Microsoft Visual Studio 2010; s9 i' X5 h, I5 Y+ G
基础框架:Microsoft .NetFramework 4.0
4 b2 X `0 S1 }4 I 程序框架:Microsoft WPF
* u7 o4 |) Y; F8 z+ u2 y! p6 Q 编程语言:C#% M2 p9 U1 x% R+ D t; ?
2、实例功能
A% A2 N$ ? r6 X4 M! h9 @ ——播放功能
5 L9 {- J: T3 b ——停止功能! g% q c% L0 V: E v- d5 y
——快速前进功能
, m/ _! q/ ~6 {! B; g( {/ ] B& S" q ——快速倒退功能
7 e/ |: J' b: @! H! v/ u* Q ——录音功能
' U! M* _8 o0 M ——复位功能0 _5 L, W+ C, h. h7 ~
——定位功能6 [3 |: |' ]" P' {/ i# a
3、实例代码
8 Q* o- }& L0 h ——在Visual Studio 2010中新建一个工程文件。7 G/ r( j5 t5 j% V( h+ M
——在工程文件中的窗体代码文件中添加IO端口的引用。
/ c6 @$ D/ {+ e) T2 h" \/ s using System.IO.Ports;
7 s: f1 X& @! f5 x! Y8 J ——在窗体代码文件的程序类中定义一个SerialPort类型的静态变量。7 n1 Y6 m! @0 {. W" l
static SerialPort _serialPort;
( u W7 Y( N. n( ?/ J8 r ——双击窗体增加窗体装入事件处理方法/ X9 f7 K1 J! n; m
private void Window_Loaded(object sender, RoutedEventArgs e)0 a8 g3 w! ]) t1 G" \
{
- u8 B( M# K+ Y, O, M: q }" o) i" y2 N$ z
在窗体装入事件处理方法中写入端口初始化的代码。. s w" f/ u6 e" b+ U, a
private void Window_Loaded(object sender, RoutedEventArgs e)5 c4 |6 h5 U& l
{ ^! H% |7 V1 @4 P# i2 B0 j
//创建一个新的串口对象实例
& O0 h+ b; a! c7 Q9 B, |" _& n8 ? _serialPort = new SerialPort();% A- s+ O, e- H
//枚举计算机中的串口
. k0 q- G7 R+ {4 V1 R string[] ports = SerialPort.GetPortNames();
& W4 C7 [8 u3 b/ y6 ?7 r //如果系统没有串口装置则退出5 B% h" k' x9 r- A! t3 @; R/ T
if (ports == null)
% O0 u+ C# k, Y( X# U( \ {! x, v- E' g2 f: m& N" h1 F% m' K
this.close();- @2 r8 B* K; \. I
}
8 F0 j f5 I7 s try3 g2 [& u2 u+ I! ~ U2 y
{
7 v% g3 m l! n- n# ? //使用系统的第一个串行端口 b: _0 H7 O( T8 z- {1 a7 s2 a
_serialPort.PortName = ports[0]; z4 t+ w9 V" }0 a- y' U
//设置为9600的速率* d5 g- C( q% J) Z4 R
_serialPort.BaudRate = 9600;8 ~; U9 G h$ L) p& P( U
//设置为无校验( i. C0 l8 @$ R1 Y3 V( o
_serialPort.Parity = Parity.None;
7 k. k' Z% I' a! I; i* R% _
K" h- q3 u& U; d3 r( N4 P$ o2 ? //设置为8位数据* E% ~9 ?' Q0 J( D, I* F' e& V! |) i
_serialPort.DataBits = 8;
+ @! ~4 V4 d9 c0 w: E //设置停止位为1+ k* W4 g4 T* H X' ^, z
_serialPort.StopBits = StopBits.One;
- G0 ?7 A. b3 v$ w; k //设置为无握手
. K, |+ D- i! f7 r _serialPort.Handshake = Handshake.None;- d- s. g& f% ]" y2 n" @0 H7 Y
//设置读/写超时值9 N5 s( M* }6 _2 c9 Z" c
_serialPort.ReadTimeout = 500;
; W5 G$ c' f& L8 g y- q! y# b _serialPort.WriteTimeout = 500;% [" u" x$ V6 s% R/ B
//打开串行端口$ @8 f" G; a* e, I. w" ]- h
_serialPort.Open();8 ~% _9 y& h) ^* u0 f$ ^
}
8 i- Q9 e, E( r catch (Exception ex)4 M) `0 g' H* |. R8 ?7 b2 Z$ \
{! W$ S" \- s; I2 i$ R
Message.show(ex.Message);# E. F, R0 e- g9 u" x; [2 {9 q
}
2 m- I% _: C5 `, k$ P" Z }& }. v* w. a$ }) e2 p
——从工具箱中向窗口添加相关按钮,命名按钮及提示内容。 G/ c9 ^. A; l8 F! Q1 m2 M# g. ]
按键命名 提示内容
$ W9 }5 k+ {& t4 f. p* | L button_PLY 播放& f$ ?# S4 e, S1 T
button_STP 停止# [0 X+ q {. I
button_FWD 快进
5 S4 w4 T U% p8 J3 Y6 R, b0 }. B button_RWD 快倒
, k$ s* H( f# y6 _9 Y Q button_RCE 播放) k1 B" l1 _: n% U, H
button_RTM 清零
: [ Q7 u0 s1 Y" J' @' M button_ZLO 定位到零
; `) r: A: B6 @% @* |, i( [- t. f ——双击按钮图标增加按钮处理方法(以录音为例)3 u# E0 W6 g3 ~
private void button_PLY_Click(object sender, RoutedEventArgs e)7 O+ A, @+ `9 a7 c6 q% K
{
. f) ?. [- k9 C: ~8 } try+ p/ W8 u1 X V
{
$ D/ u6 w, c t8 S! ^- ` //发送从输入信号直接输出方式控制字符串
! H+ @7 m6 y- o& ^1 h* N, { _serialPort.WriteLine("INP F ");
9 ?2 I- e% q9 b7 t" W
; T3 \7 @* c. @0 X //休止100ms
) L- r6 ?9 f' a, k- O: A- r Thread.Sleep(100);$ D7 V# o& j. ~7 z) |
//发送所有通道Ready的控制字符串
! A/ u* T$ I3 H4 w _serialPort.WriteLine("REA F "); 5 S% }+ } F3 |0 V6 |" w
Thread.Sleep(100);' x0 U2 t, x1 r3 i+ `* I% Q6 p1 @
//发送开始录音的控制字符串。# x& N- U7 U1 v& d* {
_serialPort.WriteLine("REC ");
7 r8 C9 q1 i) s1 W' g4 w& y }' m2 r& `: [% I8 t- y2 b
catch (Exception ex)
( [2 z, J# M4 I7 }- |9 a3 ` {
% v) q# w/ j6 }) Y( N$ {9 A8 P Message.show(ex.Message);
) Y3 a5 U4 Y8 }0 e; E }+ f1 P0 [7 z: \" L
}" \4 c+ b! p1 @$ X; r3 W# n
注:发送REC指令后录音机就开始起动录音,不需像手动录音时需同时按送录音和播放键才能录音。3 `$ _. C, J! j2 k* i
按以上方法增加相应按键的处理方法,并发送对应的指令即可。$ e& v: `% k7 \5 K4 D$ C& x
播放控制字符串:PLY+空格+回车; |2 b* z! A$ b, l& R1 D
停止控制字符串:STP+空格+回车$ M J' [4 J* B$ D% m! I* ]+ e
快进控制字符串:FWD+空格+回车% v }) r8 F1 n: i+ I# f4 }
快倒控制字符串:RWD+空格+回车
8 g) h# T8 X. U- p1 [5 \ 复位控制字符串:RTM+空格+回车1 g1 |+ S8 N/ }1 z @6 m
定位到零字符串:LZA+空格+回车
3 R4 ~( n; z% f5 F
P3 L- A7 f% T! x8 Q 写好这此代码后,接好连线,编译运行就可以控制你的录音机了,就这么简单,你不觉得吗?!{:4_240:}
3 D9 u9 I* [! G, C- g2 e9 \' x
, u6 o" l* m1 c$ a4 { 有了这个基础,你就可以根据STUDER控制指令集实现更多的控制功能了。
3 k, H2 |# g3 M( f0 g% `$ v |