搜索
bottom↓
回复: 46

分享一个ST语言的bison文件

[复制链接]

出0入0汤圆

发表于 2016-3-23 16:55:48 | 显示全部楼层 |阅读模式
接上一份的 flex文件,
下面是realw写的st语言的bison文件。

  1. %code top{

  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. }

  5. %code requires{

  6. #define YYLTYPE YYLTYPE
  7. typedef struct PlcSrcLocation YYLTYPE;
  8. typedef void* yyscan_t;
  9. #define YYLTYPE_IS_TRIVIAL 1
  10. }

  11. %code provides{
  12. #define YY_DECL int yylex   \
  13.     (YYSTYPE *yylval_param,YYLTYPE *yylloc_param,struct PlcCContext *context,yyscan_t yyscanner)
  14.    
  15. YY_DECL;
  16. }

  17. %code {
  18. void yyerror(YYLTYPE *loc,yyscan_t yyscanner,const char *msg);
  19. }

  20. /* Page 97,4.1,there is an example. */
  21. %param { yyscan_t yyscanner }


  22. /* Page 84 for yylex(YYSTYPE*,YYLTYPE*) */
  23. %locations
  24. %define api.pure full
  25. /* enable run-time debug */
  26. %define parse.trace
  27. /* generate the parse description file. */
  28. %verbose
  29. /* verbose error reporting, 4.7 The Error Reporting Function*/
  30. %define parse.error verbose
  31. /* LAC enable, 5.8.3 LAC*/
  32. %define parse.lac full

  33. %start pou

  34. %%

  35. pou:
  36.     %empty
  37.     {
  38.     }
  39.     | stmt_list
  40.     {
  41.     }
  42.     ;

  43. stmt_list:
  44.     statement  
  45.     {
  46.     }
  47.     | stmt_list statement  
  48.     {
  49.     }
  50.     ;

  51. statement:
  52.     ';'
  53.     {
  54.     }
  55.     |   assignment_statement
  56.     {
  57.     }
  58.     |   selection_statement
  59.     {
  60.     }
  61.     |   function_call_statement  
  62.     {
  63.     }
  64.     |   jump_statement
  65.     {
  66.     }
  67.     |   goto_label_statement
  68.     {
  69.     }
  70.     |  error_statement
  71.     {
  72.     }
  73.     ;   

  74. function_call_statement:
  75.     function_call ';'
  76.     {
  77.     };


  78. error_statement:
  79.     error    ';'
  80.     {
  81.     }
  82.     | error     ':'
  83.     {
  84.     }
  85.     ;   

  86. jump_statement:
  87.     return_statement
  88.     {
  89.     }
  90.     | goto_statement
  91.     {
  92.     }
  93.     ;

  94. return_statement:
  95.     RETURN ';'
  96.     {
  97.     }
  98.     | RETURN expression ';'
  99.     {
  100.     }
  101.     ;

  102. goto_statement:
  103.     GOTO IDENTIFIER ';'
  104.     {
  105.     }
  106.     ;

  107. goto_label_statement:
  108.     IDENTIFIER ':' statement
  109.     {
  110.     }
  111.     ;

  112. assignment_statement:
  113.     sym_variable ASSIGN expression ';'
  114.     {
  115.     }
  116.     ;

  117. selection_statement:
  118.     if_statement  
  119.     {
  120.     }
  121.     ;

  122. if_statement:
  123.     IF expression THEN stmt_list END_IF
  124.     {
  125.     }  
  126.     | IF expression THEN stmt_list elseif_stmt_list END_IF
  127.     {
  128.     }
  129.     | IF expression THEN stmt_list ELSE stmt_list END_IF
  130.     {
  131.     }
  132.     | IF error END_IF
  133.     {
  134.     }
  135.     | IF expression THEN error END_IF
  136.     {
  137.     }
  138.     ;

  139. elseif_stmt_list:
  140.     elseif_statement  
  141.     {
  142.     }
  143.     | elseif_stmt_list elseif_statement
  144.     {
  145.     }
  146.     ;

  147. elseif_statement:
  148.     ELSIF expression THEN stmt_list
  149.     {
  150.     }
  151.     ;

  152. expression:
  153.     bitwise_or_expression
  154.     {
  155.     }
  156.     ;

  157. bitwise_or_expression:
  158.     bitwise_xor_expression
  159.     {
  160.     }
  161.     | bitwise_or_expression OR bitwise_xor_expression
  162.     {
  163.     }
  164.     ;

  165. bitwise_xor_expression:
  166.     bitwise_and_expression
  167.     {
  168.     }
  169.     | bitwise_xor_expression XOR bitwise_and_expression
  170.     {
  171.     }
  172.     ;

  173. bitwise_and_expression:
  174.     equality_expression
  175.     {
  176.     }
  177.     | bitwise_and_expression '&' equality_expression
  178.     {
  179.     }
  180.     | bitwise_and_expression AND equality_expression
  181.     {
  182.     }
  183.     ;

  184. equality_expression:
  185.     relation_expression
  186.     {
  187.     }
  188.     | equality_expression '=' relation_expression
  189.     {
  190.     }
  191.     | equality_expression NE_OP relation_expression
  192.     {
  193.     }
  194.     ;

  195. relation_expression:
  196.     additive_expression
  197.     {
  198.     }
  199.     | relation_expression '<' additive_expression
  200.     {
  201.     }
  202.     | relation_expression '>' additive_expression
  203.     {
  204.     }
  205.     | relation_expression LE_OP additive_expression
  206.     {
  207.     }
  208.     | relation_expression GE_OP additive_expression
  209.     {
  210.     }
  211.     ;

  212. additive_expression:
  213.     multiplication_expression
  214.     {
  215.     }
  216.     | additive_expression '+' multiplication_expression
  217.     {
  218.     }
  219.     | additive_expression '-' multiplication_expression
  220.     {
  221.     }
  222.     ;

  223. multiplication_expression:
  224.     exp_expression
  225.     {
  226.     }
  227.     | multiplication_expression '*' exp_expression
  228.     {
  229.     }
  230.     | multiplication_expression '/' exp_expression
  231.     {
  232.     }
  233.     | multiplication_expression MOD exp_expression
  234.     {
  235.     }
  236.     ;

  237. exp_expression:
  238.     unary_expression
  239.     {
  240.     }
  241.     | exp_expression EXP_OP unary_expression
  242.     {
  243.     }
  244.     ;

  245. unary_expression:
  246.     primary_expression
  247.     {
  248.     }
  249.     | unary_operator primary_expression
  250.     {
  251.     }
  252.     ;

  253. unary_operator:
  254.     '-'         
  255.     {
  256.     }
  257.     | NOT      
  258.     {
  259.     }
  260.     | '+'      
  261.     {
  262.     }
  263.     ;

  264. primary_expression:
  265.     literal         
  266.     {
  267.     }
  268.     | paren_expr
  269.     {
  270.     }
  271.     | sym_variable         
  272.     {
  273.     }
  274.     | function_call         
  275.     {
  276.     }
  277.     ;        

  278. paren_expr:
  279.          '(' expression ')'
  280.     {
  281.     };

  282. literal:
  283.     TYPE_PREFIX LITERAL_VALUE
  284.     {
  285.     }
  286.     | LITERAL_VALUE
  287.     {
  288.     };

  289. sym_variable:
  290.     IDENTIFIER
  291.     {
  292.     }
  293.     | sym_variable '.' IDENTIFIER
  294.     {
  295.     }
  296.     | sym_variable '[' expression  ']'
  297.     {
  298.     }
  299.     | sym_variable '[' error ']'
  300.     {
  301.     }
  302.     | sym_variable '.' error
  303.     {
  304.     }
  305.     ;
  306.         
  307. function_call:
  308.     IDENTIFIER '(' parameter_list ')'
  309.     {
  310.     }
  311.     ;

  312. parameter_list:
  313.     %empty
  314.     {}
  315.     | parameter_init
  316.     {
  317.     }
  318.     | parameter_list ',' parameter_init
  319.     {
  320.     }
  321.     ;

  322. parameter_init:
  323.     IDENTIFIER ASSIGN expression
  324.     {
  325.     }
  326.     | error
  327.     {
  328.     }
  329.     ;

  330. %%

  331. void yyerror(YYLTYPE *loc,yyscan_t yyscanner,const char *msg){
  332. }
