第五部分 控制软件编写实例
9 g. j) G3 u) N7 d" Y3 c1 x' P$ S/ A4 h$ f/ w* q; p0 m
在这一部分我将给大家介绍STUDER录音机控制软件的编写实例。编写控制软件使用哪种计算机编程语言都可以,关键是你熟悉哪个语言、熟悉哪个语言的RS232串行端口编程方法。
. |% Q4 U) B: n 1、开发环境8 t, W6 [7 h; v0 M! k7 w' c' y
编译软件:Microsoft Visual Studio 2010
$ T I4 J2 n8 d1 d/ l 基础框架:Microsoft .NetFramework 4.0
0 R6 F! s4 p8 z% E& _5 H2 a 程序框架:Microsoft WPF
% R! z! }' v. Y5 ] 编程语言:C#/ V/ \9 W& k! y, J% @% y: c
2、实例功能
; R7 P% p% y7 S# G* g" B6 d ——播放功能
$ r3 d4 o2 Y* @$ @ E$ e( V4 ?8 r( M ——停止功能
) y1 p! S2 p: A4 M; P) }, a ——快速前进功能6 K8 m/ g3 e0 w# m$ J; ]. ^3 x
——快速倒退功能7 b% s; z- M# m1 l1 X
——录音功能# Y; i! ?* o2 v# b, i* U
——复位功能; q! `, u. P/ j! i5 C# K; y
——定位功能/ j8 n/ [0 j% y" H
3、实例代码3 n( n; B* L( j
——在Visual Studio 2010中新建一个工程文件。
7 ? l! H, m) \- | ——在工程文件中的窗体代码文件中添加IO端口的引用。4 m; x9 z% t$ `/ ~: d/ b
using System.IO.Ports;, y* ]0 i* j- c* `
——在窗体代码文件的程序类中定义一个SerialPort类型的静态变量。
+ E3 v/ C6 T+ [* y+ d. n9 e( W& ?, C) } static SerialPort _serialPort;
# b4 U# z1 ?7 I' M ——双击窗体增加窗体装入事件处理方法% n1 J1 t$ z5 a7 L, x+ S8 q& E
private void Window_Loaded(object sender, RoutedEventArgs e)+ o( y" D0 Z! `( t- Y$ D
{. K1 b3 w7 j/ _) U' S8 L( O7 i
}( O4 S) x. V n0 ]; b" v( Z6 l
在窗体装入事件处理方法中写入端口初始化的代码。
1 m/ [9 q' S. j' c5 D private void Window_Loaded(object sender, RoutedEventArgs e)6 [2 s0 T/ c5 f- U4 F: |+ J
{! I# A; {* h! D: b
//创建一个新的串口对象实例
; C/ e- }) v; {6 }: | ^. b _serialPort = new SerialPort();
. ?, g1 ?2 Z) `6 I# Y //枚举计算机中的串口
, c% p9 H' n# U5 \3 c, [* w7 H string[] ports = SerialPort.GetPortNames();
; o; I, _% y) g% m# N //如果系统没有串口装置则退出
8 Q0 y" W7 w, e1 c( ^# x& T( a- U if (ports == null)0 R% m2 D D6 @$ K7 l
{
# o9 K; J. Q3 u$ `- J7 L, p" |+ e8 s this.close();, O- S8 L. P" g2 y" q* [ k& B8 d
}. |8 I. i0 q0 `8 d- t
try% E- l+ q4 U! N: r
{
3 \! J" K$ x5 y7 M //使用系统的第一个串行端口
# s+ O4 j) F% ?% c+ X1 S, x _serialPort.PortName = ports[0];3 d- _; x t' F9 d0 m8 N# g
//设置为9600的速率
! i( F9 x- k, T# s8 P( {! \ _serialPort.BaudRate = 9600;9 E. a3 @% ?, |- y
//设置为无校验
7 K1 C4 t7 }7 D5 y5 A8 q& ]8 L _serialPort.Parity = Parity.None;
. U$ F4 }4 o, c- h# A, |
& S4 k( \6 ? O- x, ?: ^9 k //设置为8位数据% K, m6 U8 x& W( P
_serialPort.DataBits = 8;
$ {0 v( T. \; G; s //设置停止位为1# Q. P! t; s, j8 f! R/ U% R1 j7 [
_serialPort.StopBits = StopBits.One;; [$ V- v. q: D: @+ p* p
//设置为无握手
) F1 A6 X7 Y1 X) I$ ` _serialPort.Handshake = Handshake.None;
9 x4 n) k5 p# A ]& q' B //设置读/写超时值1 X- d! y, h& u7 Z3 G
_serialPort.ReadTimeout = 500;7 x( W! N& _0 {2 L# z
_serialPort.WriteTimeout = 500;
3 ^: ?0 q1 z! d% n5 U7 h //打开串行端口
3 \3 O Y# X3 _3 ~% P/ Q( c, z( X _serialPort.Open();' x/ M2 u9 t, N% d
}8 T) A# c; ?0 C3 F, Z. B" Y D
catch (Exception ex)( A9 X! Q m- i
{, \9 o( D/ \7 h8 }
Message.show(ex.Message);. }. \1 u: A" G) B7 X, K0 }
}
8 S: [0 a2 f) K$ S }0 L2 l9 N+ t7 \6 ]
——从工具箱中向窗口添加相关按钮,命名按钮及提示内容。4 X& ?) ~+ I1 G
按键命名 提示内容+ _2 s) n0 G* Z! _% \- J# f; m/ s a( d
button_PLY 播放* V2 |. o% C; t
button_STP 停止0 T7 y* J# K8 J8 C
button_FWD 快进8 \0 A$ \7 F+ D
button_RWD 快倒5 P* Q8 U M! q7 \
button_RCE 播放
; X3 q. P# a/ a button_RTM 清零
' [& _& U7 m q: y# A3 c3 Z button_ZLO 定位到零
8 k6 [, D0 @. M" H9 _ ——双击按钮图标增加按钮处理方法(以录音为例)
) U" P& L$ ~) T0 I% ? private void button_PLY_Click(object sender, RoutedEventArgs e)
8 E% W* f0 L! { {6 Q: W" C2 Y a v
try% N: r8 ~' S1 [
{- c/ z( ]* T0 x8 s8 Y0 X
//发送从输入信号直接输出方式控制字符串" |7 ] }. \2 n7 ?* U9 y0 o
_serialPort.WriteLine("INP F ");8 n, X; J4 T8 Q" e6 o/ j9 x
+ t' I. K# A. c. \+ V% f+ r: L1 y6 { //休止100ms1 |: j( Q- z/ Z5 O g( V. @5 E" F
Thread.Sleep(100);
; B' p$ X% n. ~8 _+ b) g, Z //发送所有通道Ready的控制字符串1 _: M j& K6 ]4 M: t! J' Z4 G
_serialPort.WriteLine("REA F ");
/ Q$ E8 [% s4 j7 s# Q+ H Thread.Sleep(100);$ x* i9 N! n/ @ B
//发送开始录音的控制字符串。
9 F, x% Z3 Y7 ]2 K. a3 x7 } _serialPort.WriteLine("REC ");
1 C' G- U$ u3 d& V }
$ d5 `3 D* l7 a3 w6 k; w catch (Exception ex)9 |6 B% P! ?# w+ s; A- A
{# M6 w# z3 H$ N/ G) B& ~8 i
Message.show(ex.Message);
6 l2 I# d' q5 G }) c2 i0 J* p! w) n; h
}
* o& H) p3 |5 `: w 注:发送REC指令后录音机就开始起动录音,不需像手动录音时需同时按送录音和播放键才能录音。
9 Q' D/ c! s! p6 S3 ?$ j- ~( i 按以上方法增加相应按键的处理方法,并发送对应的指令即可。' X) J U: U5 Y
播放控制字符串:PLY+空格+回车( N- ~" ]- a5 B; o4 k! k5 Y7 Y
停止控制字符串:STP+空格+回车3 t9 V9 S9 ~+ s5 I5 ^' Z! Z. L+ }
快进控制字符串:FWD+空格+回车
# p+ R& r/ q, n) B) e4 f* t# M 快倒控制字符串:RWD+空格+回车
2 Q# t& \: `! [0 o1 l! p 复位控制字符串:RTM+空格+回车5 [$ H9 G7 ~+ ^# g
定位到零字符串:LZA+空格+回车
/ k* z" l5 m) F3 E$ X# `! \ 6 y: ?; x3 D0 p3 {0 @6 Z. n
写好这此代码后,接好连线,编译运行就可以控制你的录音机了,就这么简单,你不觉得吗?!{:4_240:}* g3 a( B% ]! u; b4 A2 m1 K
5 c$ t1 M9 _3 k- Q 有了这个基础,你就可以根据STUDER控制指令集实现更多的控制功能了。# @7 Y$ h+ F+ a
|