第五部分 控制软件编写实例
9 r! G# S" Y6 D R; Z, |; f. n6 j3 F! }4 o @& b( n' G* Z8 t& H
在这一部分我将给大家介绍STUDER录音机控制软件的编写实例。编写控制软件使用哪种计算机编程语言都可以,关键是你熟悉哪个语言、熟悉哪个语言的RS232串行端口编程方法。
/ ^& E0 `/ _$ p2 g) g: [8 _ 1、开发环境
( X3 z; B' D0 E( a. G 编译软件:Microsoft Visual Studio 2010: M$ r5 e9 c Q) i( A3 J) H$ `1 Q
基础框架:Microsoft .NetFramework 4.0- w. ^% c1 l3 S; r( \; v! Z
程序框架:Microsoft WPF
5 ^ {& |- A, ^7 r, ^ 编程语言:C#. h: }, f) O4 S. j! R3 J
2、实例功能
5 O0 K' }6 N( U ——播放功能0 ]+ q; k" g/ f- z A: o
——停止功能
1 ], M$ T4 r; t R& {1 c$ M ——快速前进功能
; `% t5 K$ t4 e+ ]5 ^ ——快速倒退功能
2 W& D( x9 Q3 i5 L6 Q1 q ——录音功能
1 y. y8 k3 j2 s& {" r: j3 }7 C ——复位功能4 d7 T q3 c, M+ M) r; h4 T% k9 l
——定位功能7 T) x6 u( j' @9 d+ N" e8 W
3、实例代码
: w4 `! Q* \/ K- X ——在Visual Studio 2010中新建一个工程文件。6 p: k2 r) a) W, l8 P$ T' C Y( h
——在工程文件中的窗体代码文件中添加IO端口的引用。* O. v5 O$ F n; `# D
using System.IO.Ports;
+ T7 F( A$ q* E8 j3 C ——在窗体代码文件的程序类中定义一个SerialPort类型的静态变量。
; z& b6 H* j4 H3 B* \% |3 h/ @ static SerialPort _serialPort;
! ]1 }* R: G$ r/ H$ H ——双击窗体增加窗体装入事件处理方法
, H. p0 D# x4 X# G+ }& b private void Window_Loaded(object sender, RoutedEventArgs e)2 n5 i" x* x( {. `
{
) }: \ y: j: T4 U/ m }
( t! w! U- V5 q$ V% @ @8 d, n$ R 在窗体装入事件处理方法中写入端口初始化的代码。
2 V# S+ S" {% A0 b private void Window_Loaded(object sender, RoutedEventArgs e)( g: @5 o8 z d. x
{
" j1 k7 L3 k. n! W, B4 d/ z6 k //创建一个新的串口对象实例
+ A/ t. g& W$ d, H* c _serialPort = new SerialPort();
$ p: r5 Y) [% f1 ^4 t //枚举计算机中的串口2 g8 g7 X! B- k f
string[] ports = SerialPort.GetPortNames();) y: r5 Q- V9 P' G% S9 Y* ? K4 U
//如果系统没有串口装置则退出
0 L" m' G" U0 W if (ports == null)/ n' d! {! e3 ]
{
: G, Q. c9 d* [2 w5 |& z- A' t this.close();& Q; ]! i( K6 |; }' h) t6 y1 [
}8 ? K3 S$ O6 N7 _0 U2 e8 J( W
try
1 p+ }) A& \4 E1 n {
* T) e2 ]7 ]; t- \3 w! Q; j2 s+ p% d //使用系统的第一个串行端口; y* m% n' a; M3 S, X# e
_serialPort.PortName = ports[0];
6 C5 K5 U2 H# R6 B4 I6 ?8 i! q" I) P //设置为9600的速率6 ^1 w6 d' E8 D7 ~7 Y% K$ e
_serialPort.BaudRate = 9600;
& X$ A1 ~- _( G. [6 J //设置为无校验% {" a/ p' K% f" b) P/ r+ @+ @
_serialPort.Parity = Parity.None;5 z/ X) N) U) C+ I$ _8 Y
6 i8 m: u! F* g4 g, M
//设置为8位数据
! Z& E0 a1 S4 F+ |" {4 s1 A9 N5 Q7 H. q _serialPort.DataBits = 8;
: X7 O9 ]' r$ g0 y5 z3 s' u //设置停止位为17 }! S) j: l! c3 [3 E; s+ s/ s
_serialPort.StopBits = StopBits.One;2 S1 C: E& R% z, s- l( T
//设置为无握手
* ]5 d$ F; v; r Q; V7 Y+ n' K: p M _serialPort.Handshake = Handshake.None;+ P, p6 s- R m, }' z: ~6 K, I. j
//设置读/写超时值9 [3 b8 M l" P \* \+ t, _0 Z
_serialPort.ReadTimeout = 500;
R3 C+ T% T4 k" C _serialPort.WriteTimeout = 500;
9 j; _9 m4 J- {, Z6 s: R$ g5 d //打开串行端口
: e% u* _! _6 J3 F. W- g9 C9 s5 f _serialPort.Open();
1 _, C! L& `2 v4 {' [ }
$ c& z+ d. f9 i# u! n catch (Exception ex): N6 _; ~3 E8 k2 X+ i
{$ y; o. H4 n+ |3 ^- I |/ E( y
Message.show(ex.Message);6 r2 Q( F+ Q2 d V5 @2 Q
}6 }" [# z7 `% J3 a9 W; N% y
} T( c1 Z' ^* c1 P
——从工具箱中向窗口添加相关按钮,命名按钮及提示内容。
' ?9 U! s' W3 H% @ 按键命名 提示内容, B; U( O' _: s8 A4 {
button_PLY 播放
7 p! z1 U% y" P6 s, ^* E button_STP 停止* A% x, G. a" _( Z' K `
button_FWD 快进
! a2 ]- ]; J H( Z button_RWD 快倒
( l5 E" Q0 O2 {7 z* h; i button_RCE 播放8 K& G0 K; c: k
button_RTM 清零
! f: m# v( I2 i button_ZLO 定位到零
' {3 N6 R0 T' D. h0 x0 o ——双击按钮图标增加按钮处理方法(以录音为例)' T- f$ k9 H6 _0 j+ C# n2 {; N- ~
private void button_PLY_Click(object sender, RoutedEventArgs e)7 ^. R+ T* y8 d& D
{$ Y g. X. U. n5 h: Y6 L
try, E" K: O0 X l1 B) H$ d' _& V
{
' a3 B& N2 c% g) F3 z! | //发送从输入信号直接输出方式控制字符串3 f* p; T. o; P
_serialPort.WriteLine("INP F ");
5 P: p" o2 ?& s6 q" h7 M. H : i3 R5 u8 y3 k$ h1 G- ?5 ?( W" D
//休止100ms
( S2 c, m6 R9 w/ B( G0 W. u2 N Thread.Sleep(100);
9 w7 k0 H# j* Y$ `% ]* O* e //发送所有通道Ready的控制字符串# E/ c6 Y+ n* E8 z
_serialPort.WriteLine("REA F ");
, r! a, _2 Q5 ]* W1 G# |- d; p+ d; j Thread.Sleep(100);1 k) _/ {% Q* f9 h; V( a1 ]
//发送开始录音的控制字符串。
' e3 y H6 g, \ _serialPort.WriteLine("REC ");
; W* d# h- Y4 j4 @2 \* R6 U9 Q } X _% q5 D1 W3 o
catch (Exception ex)
$ X4 d- ^! n9 C( [; `! h# U5 r% G {
; r) @& X f) c( c5 G6 p0 W& i% C Message.show(ex.Message);# r7 R0 F9 S) n; G" ^/ h
}
5 F l8 t# b/ d9 B }
( @3 D8 f5 B% q& k1 ~ 注:发送REC指令后录音机就开始起动录音,不需像手动录音时需同时按送录音和播放键才能录音。
! Z" C7 y6 r+ |4 B8 A 按以上方法增加相应按键的处理方法,并发送对应的指令即可。5 J. |: Q* {9 _, `+ w
播放控制字符串:PLY+空格+回车
6 N. N; d% u% p& L 停止控制字符串:STP+空格+回车
* x& j H! H/ D" G! Q 快进控制字符串:FWD+空格+回车! q' \0 k2 _& s7 C# [2 J$ m; Y9 ]. ^& z
快倒控制字符串:RWD+空格+回车1 y5 k5 `- |; e
复位控制字符串:RTM+空格+回车
- v; w7 N; Z' S, R! p: ` 定位到零字符串:LZA+空格+回车
8 w3 Y: ~7 W* i
0 J( @# t: d% a$ ] {0 j+ U4 n 写好这此代码后,接好连线,编译运行就可以控制你的录音机了,就这么简单,你不觉得吗?!{:4_240:}* [/ H6 Q7 p8 y9 K$ ]! q# L
% F) y1 q. |- x8 `$ ]2 ] D 有了这个基础,你就可以根据STUDER控制指令集实现更多的控制功能了。
4 n+ _+ T7 t1 q$ i% G |