复制代码


已经经过了基本测试。

以上。                                realw

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

发表于 2016-3-23 17:13:44 | 显示全部楼层
我敢打赌95%以上的电工不懂 lex 和 yacc。

出0入0汤圆

 楼主| 发表于 2016-3-23 19:30:05 | 显示全部楼层
mangocity 发表于 2016-3-23 17:13
我敢打赌95%以上的电工不懂 lex 和 yacc。

。 。 。 。 。 。 。 。 。

出0入0汤圆

 楼主| 发表于 2016-3-23 19:56:35 | 显示全部楼层
mangocity 发表于 2016-3-23 17:13
我敢打赌95%以上的电工不懂 lex 和 yacc。

不懂就一起学习被。

出0入0汤圆

发表于 2016-3-29 12:01:10 | 显示全部楼层
正是我需要的。我参考beremiz也在搞!

出0入0汤圆

发表于 2016-3-29 12:42:29 来自手机 | 显示全部楼层
mangocity 发表于 2016-3-23 17:13
我敢打赌95%以上的电工不懂 lex 和 yacc。

做编译器的工作很少,一般只有做IC的公司才有吧?

出0入0汤圆

 楼主| 发表于 2016-3-29 21:11:29 | 显示全部楼层
gpfrank 发表于 2016-3-29 12:01
正是我需要的。我参考beremiz也在搞!

