注册 登录
编程论坛 VFP论坛

求助,rs232数据发送问题

chen27288227 发布于 2022-07-29 11:31, 2864 次点击
现有一台led显示屏,只显示数字,通过串口和电脑相连,vfp可以发送数据让它显示吗?具体怎么实现呢?它的数据格式要求如图:
只有本站会员才能查看附件,请 登录
30 回复
#2
mywisdom882022-07-29 15:29
这个吹斑竹,应该会
#3
吹水佬2022-07-29 16:00
VFP可以写串行通信,MS也有COMM控件,只是要有设备才可测试。
可以搜索本版块“串行”的帖子参考
#4
my23182022-07-29 18:05
以下是引用吹水佬在2022-7-29 16:00:10的发言:

VFP可以写串行通信,MS也有COMM控件,只是要有设备才可测试。
可以搜索本版块“串行”的帖子参考

#5
chen272882272022-07-29 19:07
回复 3楼 吹水佬
只有本站会员才能查看附件,请 登录

我用timer定时向串口发送数据,LED屏的接收灯闪烁,说明它能收到,通信是正常的,但是不能正常显示,可能是数据格式错误造成的。麻烦大家看看哪些地方错误。
#6
hu9jj2022-07-29 20:34
用逻辑分析仪抓取信号看看是否符合要求。
#7
chen272882272022-07-30 10:34
回复 6楼 hu9jj
逻辑分析仪,没用过,百度了一下,没搞明白
#8
csyx2022-07-30 12:19
最后两条改下试试:
sendata3 = Oh + sendData3_
ComWrite(hCom1 , sendData3) &&向串口输出
#9
chen272882272022-07-30 12:53
以下是引用csyx在2022-7-30 12:19:18的发言:

最后两条改下试试:
sendata3 = Oh + sendData3_
ComWrite(hCom1 , sendData3) &&向串口输出

感谢支招!经测试LED屏和之前一致,只闪烁信号灯
#10
my23182022-07-30 17:34
回复 5楼 chen27288227
格式不对,串口本身就有格式协议的,两端一致即可,不用考虑。直接按照通信协议发送数据即可。
#11
chen272882272022-07-30 18:44
以下是引用my2318在2022-7-30 17:34:24的发言:

格式不对,串口本身就有格式协议的,两端一致即可,不用考虑。直接按照通信协议发送数据即可。

谢谢!
你说的“直接按照通信协议发送数据"是直接发送二进制字符串吗?能否举例说明:
比如要发送的数据为:0,那么数据的19位二进制码则为19个"0",代入示意图中三帧数据分别为:"00000000001","00000000001","00000000011".不知道我理解有没有错误。向串口发送字符串"000000000010000000000100000000011"不正确。
#12
my23182022-07-31 07:41
回复 11楼 chen27288227
不知你的大屏是哪个厂家的,以前我用托利多的,直接两边串口设置一下,按照托利多电子秤的数据格式发送数据就行了。具体协议可以咨询大屏厂家。
#13
吹水佬2022-07-31 07:46
回复 11楼 chen27288227
所指的二进制字符串是否是VFP的“二进制字符”,参考VFP的CREATEBINARY()
#14
chen272882272022-07-31 09:18
以下是引用吹水佬在2022-7-31 07:46:01的发言:

所指的二进制字符串是否是VFP的“二进制字符”,参考VFP的CREATEBINARY()

CREATEBINARY()与0h+"二进制字符串"结果一致。
#15
chen272882272022-07-31 09:35
以下是引用my2318在2022-7-31 07:41:12的发言:

不知你的大屏是哪个厂家的,以前我用托利多的,直接两边串口设置一下,按照托利多电子秤的数据格式发送数据就行了。具体协议可以咨询大屏厂家。

大屏上连个字都没有,也就不知道厂家了。不过232方式连上仪表是可以显示数字的。
#16
my23182022-07-31 09:54
回复 15楼 chen27288227
你的仪表是哪个厂家的?有仪表的说明书吗?
#17
my23182022-07-31 09:57
回复 15楼 chen27288227
串口就是232方式
#18
chen272882272022-07-31 10:12
以下是引用my2318在2022-7-31 09:57:24的发言:

串口就是232方式

