应该感谢那些指出你错误的人

借我三千虎骑,复我泱泱中华!

博客园 首页 新随笔 联系 订阅 管理
  11 Posts :: 166 Stories :: 51 Comments :: 1 Trackbacks

公告

2006年4月4日 #

今天继续写C#的工业扫描串口。
突然遇到一个很奇怪的问题:那就是我要求把某些码得到之后进行业务处理,但是就是这个时候突然发现扫描出来的 码位数不正确了!
我就很怀疑自己的代码逻辑了。于是,我就逐行进行调试,而接受口扫描值的变量竟然是正确的,当我跳出调试回到程序中时候,竟然得到的码是正确的了!很郁闷!!!!!
后来,我才想到,原来串口传输的数据是有限制的,每次只可以传输8位,而我要求传输的数据是13位,再加上\r\n那就是15位了,那也就是一次的传输根本就接受不到正确的值。!
可能是自己天资愚笨,想了很久,还是没有实现的办法。
后来就索性,让系统挂起100毫秒。

System.Thearding.Theard.Sleep(100)

不知道其他高手有什么解决的办法!往赐教!!

posted @ 2006-04-04 23:15 落拓孤鸿 阅读(845) 评论(1) 编辑

项目需要写个扫描的程序,原来是用VB做的,用的也是很好!不知道是不是客户心血来潮,现在竟然要加到.NET平台下,用C#来实现。

早就听说了C#对串口的支持不是很好,一用还真是的 。

找到了MSComm.ocx 之后把他COPY到SYSTEM32下面,写了个注册表文件,把这个给注册一下
REGEDIT 
HKEY_CLASSES_ROOT\Licenses = Licensing: Copying the keys may be a violation of established copyrights. 

// The MsComm32 Control License follows: 
HKEY_CLASSES_ROOT\Licenses\4250E830-6AC2-11cf-8ADB-00AA00C00905 = kjljvjjjoquqmjjjvpqqkqmqykypoqjquoun
以.reg的文件名保存,双击打开即可注册。

然后在窗体的form_load事件中加入如下代码:
 1 try
 2             {
 3                 axMSComm2.CommPort=1;
 4                 this.axMSComm2.PortOpen=true;    
 5             }
 6             catch
 7             {
 8                 cm.Msg("串口通讯失败!");
 9             }
10             finally
11             {
12 }
值得注意的是:加入两个MSComm控件,你会发现这里MSComm的默认名字是axMSComm,有点奇怪吧!

然后再在axMSComm2_OnComm 事件中加入如下代码:
if(axMSComm2.CommEvent==2)
                {
                    
this.ProEAN.Text=ProEAN.Text+axMSComm2.Input;
               }
这里是用2口扫描,这个时候一定要注意把axMSComm2 的RTSEnable这个属性设置为:1。
按道理来说这个时候应该可以进行扫描,至于其他的业务处理,就需要另外加了。
但是,我觉得C#的支持不好就体现在这里。大多数的情况下扫描的很好,但是有的时候老是连不上,老是catch,真搞不明白!



posted @ 2006-04-04 07:53 落拓孤鸿 阅读(1604) 评论(2) 编辑