直到 这种转成C,然后再调用GCC的做法有没有成熟的案例?

直接来说,这种方案系统复杂度太高了。

出0入0汤圆

发表于 2016-3-29 22:37:24 | 显示全部楼层
realw 发表于 2016-3-29 21:11
直到 这种转成C,然后再调用GCC的做法有没有成熟的案例?

直接来说,这种方案系统复杂度太高了。 ...

beremiz不就是这个架构吗?

出95入8汤圆

发表于 2016-3-30 09:14:05 | 显示全部楼层
realw 发表于 2016-3-29 21:11
直到 这种转成C,然后再调用GCC的做法有没有成熟的案例?

直接来说,这种方案系统复杂度太高了。 ...

CoDeSys  就是如此啊

出0入0汤圆

 楼主| 发表于 2016-3-30 11:55:16 | 显示全部楼层
本帖最后由 realw 于 2016-3-30 14:02 编辑
zzsczz 发表于 2016-3-30 09:14
CoDeSys  就是如此啊


我不是说这种方案行不通,而是认为这种方案的系统复杂度有点高。

因为随着开发的进行,设计可能会过于依赖第三方编译器的内部机制,而第三方通用编译器的复杂度
通常都会比较高,这会令整个系统的复杂度上升的比较快。而复杂度是软件最大的敌人。

出95入8汤圆

发表于 2016-3-30 13:14:42 | 显示全部楼层
realw 发表于 2016-3-30 11:55
我不是说这种方案不好,而是认为这种方案的系统复杂度有点高。

因为随着开发的进行,设计可能会过于依赖 ...

把规范、ABI、API和虚拟机做好 。(一千个读者眼中有一千个哈姆雷特,一千个电工解读 iec标准,结果没一千个,百八十个是有的)

系统级的软件 摆脱不了编译器的,甚至是编译器 将就软件。

出0入0汤圆

 楼主| 发表于 2016-3-30 13:34:39 | 显示全部楼层
