
?记得它好像是用char数组做发送缓冲的,要求结尾必须是“\0”,也就是十六进制的零,你却用byte类型,末尾还不加零(缓冲区长度还差一个字节呢),是否报错,需要听天由命——因为COMM1的那发送函数会拼命访问你缓冲区后的字节(那里不属于你的缓冲区范围之内),期待找到一个“0”来结束。
Delphi的语法对数据类型限制很严,需要你很仔细才行,许多数据类型不是简单类型强制转换就能解决问题的。
========================
抱歉前面没注意看参数,WriteCommData()内第二参数是数据长度,应该不是问题。估计你的问题很可能是与你关闭串口
的时机和方式关。
串口控件,一般内置一个线程,主要负责监视接收数据,以及从(控件内部的)发送队列里取数据去执行发送行为。在你程序关闭前,你应该先可靠中止这线程,然后再退出程序,这依靠成员方法StopComm()来实现,如果你没做好,在释放Comm控件后线程还在运行(控件被释放与线程是否存在和执行无关!),那么线程内还在访问控件已经被释放的某资源(一般是指针指向的某内存),那就产生你这样的问题。
请这样仔细检查:释放控件的代码有几处,在什么时候做;调用StopComm()的代码有几处,在什么时候做;二者是否遵循先关闭再释放的严格逻辑。如果没显式调用StopComm(),那也很可能引起你的问题——StopComm()内部是必须等待线程结束才返回的,因此安全,而程序退出控件直接被自动释放是不行的。太阳雨多年积攒极其珍贵的原创Delphi串口通信
技术资料V30(450M)
1Delphi串口通信编程源码240个,多种行业多种应用
2Delphi串口通信技术文章54篇,详尽地对VB串口通信的诠释
3Delphi串口通信电子书籍9部,工业通信名家著作,经典细致
4Delphi串口通信控件53个,简化串口通信编码,提高开发效率
5OSI网络模型教程48M,帮助你学习网络通讯基础
6串口硬件层知识资料包24M,对RS232,RS422,RS485等串行接口的完美解释
7串口调试工具80个,应用于各种串口调试与校验计算
8程序员发展类文章和书籍12部,帮助您的成长,健康和发展
9更送虚拟串口调试软件, 帮助你在没有串口的电脑上也能正常调试
你在淘宝搜索“太阳雨串口资料”就可以找到,希望可以帮助到你。
同时,还有"太阳雨VB串口资料"和"太阳雨VC串口资料"
你需要知道以下内容:
1 如何开启仪器的RS232通讯。可能是通过仪器上的按钮或者触摸屏,或者默认自动开启。
2开启RS232通讯之后仪器的通讯设置,包括波特率,数据位,停止位和奇偶校验位,根据这些信息设置Delphi上RS232通讯的参数,例如9600,n,8,1
3仪器连接在电脑上的RS232端口,通常是COM1但是有些仪器可能有特殊的驱动,或者通过USB模拟的端口,要通过设备管理器来查看具体是COM几。
4与仪器通讯的具体命令格式。例如Topcon的色度测试仪开始测试的命令是“ASFS + 回车换行”。那么你就通过Delphi程序发送相应的命令,例如通过TMSComm控件可以这样写:
MSCommOutput = "ASFS" + sLineBreak;
希望上述解答对你有帮助。


评论列表(0条)