第五部分 控制软件编写实例
" d+ t9 e6 [5 J, m3 s2 v
. c5 X) ` _4 t t 在这一部分我将给大家介绍STUDER录音机控制软件的编写实例。编写控制软件使用哪种计算机编程语言都可以,关键是你熟悉哪个语言、熟悉哪个语言的RS232串行端口编程方法。
% D" m; L6 U- M! U 1、开发环境
5 k; c) K# y1 h+ v7 R 编译软件:Microsoft Visual Studio 2010: n M! x' X. M1 S& B
基础框架:Microsoft .NetFramework 4.05 d4 h2 s( [, w# p* A- C2 s$ a7 B
程序框架:Microsoft WPF6 @: [, p& q* w- ]2 `% Q
编程语言:C#; p0 n% ?7 m$ a2 S9 l
2、实例功能' H: U3 E7 X8 D' t
——播放功能
" w/ u: C5 ^/ R; `: L: s' J ——停止功能
* ]2 \% D: l* C- z, | ——快速前进功能
/ B' L) K; K% d& ]9 Q1 O5 e ——快速倒退功能
% x9 ^3 t- [1 { ——录音功能
4 b1 X6 w, l! o/ m3 y; C: I& e* X8 o) g ——复位功能
7 ~4 t- r% [/ K! x! z% L ——定位功能
; b3 G [. _, m9 a7 G5 M3 Q* s 3、实例代码 e- n2 ^3 h/ P5 p
——在Visual Studio 2010中新建一个工程文件。
- _# J" S4 y- ~- y ——在工程文件中的窗体代码文件中添加IO端口的引用。2 J, E: x! E4 \
using System.IO.Ports;5 u) W0 o. R; e" b% p$ x7 Z, y
——在窗体代码文件的程序类中定义一个SerialPort类型的静态变量。
( e; K. n+ O4 T: ]1 q/ Q static SerialPort _serialPort;
* `) m6 @7 ^7 K# L! f4 m ——双击窗体增加窗体装入事件处理方法
! N' [) F" s7 s# Q$ G$ l2 V/ l private void Window_Loaded(object sender, RoutedEventArgs e)0 \' m5 S) N- q0 x2 L
{
6 W3 y a! |) K }
/ O- P, K$ A( u; T& x( |3 V8 T 在窗体装入事件处理方法中写入端口初始化的代码。
- Z7 H+ I' u$ C' R+ Z, ` private void Window_Loaded(object sender, RoutedEventArgs e)
w8 y4 G+ n$ ^/ Q; x {
$ T, z5 H: c5 I //创建一个新的串口对象实例 M% l5 r' ^6 w* U$ X
_serialPort = new SerialPort();0 g" V: T+ P8 y5 @7 z
//枚举计算机中的串口
1 w( X) q8 z0 X3 b/ I" T# d string[] ports = SerialPort.GetPortNames();
3 N, S% K# b" \9 _ //如果系统没有串口装置则退出# m4 |7 Y9 l0 O" H, a' m
if (ports == null)' q- A2 @5 d( }5 x9 F
{
9 c3 D; c/ F. {$ b$ d# Y this.close();
) d# q" B) G. c" P1 _* o6 F% T }) l' P1 I2 z( c
try
% N% c, q; W* P+ K L( [: }& K {% Y) w& a' E( e/ D
//使用系统的第一个串行端口; k' ^5 }5 L' O5 T1 P0 n
_serialPort.PortName = ports[0];
* j5 S0 E& X$ r( Y; c //设置为9600的速率& f/ S$ ~) ]& h) W f7 h+ y
_serialPort.BaudRate = 9600;
2 a" u! g, v& r0 \7 B9 ` //设置为无校验1 H4 n8 @3 C* W* A( Q8 i- w# h% `
_serialPort.Parity = Parity.None;
5 s( R- e( {0 M, n! f' k0 }
8 K- R! f) W" ^0 l1 u //设置为8位数据
8 M" i0 [8 e: M9 U9 s _serialPort.DataBits = 8;
: u9 T& L. g3 s1 ?+ y, U4 p //设置停止位为1' B1 }9 M0 |! R/ k
_serialPort.StopBits = StopBits.One;" ^3 K& G2 t& V( K2 J# s
//设置为无握手
& v& O- x) V( R+ i1 K/ I9 C# B9 F& r _serialPort.Handshake = Handshake.None;
0 n% A$ ?& r) r% P! j //设置读/写超时值2 Z+ c1 k' y' v5 K+ o
_serialPort.ReadTimeout = 500;
; [$ ~( {0 l& d# x; C/ y! _4 @4 r _serialPort.WriteTimeout = 500;) C2 `6 ~/ R+ ^1 _+ X" X
//打开串行端口 e1 N, H9 W( J- D2 v9 l8 Y- _# d
_serialPort.Open();
3 L( `6 }) Y( p1 B. A }" |2 s. \5 A. j) q. q x
catch (Exception ex)5 r/ q2 v: d2 J0 }$ U" W8 e3 v; o
{! m5 u4 k. ], ?! l* n) A) W
Message.show(ex.Message);# O2 h5 v7 a( M$ y) N+ E
}8 I- q! m% y6 y4 r# p ~
}
2 b- G$ L2 Y% q ——从工具箱中向窗口添加相关按钮,命名按钮及提示内容。
/ s* m& _0 h) O- n: H& { 按键命名 提示内容
. K9 u8 w( N8 o) p) H* Z/ ~ button_PLY 播放1 G5 j: R0 T& u( s& r, b5 ]5 ?
button_STP 停止8 t2 l8 x/ ]& j. b8 Q
button_FWD 快进
* r! t/ K0 }/ X& {$ } button_RWD 快倒. B8 j1 Q/ |' P, n( I
button_RCE 播放
" X: ~8 Z8 x4 S( u* W( Z" {' Z button_RTM 清零 O, I' Z- k) b
button_ZLO 定位到零' W( x$ W% M5 `2 ]
——双击按钮图标增加按钮处理方法(以录音为例)( y! z$ O- `4 h9 P
private void button_PLY_Click(object sender, RoutedEventArgs e)
3 O- S' R) A3 X {* b# E3 U E/ g- |4 x/ ?$ d
try
( S" G: S* m- Q. @* a& l {
8 Y3 k2 \# `, v D, D) ] //发送从输入信号直接输出方式控制字符串# N# w7 D8 P& j7 e5 i# U- C2 N/ D
_serialPort.WriteLine("INP F ");
8 c8 P0 c- H9 h/ u/ d7 w0 V
) J5 x/ [; h I( O: ]$ A //休止100ms6 o/ f' `4 I- E6 k
Thread.Sleep(100);; H4 q: H! \9 G4 v
//发送所有通道Ready的控制字符串/ u2 i, ~' L$ D
_serialPort.WriteLine("REA F ");
6 F7 e2 L: U3 u7 U j Thread.Sleep(100);
( t" r5 y: ^1 o3 m //发送开始录音的控制字符串。
* g2 k4 v4 ]: a* ]+ r9 e! J4 t: B' V _serialPort.WriteLine("REC ");: ~4 x- O) w) a I# l( e% A
}
3 H$ d! P$ h9 h+ [8 M5 ~ catch (Exception ex)
& F$ A1 t; }7 O5 A. g { v: B% N6 D% q1 i" K/ y2 g* k) P
Message.show(ex.Message);7 [- k* i7 v1 j
}% T% Z( p1 [" v
}7 u0 T0 k9 i4 \" A
注:发送REC指令后录音机就开始起动录音,不需像手动录音时需同时按送录音和播放键才能录音。
, m: W( R$ b& p9 V6 |$ ] 按以上方法增加相应按键的处理方法,并发送对应的指令即可。
& y0 a5 u7 o1 a# } 播放控制字符串:PLY+空格+回车8 z) i7 h$ T$ V8 }
停止控制字符串:STP+空格+回车
+ {9 S: `) F# ^ G* w3 @: f 快进控制字符串:FWD+空格+回车
8 s* Z$ r" S/ v/ z 快倒控制字符串:RWD+空格+回车; W; ?6 @- k% b7 m% V$ k0 i
复位控制字符串:RTM+空格+回车$ J; C/ u! u" \
定位到零字符串:LZA+空格+回车
: a7 G) m" u9 v, L 1 u+ N, l" ]1 k3 k) ?8 ~) y
写好这此代码后,接好连线,编译运行就可以控制你的录音机了,就这么简单,你不觉得吗?!{:4_240:}
+ M( H, M5 N# ]- b + V6 G6 A- v+ e( q+ M' H$ F1 H
有了这个基础,你就可以根据STUDER控制指令集实现更多的控制功能了。
5 z& U z! ^$ j4 V S |