以文本方式查看主题 - Foxtable(狐表) (http://foxtable.com/bbs/index.asp) -- 专家坐堂 (http://foxtable.com/bbs/list.asp?boardid=2) ---- [求助]关于win系统平板串口 (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=141145) |
-- 作者:工匠 -- 发布时间:2019/9/22 17:52:00 -- [求助]关于win系统平板串口 老师好: 请教下,请帮看看 一.窗口有没有什么控件可以下拉选择年+月+日+小时+分,进行选择录入(现在DateTimePicker控件选择的只能是年月日这段,后面小时+分无法选择) 二.平板窗口按钮启动串口设备(平板电脑自带二维码扫描头,不是普通拍照摄像头)扫码,接收数据后执行查询+指定赋值 (备注:各事件代码每行后都加上MessageBox.Show("1--X") 都有提示代码有被执行(显示相应数字提示窗口),逐一提示点确定,最后能实现 接收数据后执行查询+查询结果行列指定赋值) 由于带扫码功能平板电脑没有安装注册正式版,试用版项目+商业版项目复制到平板电脑可以打开项目,但均不支持设备监视器功能,只能在电脑设计,前后反复发布60多次,拷贝到平板电脑测试,得出结果。 在此感谢狐表官方及老师们,以及那些耐心帮助我的狐友,这个功能的实现,感觉比现在某you的手持终端功能还实用......基本实现了扫码进出+结存/各环节扫码报工/扫码检验参数填报/扫码订单展开原始10多个环节自动汇总追踪及最新汇总动态/扫码多环节30多个时间节点自动登录赋值......并能做到快速\'实时\'更新! 还需问题优化需求:在点击窗口 扫描赋值 按钮对准二维码扫描,点击1次就能对状态时间进行当前时间赋值,(现在需要点击2次,如果在设备监视器加代码:Forms("串口").Controls("TextBox11").Text = e.Port.ReadExisting() \'获取数据,窗口扫描赋值按钮就不能加e.Form.Controls("TextBox11").Value = s \'\'代码,2个地方只能1个地方加获取显示代码,这2种方法任选1种都可以) 1.项目AfterOpenProject 事件 Ports.Add("COM4") 2.设备监视器DataReceived事件 Forms("串口").Controls("TextBox11").Text = e.Port.ReadExisting() \'获取数据 Dim btn As WinForm.Button = Forms("串口").Controls("单号查询") \'获取新的数据后进行单号查询按钮动作(次处如果不加代码,在窗口按钮扫描赋值添加e.Form.Controls("TextBox11").Value = s ,需要点击扫描赋值 对准二维码扫描 2次 ,TextBox11才能读取显示数据) btn.PerformClick() 3.窗口 单号查询 Click事件 Dim str As String = e.Form.controls("textbox11").text If str > "" Then Dim filter As String = "1=1" For Each s As String In str.Split("*") filter &= " and 生产单号 like \'%" & s & "%\'" Next DataTables("表A").loadfilter= filter DataTables("表A").load Else DataTables("表A").loadfilter= "1=2" DataTables("表A").load End If 4.窗口 扫描赋值 Click事件 e.Form.Controls("TextBox11").Value = Nothing \'清空原先数据 forms("串口").Controls("TextBox11").Select \'定位到录入位置 Ports.Add("COM4") \'开启 Ports("COM4").Open() \'打开串口 Dim hexa(3) As Byte hexa(0)=&H16 hexa(1)=&H54 hexa(2)=&H0d Ports("COM4").Write(hexa,0,3) Dim s As String s=Ports("COM4").ReadExisting() \'从COM4接收文字数据 MessageBox.Show("接收串口数据") \'这里加上检查代码是否被执行,弹窗点确定后,就全部正常,点扫描赋值 按钮1次可以实现需求功能(所有代码有执行到) 备注:猜想,代码执行到这里能不能设定停几秒钟(可调整)后再执行后面代码. 或是设置2秒钟(可调整)后自动关闭这个代码执行检查弹窗(弹窗能否和字体都加大,再加个需要的图片) \'e.Form.Controls("TextBox11").Value = s \'TextBox11控件数据等于接收的数据(如果设备监视器加上读取显示接收数据代码后,这里不屏蔽,点击 扫描赋值按钮 对准二维码扫描 TextBox11控件无法显示接收数据,如果设备监视器代码屏蔽,需要点击 扫描赋值按钮 对准二维码扫描2次,TextBox11控件才能显示读取当前二维码数据,点击 扫描赋值按钮 对准二维码扫描 1次 ,TextBox11读取显示的还是上一次的扫码数据) \' Dim btn As WinForm.Button = Forms("串口").Controls("单号查询") \'执行点击 单号查询 按钮进行查询 btn.PerformClick() If Tables("表A").Current IsNot Nothing Then \'先判断是否有行 For i As Integer = CurrentTable.TopPosition To CurrentTable.BottomPosition CurrentTable.Rows(i)("状态时间") = now() \'赋值当前时间(点击扫描赋值按钮 对准二维码扫描1次TextBox11可以显示接收数据,但是状态时间没有得到当前时间赋值,要需要点扫描赋值码按钮 对准二维码扫描 2次,状态时间才能得到当前时间赋值)) Next End If Tables("表A").save \'保存 谢谢! [此贴子已经被作者于2019/9/22 20:01:58编辑过]
|
-- 作者:有点蓝 -- 发布时间:2019/9/22 21:14:00 -- 目前只有DateTimePicker控件,暂时没有办法选择时分秒,只能手工录入,或者使用代码赋值。 至于其他问题,我看了2遍,愣是没看懂需要解决什么
|
-- 作者:工匠 -- 发布时间:2019/9/23 0:33:00 -- 谢谢蓝老师,可能描述的不够简单清楚,现重新补充备注一下 需要功能:需要触摸点击1次"扫描赋值"对准二维码扫描,实现从串口接收数据+接收的数据显示在textbox11控件+后台查询定位串口数据对应的表A生产单号+将定位的生产单号行状态时间列赋值当前时间 (目前在每段代码后加上检查,每段代码检查都有通过,并且能实现从串口接收数据+接收的数据显示在textbox11控件+根据控件值后台查询定位串口数据对应的表A生产单号+将定位的生产单号行状态时间列赋值当前时间,但是去掉检查代码就无法对状态时间赋值,要触摸2次"扫描赋值"才可以) 谢谢!
[此贴子已经被作者于2019/9/23 7:21:34编辑过]
|
-- 作者:有点蓝 -- 发布时间:2019/9/23 9:03:00 -- 试试 方法1,程序等待2秒再接收 e.Form.Controls("TextBox11").Value = Nothing \'清空原先数据 forms("串口").Controls("TextBox11").Select \'定位到录入位置 Ports.Add("COM4") \'开启 Ports("COM4").Open() \'打开串口 Dim hexa(3) As Byte hexa(0)=&H16 hexa(1)=&H54 hexa(2)=&H0d Ports("COM4").Write(hexa,0,3) application.doevents System.Threading.Thread.Sleep(2000) Dim s As String s=Ports("COM4").ReadExisting() \'从COM4接收文字数据 方法2、到设备监视器里接收:http://www.foxtable.com/webhelp/topics/1967.htm 把查询相关的代码移到DataReceived事件 Forms("串口").Controls("TextBox11").Text = e.Port.ReadExisting() \'获取数据 Dim btn As WinForm.Button = Forms("串口").Controls("单号查询") btn.PerformClick() |
-- 作者:工匠 -- 发布时间:2019/9/23 13:40:00 -- 谢谢老师,现在通过上午反复测试,已重新找到实际哪行代码问题 请帮看看 如何实现在显示检查结果提示弹窗后,自动关闭这个弹窗,或是优化赋值代码 在各环节加了延迟时间,也不行. 按逻辑,这种需要加一个检查环节,是没有任何作用的(只是一个代码是否执行提醒),但是却偏偏起了作用,能影响后面代码.这种情况不知道是什么原因 谢谢! [此贴子已经被作者于2019/9/23 13:51:09编辑过]
|
-- 作者:有点蓝 -- 发布时间:2019/9/23 14:03:00 -- 这种对话框窗口没有办法自动关闭。建议还是到设备监视器里接收 |
-- 作者:工匠 -- 发布时间:2019/9/23 15:32:00 -- 谢谢蓝老师,现在是在设备监视器里接收的,只是不同节点是在窗口按钮里赋值时间.时间也可以在设备监视器里赋值,时间会长一些。还有是窗口有多个节点赋值按钮(比如:扫码开始、扫码结束),在设备监视器里不知道怎么写,请老师帮做个例子 我附上原按钮事件代码,请老师看看: 窗口名:串口 窗口按钮名:扫码开始 窗口按钮名:扫码结束 表名:表A 串口 窗口 扫码开始 按钮代码 e.Form.Controls("TextBox11").Value = Nothing \'清空原先数据 forms("串口").Controls("TextBox11").Select \'定位到录入位置 Ports.Add("COM4") \'开启 Ports("COM4").Open() \'打开串口 Dim hexa(3) As Byte hexa(0)=&H16 hexa(1)=&H54 hexa(2)=&H0d Ports("COM4").Write(hexa,0,3) Dim s As String s=Ports("COM4").ReadExisting() \'从COM4接收文字数据 If Tables("表A").Current IsNot Nothing Then \'先判断是否有行 For i As Integer = CurrentTable.TopPosition To CurrentTable.BottomPosition CurrentTable.Rows(i)("开始时间") = now() \'赋值当前时间 Next End If Tables("表A").save \'保存 串口 窗口 扫码结束 按钮代码 e.Form.Controls("TextBox11").Value = Nothing \'清空原先数据 forms("串口").Controls("TextBox11").Select \'定位到录入位置 Ports.Add("COM4") \'开启 Ports("COM4").Open() \'打开串口 Dim hexa(3) As Byte hexa(0)=&H16 hexa(1)=&H54 hexa(2)=&H0d Ports("COM4").Write(hexa,0,3) Dim s As String s=Ports("COM4").ReadExisting() \'从COM4接收文字数据 If Tables("表A").Current IsNot Nothing Then \'先判断是否有行 For i As Integer = CurrentTable.TopPosition To CurrentTable.BottomPosition CurrentTable.Rows(i)("结束时间") = now() \'赋值当前时间 Next End If Tables("表A").save \'保存 设备监视器 DataReceived事件代码 Forms("串口").Controls("TextBox11").Text = e.Port.ReadExisting() \'获取数据 \'MessageBox.Show("控件接收到数据") Dim btn As WinForm.Button = Forms("串口").Controls("单号查询") \'\'\'\'获取新的数据后进行查询动作 btn.PerformClick() \'MessageBox.Show("执行查询") [此贴子已经被作者于2019/9/23 15:39:44编辑过]
|
-- 作者:有点蓝 -- 发布时间:2019/9/23 15:51:00 -- 串口 窗口 扫码开始 按钮代码 e.Form.Controls("TextBox11").Value = Nothing \'清空原先数据 forms("串口").Controls("TextBox11").Select \'定位到录入位置 Ports.Add("COM4") \'开启 Ports("COM4").Open() \'打开串口 Dim hexa(3) As Byte hexa(0)=&H16 hexa(1)=&H54 hexa(2)=&H0d Ports("COM4").Write(hexa,0,3) If Tables("表A").Current IsNot Nothing Then \'先判断是否有行 For i As Integer = CurrentTable.TopPosition To CurrentTable.BottomPosition CurrentTable.Rows(i)("开始时间") = now() \'赋值当前时间 Next End If Tables("表A").save \'保存 去掉扫码结束按钮,结束时间放到DataReceived事件处理 设备监视器 DataReceived事件代码 Forms("串口").Controls("TextBox11").Text = e.Port.ReadExisting() \'获取数据 \'MessageBox.Show("控件接收到数据") Dim btn As WinForm.Button = Forms("串口").Controls("单号查询") \'\'\'\'获取新的数据后进行查询动作 btn.PerformClick() If Tables("表A").Current IsNot Nothing Then \'先判断是否有行 For i As Integer = CurrentTable.TopPosition To CurrentTable.BottomPosition CurrentTable.Rows(i)("结束时间") = now() \'赋值当前时间 Next End If \'MessageBox.Show("执行查询") |
-- 作者:工匠 -- 发布时间:2019/9/23 16:23:00 -- 谢谢老师,这种单个环节时间节点在监视器里赋值的,昨天已经测试过了,在窗口触摸这个扫码结束按钮是可以实现读取串口数据+接收串口数据+控件显示串口接收的数据+查询+对查询出的行结束时间赋值的。实际情况是:窗口里有20个按钮需要对不同环节时间节点赋值(等于1个单号有20个时间列需要在不同的时间赋值当时触摸按钮的时间,业务过程时间节点),那么就要把这20个按钮赋值代码都要加到设备监视器代码里,窗口里这20个赋值按钮要还存在,我在窗口触摸扫码开始按钮,就从设备监视器找到扫码开始这段代码执行开始时间赋值,我在窗口触摸扫码结束按钮,就从设备监视器找到扫码开始这段代码执行结束时间赋值,(这个开始和结束之间,还有18个流程过程的开始和结束),这样就涉及到我在窗口触摸的那个按钮,在设备监视器就找出那段对应代码执行赋值。如果这种能实现,就解决了在窗口按钮不能触摸扫码结束1次就实现读取串口数据+接收串口数据+控件显示串口接收的数据+查询+对查询出的行结束时间时间赋值的问题了。(如果能优化那个按钮时间赋值是最好的体验效果) 还有这两天要解决的核心问题其实就1个(类),就是现在这个扫码开始窗口按钮代码不能对开始时间赋值这一类(个)问题。 请老师再帮看看,万分感谢!
[此贴子已经被作者于2019/9/23 16:35:08编辑过]
|
-- 作者:有点蓝 -- 发布时间:2019/9/23 16:32:00 -- 那就这样有没有问题: 串口 窗口 扫码开始 按钮代码 e.Form.Controls("TextBox11").Value = Nothing \'清空原先数据 forms("串口").Controls("TextBox11").Select \'定位到录入位置 Ports.Add("COM4") \'开启 Ports("COM4").Open() \'打开串口 Dim hexa(3) As Byte hexa(0)=&H16 hexa(1)=&H54 hexa(2)=&H0d Ports("COM4").Write(hexa,0,3) If Tables("表A").Current IsNot Nothing Then \'先判断是否有行 For i As Integer = CurrentTable.TopPosition To CurrentTable.BottomPosition CurrentTable.Rows(i)("开始时间") = now() \'赋值当前时间 Next End If Tables("表A").save \'保存 串口 窗口 扫码结束 按钮代码 e.Form.Controls("TextBox11").Value = Nothing \'清空原先数据 forms("串口").Controls("TextBox11").Select \'定位到录入位置 Dim s As String s=Ports("COM4").ReadExisting() \'从COM4接收文字数据 e.Form.Controls("TextBox11").Value = s If Tables("表A").Current IsNot Nothing Then \'先判断是否有行 For i As Integer = CurrentTable.TopPosition To CurrentTable.BottomPosition CurrentTable.Rows(i)("结束时间") = now() \'赋值当前时间 Next End If Dim btn As WinForm.Button = Forms("串口").Controls("单号查询") \'\'\'\'获取新的数据后进行查询动作 btn.PerformClick() Tables("表A").save \'保存 去掉设备监视器 DataReceived事件代码 |