第五部分 控制软件编写实例* e9 z* E$ c- P: o" V" e
/ I1 Y- h& G- x7 ~% r \ 在这一部分我将给大家介绍STUDER录音机控制软件的编写实例。编写控制软件使用哪种计算机编程语言都可以,关键是你熟悉哪个语言、熟悉哪个语言的RS232串行端口编程方法。" J4 |. B+ o$ m; y; E `0 C6 [
1、开发环境1 d' N2 [2 X) ]# X. a
编译软件:Microsoft Visual Studio 2010* H" h- a3 u% n3 V( J
基础框架:Microsoft .NetFramework 4.05 d h h) t! C% E/ j
程序框架:Microsoft WPF
2 I% n6 |2 U9 e& A 编程语言:C#
) [) F1 T5 N7 Q 2、实例功能
g0 d8 I9 a: V2 M# s ——播放功能; y) }, Q' g& Z; f+ ~$ ]
——停止功能! x, B8 S. y, g2 Y1 ^1 g
——快速前进功能
, q& L+ `0 B) [ ——快速倒退功能
5 W$ p1 \3 J4 C9 m' D; S ——录音功能/ B9 x6 ]% ]- q. N) o
——复位功能
& M0 C" q) U1 W* C) n; L! X) x ——定位功能
& j, x* G2 c% `/ }2 L8 J. r3 a 3、实例代码
{! \6 Q. v& s- P4 X- q ——在Visual Studio 2010中新建一个工程文件。
- p$ p$ h' S- V ——在工程文件中的窗体代码文件中添加IO端口的引用。9 c2 x# y3 i" Y$ n1 c2 k. K
using System.IO.Ports;
8 l8 L+ D' i2 q/ P; c7 ? i ——在窗体代码文件的程序类中定义一个SerialPort类型的静态变量。8 c0 S5 ^3 k0 z; |
static SerialPort _serialPort;' O5 E6 g" ]5 Y& K) ^* i" _
——双击窗体增加窗体装入事件处理方法
# p$ X9 ~4 U/ }7 i* H& M0 f, ~+ b private void Window_Loaded(object sender, RoutedEventArgs e)+ |$ i9 r! Y8 v X! l! {+ E
{
k ]0 n: Q0 _ }
! ^' o0 b0 H. [7 w6 j7 L7 O( L 在窗体装入事件处理方法中写入端口初始化的代码。! {; s1 |3 A/ E9 Q1 y$ [+ V$ u% l! x
private void Window_Loaded(object sender, RoutedEventArgs e)
0 v% w9 s8 v. v' l3 I% o {
& Q4 ~2 Y1 x! t3 R+ X //创建一个新的串口对象实例
% [: Q& `+ q4 h _serialPort = new SerialPort();& {9 v' ^! r1 ^2 ^/ q) M
//枚举计算机中的串口
; l$ |" M! n: `: e+ f string[] ports = SerialPort.GetPortNames();+ `2 W Z( b+ G# h
//如果系统没有串口装置则退出
I; C+ X4 n; | if (ports == null)
- _+ L! @3 }$ J& t# _( F' M1 S0 P {
/ e5 j' V( A. {9 @7 X7 c; a this.close();
$ x8 R9 ?* o8 L9 \" C" B* q }
% I( M" S Q9 C5 N9 g% n3 l+ t try
5 `7 I2 _. E* J5 N" X- C [3 T {. G& p7 C. L- E
//使用系统的第一个串行端口' `) _% E) w1 z0 {( A% j5 ]9 r& u
_serialPort.PortName = ports[0];
- y' y& b- R2 d: I# i" J //设置为9600的速率- B6 \$ E, r8 c
_serialPort.BaudRate = 9600;) o( u1 n1 G; e) L
//设置为无校验0 G/ p5 {. i, E8 F1 P q
_serialPort.Parity = Parity.None;
* D) P- s) g( _: p* p
3 A! I2 [: s' i7 b( }; d0 ` //设置为8位数据! W. W1 Y+ Z6 f+ u& y
_serialPort.DataBits = 8;3 _0 v9 r0 i8 f( h* J
//设置停止位为11 ~3 X2 t! s. ]% _
_serialPort.StopBits = StopBits.One;) \& D) q$ C- }* ^
//设置为无握手
3 R. ^( F1 n \" ~3 E _serialPort.Handshake = Handshake.None;
) }) h# ~0 Z# y2 P0 R //设置读/写超时值
7 [8 p" b& K9 }; ] _serialPort.ReadTimeout = 500;! F; Z4 i1 b0 Q' j
_serialPort.WriteTimeout = 500;
Z$ r. o- @. n //打开串行端口
. E+ o l( m$ A3 b/ U; R; P2 T, ` _serialPort.Open();
7 t4 b0 N# R0 I+ U }
5 W5 s& W2 ~, e% k, |& {; P catch (Exception ex)4 ^2 R/ k; q" _+ _ P. _
{" ~9 e5 ~8 S' E6 T( g! \) f% z
Message.show(ex.Message);) Q/ ~- {/ \0 a2 h; g9 q3 ^
}
" ]9 @* D/ x2 H8 n* P3 n }
# s8 m- V% } M' M @, H W' I# z { ——从工具箱中向窗口添加相关按钮,命名按钮及提示内容。/ U2 Z( X- o9 a, _( d# i% b/ O4 q
按键命名 提示内容
! x* o6 {1 D0 z0 i+ p: t button_PLY 播放
0 E/ q' B4 k- w9 a& B" H# [" s button_STP 停止" K! z* g9 A# n$ b5 ]
button_FWD 快进
7 h! A9 [1 ~) x9 x# c. n' W button_RWD 快倒
7 g* n7 ^1 [, S Y/ e, T* K. R button_RCE 播放
}: j% l5 R/ j+ N* l button_RTM 清零2 H1 z$ d' R) Z
button_ZLO 定位到零0 y% k% K* X& ~+ y3 u8 n; [7 a
——双击按钮图标增加按钮处理方法(以录音为例)
# p0 u4 G, d" { y9 y. V) M private void button_PLY_Click(object sender, RoutedEventArgs e)) _0 M; p, g" z* @2 K# Z
{
?$ m, ~$ k5 a3 Y+ E) T s# ^ try
; u' n: w( F' q& i" q {
, o/ E4 I- B- }- c8 e6 g& y //发送从输入信号直接输出方式控制字符串
% B/ U) t$ x4 I- q' F _serialPort.WriteLine("INP F ");/ o! K- W- \9 ?# H
; Y, x4 x/ W' p4 J; E6 u9 Z //休止100ms
# N; q$ b: l9 X3 ]1 T( {+ b$ \ Thread.Sleep(100);7 E) [0 u6 j! U s/ o+ D- F K
//发送所有通道Ready的控制字符串( |$ R w: k8 b5 }
_serialPort.WriteLine("REA F "); ; ?& X4 U, u$ E+ a. ] K, o
Thread.Sleep(100);
' J" @$ {, ^- `: i# n7 f0 L4 p& B //发送开始录音的控制字符串。
( X% x$ A. y; W2 ]2 u _serialPort.WriteLine("REC ");# J6 i( Y6 z+ c7 ]. ]0 W
}/ w7 x* \1 \) F# f6 h0 g- I
catch (Exception ex)
, E. W8 w! Z, j" d6 t {* e# @. t9 G3 Z
Message.show(ex.Message);
& `2 X6 x7 u8 m' n }/ k0 i3 Q0 k# p% A: b
}
( R2 G5 q0 d; ], P6 W 注:发送REC指令后录音机就开始起动录音,不需像手动录音时需同时按送录音和播放键才能录音。
" V# [& H3 u8 {# T. |9 u& U# n 按以上方法增加相应按键的处理方法,并发送对应的指令即可。8 W( D# C# d# T$ P6 h- ^
播放控制字符串:PLY+空格+回车& C) t0 R/ o# u' A1 E/ M% z& h+ q% \
停止控制字符串:STP+空格+回车$ w# p$ S% a2 e$ n# ^
快进控制字符串:FWD+空格+回车
" @+ C/ {% }9 g2 ^- D. U 快倒控制字符串:RWD+空格+回车1 x$ h5 T; w9 a6 [
复位控制字符串:RTM+空格+回车
0 ?0 F8 R& a6 Q: t+ {6 e0 i7 N 定位到零字符串:LZA+空格+回车
& w% c, T, ?' D0 }; ^; i, D" X 1 C9 J) v4 @) \! Z* y% m. X+ c
写好这此代码后,接好连线,编译运行就可以控制你的录音机了,就这么简单,你不觉得吗?!{:4_240:}
# a5 x6 A+ b/ I8 ~/ N0 M2 U. n % j# ?) F6 s6 U& w
有了这个基础,你就可以根据STUDER控制指令集实现更多的控制功能了。
4 S0 a8 H4 }1 d s8 C |