第五部分 控制软件编写实例
, L, r8 e% Q5 ]5 i" S* }$ F5 h: L2 [: q+ v4 _/ G: j8 I* W4 O
在这一部分我将给大家介绍STUDER录音机控制软件的编写实例。编写控制软件使用哪种计算机编程语言都可以,关键是你熟悉哪个语言、熟悉哪个语言的RS232串行端口编程方法。
, g$ `& }' ?* t7 j4 x# t; W 1、开发环境# C, j' {0 r% o9 `3 }3 b
编译软件:Microsoft Visual Studio 2010
# v0 T1 F9 |+ Z. Y& n U' W/ G* k$ f 基础框架:Microsoft .NetFramework 4.0
6 B, h X. E' Y6 B, B b( A# N 程序框架:Microsoft WPF/ e3 R `8 F& i* p3 d
编程语言:C#7 E: D$ a" M$ j
2、实例功能
9 }* k2 ~% x0 E$ z ——播放功能
6 D a* S' D2 i, h ——停止功能
' W) C) k0 p' b: L d- d7 v4 s ——快速前进功能
@) H% w1 a! `4 D! B ——快速倒退功能5 E/ T5 I- c y8 x0 a# y
——录音功能* F2 A% u0 J5 F. Z4 o! W0 S: \. N% v- X
——复位功能" s$ R3 k2 D" Q' e
——定位功能
* O0 H( Q. L9 ]8 \8 W 3、实例代码
8 z: T6 O6 {2 M# o ——在Visual Studio 2010中新建一个工程文件。- {$ f7 M5 Q0 L( G1 W
——在工程文件中的窗体代码文件中添加IO端口的引用。
5 U: d9 P9 F1 O3 ^, u9 r using System.IO.Ports;
, _. L, s K% M9 F7 ~% _2 P ——在窗体代码文件的程序类中定义一个SerialPort类型的静态变量。
" s3 [$ B# w; `) v' j' c static SerialPort _serialPort;6 q" u s1 K$ K9 y3 s' [
——双击窗体增加窗体装入事件处理方法 z1 k6 a& i" Z" D
private void Window_Loaded(object sender, RoutedEventArgs e), i. f. a5 _; l2 ]# Y0 J" c
{
- k& @) X1 L5 O }
: f$ N, y7 t. g& Y; i 在窗体装入事件处理方法中写入端口初始化的代码。6 Z* j% _. A) F1 L5 N/ t' H1 j
private void Window_Loaded(object sender, RoutedEventArgs e)* w. a% t+ \3 l% r& G* I8 n; @$ `
{
' r L7 }; g) U( \0 | //创建一个新的串口对象实例
8 p4 i$ ^: X9 [& T! m( }+ T _serialPort = new SerialPort();1 ` z4 z# b5 O% c0 |. D/ G3 ]7 W* m; ^
//枚举计算机中的串口& C$ A, r) q) j! x
string[] ports = SerialPort.GetPortNames();: T; F! Q9 \' M' S6 @4 h! [
//如果系统没有串口装置则退出5 A4 Q6 y9 G, q& x
if (ports == null)
. w/ ~& i( `+ e, l {
# K: h" w( U* G" c o/ V% G4 Q9 a this.close();
4 R! J7 b# H) O8 Z2 k- ~2 @4 w; G$ H }
9 d1 g# ?! [$ G. o+ ? try
8 C6 a+ V/ h, N& k: O5 b {7 t5 A. k# v7 k; p7 o
//使用系统的第一个串行端口! O$ m5 _5 l F) k* \
_serialPort.PortName = ports[0];
9 {2 T; @ @; T- O4 P; y9 N //设置为9600的速率
8 i' s; h2 r5 p4 K M1 }8 Q5 p _serialPort.BaudRate = 9600;
1 m: U4 @7 k- Z //设置为无校验! r% d* v- C" \0 J( x, J
_serialPort.Parity = Parity.None;% l( x7 u% A% M4 S8 {
# _/ S$ u% a9 L5 _' a% I6 B
//设置为8位数据9 Q% [* W% U; N. _% Z; K
_serialPort.DataBits = 8;! |% p6 b/ ^0 M1 d3 u& d
//设置停止位为1" n! u& u- g+ ?) }5 d! W; B) k
_serialPort.StopBits = StopBits.One;
6 c7 Z0 V8 k4 Y7 J* }( D7 }+ J. M //设置为无握手* n; [- z6 P% P6 z; m0 `. m" D
_serialPort.Handshake = Handshake.None;
# o' H& y0 M/ T# x0 w$ d0 ?# Z //设置读/写超时值
* F9 c3 e2 L) r" R* b$ k _serialPort.ReadTimeout = 500;4 {1 A6 e( `. r. S7 u% @
_serialPort.WriteTimeout = 500;# s9 Z% D7 X- q! }/ ^' q
//打开串行端口2 }, w; d+ q; b* }6 p, G3 y3 f
_serialPort.Open();* h& v: ~0 L, s* i
}9 G' g7 _0 N6 Y
catch (Exception ex)
! s- y' [# a: E2 I9 J9 x {
3 M" r7 v" X9 Y: P) _% j, Y Message.show(ex.Message);
4 j2 i2 e, [' S }! y1 @0 Z- F2 z8 n& _" W
}
; R/ r9 @3 Z7 r( y8 r. b ——从工具箱中向窗口添加相关按钮,命名按钮及提示内容。' ^9 G1 n# o$ R7 z0 {: {* Y1 s& j
按键命名 提示内容
! V. b& a( ^- `! d button_PLY 播放; Y" ~' y/ k1 p' K, d
button_STP 停止
0 v: a" P' p; V3 J2 y# V/ h: \8 h button_FWD 快进
! ^+ h, U) O8 H5 S button_RWD 快倒
6 T" u% r7 W/ c* b& S% d+ F button_RCE 播放
9 u3 R8 k5 k& {3 [ button_RTM 清零
7 L/ b( {9 g0 [, X& h0 | button_ZLO 定位到零% m7 g* s g B6 _0 Z/ Z! r
——双击按钮图标增加按钮处理方法(以录音为例)# Z0 w. W' L- y0 A5 _/ k F! m
private void button_PLY_Click(object sender, RoutedEventArgs e)4 ?! q5 Y1 s: E1 M
{
; H; h& N( j# \4 v: f( w try( F* B0 D6 U& I$ @0 ?) b
{
* z9 S8 u. z6 y* Y* N; ]( r: l //发送从输入信号直接输出方式控制字符串' O7 x; \1 n( N( `) S
_serialPort.WriteLine("INP F ");
8 k+ R1 u/ J, ^+ V& a
7 Y: d6 }( {' y4 \& g //休止100ms! L6 [0 U! y" c# w
Thread.Sleep(100);
6 Q9 d/ A$ Y2 c; O //发送所有通道Ready的控制字符串+ H8 ~) U- y2 r$ W+ t& [" s2 B
_serialPort.WriteLine("REA F ");
! {, F$ S6 {) f$ i: s9 K Thread.Sleep(100);
/ W- c. {: h# B; d$ V //发送开始录音的控制字符串。+ w3 k7 e6 L' ]/ \8 y1 i& T8 L$ O- W
_serialPort.WriteLine("REC ");
' Q( F- Y% r' Y0 p }
9 R% G9 p$ H* ?, S' Z. x catch (Exception ex)( x& V/ B) S: s8 J
{
w3 |* z! r+ [, S2 h2 R Message.show(ex.Message);
4 A/ l6 A8 q s1 |: c }
3 J, O1 O# k C$ k* Q# \) K; y8 q }
* i0 K7 J7 x* h- W& G1 B 注:发送REC指令后录音机就开始起动录音,不需像手动录音时需同时按送录音和播放键才能录音。
/ a l1 T" `; Z% J 按以上方法增加相应按键的处理方法,并发送对应的指令即可。/ _2 `6 g7 S/ u: ]$ v, i: ]6 z" K
播放控制字符串:PLY+空格+回车
8 W1 i$ H0 v2 K! X 停止控制字符串:STP+空格+回车# [* E: `6 H, d! o! D4 M _& R% j
快进控制字符串:FWD+空格+回车
; k3 W* r" c7 x3 v- t' I 快倒控制字符串:RWD+空格+回车 t* Z$ V7 O2 x& k/ ]1 n
复位控制字符串:RTM+空格+回车
" T, c( I+ |4 R9 G 定位到零字符串:LZA+空格+回车- ]1 o. g7 }* H' E0 K' E$ K: @
4 X5 `! a' h5 m' Z( z1 s 写好这此代码后,接好连线,编译运行就可以控制你的录音机了,就这么简单,你不觉得吗?!{:4_240:}
/ x3 c1 p4 R: A5 C% ^* C7 U$ m+ z; P
4 S! J) d. T5 L- P% @4 y' u0 { 有了这个基础,你就可以根据STUDER控制指令集实现更多的控制功能了。, ^6 V# D/ O2 l
|