本帖最后由 realw 于 2016-3-30 13:44 编辑
zzsczz 发表于 2016-3-30 13:14
把规范、ABI、API和虚拟机做好 。(一千个读者眼中有一千个哈姆雷特,一千个电工解读 iec标准,结果没一 ...


把规范、ABI、API和虚拟机做好 ,和选择设计方案没有关系。这些是问题,无论何种方案都要解决。

他们两家编译C语言一定是调用第三方的编译器,自己再做一个C编译器这种方案就没有意义了。

我认为调用第三方的C编译器就是风险最高的部分,可能会比较快的出产品,但是第三方的C编译器
的复杂度会大大增加整个系统的复杂度。而方案的选择是整个设计中最重要的部分,因为它的影响会
从产品第一版发布到产品重写为止。某种意义上说,架构就是程序的文化。

出0入0汤圆

 楼主| 发表于 2016-3-30 13:36:41 | 显示全部楼层
gpfrank 发表于 2016-3-29 22:37
beremiz不就是这个架构吗?

我还没看过beremiz,我想问一下beremiz的C编译器用的是什么呢?

出0入0汤圆

发表于 2016-3-31 12:09:19 | 显示全部楼层
realw 发表于 2016-3-30 13:36
我还没看过beremiz,我想问一下beremiz的C编译器用的是什么呢?

这个要看你平台了。

如果你用WINDOWS,那就用MINGWIN,
如果你用LINUX,就用GCC.
我是用的YAGATO

出0入0汤圆

发表于 2016-3-31 12:11:39 | 显示全部楼层
realw 发表于 2016-3-30 13:34
把规范、ABI、API和虚拟机做好 ,和选择设计方案没有关系。这些是问题,无论何种方案都要解决。

他们两 ...

跟人觉得,重复造轮子,你能造得过GCC或者C LANG吗?
可能BUG比他们还多。
再说都是开源的

出0入0汤圆

发表于 2016-3-31 12:13:52 | 显示全部楼层
当然这东西个人玩玩可以,
真的做产品,算了!大公司做做还可以,投入量,不是个人或者小公司玩得起锝。呵呵!

出95入8汤圆

发表于 2016-3-31 15:18:47 来自手机 | 显示全部楼层
gpfrank 发表于 2016-3-31 12:13
当然这东西个人玩玩可以,
真的做产品,算了!大公司做做还可以,投入量,不是个人或者小公司玩得起锝。呵 ...

自己不玩,不要妨碍别人玩。

玩也是一种学习啊。

看别人玩也是学习。

出0入0汤圆

 楼主| 发表于 2016-3-31 19:06:19 | 显示全部楼层
本帖最后由 realw 于 2016-3-31 19:07 编辑
gpfrank 发表于 2016-3-31 12:11
跟人觉得,重复造轮子,你能造得过GCC或者C LANG吗?
可能BUG比他们还多。
再说都是开源的 ...


我觉得,如果方案选择使用GCC或者LLVM作为编译器后端,你就不仅仅是使用这个工具了[当然,仅仅是使用也有很多坑],很多时候需要理解工具。

我认为学习GCC或者LLVM的难度高于自己做解释器,而且把一个庞然大物整合进自己的系统,想想脑袋就很大。最终没采用codesys的方案。

出0入0汤圆

 楼主| 发表于 2016-3-31 19:22:09 | 显示全部楼层
附件是我的ST语言的规格说明,也是我对于IEC61131-3ST语言的理解。

继续前行。

有一张图片转成PDF时丢失了.

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2016-3-31 21:00:45 来自手机 | 显示全部楼层
zzsczz 发表于 2016-3-31 15:18
自己不玩,不要妨碍别人玩。

玩也是一种学习啊。

不知道哪里妨碍别人玩了?

出0入0汤圆

发表于 2016-3-31 21:03:06 来自手机 | 显示全部楼层
realw 发表于 2016-3-31 19:06
我觉得,如果方案选择使用GCC或者LLVM作为编译器后端,你就不仅仅是使用这个工具了[当然,仅仅是使用也有 ...

如果转换成的目标不是c,而是虚拟机,再用解释器,个人觉得肯定比用gcc好控制!
用gcc我也只是玩玩而已!毕竟beremiz也还只是个框架!让人学习用的!

出0入0汤圆

 楼主| 发表于 2016-3-31 21:46:50 | 显示全部楼层
本帖最后由 realw 于 2016-4-1 09:54 编辑
gpfrank 发表于 2016-3-31 21:03
如果转换成的目标不是c,而是虚拟机,再用解释器,个人觉得肯定比用gcc好控制!
用gcc我也只是玩玩而已! ...


是的,这就是我选择不编译成C的原因。
毕竟主要精力需要放在IEC61131-3上,这个是做出来给自动化应用工程师用的。

我看过KW的方案,他们的方案是

KW --> CIL --> machine code

后端使用的是 MONO的AOT。

出0入0汤圆

发表于 2016-4-1 08:23:53 | 显示全部楼层
本帖最后由 gpfrank 于 2016-4-1 08:29 编辑
realw 发表于 2016-3-31 21:46
是的,这就是我选择不编译成C的原因。
毕竟主要精力需要放在IEC61131-3上,这个是自动化应用工程师最常用 ...


参加过KW的研讨会,也了解他们的运行模式。
只知道他们用的是AOT技术,至于是不是MONO就不清楚了。而且似乎他还关闭了GC的功能。
通过AOT加无GC来克服CLR的实时性问题。

除BISON和FLEX。 我很想试试ANTLR。
不过我编译原理学的不是很好,所以还在学习中。

.NETMF现在也有一个分支,也再考虑提高速度。

出0入0汤圆

 楼主| 发表于 2016-4-1 09:53:24 | 显示全部楼层
gpfrank 发表于 2016-4-1 08:23
参加过KW的研讨会,也了解他们的运行模式。
只知道他们用的是AOT技术,至于是不是MONO就不清楚了。而且似 ...

如果打算学习编译原理,可以考虑coursera上的斯坦福大学的Compilers课程,以及Automata课程。其中自动机课程我已经拿到证书了。
不过我觉得这是一个交叉领域,61131-3也十分重要。

出95入8汤圆

发表于 2016-4-1 19:31:24 | 显示全部楼层
本帖最后由 zzsczz 于 2016-4-1 19:39 编辑
realw 发表于 2016-3-31 19:06
我觉得,如果方案选择使用GCC或者LLVM作为编译器后端,你就不仅仅是使用这个工具了[当然,仅仅是使用也有 ...


同意。

ST 规范 要比C  “呆板” ,用错的机率小 ;不过 规范 是一码事 ,实现 就是另外一回事了  。

BTW 编译原理学习笔记能否共享?

出0入0汤圆

 楼主| 发表于 2016-4-2 13:29:58 | 显示全部楼层
zzsczz 发表于 2016-4-1 19:31
同意。

ST 规范 要比C  “呆板” ,用错的机率小 ;不过 规范 是一码事 ,实现 就是另外一回事了  。

我没做笔记,只是做完了 compiler && automata 的课后习题,参加了最终考试。

出0入0汤圆

发表于 2016-4-3 19:07:51 | 显示全部楼层
realw 发表于 2016-3-31 21:46
是的,这就是我选择不编译成C的原因。
毕竟主要精力需要放在IEC61131-3上,这个是做出来给自动化应用工程 ...

设计一个比较好的虚拟机你有什么方案呢?

出0入0汤圆

 楼主| 发表于 2016-4-3 21:11:13 | 显示全部楼层
gpfrank 发表于 2016-4-3 19:07
设计一个比较好的虚拟机你有什么方案呢?

两种类型的虚拟机:
1. 堆栈型虚拟机;
2. 寄存器型虚拟机;

堆栈型虚拟机优点是代码密度大,实现起来容易,但是性能比较差,典型的Java,C#虚拟机就是这个样子,只是后面加上了JIT。

寄存器型虚拟机,实现复杂度高,目前大规模应用的只有LUA虚拟机,性能相对较高。


虚拟机最复杂的是内存回收部分,但是在我们的系统中动态分配的需求很少,可以使用一些简单的机制解决内存动态分配的问题,
没有了动态分配,也就不存在内存回收了。

出0入0汤圆

发表于 2016-4-4 14:51:08 | 显示全部楼层
realw 发表于 2016-4-3 21:11
两种类型的虚拟机:
1. 堆栈型虚拟机;
2. 寄存器型虚拟机;

看来还是要参考LUA了。LUA的语法有点不习惯。
GC肯定是不能使用的,不然会破坏实时性。

虚拟机还有个好处,就是加载器不用担心没有MMU的问题。
可能唯一就是效率比C转换成目标代码的稍微慢点。

出0入0汤圆

 楼主| 发表于 2016-4-5 08:36:16 | 显示全部楼层
gpfrank 发表于 2016-4-4 14:51
看来还是要参考LUA了。LUA的语法有点不习惯。
GC肯定是不能使用的,不然会破坏实时性。

61131-3 同等重要, 如果你打算做出来给人用的话。

出95入8汤圆

发表于 2016-4-5 14:46:08 | 显示全部楼层
realw 发表于 2016-4-5 08:36
61131-3 同等重要, 如果你打算做出来给人用的话。

61131-3 中 对 虚拟机 没有 强制性要求,具体实现交给供应商解决;相比之下 JVM CLR之类的很完备了 。(若不对请指出)

西门子 STEP7中  梯形图 每个元素都能翻译成对应的 指令表 (STL 对应于61131-3 的IL ),西门子的 SCL(结构化文本)  也可编译成STL; 西门子 STEP7的 虚拟机可执行代码规范是 MC7 ,对应汇编语言是 STL,STL的子集可用梯形图展现。


61131-3 的 IL 能否作为虚拟机的汇编语言?(可能性不大,找过几个开源方案,有采用自定义中间代码的 ,也有转C的 ,直接执行 IL 的还没有 )

61131-3 规范有很多部分(软件模型,类型系统)很抽象,有好多工作要做。


出0入0汤圆

 楼主| 发表于 2016-4-6 06:51:20 | 显示全部楼层
本帖最后由 realw 于 2016-4-6 06:53 编辑
zzsczz 发表于 2016-4-5 14:46
61131-3 中 对 虚拟机 没有 强制性要求,具体实现交给供应商解决;相比之下 JVM CLR之类的很完备了 。( ...


61131-3代表的是自动化应用工程师如何使用以下几种语言:
1. SFC
2. 功能块
3. 梯形图
4. ST
5. IL
以及编程模型中各种概念:
1. 任务
2. 程序
3. 功能块
4. 功能
5. 变量
6. 配置等等
还有一些基本数据数据类型:
1. 范型,各种ANY
2. 基础数据类型,INT等等
3. 自定义数据类型,结构体,数组等等

这个与虚拟机确实没啥关系,这个是产品定义。

使用JVM或者CLR的指令当然很好,因为没有必要再定义出来一套图灵完备的指令。

IL直接执行应该是可以的,但是执行性能可能会比较差,因为很多编译期的工作都推到了执行期。IL作为[缓冲]中间语言的一个大好处是编译性能可能会比较好,
很少有直接把5种语言都翻译成bytecode的,大部分是先翻译成一门缓冲型中间语言。然后统一翻译成为bytecode。我的方案是统一翻译成为ST,因为不打算
支持IL。


出0入0汤圆

发表于 2016-4-6 08:34:08 | 显示全部楼层
realw 发表于 2016-4-6 06:51
61131-3代表的是自动化应用工程师如何使用以下几种语言:
1. SFC
2. 功能块

IL是没必要支持了。
连61131-3的第三版讨论中,都有取消IL的想法的。


出0入0汤圆

 楼主| 发表于 2016-4-6 22:58:46 | 显示全部楼层
本帖最后由 realw 于 2016-4-6 23:00 编辑
gpfrank 发表于 2016-4-6 08:34
IL是没必要支持了。
连61131-3的第三版讨论中,都有取消IL的想法的。


是的,IL好像没有什么支持的必要。

出0入0汤圆

 楼主| 发表于 2016-4-6 23:00:03 | 显示全部楼层
zzsczz 发表于 2016-4-5 14:46
61131-3 中 对 虚拟机 没有 强制性要求,具体实现交给供应商解决;相比之下 JVM CLR之类的很完备了 。( ...

整体工作量确实很大,
不算用例文件,我的单元测试代码量都快上万了。

出95入8汤圆

发表于 2016-4-7 09:09:33 | 显示全部楼层
realw 发表于 2016-4-6 23:00
整体工作量确实很大,
不算用例文件,我的单元测试代码量都快上万了。

单元测试那么多 , 那你还不是信心满满

出0入0汤圆

 楼主| 发表于 2016-4-14 14:44:18 | 显示全部楼层
zzsczz 发表于 2016-4-7 09:09
单元测试那么多 , 那你还不是信心满满


另外,十分想探讨一下写AOT编译器的可行性。

各位有什么想法么?

出0入0汤圆

 楼主| 发表于 2016-4-14 14:44:38 | 显示全部楼层
gpfrank 发表于 2016-4-6 08:34
IL是没必要支持了。
连61131-3的第三版讨论中,都有取消IL的想法的。

另外,十分想探讨一下写AOT编译器的可行性。

各位有什么想法么?

出95入8汤圆

发表于 2016-4-14 15:49:28 | 显示全部楼层
realw 发表于 2016-4-14 14:44
另外,十分想探讨一下写AOT编译器的可行性。

各位有什么想法么?

你讨论的问题已经超越电工的范围了。

上llvm

出95入8汤圆

发表于 2016-4-14 19:13:26 | 显示全部楼层
realw 发表于 2016-4-14 14:44
另外,十分想探讨一下写AOT编译器的可行性。

各位有什么想法么?

看应用场合,运动控制 对 循环时间有要求,效率优先。

至于 PLC 开关量控制么,IO速度跟不上,稳定性优先,AOT需不需要掂量一下。

至于 参考设计么 西家 step7 5.x版本 是 st 编译成 MC7,   控制器 解释执行; 目前 博途 是 ST 编译成机器码 执行;

step5 -> step7 有 15年积累,step7 ->博途 有10多年积累。


建议C后端 ,可用资源多。

出0入0汤圆

发表于 2016-4-19 08:24:43 | 显示全部楼层
realw 发表于 2016-4-14 14:44
另外,十分想探讨一下写AOT编译器的可行性。

各位有什么想法么?

比较赞同ZZSCZZ关于AOT的看法。

用来做逻辑,解释执行已经足够了。
用来做运动控制等,还是追求速度的。

不过话说回来。如果以61131-3的ST为核心,那么就是以运算,复杂逻辑为主的。所以速度还是很重要的。
如果只是逻辑控制的话,可能61131-3的思想还复杂化了,传统的PLC就够用了。
可能国内仿PLC很厉害,很火,和大部分是逻辑控制有关吧!
我看很少人自己研究MC的,很多都是购买了3S等MC的库。我们也没什么大学做这些基础研究感觉!

出0入0汤圆

 楼主| 发表于 2016-4-19 11:41:42 | 显示全部楼层
gpfrank 发表于 2016-4-19 08:24
比较赞同ZZSCZZ关于AOT的看法。

用来做逻辑,解释执行已经足够了。

很少人研究是因为很难么?
还是没法赚到快钱?

出0入0汤圆

 楼主| 发表于 2016-4-19 11:43:41 | 显示全部楼层
zzsczz 发表于 2016-4-14 19:13
看应用场合,运动控制 对 循环时间有要求,效率优先。

至于 PLC 开关量控制么,IO速度跟不上,稳定性优 ...

运动控制的精确程度是1毫秒级别还是1微秒级别的控制?

出95入8汤圆

发表于 2016-4-20 09:19:34 | 显示全部楼层
realw 发表于 2016-4-19 11:43
运动控制的精确程度是1毫秒级别还是1微秒级别的控制?

http://pan.baidu.com/s/1o7UesP0

电流环  8位  微秒级别

速度环          16位  100微秒

位置环  32位  4毫秒



控制指标 依 需求而定

出0入0汤圆

 楼主| 发表于 2016-5-3 09:11:14 | 显示全部楼层
gpfrank 发表于 2016-4-19 08:24
比较赞同ZZSCZZ关于AOT的看法。

用来做逻辑,解释执行已经足够了。

我没有回复短消息的权限。

我倒是有一些KW的开发包PDF可以发给你。

出0入0汤圆

发表于 2016-5-4 16:51:28 | 显示全部楼层
realw 发表于 2016-5-3 09:11
我没有回复短消息的权限。

我倒是有一些KW的开发包PDF可以发给你。


如果可以的话,可以发送到我的信箱
xtrend_frank @126.com
谢谢!

出0入0汤圆

发表于 2016-5-6 08:34:26 | 显示全部楼层
本帖最后由 gpfrank 于 2016-5-6 08:37 编辑

是KW的一些宣传资料吗?宣传资料我也有。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-3-29 02:19

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表