柯力仪表,xk3118k9
#19
csyx2022-07-31 12:51
你的 ComOpen(...) 语句的参数怎么设置的?
#20
chen272882272022-07-31 15:29
以下是引用csyx在2022-7-31 12:51:37的发言:

你的 ComOpen(...) 语句的参数怎么设置的?

只有本站会员才能查看附件,请 登录
#21
sdta2022-07-31 15:31
if hCom1 == ""
改为
if empty(hCom1)
试试
#22
csyx2022-07-31 17:23
我也没做过COM数据通讯,我这么猜来着:
1. 协议格式 N,8,1,这样的话就是: 起始位:1 + 数据位:8 + 校验位:0 + 停止位:1 = 10,与要求的11位差一位
2. 起始位和停止位,我猜测是发送时根据协议格式自动加入的,不需要包含在发送数据中
3. 不清楚标志位是应该作为发送数据的一部分,还是停止位的一部分

照说,说明书上应该会有设置用dos命令用法,例如:mode com1: 600,N,9,1 或者 mode com1: 600,N,8,2
如果说明书上没有,又无法联系厂家客服,就只能试试各种可能的组合了

先试试直接发送固定数据:ComWrite(hCom1, chr(0)+chr(0)+chr(1))
不行再试试2个停止位:hCom1 = ComOpen(3,"600,n,8,2")


[此贴子已经被作者于2022-7-31 18:15编辑过]

#23
chen272882272022-08-01 12:14
以下是引用sdta在2022-7-31 15:31:48的发言:

if hCom1 == ""
改为
if empty(hCom1)
试试

谢谢!!端口及通讯是没问题的,因为大屏端有指示灯闪烁!

[此贴子已经被作者于2022-8-1 12:16编辑过]

#24
chen272882272022-08-01 12:15
以下是引用csyx在2022-7-31 17:23:46的发言:

我也没做过COM数据通讯,我这么猜来着:
1. 协议格式 N,8,1,这样的话就是: 起始位:1 + 数据位:8 + 校验位:0 + 停止位:1 = 10,与要求的11位差一位
2. 起始位和停止位,我猜测是发送时根据协议格式自动加入的,不需要包含在发送数据中
3. 不清楚标志位是应该作为发送数据的一部分,还是停止位的一部分

照说,说明书上应该会有设置用dos命令用法,例如:mode com1: 600,N,9,1 或者 mode com1: 600,N,8,2
如果说明书上没有,又无法联系厂家客服,就只能试试各种可能的组合了

先试试直接发送固定数据:ComWrite(hCom1, chr(0)+chr(0)+chr(1))
不行再试试2个停止位:hCom1 = ComOpen(3,"600,n,8,2")

我会逐一尝试的,谢谢!
#25
pjtyzyq2022-08-03 10:27
xk3118k9仪表通讯协议:
只有本站会员才能查看附件,请 登录
只有本站会员才能查看附件,请 登录
只有本站会员才能查看附件,请 登录


[此贴子已经被作者于2022-8-3 10:29编辑过]

#26
chen272882272022-08-06 16:02
回复 25楼 pjtyzyq
这是仪表发送数据到电脑的格式,不是发送到大屏的格式。
#27
吹水佬2022-08-07 10:03
回复 5楼 chen27288227
大屏设备厂家应该有接口开发资料和示例代码。
sendData的数据格式是否正确?
只有本站会员才能查看附件,请 登录

这个二进制码的“位”是byte还是bit

[此贴子已经被作者于2022-8-7 10:05编辑过]

#28
whinda2022-08-11 01:30
你的接线是否正确?是否使用的仪器-LED的那根线,标准的9-9线市售的通常是直连的,但是国内仪器多数引脚定义是2-3,3-2,5-5,地-地(2-3交叉5直连)。
还有RS232C标准的数据,数据位标准的只有5、7、8位三个选项,不可能有超出8bit,ASCII 只能是0-255内的。你说的10位应该是指的数据报文(帧)的长度,10个ASCII字符应该是80bit
#29
whinda2022-08-11 01:36
直接发送字符,以chr(2)开头,以chr(3)结束,中间的随便编。
#30
chen272882272022-08-11 17:26
回复 29楼 whinda
还可以这样?
#31
whinda2022-08-12 00:04
RS232传的就是ASCII字符,你还想怎样?还要编码?
1