串口硬件设备与WINx64下不同环境的程序控制
《Direct I/O in DOSBOX for COMM serial communications with QBasic, TBasic or Pbasic》笔记中记录了在DOSBOX砂箱下,对串口编程的DOS程序和WINx16程序,以及让WINx16位程序在WINx64下直接运行的方法。接下来是分离DOS程序与主机通讯程序,让它们互相配合,各尽其职,将边缘计算与现代化展现与网络结合起来,从而形成可发挥作用的系统。
对于局部控制,ISA是优秀的工业标准总线,它不需要所谓高速SerDes串并转换,硬件控制非常透明,是老一代工业系统开发者的优选。基于ISA总线的SBC卡、CPU卡、ADC、DAC、DIO、COUNTERS、FREQUENCY、PWM、NETWORK、PC-CARDS等等,几乎是应有尽有,非常完善。如果把它们聚集到母板上,将DOS和其下的串口直接端口操作程序放上去,再通过串行总线与WIN64、LINUX64按指令交互,就是基本的简单系统。为了让它更清晰,不妨把它放在一个壳子里,让黑壳子开机就自己运行,无需显示等任何其它辅助设备。
全套局部系统的组成应包括:
1. 传感器和执行机构
2. 配线架和端子接入箱
3. 信号处理箱
4. 用户终端、桌面。
局部系统之间可以通过工业总线联网,RS485、HART、CAN、PROFIBUS、ETHERNET等等。这类总线几十种,我们国家也制订有相应的总线,就连现在的汽车中也使用标准总线,就不细述了,它本身就是一套值得研究和发展的领域,国内目前做得还不够好,努力空间很广阔。
有了SCADA分布式系统,只是过程处理的自动化和简单的智能化,还达不到智慧工厂要求。所以,要通过物联网将不同城市间的SCADA系统连起来,再与管理运营与生结合起来。
工业控制开发人员在工厂智慧化上的作用是非常大的,主要是在系统系统层级发力,而其它两个维度要既懂技术又清楚管理的总监,才能共同完成智慧工厂建设和之后的持续改进。《Direct I/O in DOSBOX for COMM serial communications with QBasic, TBasic or Pbasic》主要是硬件通讯内核的筑助,用户层的通讯内核也有,
典型方式:WINDOWS API, MSCOMM, SERIALPORT
遇到问题最多的是断线或受干扰中断通讯死锁问题
当发送完指令后,往往要等待寄存器数据准备好后才能读取,否则数据无效。一些控件在发送和接收时做了处理,对字节进行组装,如果在组装过程中线路中断,用户很难处理这类错误,程序就不动了。
解决方法1. 最好就是用BYTE发送、BYTE接收,自己组装指令和数据。
解决方法2. 程序死锁往往是单线程序,可在主进程中设置FLAG1,在线路数据处理部分清除FLAG1。主线程发现FLAG1很长时间或很多次不清时,则关闭通讯口,然后再打开通讯口,强制处理通讯口异常。
解决方法3. 发送数据前也设置FLAG2,接收成功后清除FLAG2,FLAG2不清除就能再发送数据。主发送和接收在FLAG2握手下进行,避免Overwrite发生。
控件的使用
MSCOMM是WINx32自带的ActiveX COM组件,VB、XE、C++Builder等,都可以Import了使用它,采取上述措施后还是宜用的。
SerialPort是VS自带的,在NET平台上直接可用,注意事项是一样的。
值得一提的是Lazarus带的SerialPort组件,还是要用它,不要费劲的调用其它COM组件,因为Lazarus是跨平台编译的,用了平台相关组件就失去了程序跨平台编译能力,是很可惜的事情。唯一遇到的问题是进程死锁产生超时错误,中断了程序运行。
找到PAS文件的237行,将ProcessMessage这个循环提前两行开始,问题就解了。
原来它是发出结束进程就在那ProcessMessage死等结束标记,不如再发结束指令再读结束标记。就像我们手工关闭窗体,一次关不了就多点几个次关闭,不要点一次就等到晚。
9600下发指令、收指令加校验,几十次至上百次指令与数据交互,稳定、迅速,中间断线断电后自动恢复交互。串口,用好了出奇迹,用不好出麻烦,是个既让人爱又让人恨的悠久存在。
串口关闭问题
Q. DELPHI2关闭主窗口或退出程序时出现异常错误
A. 因为MSCOMM.VBX的引入,退出主程序前必须先关闭它,而且要在窗体关闭前先关闭串口。做法是将它放在FormCloseQuery里面,而不是其它地方!
procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
Comm1.PortOpen := False;
end;
Q. VB3编程放在哪里比较合适
A. 放在FORM_Unload里面。VB3简化了窗体关闭过程,如此放置不会出异常的。VB4和VB6与VB3放的位置相同。
Sub Form_Unload (Cancel As Integer)
' Close the serial port.
Comm1.PortOpen = False
End Sub
Q. VB.NET编程放在哪里比较合适
A. VB.NET不像以前那么粗放,放在Dispose里同窗体一同消毁。
Private Sub Form1_Disposed(sender As Object, e As EventArgs) Handles Me.Disposed
SerialPort1.Close()
End Sub
Q. NET平台的C#上编程放在哪里合适
A. 放到Form的Designer.cs的Dispose里
Private Sub Form1_Disposed(sender As Object, e As EventArgs) Handles Me.Disposed
SerialPort1.Close()
End Sub
Q. XE C++ Builder 和 Delphi 编程放在哪里
A. 放在FormCloseQuery里
void __fastcall TForm1::FormCloseQuery(TObject *Sender, bool &CanClose)
{
if (MSComm1->PortOpen == true) {
MSComm1->PortOpen = False;}
Timer1->Enabled = false;
}
Q. Lazarus / FreePascal 编程放在哪里
A. 同 Embarcadero XE,放在FormCloseQuery里
procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: boolean);
begin
CanClose := True;
if LazSerial1.Active then
LazSerial1.Active := False; //Close serial port
end;
不论是Import的MSCOMM组件,还是自带的串口控件,均要在程序结束之前关闭串口,时序错了主程序关不掉、出现异常错误。另外特别注意,发送/接收时用For/Next,而不用Do/Loop,否则断线了进入死循环,失去自我恢复机能。不论MSCOMM还是SerialPort组件,用对了都好用。
串口硬件设备与WINx64下不同环境的程序控制相关推荐
- SylixOS与硬件设备连接问题——硬件设备串口、网口连接问题
2019独角兽企业重金招聘Python工程师标准>>> SylixOS与硬件设备连接出现的问题介绍 一般情况下,用户可以通过串口.网口与硬件设备进行交互通信,当其中某一种连接方式出现 ...
- 企业直播要如何做?硬件设备、网络环境有哪些要求?
企业直播要如何做?硬件设备.网络环境有哪些要求? 文章目录 第1部分.直播硬件设备 ├─A.电脑硬件推荐配置 └─B.选配硬件 第2部分.直播网络环境 第3部分.直播设备连接 ├─A.双机位摄像机视频 ...
- CentOS下查看电脑硬件设备属性命令
如何在linux下查看电脑硬件设备属性 # uname -a # 查看内核/操作系统/CPU信息 # head -n 1 /etc/issue # 查看操作系统版本 # ...
- linux查看电脑硬件信息,怎么在linux下查看电脑硬件设备属性和各种信息
如何在linux下查看电脑硬件设备属性 # uname -a # 查看内核/操作系统/CPU信息 # head -n 1 /etc/issue # 查看操作系统版本 # cat /proc/cpuin ...
- HPUNIX环境常用查看硬件设备信息命令小结
前段时间呢,因为工作上的关系,项目里面需要用到一些关于服务器各个环境下的查询命令,然后去网上找了下资料,整理了一下自己用到的命令放在这儿,如果有需要的朋友可以来这里看看,觉得不妥的地方可以相互沟通,如 ...
- 企业直播该如何做?硬件设备、网络环境、设备连接和观看权限等整个直播流程教程
这是一份面向直播新手的企业直播说明教程,字数较多,完整看完,可能会需要求10分钟,建议您可以[收藏],如果本文章对您有帮助,就帮助[点个赞]吧~~~ 阿酷TONY / 2023-5-12 / 原创 ...
- 搞定企业视频直播:硬件设备、直播网络环境和设备连接说明
阿酷TONY / 2022-11-22 / 原创 / 长沙 / 目录 1.直播硬件设备 2.直播网络环境 3.直播设备连接 ├─A.双机位摄像机视频直播场景 └─B.单机位摄像机视频直播场景 ...
- linux系统下,浏览器怎么调用本地硬件设备如指纹仪等。
linux系统下,浏览器怎么调用本地硬件设备如指纹仪等. 这个问题是一个同学在项目开发中遇到的问题,做的也是政府部门相关的项目,由于现在政府部门都在慢慢开始放弃windows系统改用Linux系统了, ...
- win10用什么软件测试硬件,Win10系统下硬件设备检测工具的使用方法
在win10系统中,自带有硬件设备检测工具,当电脑遇到故障的时候就可以用这个工具来检测并处理,可是许多win10系统用户并不知道要怎么使用硬件设备检测工具,接下来小编就给大家分享一下Win10系统下硬 ...
最新文章
- 如何统计博客园的个人博客访问量
- 第5章 Python 数字图像处理(DIP) - 图像复原与重建17 - 由投影重建图像、雷登变换、投影、反投影、反投影重建
- bzoj 1604: [Usaco2008 Open]Cow Neighborhoods 奶牛的邻居(切比雪夫距离+multiset贪心+并查集)
- 一、annotation
- RPM软件包管理(安装、卸载、查询、制作)
- python-opencv 图像二值化,自适应阈值处理
- 安信可nbiot模块_安信可wifi模组特征
- 王给月度BOSS队伍带来什么变化?
- python爬取墨迹天气的8月份的温度情况并发送到邮箱
- 微软紧急发布Windows XP/7 WannaCry漏洞补丁
- Win7(Win10)+Ubuntu18.04(16.04)双系统安装心得
- 今天发现了一个好网站,推荐给大家!
- 太平洋大西洋水流问题
- vsan虚拟化和共享存储服务器,恰逢其时:当VSAN遇到浪潮云海桌面一体机
- Java——快手2020校园招聘秋招笔试--[编程题]运动会
- 刚开始学egret开发,第一课 《小鸡过马路》- 绘制npc,绘制玩家控制角色,碰撞检测还不完善,嘿嘿!
- javaFX安装及使用
- SDL2.0--绘制文字
- 断网安装是什么意思_关于ADSL宽带断网掉线的几个处理办法
- 【源码分析设计模式 5】Java I/O系统中的装饰器模式