b***i 发帖数: 3043 | 1 我们给客户开发一个嵌入式硬件PLC,这个硬件里面有微处理器,可以用一个我们开发
的软件通过TCP/IP来配置,然后客户自己用Modbus来配置和读取信息。客户发现一个问
题,他们通过Modbus直接配置时间后,通过我们的软件读取,时间不一致。通过我们软
件设置后,Modbus里面显示的小时不对。
配置嵌入式的时间有两种,一种是软件启动后,自动先把嵌入式的这个UTC时间读入,
显示成本地时间。当在软件界面点击Sync,现在软件就把系统的时间(UTC)传给嵌入式。
第二种是用户提出的,在Modbus寄存器里面增加两组,一组来显示年/月/日/时/分/秒
,一种来设置年/月/日/时/分/秒,然后用一个寄存器作为出发,把设置的时间写入嵌
入式系统。这里,用户会把当地时间输入。
经过我分析发现,这个嵌入式系统没有考虑时区。软件通过Windows读时间后,向硬件
发送的是UTC的时间。客户在Modbus看到的也是UTC的时间转换成年/月/日/时/分/秒(
每个一个Modbus寄存器),和当地时间有差别。但是,用户需要的显示当地时间。
我们内部讨论,我的观点是,嵌入式需要加入时区,和夏令时因素,PC软... 阅读全帖 |
|
b***i 发帖数: 3043 | 2 我们的串口比你的 简单多了 ,没有 flowcontrol, 唯一多的是 9bit,多了个地址 位
,更像嵌入式,要不然和台式机 一样 。
我们的需求是Modbus,要实现coil, input, holding等几个,而不是全部功能。
TCP/IP首先也是Modbus,然后要能够理解JSON,返回JSON。
嵌入式设备首先要跟串口通信,我觉得可以用同步,为什么要异步?多线程每隔10毫秒
看看串口的缓冲里面有多少,读进来。Modbus规定,如果有3.5个字符的时间没有输入
,说明完成。一共不到255个字符,满了就处理。而且Modbus有CRC,不符合规定就不处
理,只记录下来。
TCP/IP更是容易,Java有个Modbus TCP的库,要是C++我岂不是要重新发明轮子?连C#
用的都是Java那个。
真是不知道难在哪里。你再给个例子? |
|
b***i 发帖数: 3043 | 3 我原来做一个项目,准备用Linux,C++11(需要多线程,std::move等特技), ASIO
standalone, JSONCPP等,主要是JSON和串口的通信,还有Modbus TCP。程序还没写几
个,不超过200行吧。但是我检验了JSONCPP可以和C++11一起用,非常方便。ASIO我也
写了演示,可以收到JSON包,并发出去回答。
后来我们买了一个公司,他们有一个系统,用boost,和LibModbus,能完成Modbus TCP,
但是多进程通信架构,通过网页配置,然后多进程通信来改变变量。而我们决定了我们
的项目还是用JSON配置,所以还是单进程多线程,不是他们的架构。那么,我们的程序
面临一个问题,是继续用C++11,还是转用boost?
他们的主力程序员可以花10%的时间在我们这个项目,而我们的程序员既没用过boost,
也没用过C++11,但是我觉得这个上手不难。如果我做,我倾向C++11。现在我不做,我
管项目,在主力不上场的情况下,两个多年经验但是多年不写代码的程序员,该用哪一
个呢?
这两个人后来一个写Java,一个写C#,应该半斤八两,都不笨,属于自... 阅读全帖 |
|
b***i 发帖数: 3043 | 4 我原来做一个项目,准备用Linux,C++11(需要多线程,std::move等特技), ASIO
standalone, JSONCPP等,主要是JSON和串口的通信,还有Modbus TCP。程序还没写几
个,不超过200行吧。但是我检验了JSONCPP可以和C++11一起用,非常方便。ASIO我也
写了演示,可以收到JSON包,并发出去回答。
后来我们买了一个公司,他们有一个系统,用boost,和LibModbus,能完成Modbus TCP,
但是多进程通信架构,通过网页配置,然后多进程通信来改变变量。而我们决定了我们
的项目还是用JSON配置,所以还是单进程多线程,不是他们的架构。那么,我们的程序
面临一个问题,是继续用C++11,还是转用boost?
他们的主力程序员可以花10%的时间在我们这个项目,而我们的程序员既没用过boost,
也没用过C++11,但是我觉得这个上手不难。如果我做,我倾向C++11。现在我不做,我
管项目,在主力不上场的情况下,两个多年经验但是多年不写代码的程序员,该用哪一
个呢?
这两个人后来一个写Java,一个写C#,应该半斤八两,都不笨,属于自... 阅读全帖 |
|
b***i 发帖数: 3043 | 5 PLC没有磁盘,只有内存来供客户端提取数据,包括压强,温度的数据,同时,客户可
能也读取时间戳。PLC有一个RTC,关机也会运行。不过,这个PLC在当地安装后不会移
动。
从客户的角度来考虑,似乎他们只需要当地时间。有的客户所在地有夏令时,有的没有
。配置的时候,基本上是当地人配置,就是距离很近,不会需要从其他国家配置。如果
从其他国家配置,这个时区的问题就麻烦大了。
现在看来,我们这个领域的客户还没有意识到时区在时间戳里的作用,所以在设计
Modbus寄存器表的时候没有时区这个信息,他们只按排了年月日时分秒这些参数。那么
,似乎我们改动软件只配置这些就可行。
但是,如果客户有夏令时,他们的客户端PC可能会改时间, 时间不对怎么办?这个我
们以前的嵌入式系统就是没考虑这个事情,时间随时让客户改。就是说,如果夏令时到
了,他们就把小时改一下即可。那样,从Modbus读的小时就和PC又对上了。 |
|
|
W****i 发帖数: 515 | 7 Immediate needs:
Software Engineer:
MS or above
Electrical engi or computer sci
Knows wireless, optical, CAN, BACNet, Modbus, TCPIP
Benefit: full
Location: AL
Send resume or inquiry internal email or message. |
|
f******D 发帖数: 332 | 8 北加州 Windsor 公司支持h1b 绿卡 new grad, entry level welcome
1. Mechanical Engineer Machine Design and Automation
JOB SITE: WINDSOR, California
Job Summary
Responsible for Automation and Machine design.
Tasks may include but are not limited to:
Design precision mechanisms and structures for accuracy, performance, and
manufacturability
Design with integration of cameras, lighting, and 3D sensors for measurement
Design robotics and machines for automation and integration
Design custom automation solutions... 阅读全帖 |
|
f******D 发帖数: 332 | 9 北加州 Windsor 公司支持h1b 绿卡 new grad, entry level welcome
1. Mechanical Engineer Machine Design and Automation
JOB SITE: WINDSOR, California
Job Summary
Responsible for Automation and Machine design.
Tasks may include but are not limited to:
Design precision mechanisms and structures for accuracy, performance, and
manufacturability
Design with integration of cameras, lighting, and 3D sensors for measurement
Design robotics and machines for automation and integration
Design custom automation solutions... 阅读全帖 |
|
b***i 发帖数: 3043 | 10 Zynq CPU,十个串口,一个显示设备,320x240 24色,需要直接控制或者通过显示芯片
控制
要求,TCP/IP, 串口通信,存盘。
Java程序要进行串口的发送,和接受,TCP/IP的listen, connect, receive, send等。
还要把一个BufferedImage的内容显示到显示器,不需要各类鼠标和键盘的点击等。所
以,按钮输入想通过JNI和C++程序的GPIO查询获得。
C++程序负责向显示设备的Linux驱动程序输出,负责串口的发送和接收,并通知Java串
口数据完成。我可能每10毫秒查一次,看有没有字符输入,没有了就把所有的内容发给
Java。
Java的Modbus和TCP/IP都比较成熟,而如果用C++要用Boost.asio
同时,这些串口是在FPGA里面实现的,用Xilinx Vivado加入,目的是Linux能够控制这
些串口 |
|
b***i 发帖数: 3043 | 11 看你比较多的看法,给你个整体概念:
原来系统16MHz,16M内存能够对付,要求10M以太网,FAT16。现在新的系统为什么要改这
么多呢?一个是需求改成Gigabit Ethernet,无线,一个是要对未来的设备能够容易增
加功能,还要面向未来。
原来的系统用C,自己写没有OS的TCP/IP(库是买的),自己发明二进制的协议,和PC
控制软件(MFC)一起使用。PC上直接改变嵌入式的所有变量。就是一个struct,里面内
容全部被这个二进制协议改变。这样要写一个协议调试软件,解释这个二进制到底什么
意思,在开发阶段帮助解决bug。电路方面自己画包括RAM,Flash, Ethernet Phy在内的
所有电路。应该说,这个设备用了10年才完善起来。
现在的要求是1年内完成从电路到软件的要求。所以稳定,快速开发才是最重要的。所
以,我直接买板子,上面有了千兆以太网,有了SDIO接口(64G都可以用,属于SDXC),
内存1G。为什么1G呢? 因为1G DDR3内存比512M便宜,而Xilinx最多只能用1G。然后使
用Linux把TCP/IP, USB,Wi-Fi全都搞定。但是还剩下显... 阅读全帖 |
|
b***i 发帖数: 3043 | 12 刚才听说不止要改包的内容,根据Modbus协议,以前在一起的寄存器现在不在一起了,
那么以前的包如果是要读多个连续寄存器现在要改成多个包了。
还不如我用Java重写算了。 |
|